1!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="cbfb56b8-6922-401a-906e-ae81b2750a55",e._sentryDebugIdIdentifier="sentry-dbid-cbfb56b8-6922-401a-906e-ae81b2750a55")}catch(e){}}();"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[210],{63598:function(e,t,i){let r,s,a,o,l,h,c,d,u,p,f,m,g,v,y,x,b,w,S,_,A,M,E,C,T,P,D,I,O,R,L,B,z,F,N,k,U,V,j,G,H,W,q,X,Y,Q,K,Z,J,$,ee,et,ei,er,es,ea,en,eo,el,eh,ec,ed,eu,ep,ef,em,eg,ev,ey,ex,eb,ew,eS,e_,eA,eM,eE,eC,eT,eP,eD,eI,eO,eR,eL,eB,ez,eF,eN,ek,eU,eV,ej,eG,eH,eW,eq,eX,eY,eQ,eK,eZ,eJ,e$,e0,e1,e2,e3,e4,e5,e6,e8,e9,e7,te,tt,ti,tr,ts,ta,tn,to;i.d(t,{M:function(){return B3}});var tl,th,tc=i(40257),td=i(82957).lW,tu=Object.create,tp=Object.defineProperty,tf=Object.getOwnPropertyDescriptor,tm=Object.getOwnPropertyNames,tg=Object.getPrototypeOf,tv=Object.prototype.hasOwnProperty,ty=(e,t,i)=>t in e?tp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,tx=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),tb=(e,t,i,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let s of tm(t))tv.call(e,s)||s===i||tp(e,s,{get:()=>t[s],enumerable:!(r=tf(t,s))||r.enumerable});return e},tw=(e,t,i)=>(i=null!=e?tu(tg(e)):{},tb(!t&&e&&e.__esModule?i:tp(i,"default",{value:e,enumerable:!0}),e)),tS=(e,t,i)=>(ty(e,"symbol"!=typeof t?t+"":t,i),i),t_=tx((e,t)=>{var i;i=function(){"use strict";return e.importState=function(t){var i=new e;return i.importState(t),i},e;function e(){return function(e){var t,i,r=0,s=0,a=0,o=1;0==e.length&&(e=[+new Date]);var l=(t=4022871197,(i=function(e){e=e.toString();for(var i=0;i<e.length;i++){var r=.02519603282416938*(t+=e.charCodeAt(i));t=r>>>0,r-=t,r*=t,t=r>>>0,r-=t,t+=4294967296*r}return(t>>>0)*23283064365386963e-26}).version="Mash 0.9",i);r=l(" "),s=l(" "),a=l(" ");for(var h=0;h<e.length;h++)(r-=l(e[h]))<0&&(r+=1),(s-=l(e[h]))<0&&(s+=1),(a-=l(e[h]))<0&&(a+=1);l=null;var c=function(){var e=2091639*r+23283064365386963e-26*o;return r=s,s=a,a=e-(o=0|e)};return c.next=c,c.uint32=function(){return 4294967296*c()},c.fract53=function(){return c()+(2097152*c()|0)*11102230246251565e-32},c.version="Alea 0.9",c.args=e,c.exportState=function(){return[r,s,a,o]},c.importState=function(e){r=+e[0]||0,s=+e[1]||0,a=+e[2]||0,o=+e[3]||0},c}(Array.prototype.slice.call(arguments))}},"object"==typeof e?t.exports=i():"function"==typeof define&&define.amd?define(i):e.Alea=i()}),tA=tx((e,t)=>{var i,r;i=e,r=function(e){"use strict";e.SVD=function(e,t,i,r,s){if(t=void 0===t||t,i=void 0===i||i,s=1e-64/(r=r||2220446049250313e-31),!e)throw TypeError("Matrix a is not defined");var a,o,l,h,c,d,u,p,f,m,g,v,y=e[0].length,x=e.length;if(x<y)throw TypeError("Invalid matrix: m < n");for(var b=[],w=[],S=[],_="f"===t?x:y,A=m=u=0;A<x;A++)w[A]=Array(_).fill(0);for(A=0;A<y;A++)S[A]=Array(y).fill(0);var M,E=Array(y).fill(0);for(A=0;A<x;A++)for(a=0;a<y;a++)w[A][a]=e[A][a];for(A=0;A<y;A++){for(b[A]=u,f=0,l=A+1,a=A;a<x;a++)f+=Math.pow(w[a][A],2);if(f<s)u=0;else for(p=(d=w[A][A])*(u=d<0?Math.sqrt(f):-Math.sqrt(f))-f,w[A][A]=d-u,a=l;a<y;a++){for(f=0,o=A;o<x;o++)f+=w[o][A]*w[o][a];for(d=f/p,o=A;o<x;o++)w[o][a]=w[o][a]+d*w[o][A]}for(E[A]=u,f=0,a=l;a<y;a++)f+=Math.pow(w[A][a],2);if(f<s)u=0;else{for(p=(d=w[A][A+1])*(u=d<0?Math.sqrt(f):-Math.sqrt(f))-f,w[A][A+1]=d-u,a=l;a<y;a++)b[a]=w[A][a]/p;for(a=l;a<x;a++){for(f=0,o=l;o<y;o++)f+=w[a][o]*w[A][o];for(o=l;o<y;o++)w[a][o]=w[a][o]+f*b[o]}}m<(g=Math.abs(E[A])+Math.abs(b[A]))&&(m=g)}if(i)for(A=y-1;0<=A;A--){if(0!==u){for(p=w[A][A+1]*u,a=l;a<y;a++)S[a][A]=w[A][a]/p;for(a=l;a<y;a++){for(f=0,o=l;o<y;o++)f+=w[A][o]*S[o][a];for(o=l;o<y;o++)S[o][a]=S[o][a]+f*S[o][A]}}for(a=l;a<y;a++)S[A][a]=0,S[a][A]=0;S[A][A]=1,u=b[A],l=A}if(t){if("f"===t)for(A=y;A<x;A++){for(a=y;a<x;a++)w[A][a]=0;w[A][A]=1}for(A=y-1;0<=A;A--){for(l=A+1,u=E[A],a=l;a<_;a++)w[A][a]=0;if(0!==u){for(p=w[A][A]*u,a=l;a<_;a++){for(f=0,o=l;o<x;o++)f+=w[o][A]*w[o][a];for(d=f/p,o=A;o<x;o++)w[o][a]=w[o][a]+d*w[o][A]}for(a=A;a<x;a++)w[a][A]=w[a][A]/u}else for(a=A;a<x;a++)w[a][A]=0;w[A][A]=w[A][A]+1}}for(r*=m,o=y-1;0<=o;o--)for(var C=0;C<50;C++){for(M=!1,l=o;0<=l;l--){if(Math.abs(b[l])<=r){M=!0;break}if(Math.abs(E[l-1])<=r)break}if(!M){for(c=0,h=l-(f=1),A=l;A<o+1&&(d=f*b[A],b[A]=c*b[A],!(Math.abs(d)<=r));A++)if(u=E[A],E[A]=Math.sqrt(d*d+u*u),c=u/(p=E[A]),f=-d/p,t)for(a=0;a<x;a++)g=w[a][h],v=w[a][A],w[a][h]=g*c+v*f,w[a][A]=-g*f+v*c}if(v=E[o],l===o){if(v<0&&(E[o]=-v,i))for(a=0;a<y;a++)S[a][o]=-S[a][o];break}for(m=E[l],u=Math.sqrt((d=(((g=E[o-1])-v)*(g+v)+((u=b[o-1])-(p=b[o]))*(u+p))/(2*p*g))*d+1),d=((m-v)*(m+v)+p*(g/(d<0?d-u:d+u)-p))/m,A=l+(f=c=1);A<o+1;A++){if(u=b[A],g=E[A],p=f*u,u*=c,v=Math.sqrt(d*d+p*p),d=m*(c=d/(b[A-1]=v))+u*(f=p/v),u=-m*f+u*c,p=g*f,g*=c,i)for(a=0;a<y;a++)m=S[a][A-1],v=S[a][A],S[a][A-1]=m*c+v*f,S[a][A]=-m*f+v*c;if(v=Math.sqrt(d*d+p*p),d=(c=d/(E[A-1]=v))*u+(f=p/v)*g,m=-f*u+c*g,t)for(a=0;a<x;a++)g=w[a][A-1],v=w[a][A],w[a][A-1]=g*c+v*f,w[a][A]=-g*f+v*c}b[l]=0,b[o]=d,E[o]=m}for(A=0;A<y;A++)E[A]<r&&(E[A]=0);return{u:w,q:E,v:S}}
1,e.VERSION="1.1.1",Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof e&&"u">typeof t?r(e):"function"==typeof define&&define.amd?define(["exports"],r):r((i="u">typeof globalThis?globalThis:i||self).SVDJS={})}),tM=tx((e,t)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){if(null===e||!0===e||!1===e)return NaN;var t=Number(e);return isNaN(t)?t:t<0?Math.ceil(t):Math.floor(t)},t.exports=e.default}),tE=tx((e,t)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){var t=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return t.setUTCFullYear(e.getFullYear()),e.getTime()-t.getTime()},t.exports=e.default}),tC=tx((e,t)=>{"use strict";function i(e,t,r,s){this.message=e,this.expected=t,this.found=r,this.location=s,this.name="SyntaxError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,i)}!function(e,t){function i(){this.constructor=e}i.prototype=t.prototype,e.prototype=new i}(i,Error),i.buildMessage=function(e,t){var i={literal:function(e){return'"'+s(e.text)+'"'},class:function(e){var t,i="";for(t=0;t<e.parts.length;t++)i+=e.parts[t]instanceof Array?a(e.parts[t][0])+"-"+a(e.parts[t][1]):a(e.parts[t]);return"["+(e.inverted?"^":"")+i+"]"},any:function(e){return"any character"},end:function(e){return"end of input"},other:function(e){return e.description}};function r(e){return e.charCodeAt(0).toString(16).toUpperCase()}function s(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(e){return"\\x0"+r(e)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(e){return"\\x"+r(e)})}function a(e){return e.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(e){return"\\x0"+r(e)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(e){return"\\x"+r(e)})}return"Expected "+function(e){var t,r,s,a=Array(e.length);for(r=0;r<e.length;r++)a[r]=i[(t=e[r]).type](t);if(a.sort(),a.length>0){for(r=1,s=1;r<a.length;r++)a[r-1]!==a[r]&&(a[s]=a[r],s++);a.length=s}switch(a.length){case 1:return a[0];case 2:return a[0]+" or "+a[1];default:return a.slice(0,-1).join(", ")+", or "+a[a.length-1]}}(e)+" but "+(t?'"'+s(t)+'"':"end of input")+" found."},t.exports={SyntaxError:i,parse:function(e,t){t=void 0!==t?t:{};var r,s,a,o,l,h,c,d,u={},p={svg_path:eo},f=eo,m=function(e){if(!e)return[];for(var t=[],i=0;i<e.length;i++)t=t.concat.apply(t,e[i]);var r=t[0];return r&&"m"==r.code&&(delete r.relative,r.code="M"),t},g=function(e,t){return function(e,t){if(!t)return[e];for(var i=[e],r=0,s=t.length;r<s;r++)i[r+1]=t[r][1];return i}(e,t)},v=/^[Mm]/,y=es(["M","m"],!1,!1),x=function(e,t,i){var r=eP(e,[t]);return i&&(r=r.concat(eP("M"==e?"L":"l",i[1]))),r},b=/^[Zz]/,w=es(["Z","z"],!1,!1),S=/^[Ll]/,_=es(["L","l"],!1,!1),A=function(e,t){return eP(e,t)},M=/^[Hh]/,E=es(["H","h"],!1,!1),C=/^[Vv]/,T=es(["V","v"],!1,!1),P=/^[Cc]/,D=es(["C","c"],!1,!1),I=/^[Ss]/,O=es(["S","s"],!1,!1),R=/^[Qq]/,L=es(["Q","q"],!1,!1),B=/^[Tt]/,z=es(["T","t"],!1,!1),F=/^[Aa]/,N=es(["A","a"],!1,!1),k=/^[01]/,U=es(["0","1"],!1,!1),V=function(){return""},j=er(",",!1),G=function(e){return e.join("")},H=er(".",!1),W=/^[eE]/,q=es(["e","E"],!1,!1),X=/^[+\-]/,Y=es(["+","-"],!1,!1),Q=/^[0-9]/,K=es([["0","9"]],!1,!1),Z=/^[ \t\n\r]/,J=es([" "," ",` 2`,"\r"],!1,!1),$=0,ee=[{line:1,column:1}],et=0,ei=[];if("startRule"in t){if(!(t.startRule in p))throw Error("Can't start parsing from rule \""+t.startRule+'".');f=p[t.startRule]}function er(e,t){return{type:"literal",text:e,ignoreCase:t}}function es(e,t,i){return{type:"class",parts:e,inverted:t,ignoreCase:i}}function ea(t){var i,r=ee[t];if(r)return r;for(i=t-1;!ee[i];)i--;for(r={line:(r=ee[i]).line,column:r.column};i<t;)10===e.charCodeAt(i)?(r.line++,r.column=1):r.column++,i++;return ee[t]=r,r}function en(e){$<et||($>et&&(et=$,ei=[]),ei.push(e))}function eo(){var e,t,i,r,s;for(e=$,t=[],i=eE();i!==u;)t.push(i),i=eE();if(t!==u){if((i=function(){var e,t,i,r,s,a;if(e=$,(t=el())!==u){for(i=[],r=$,s=[],a=eE();a!==u;)s.push(a),a=eE();for(s!==u&&(a=el())!==u?r=s=[s,a]:($=r,r=u);r!==u;){for(i.push(r),r=$,s=[],a=eE();a!==u;)s.push(a),a=eE();s!==u&&(a=el())!==u?r=s=[s,a]:($=r,r=u)}i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}())===u&&(i=null),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u?e=t=m(i):($=e,e=u)}else $=e,e=u}else $=e,e=u;return e}function el(){var t,i,r,s,a,o;if(t=$,(i=function(){var t,i,r,s,a,o,l;if(t=$,v.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(y)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=eg())!==u?(a=$,(o=eb())===u&&(o=null),o!==u&&(l=ec())!==u?a=o=[o,l]:($=a,a=u),a===u&&(a=null),a!==u?t=i=x(i,s,a):($=t,t=u)):($=t,t=u)}else $=t,t=u;return t}())!==u){for(r=[],s=$,a=[],o=eE();o!==u;)a.push(o),o=eE();for(a!==u&&(o=eh())!==u?s=a=[a,o]:($=s,s=u);s!==u;){for(r.push(s),s=$,a=[],o=eE();o!==u;)a.push(o),o=eE();a!==u&&(o=eh())!==u?s=a=[a,o]:($=s,s=u)}r!==u?t=i=g(i,r):($=t,t=u)}else $=t,t=u;return t}function eh(){var t,i;return b.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(w)),i!==u&&(i=eP("Z")),(t=i)===u&&(t=function(){var t,i,r,s;if(t=$,S.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(_)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=ec())!==u?t=i=A(i,s):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,M.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(E)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=ed())!==u?t=i=eP(i,s.map(function(e){return{x:e}})):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,C.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(T)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=ed())!==u?t=i=eP(i,s.map(function(e){return{y:e}})):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,P.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(D)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=function(){var e,t,i,r,s,a;
2if(e=$,(t=eu())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=eu())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=eu())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}())!==u?t=i=A(i,s):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,I.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(O)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=function(){var e,t,i,r,s,a;if(e=$,(t=ep())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=ep())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=ep())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}())!==u?t=i=A(i,s):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,R.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(L)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=function(){var e,t,i,r,s,a;if(e=$,(t=ef())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=ef())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=ef())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}())!==u?t=i=A(i,s):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,B.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(z)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=function(){var e,t,i,r,s,a;if(e=$,(t=eg())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=eg())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=eg())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}())!==u?t=i=A(i,s):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,F.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(N)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=function(){var e,t,i,r,s,a;if(e=$,(t=em())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=em())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=em())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}())!==u?t=i=A(i,s):($=t,t=u)}else $=t,t=u;return t}()),t}function ec(){var e,t,i,r,s,a;if(e=$,(t=eg())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=eg())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=eg())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}function ed(){var e,t,i,r,s,a;if(e=$,(t=ey())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=ey())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=ey())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}function eu(){var e,t,i,r,s,a,o,l,h;return e=$,(t=eg())!==u?((i=eb())===u&&(i=null),i!==u&&(r=eg())!==u?((s=eb())===u&&(s=null),s!==u&&(a=eg())!==u?(o=t,l=r,h=a,e=t={x1:o.x,y1:o.y,x2:l.x,y2:l.y,x:h.x,y:h.y}):($=e,e=u)):($=e,e=u)):($=e,e=u),e}function ep(){var e,t,i,r,s,a;return e=$,(t=eg())!==u?((i=eb())===u&&(i=null),i!==u&&(r=eg())!==u?(s=t,a=r,e=t={x2:s.x,y2:s.y,x:a.x,y:a.y}):($=e,e=u)):($=e,e=u),e}function ef(){var e,t,i,r,s,a;return e=$,(t=eg())!==u?((i=eb())===u&&(i=null),i!==u&&(r=eg())!==u?(s=t,a=r,e=t={x1:s.x,y1:s.y,x:a.x,y:a.y}):($=e,e=u)):($=e,e=u),e}function em(){var e,t,i,r,s,a,o,l,h,c,d,p;return e=$,(t=ev())!==u?((i=eb())===u&&(i=null),i!==u&&(r=ev())!==u?((s=eb())===u&&(s=null),s!==u&&(a=ey())!==u&&eb()!==u&&(o=ex())!==u?((l=eb())===u&&(l=null),l!==u&&(h=ex())!==u?((c=eb())===u&&(c=null),c!==u&&(d=eg())!==u?e=t={rx:t,ry:r,xAxisRotation:a,largeArc:o,sweep:h,x:(p=d).x,y:p.y}:($=e,e=u)):($=e,e=u)):($=e,e=u)):($=e,e=u)):($=e,e=u),e}function eg(){var e,t,i,r;return e=$,(t=ey())!==u?((i=eb())===u&&(i=null),i!==u&&(r=ey())!==u?e=t={x:t,y:r}:($=e,e=u)):($=e,e=u),e}function ev(){var e;return(e=eS())===u&&(e=eM()),e!==u&&(e*=1),e}function ey(){var e,t,i;return e=$,(t=eA())===u&&(t=null),t!==u&&(i=eS())!==u?e=t=[t,i]:($=e,e=u),e===u&&(e=$,(t=eA())===u&&(t=null),t!==u&&(i=eM())!==u?e=t=[t,i]:($=e,e=u)),e!==u&&(e=1*e.join("")),e}function ex(){var t;return k.test(e.charAt($))?(t=e.charAt($),$++):(t=u,en(U)),t!==u&&(t="1"==t),t}function eb(){var e,t,i,r,s;if(e=$,t=[],(i=eE())!==u)for(;i!==u;)t.push(i),i=eE();else t=u;if(t!==u){if((i=ew())===u&&(i=null),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u?e=t=[t,i,r]:($=e,e=u)}else $=e,e=u}else $=e,e=u;if(e===u){if(e=$,t=$,(i=ew())!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u?t=i=[i,r]:($=t,t=u)}else $=t,t=u;t!==u&&(t=V()),e=t}return e}function ew(){var t;return 44===e.charCodeAt($)?(t=",",$++):(t=u,en(j)),t}function eS(){var t,i,r,s,a,o,l;return t=$,(s=$,(a=eM())===u&&(a=null),a!==u?(46===e.charCodeAt($)?(o=".",$++):(o=u,en(H)),o!==u&&(l=eM())!==u?s=a=[a,o,l]:($=s,s=u)):($=s,s=u),s===u&&(s=$,(a=eM())!==u?(46===e.charCodeAt($)?(o=".",$++):(o=u,en(H)),o!==u?s=a=[a,o]:($=s,s=u)):($=s,s=u)),s!==u&&(s=G(s)),(i=s)!==u)?((r=e_())===u&&(r=null),r!==u?t=i=[i,r]:($=t,t=u)):($=t,t=u),t===u&&(t=$,(i=eM())!==u&&(r=e_())!==u?t=i=[i,r]:($=t,t=u)),t!==u&&(t=G(t)),t}function e_(){var t,i,r,s;return t=$,W.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(q)),i!==u?((r=eA())===u&&(r=null),r!==u&&(s=eM())!==u?t=i=[i,r,s]:($=t,t=u)):($=t,t=u),t!==u&&(t=G(t)),t}function eA(){var t;return X.test(e.charAt($))?(t=e.charAt($),$++):(t=u,en(Y)),t}function eM(){var t,i;if(t=[],Q.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(K)),i!==u)for(;i!==u;)t.push(i),Q.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(K));else t=u;return t!==u&&(t=t.join("")),t}function eE(){var t;return Z.test(e.charAt($))?(t=e.charAt($),$++):(t=u,en(J)),t!==u&&(t=V()),t}var eC={m:"moveto",l:"lineto",h:"horizontal lineto",v:"vertical lineto",c:"curveto",s:"smooth curveto",q:"quadratic curveto",t:"smooth quadratic curveto",a:"elliptical arc",z:"closepath"};for(var eT in eC)eC[eT.toUpperCase()]=eC[eT];function eP(e,t){t||(t=[{}]);for(var i=t.length;i--;){var r={code:e,command:eC[e]};for(var s in e==e.toLowerCase()&&(r.relative=!0),t[i])r[s]=t[i][s];t[i]=r}return t}if((d=f())!==u&&$===e.length)return d;throw d!==u&&$<e.length&&en({type:"end"}),l=ei,h=et<e.length?e.charAt(et):null,r=et,s=et<e.length?et+1:et,a=ea(r),o=ea(s),c={start:{offset:r,line:a.line,column:a.column},end:{offset:s,line:o.line,column:o.column}},new i(i.buildMessage(l,h),l,h,c)}}}),tT=tx((e,t)=>{var i=tC().parse;i.parseSVG=i,i.makeAbsolute=function(e){var t,i={x:0,y:0},r={x:"x0",y:"y0",x1:"x0",y1:"y0",x2:"x0",y2:"y0"};return e.forEach(function(e){for(var s in"moveto"===e.command&&(t=e),e.x0=i.x,e.y0=i.y,r)s in e&&(e[s]+=e.relative?e[r[s]]:0);"x"in e||(e.x=i.x),"y"in e||(e.y=i.y),e.relative=!1,e.code=e.code.toUpperCase(),"closepath"==e.command&&(e.x=t.x,e.y=t.y),i=e}),e},t.exports=i}),tP=tx((e,t)=>{t.exports=function(e,t){for(var i=e.split("."),r=t.split("."),s=0;s<3;s++){var a=Number(i[s]),o=Number(r[s]);if(a>o)return 1;if(o>a)return -1;if(!isNaN(a)&&isNaN(o))return 1;if(isNaN(a)&&!isNaN(o))return -1}return 0}}),tD={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},tI="srgb",tO="srgb-linear",tR="300 es",tL=class{addEventListener(e,t){void 0===this._listeners&&(this._listeners={});let i=this._listeners;void 0===i[e]&&(i[e]=[]),-1===i[e].indexOf(t)&&i[e].push(t)}hasEventListener(e,t){if(void 0===this._listeners)return!1;let i=this._listeners;return void 0!==i[e]&&-1!==i[e].indexOf(t)}removeEventListener(e,t){if(void 0===this._listeners)return;let i=this._listeners[e];if(void 0!==i){let e=i.indexOf(t);-1!==e&&i.splice(e,1)}}dispatchEvent(e){if(void 0===this._listeners)return;let t=this._listeners[e.type];if(void 0!==t){e.target=this;let i=t.slice(0);for(let t=0,r=i.length;t<r;t++)i[t].call(this,e);e.target=null}}},tB=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","5
25","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"],tz=1234567,tF=Math.PI/180,tN=180/Math.PI;function tk(){let e=4294967295*Math.random()|0,t=4294967295*Math.random()|0,i=4294967295*Math.random()|0,r=4294967295*Math.random()|0;return(tB[255&e]+tB[e>>8&255]+tB[e>>16&255]+tB[e>>24&255]+"-"+tB[255&t]+tB[t>>8&255]+"-"+tB[t>>16&15|64]+tB[t>>24&255]+"-"+tB[63&i|128]+tB[i>>8&255]+"-"+tB[i>>16&255]+tB[i>>24&255]+tB[255&r]+tB[r>>8&255]+tB[r>>16&255]+tB[r>>24&255]).toLowerCase()}function tU(e,t,i){return Math.max(t,Math.min(i,e))}function tV(e,t){return(e%t+t)%t}function tj(e,t,i){return(1-i)*e+i*t}function tG(e){return(e&e-1)==0&&0!==e}function tH(e){return Math.pow(2,Math.ceil(Math.log(e)/Math.LN2))}function tW(e){return Math.pow(2,Math.floor(Math.log(e)/Math.LN2))}function tq(e,t){switch(t.constructor){case Float32Array:return e;case Uint16Array:return e/65535;case Uint8Array:return e/255;case Int16Array:return Math.max(e/32767,-1);case Int8Array:return Math.max(e/127,-1);default:throw Error("Invalid component type.")}}function tX(e,t){switch(t.constructor){case Float32Array:return e;case Uint16Array:return Math.round(65535*e);case Uint8Array:return Math.round(255*e);case Int16Array:return Math.round(32767*e);case Int8Array:return Math.round(127*e);default:throw Error("Invalid component type.")}}var tY=Object.freeze({__proto__:null,DEG2RAD:tF,RAD2DEG:tN,ceilPowerOfTwo:tH,clamp:tU,damp:function(e,t,i,r){return tj(e,t,1-Math.exp(-i*r))},degToRad:function(e){return e*tF},denormalize:tq,euclideanModulo:tV,floorPowerOfTwo:tW,generateUUID:tk,inverseLerp:function(e,t,i){return e!==t?(i-e)/(t-e):0},isPowerOfTwo:tG,lerp:tj,mapLinear:function(e,t,i,r,s){return r+(e-t)*(s-r)/(i-t)},normalize:tX,pingpong:function(e,t=1){return t-Math.abs(tV(e,2*t)-t)},radToDeg:function(e){return e*tN},randFloat:function(e,t){return e+Math.random()*(t-e)},randFloatSpread:function(e){return e*(.5-Math.random())},randInt:function(e,t){return e+Math.floor(Math.random()*(t-e+1))},seededRandom:function(e){void 0!==e&&(tz=e);let t=tz+=1831565813;return t=Math.imul(t^t>>>15,1|t),(((t^=t+Math.imul(t^t>>>7,61|t))^t>>>14)>>>0)/4294967296},setQuaternionFromProperEuler:function(e,t,i,r,s){let a=Math.cos,o=Math.sin,l=a(i/2),h=o(i/2),c=a((t+r)/2),d=o((t+r)/2),u=a((t-r)/2),p=o((t-r)/2),f=a((r-t)/2),m=o((r-t)/2);switch(s){case"XYX":e.set(l*d,h*u,h*p,l*c);break;case"YZY":e.set(h*p,l*d,h*u,l*c);break;case"ZXZ":e.set(h*u,h*p,l*d,l*c);break;case"XZX":e.set(l*d,h*m,h*f,l*c);break;case"YXY":e.set(h*f,l*d,h*m,l*c);break;case"ZYZ":e.set(h*m,h*f,l*d,l*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+s)}},smootherstep:function(e,t,i){return e<=t?0:e>=i?1:(e=(e-t)/(i-t))*e*e*(e*(6*e-15)+10)},smoothstep:function(e,t,i){return e<=t?0:e>=i?1:(e=(e-t)/(i-t))*e*(3-2*e)}}),tQ=class{constructor(e=0,t=0){tQ.prototype.isVector2=!0,this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}
vendor: 4,588 bytes, line 2
2sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,i=this.y,r=e.elements;return this.x=r[0]*t+r[3]*i+r[6],this.y=r[1]*t+r[4]*i+r[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this}clampLength(e,t){let i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(e,Math.min(t,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,i=this.y-e.y;return t*t+i*i}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let i=Math.cos(t),r=Math.sin(t),s=this.x-e.x,a=this.y-e.y;return this.x=s*i-a*r+e.x,this.y=s*r+a*i+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},tK=class{constructor(){tK.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1]}set(e,t,i,r,s,a,o,l,h){let c=this.elements;return c[0]=e,c[1]=r,c[2]=o,c[3]=t,c[4]=s,c[5]=l,c[6]=i,c[7]=a,c[8]=h,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],this}extractBasis(e,t,i){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let i=e.elements,r=t.elements,s=this.elements,a=i[0],o=i[3],l=i[6],h=i[1],c=i[4],d=i[7],u=i[2],p=i[5],f=i[8],m=r[0],g=r[3],v=r[6],y=r[1],x=r[4],b=r[7],w=r[2],S=r[5],_=r[8];return s[0]=a*m+o*y+l*w,s[3]=a*g+o*x+l*S,s[6]=a*v+o*b+l*_,s[1]=h*m+c*y+d*w,s[4]=h*g+c*x+d*S,s[7]=h*v+c*b+d*_,s[2]=u*m+p*y+f*w,s[5]=u*g+p*x+f*S,s[8]=u*v+p*b+f*_,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],i=e[1],r=e[2],s=e[3],a=e[4],o=e[5],l=e[6],h=e[7],c=e[8];return t*a*c-t*o*h-i*s*c+i*o*l+r*s*h-r*a*l}invert(){let e=this.elements,t=e[0],i=e[1],r=e[2],s=e[3],a=e[4],o=e[5],l=e[6],h=e[7],c=e[8],d=c*a-o*h,u=o*l-c*s,p=h*s-a*l,f=t*d+i*u+r*p;if(0===f)return this.set(0,0,0,0,0,0,0,0,0);let m=1/f;return e[0]=d*m,e[1]=(r*h-c*i)*m,e[2]=(o*i-r*a)*m,e[3]=u*m,e[4]=(c*t-r*l)*m,e[5]=(r*s-o*t)*m,e[6]=p*m,e[7]=(i*l-h*t)*m,e[8]=(a*t-i*s)*m,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,i,r,s,a,o){let l=Math.cos(s),h=Math.sin(s);
2return this.set(i*l,i*h,-i*(l*a+h*o)+a+e,-r*h,r*l,-r*(-h*a+l*o)+o+t,0,0,1),this}scale(e,t){return this.premultiply(tZ.makeScale(e,t)),this}rotate(e){return this.premultiply(tZ.makeRotation(-e)),this}translate(e,t){return this.premultiply(tZ.makeTranslation(e,t)),this}makeTranslation(e,t){return this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,i,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,i=e.elements;for(let e=0;e<9;e++)if(t[e]!==i[e])return!1;return!0}fromArray(e,t=0){for(let i=0;i<9;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){let i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e}clone(){return new this.constructor().fromArray(this.elements)}},tZ=new tK;function tJ(e){for(let t=e.length-1;t>=0;--t)if(e[t]>=65535)return!0;return!1}var t$={Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array};function t0(e,t){return new t$[e](t)}function t1(e){return document.createElementNS("http://www.w3.org/1999/xhtml",e)}function t2(e){return e<.04045?.0773993808*e:Math.pow(.9478672986*e+.0521327014,2.4)}function t3(e){return e<.0031308?12.92*e:1.055*Math.pow(e,.41666)-.055}var t4={[tI]:{[tO]:t2},[tO]:{[tI]:t3}},t5={legacyMode:!0,get workingColorSpace(){return tO},set workingColorSpace(n){console.warn("THREE.ColorManagement: .workingColorSpace is readonly.")},convert:function(e,t,i){if(this.legacyMode||t===i||!t||!i)return e;if(t4[t]&&void 0!==t4[t][i]){let r=t4[t][i];return e.r=r(e.r),e.g=r(e.g),e.b=r(e.b),e}throw Error("Unsupported color space conversion.")},fromWorkingColorSpace:function(e,t){return this.convert(e,this.workingColorSpace,t)},toWorkingColorSpace:function(e,t){return this.convert(e,t,this.workingColorSpace)}},t6={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},t8={r:0,g:0,b:0},t9={h:0,s:0,l:0},t7={h:0,s:0,l:0};function ie(e,t,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+(t-e)*6*i:i<.5?t:i<2/3?e+(t-e)*6*(2/3-i):e}function it(e,t){return t.r=e.r,t.g=e.g,t.b=e.b,t}var ii=class{constructor(e,t,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,void 0===t&&void 0===i?this.set(e):this.setRGB(e,t,i)}set(e){return e&&e.isColor?this.copy(e):"number"==typeof e?this.setHex(e):"string"==typeof e&&this.setStyle(e),this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=tI){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(255&e)/255,t5.toWorkingColorSpace(this,t),this}setRGB(e,t,i,r=t5.workingColorSpace){return this.r=e,this.g=t,this.b=i,t5.toWorkingColorSpace(this,r),this}setHSL(e,t,i,r=t5.workingColorSpace){if(e=tV(e,1),t=tU(t,0,1),i=tU(i,0,1),0===t)this.r=this.g=this.b=i;else{let r=i<=.5?i*(1+t):i+t-i*t,s=2*i-r;this.r=ie(s,r,e+1/3),this.g=ie(s,r,e),this.b=ie(s,r,e-1/3)}return t5.toWorkingColorSpace(this,r),this}setStyle(e,t=tI){let i;function r(t){void 0!==t&&1>parseFloat(t)&&console.warn("THREE.Color: Alpha component of "+e+" will be ignored.")}if(i=/^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(e)){let e,s=i[1],a=i[2];switch(s){case"rgb":case"rgba":if(e=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return this.r=Math.min(255,parseInt(e[1],10))/255,this.g=Math.min(255,parseInt(e[2],10))/255,this.b=Math.min(255,parseInt(e[3],10))/255,t5.toWorkingColorSpace(this,t),r(e[4]),this;if(e=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return this.r=Math.min(100,parseInt(e[1],10))/100,this.g=Math.min(100,parseInt(e[2],10))/100,this.b=Math.min(100,parseInt(e[3],10))/100,t5.toWorkingColorSpace(this,t),r(e[4]),this;break;case"hsl":case"hsla":if(e=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a)){let i=parseFloat(e[1])/360,s=parseFloat(e[2])/100,a=parseFloat(e[3])/100;return r(e[4]),this.setHSL(i,s,a,t)}}}else if(i=/^\#([A-Fa-f\d]+)$/.exec(e)){let e=i[1],r=e.length;if(3===r)return this.r=parseInt(e.charAt(0)+e.charAt(0),16)/255,this.g=parseInt(e.charAt(1)+e.charAt(1),16)/255,this.b=parseInt(e.charAt(2)+e.charAt(2),16)/255,t5.toWorkingColorSpace(this,t),this;if(6===r)return this.r=parseInt(e.charAt(0)+e.charAt(1),16)/255,this.g=parseInt(e.charAt(2)+e.charAt(3),16)/255,this.b=parseInt(e.charAt(4)+e.charAt(5),16)/255,t5.toWorkingColorSpace(this,t),this}return e&&e.length>0?this.setColorName(e,t):this}setColorName(e,t=tI){let i=t6[e.toLowerCase()];return void 0!==i?this.setHex(i,t):console.warn("THREE.Color: Unknown color "+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=t2(e.r),this.g=t2(e.g),this.b=t2(e.b),this}copyLinearToSRGB(e){return this.r=t3(e.r),this.g=t3(e.g),this.b=t3(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=tI){return t5.fromWorkingColorSpace(it(this,t8),e),tU(255*t8.r,0,255)<<16^tU(255*t8.g,0,255)<<8^tU(255*t8.b,0,255)<<0}getHexString(e=tI){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=t5.workingColorSpace){t5.fromWorkingColorSpace(it(this,t8),t);let i=t8.r,r=t8.g,s=t8.b,a=Math.max(i,r,s),o=Math.min(i,r,s),l,h,c=(o+a)/2;if(o===a)l=0,h=0;else{let e=a-o;switch(h=c<=.5?e/(a+o):e/(2-a-o),a){case i:l=(r-s)/e+(r<s?6:0);break;case r:l=(s-i)/e+2;break;case s:l=(i-r)/e+4}l/=6}return e.h=l,e.s=h,e.l=c,e}getRGB(e,t=t5.workingColorSpace){return t5.fromWorkingColorSpace(it(this,t8),t),e.r=t8.r,e.g=t8.g,e.b=t8.b,e}getStyle(e=tI){return t5.fromWorkingColorSpace(it(this,t8),e),e!==tI?`color(${e} ${t8.r} ${t8.g} ${t8.b})`:`rgb(${255*t8.r|0},${255*t8.g|0},${255*t8.b|0})`}offsetHSL(e,t,i){return this.getHSL(t9),t9.h+=e,t9.s+=t,t9.l+=i,this.setHSL(t9.h,t9.s,t9.l),this}add(e){return this.r+=e.r,this.g+=e.g,this.b+=e.b,this}addColors(e,t){return this.r=e.r+t.r,this.g=e.g+t.g,this.b=e.b+t.b,this}addScalar(e){return this.r+=e,this.g+=e,this.b+=e,this}sub(e){return this.r=Math.max(0,this.r-e.r),this.g=Math.max(0,this.g-e.g),this.b=Math.max(0,this.b-e.b),this}multiply(e){return this.r*=e.r,this.g*=e.g,this.b*=e.b,this}multiplyScalar(e){return this.r*=e,this.g*=e,this.b*=e,this}lerp(e,t){return this.r+=(e.r-this.r)*t,this.g+=(e.g-this.g)*t,this.b+=(e.b-this.b)*t,this}lerpColors(e,t,i){return this.r=e.r+(t.r-e.r)*i,this.g=e.g+(t.g-e.g)*i,this.b=e.b+(t.b-e.b)*i,this}lerpHSL(e,t){this.getHSL(t9),e.getHSL(t7);let i=tj(t9.h,t7.h,t),r=tj(t9.s,t7.s,t),s=tj(t9.l,t7.l,t);return this.setHSL(i,r,s),this}equals(e){return e.r===this.r&&e.g===this.g&&e.b===this.b}fromArray(e,t=0){return this.r=e[t],this.g=e[t+1],this.b=e[t+2],this}toArray(e=[],t=0){return e[t]=this.r,e[t+1]=this.g,e[t+2]=this.b,e}fromBufferAttribute(e,t){return this.r=e.getX(t),this.g=e.getY(t),this.b=e.getZ(t),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}};ii.NAMES=t6;var ir,is=class{static getDataURL(e){let t;if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>"u")return e.src;if(e instanceof HTMLCanvasElement)t=e;else{void 0===ir&&(ir=t1("canvas")),ir.width=e.width,ir.height=e.height;let i=ir.getContext("2d");e instanceof ImageData?i.putImageData(e,0,0):i.drawImage(e,0,0,e.width,e.height),t=ir}return t.width>2048||t.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",e),t.toDataURL("image/jpeg",.6)):t.toDataURL("image/png")}static sRGBToLinear(e){if("u">typeof HTMLImageElement&&e instanceof HTMLImageElement||"u">typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"u">typeof ImageBitmap&&e instanceof ImageBitmap){let t=t1("canvas");t.width=e.width,t.height=e.height;let i=t.getContext("2d");i.drawImage(e,0,0,e.width,e.height);let r=i.getImageData(0,0,e.width,e.height),s=r.data;for(let e=0;e<s.length;e++)s[e]=255*t2(s[e]/255);return i.putImageData(r,0,0),t}if(!e.data)return console.warn("THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."),e;{let t=e.data.slice(0);for(let e=0;e<t.length;e++)t instanceof Uint8Array||t instanceof Uint8ClampedArray?t[e]=Math.floor(255*t2(t[e]/255
2)):t[e]=t2(t[e]);return{data:t,width:e.width,height:e.height}}}},ia=class{constructor(e=null){this.isSource=!0,this.uuid=tk(),this.data=e,this.version=0}set needsUpdate(e){!0===e&&this.version++}toJSON(e){let t=void 0===e||"string"==typeof e;if(!t&&void 0!==e.images[this.uuid])return e.images[this.uuid];let i={uuid:this.uuid,url:""},r=this.data;if(null!==r){let e;if(Array.isArray(r)){e=[];for(let t=0,i=r.length;t<i;t++)r[t].isDataTexture?e.push(io(r[t].image)):e.push(io(r[t]))}else e=io(r);i.url=e}return t||(e.images[this.uuid]=i),i}};function io(e){return"u">typeof HTMLImageElement&&e instanceof HTMLImageElement||"u">typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"u">typeof ImageBitmap&&e instanceof ImageBitmap?is.getDataURL(e):e.data?{data:Array.from(e.data),width:e.width,height:e.height,type:e.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}var il=0,ih=class extends tL{constructor(e=ih.DEFAULT_IMAGE,t=ih.DEFAULT_MAPPING,i=1001,r=1001,s=1006,a=1008,o=1023,l=1009,h=ih.DEFAULT_ANISOTROPY,c=3e3){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:il++}),this.uuid=tk(),this.name="",this.source=new ia(e),this.mipmaps=[],this.mapping=t,this.wrapS=i,this.wrapT=r,this.magFilter=s,this.minFilter=a,this.anisotropy=h,this.format=o,this.internalFormat=null,this.type=l,this.offset=new tQ(0,0),this.repeat=new tQ(1,1),this.center=new tQ(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new tK,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=c,this.userData={},this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1,this.needsPMREMUpdate=!1}get image(){return this.source.data}set image(e){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.encoding=e.encoding,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}toJSON(e){let t=void 0===e||"string"==typeof e;if(!t&&void 0!==e.textures[this.uuid])return e.textures[this.uuid];let i={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),t||(e.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(300!==this.mapping)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case 1e3:e.x=e.x-Math.floor(e.x);break;case 1001:e.x=e.x<0?0:1;break;case 1002:1===Math.abs(Math.floor(e.x)%2)?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x)}if(e.y<0||e.y>1)switch(this.wrapT){case 1e3:e.y=e.y-Math.floor(e.y);break;case 1001:e.y=e.y<0?0:1;break;case 1002:1===Math.abs(Math.floor(e.y)%2)?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y)}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){!0===e&&(this.version++,this.source.needsUpdate=!0)}};ih.DEFAULT_IMAGE=null,ih.DEFAULT_MAPPING=300,ih.DEFAULT_ANISOTROPY=1;var ic=class{constructor(e=0,t=0,i=0,r=1){ic.prototype.isVector4=!0,this.x=e,this.y=t,this.z=i,this.w=r}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,i,r){return this.x=e,this.y=t,this.z=i,this.w=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=void 0!==e.w?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}
2sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,i=this.y,r=this.z,s=this.w,a=e.elements;return this.x=a[0]*t+a[4]*i+a[8]*r+a[12]*s,this.y=a[1]*t+a[5]*i+a[9]*r+a[13]*s,this.z=a[2]*t+a[6]*i+a[10]*r+a[14]*s,this.w=a[3]*t+a[7]*i+a[11]*r+a[15]*s,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,i,r,s,a=e.elements,o=a[0],l=a[4],h=a[8],c=a[1],d=a[5],u=a[9],p=a[2],f=a[6],m=a[10];if(.01>Math.abs(l-c)&&.01>Math.abs(h-p)&&.01>Math.abs(u-f)){if(.1>Math.abs(l+c)&&.1>Math.abs(h+p)&&.1>Math.abs(u+f)&&.1>Math.abs(o+d+m-3))return this.set(1,0,0,0),this;t=Math.PI;let e=(o+1)/2,a=(d+1)/2,g=(m+1)/2,v=(l+c)/4,y=(h+p)/4,x=(u+f)/4;return e>a&&e>g?e<.01?(i=0,r=.707106781,s=.707106781):(r=v/(i=Math.sqrt(e)),s=y/i):a>g?a<.01?(i=.707106781,r=0,s=.707106781):(i=v/(r=Math.sqrt(a)),s=x/r):g<.01?(i=.707106781,r=.707106781,s=0):(i=y/(s=Math.sqrt(g)),r=x/s),this.set(i,r,s,t),this}let g=Math.sqrt((f-u)*(f-u)+(h-p)*(h-p)+(c-l)*(c-l));return .001>Math.abs(g)&&(g=1),this.x=(f-u)/g,this.y=(h-p)/g,this.z=(c-l)/g,this.w=Math.acos((o+d+m-1)/2),this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this.w=Math.max(e.w,Math.min(t.w,this.w)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this.w=Math.max(e,Math.min(t,this.w)),this}clampLength(e,t){let i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(e,Math.min(t,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this.w=e.w+(t.w-e.w)*i,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}},id=class extends tL{constructor(e=1,t=1,i={}
2){super(),this.isWebGLRenderTarget=!0,this.width=e,this.height=t,this.depth=1,this.scissor=new ic(0,0,e,t),this.scissorTest=!1,this.viewport=new ic(0,0,e,t),this.texture=new ih({width:e,height:t,depth:1},i.mapping,i.wrapS,i.wrapT,i.magFilter,i.minFilter,i.format,i.type,i.anisotropy,i.encoding),this.texture.isRenderTargetTexture=!0,this.texture.flipY=!1,this.texture.generateMipmaps=void 0!==i.generateMipmaps&&i.generateMipmaps,this.texture.internalFormat=void 0!==i.internalFormat?i.internalFormat:null,this.texture.minFilter=void 0!==i.minFilter?i.minFilter:1006,this.depthBuffer=void 0===i.depthBuffer||i.depthBuffer,this.stencilBuffer=void 0!==i.stencilBuffer&&i.stencilBuffer,this.depthTexture=void 0!==i.depthTexture?i.depthTexture:null,this.samples=void 0!==i.samples?i.samples:0}setSize(e,t,i=1){(this.width!==e||this.height!==t||this.depth!==i)&&(this.width=e,this.height=t,this.depth=i,this.texture.image.width=e,this.texture.image.height=t,this.texture.image.depth=i,this.dispose()),this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.viewport.copy(e.viewport),this.texture=e.texture.clone(),this.texture.isRenderTargetTexture=!0;let t=Object.assign({},e.texture.image);return this.texture.source=new ia(t),this.depthBuffer=e.depthBuffer,this.stencilBuffer=e.stencilBuffer,null!==e.depthTexture&&(this.depthTexture=e.depthTexture.clone()),this.samples=e.samples,this}dispose(){this.dispatchEvent({type:"dispose"})}},iu=class extends ih{constructor(e=null,t=1,i=1,r=1){super(null),this.isDataArrayTexture=!0,this.image={data:e,width:t,height:i,depth:r},this.magFilter=1003,this.minFilter=1003,this.wrapR=1001,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}},ip=class extends ih{constructor(e=null,t=1,i=1,r=1){super(null),this.isData3DTexture=!0,this.image={data:e,width:t,height:i,depth:r},this.magFilter=1003,this.minFilter=1003,this.wrapR=1001,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}},im=class extends id{constructor(e=1,t=1,i=1,r={}){super(e,t,r),this.isWebGLMultipleRenderTargets=!0;let s=this.texture;this.texture=[];for(let e=0;e<i;e++)this.texture[e]=s.clone(),this.texture[e].isRenderTargetTexture=!0}setSize(e,t,i=1){if(this.width!==e||this.height!==t||this.depth!==i){this.width=e,this.height=t,this.depth=i;for(let r=0,s=this.texture.length;r<s;r++)this.texture[r].image.width=e,this.texture[r].image.height=t,this.texture[r].image.depth=i;this.dispose()}return this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t),this}copy(e){this.dispose(),this.width=e.width,this.height=e.height,this.depth=e.depth,this.viewport.set(0,0,this.width,this.height),this.scissor.set(0,0,this.width,this.height),this.depthBuffer=e.depthBuffer,this.stencilBuffer=e.stencilBuffer,null!==e.depthTexture&&(this.depthTexture=e.depthTexture.clone()),this.texture.length=0;for(let t=0,i=e.texture.length;t<i;t++)this.texture[t]=e.texture[t].clone(),this.texture[t].isRenderTargetTexture=!0;return this}},ig=class{constructor(e=0,t=0,i=0,r=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=i,this._w=r}static slerpFlat(e,t,i,r,s,a,o){let l=i[r+0],h=i[r+1],c=i[r+2],d=i[r+3],u=s[a+0],p=s[a+1],f=s[a+2],m=s[a+3];if(0===o){e[t+0]=l,e[t+1]=h,e[t+2]=c,e[t+3]=d;return}if(1===o){e[t+0]=u,e[t+1]=p,e[t+2]=f,e[t+3]=m;return}if(d!==m||l!==u||h!==p||c!==f){let e=1-o,t=l*u+h*p+c*f+d*m,i=t>=0?1:-1,r=1-t*t;if(r>Number.EPSILON){let s=Math.sqrt(r),a=Math.atan2(s,t*i);e=Math.sin(e*a)/s,o=Math.sin(o*a)/s}let s=o*i;if(l=l*e+u*s,h=h*e+p*s,c=c*e+f*s,d=d*e+m*s,e===1-o){let e=1/Math.sqrt(l*l+h*h+c*c+d*d);l*=e,h*=e,c*=e,d*=e}}e[t]=l,e[t+1]=h,e[t+2]=c,e[t+3]=d}static multiplyQuaternionsFlat(e,t,i,r,s,a){let o=i[r],l=i[r+1],h=i[r+2],c=i[r+3],d=s[a],u=s[a+1],p=s[a+2],f=s[a+3];return e[t]=o*f+c*d+l*p-h*u,e[t+1]=l*f+c*u+h*d-o*p,e[t+2]=h*f+c*p+o*u-l*d,e[t+3]=c*f-o*d-l*u-h*p,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,i,r){return this._x=e,this._y=t,this._z=i,this._w=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t){let i=e._x,r=e._y,s=e._z,a=e._order,o=Math.cos,l=Math.sin,h=o(i/2),c=o(r/2),d=o(s/2),u=l(i/2),p=l(r/2),f=l(s/2);switch(a){case"XYZ":this._x=u*c*d+h*p*f,this._y=h*p*d-u*c*f,this._z=h*c*f+u*p*d,this._w=h*c*d-u*p*f;break;case"YXZ":this._x=u*c*d+h*p*f,this._y=h*p*d-u*c*f,this._z=h*c*f-u*p*d,this._w=h*c*d+u*p*f;break;case"ZXY":this._x=u*c*d-h*p*f,this._y=h*p*d+u*c*f,this._z=h*c*f+u*p*d,this._w=h*c*d-u*p*f;break;case"ZYX":this._x=u*c*d-h*p*f,this._y=h*p*d+u*c*f,this._z=h*c*f-u*p*d,this._w=h*c*d+u*p*f;break;case"YZX":this._x=u*c*d+h*p*f,this._y=h*p*d+u*c*f,this._z=h*c*f-u*p*d,this._w=h*c*d-u*p*f;break;case"XZY":this._x=u*c*d-h*p*f,this._y=h*p*d-u*c*f,this._z=h*c*f+u*p*d,this._w=h*c*d+u*p*f;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}return!1!==t&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let i=t/2,r=Math.sin(i);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,i=t[0],r=t[4],s=t[8],a=t[1],o=t[5],l=t[9],h=t[2],c=t[6],d=t[10],u=i+o+d;if(u>0){let e=.5/Math.sqrt(u+1);this._w=.25/e,this._x=(c-l)*e,this._y=(s-h)*e,this._z=(a-r)*e}else if(i>o&&i>d){let e=2*Math.sqrt(1+i-o-d);
2this._w=(c-l)/e,this._x=.25*e,this._y=(r+a)/e,this._z=(s+h)/e}else if(o>d){let e=2*Math.sqrt(1+o-i-d);this._w=(s-h)/e,this._x=(r+a)/e,this._y=.25*e,this._z=(l+c)/e}else{let e=2*Math.sqrt(1+d-i-o);this._w=(a-r)/e,this._x=(s+h)/e,this._y=(l+c)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let i=e.dot(t)+1;return i<Number.EPSILON?(i=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0):(this._x=0,this._y=-e.z,this._z=e.y)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x),this._w=i,this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(tU(this.dot(e),-1,1)))}rotateTowards(e,t){let i=this.angleTo(e);if(0===i)return this;let r=Math.min(1,t/i);return this.slerp(e,r),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return 0===e?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let i=e._x,r=e._y,s=e._z,a=e._w,o=t._x,l=t._y,h=t._z,c=t._w;return this._x=i*c+a*o+r*h-s*l,this._y=r*c+a*l+s*o-i*h,this._z=s*c+a*h+i*l-r*o,this._w=a*c-i*o-r*l-s*h,this._onChangeCallback(),this}slerp(e,t){if(0===t)return this;if(1===t)return this.copy(e);let i=this._x,r=this._y,s=this._z,a=this._w,o=a*e._w+i*e._x+r*e._y+s*e._z;if(o<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,o=-o):this.copy(e),o>=1)return this._w=a,this._x=i,this._y=r,this._z=s,this;let l=1-o*o;if(l<=Number.EPSILON){let e=1-t;return this._w=e*a+t*this._w,this._x=e*i+t*this._x,this._y=e*r+t*this._y,this._z=e*s+t*this._z,this.normalize(),this._onChangeCallback(),this}let h=Math.sqrt(l),c=Math.atan2(h,o),d=Math.sin((1-t)*c)/h,u=Math.sin(t*c)/h;return this._w=a*d+this._w*u,this._x=i*d+this._x*u,this._y=r*d+this._y*u,this._z=s*d+this._z*u,this._onChangeCallback(),this}slerpQuaternions(e,t,i){return this.copy(e).slerp(t,i)}random(){let e=Math.random(),t=Math.sqrt(1-e),i=Math.sqrt(e),r=2*Math.PI*Math.random(),s=2*Math.PI*Math.random();return this.set(t*Math.cos(r),i*Math.sin(s),i*Math.cos(s),t*Math.sin(r))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},iv=class{constructor(e=0,t=0,i=0){iv.prototype.isVector3=!0,this.x=e,this.y=t,this.z=i}set(e,t,i){return void 0===i&&(i=this.z),this.x=e,this.y=t,this.z=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}
2sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(ix.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(ix.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,i=this.y,r=this.z,s=e.elements;return this.x=s[0]*t+s[3]*i+s[6]*r,this.y=s[1]*t+s[4]*i+s[7]*r,this.z=s[2]*t+s[5]*i+s[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,i=this.y,r=this.z,s=e.elements,a=1/(s[3]*t+s[7]*i+s[11]*r+s[15]);return this.x=(s[0]*t+s[4]*i+s[8]*r+s[12])*a,this.y=(s[1]*t+s[5]*i+s[9]*r+s[13])*a,this.z=(s[2]*t+s[6]*i+s[10]*r+s[14])*a,this}applyQuaternion(e){let t=this.x,i=this.y,r=this.z,s=e.x,a=e.y,o=e.z,l=e.w,h=l*t+a*r-o*i,c=l*i+o*t-s*r,d=l*r+s*i-a*t,u=-s*t-a*i-o*r;return this.x=h*l+-(u*s)+-(c*o)- -(d*a),this.y=c*l+-(u*a)+-(d*s)- -(h*o),this.z=d*l+-(u*o)+-(h*a)- -(c*s),this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,i=this.y,r=this.z,s=e.elements;return this.x=s[0]*t+s[4]*i+s[8]*r,this.y=s[1]*t+s[5]*i+s[9]*r,this.z=s[2]*t+s[6]*i+s[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this}clampLength(e,t){let i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(e,Math.min(t,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let i=e.x,r=e.y,s=e.z,a=t.x,o=t.y,l=t.z;return this.x=r*l-s*o,this.y=s*a-i*l,this.z=i*o-r*a,this}projectOnVector(e){let t=e.lengthSq();if(0===t)return this.set(0,0,0);let i=e.dot(this)/t;return this.copy(e).multiplyScalar(i)}projectOnPlane(e){return iy.copy(this).projectOnVector(e),this.sub(iy)}reflect(e){return this.sub(iy.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());return 0===t?Math.PI/2:Math.acos(tU(this.dot(e)/t,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,i=this.y-e.y,r=this.z-e.z;return t*t+i*i+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,i){let r=Math.sin(t)*e;return this.x=r*Math.sin(i),this.y=Math.cos(t)*e,this.z=r*Math.cos(i),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,i){return this.x=e*Math.sin(t),this.y=i,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),i=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=i,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,4*t)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,3*t)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=(Math.random()-.5)*2,t=Math.random()*Math.PI*2,i=Math.sqrt(1-e**2);return this.x=i*Math.cos(t),this.y=i*Math.sin(t),this.z=e,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},iy=new iv,ix=new ig,ib=class{constructor(e=new iv(1/0,1/0,1/0),t=new iv(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){let t=1/0,i=1/0,r=1/0,s=-1/0,a=-1/0,o=-1/0;for(let l=0,h=e.length;l<h;l+=3){let h=e[l],c=e[l+1],d=e[l+2];h<t&&(t=h),c<i&&(i=c),d<r&&(r=d),h>s&&(s=h),c>a&&(a=c),d>o&&(o=d)}return this.min.set(t,i,r),this.max.set(s,a,o),this}setFromBufferAttribute(e){let t=1/0,i=1/0,r=1/0,s=-1/0,a=-1/0,o=-1/0;for(let l=0,h=e.count;l<h;l++){let h=e.getX(l),c=e.getY(l),d=e.getZ(l);h<t&&(t=h),c<i&&(i=c),d<r&&(r=d),h>s&&(s=h),c>a&&(a=c),d>o&&(o=d)}return this.min.set(t,i,r),this.max.set(s,a,o),this}setFromPoints(e){this.makeEmpty();for(let t=0,i=e.length;t<i;t++)this.expandByPoint(e[t]);return this}setFromCenterAndSize(e,t){let i=iS.copy(t).multiplyScalar(.5);return this.min.copy(e).sub(i),this.max.copy(e).add(i),this}setFromObject(e,t=!1){return this.makeEmpty(),this.expandByObject(e,t)}clone(){return new this.constructor().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(e){return this.isEmpty()?e.set(0,0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0,0):e.subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}expandByObject(e,t=!1){e.updateWorldMatrix(!1,!1);let i=e.geometry;if(void 0!==i){if(t&&null!=i.attributes&&void 0!==i.attributes.position){let t=i.attributes.position;for(let i=0,r=t.count;i<r;i++)iS.fromBufferAttribute(t,i).applyMatrix4(e.matrixWorld),this.expandByPoint(iS)}else null===i.boundingBox&&i.computeBoundingBox(),i_.copy(i.boundingBox),i_.applyM
2atrix4(e.matrixWorld),this.union(i_)}let r=e.children;for(let e=0,i=r.length;e<i;e++)this.expandByObject(r[e],t);return this}containsPoint(e){return!(e.x<this.min.x||e.x>this.max.x||e.y<this.min.y||e.y>this.max.y||e.z<this.min.z||e.z>this.max.z)}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return!(e.max.x<this.min.x||e.min.x>this.max.x||e.max.y<this.min.y||e.min.y>this.max.y||e.max.z<this.min.z||e.min.z>this.max.z)}intersectsSphere(e){return this.clampPoint(e.center,iS),iS.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,i;return e.normal.x>0?(t=e.normal.x*this.min.x,i=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,i=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,i+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,i+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,i+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,i+=e.normal.z*this.min.z),t<=-e.constant&&i>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(iD),iI.subVectors(this.max,iD),iA.subVectors(e.a,iD),iM.subVectors(e.b,iD),iE.subVectors(e.c,iD),iC.subVectors(iM,iA),iT.subVectors(iE,iM),iP.subVectors(iA,iE);let t=[0,-iC.z,iC.y,0,-iT.z,iT.y,0,-iP.z,iP.y,iC.z,0,-iC.x,iT.z,0,-iT.x,iP.z,0,-iP.x,-iC.y,iC.x,0,-iT.y,iT.x,0,-iP.y,iP.x,0];return!!(iL(t,iA,iM,iE,iI)&&iL(t=[1,0,0,0,1,0,0,0,1],iA,iM,iE,iI))&&(iO.crossVectors(iC,iT),iL(t=[iO.x,iO.y,iO.z],iA,iM,iE,iI))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return iS.copy(e).clamp(this.min,this.max).sub(e).length()}getBoundingSphere(e){return this.getCenter(e.center),e.radius=.5*this.getSize(iS).length(),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()||(iw[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),iw[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),iw[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),iw[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),iw[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),iw[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),iw[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),iw[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(iw)),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}},iw=[new iv,new iv,new iv,new iv,new iv,new iv,new iv,new iv],iS=new iv,i_=new ib,iA=new iv,iM=new iv,iE=new iv,iC=new iv,iT=new iv,iP=new iv,iD=new iv,iI=new iv,iO=new iv,iR=new iv;function iL(e,t,i,r,s){for(let a=0,o=e.length-3;a<=o;a+=3){iR.fromArray(e,a);let o=s.x*Math.abs(iR.x)+s.y*Math.abs(iR.y)+s.z*Math.abs(iR.z),l=t.dot(iR),h=i.dot(iR),c=r.dot(iR);if(Math.max(-Math.max(l,h,c),Math.min(l,h,c))>o)return!1}return!0}var iB=new ib,iz=new iv,iF=new iv,iN=class{constructor(e=new iv,t=-1){this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){let i=this.center;void 0!==t?i.copy(t):iB.setFromPoints(e).getCenter(i);let r=0;for(let t=0,s=e.length;t<s;t++)r=Math.max(r,i.distanceToSquared(e[t]));return this.radius=Math.sqrt(r),this}copy(e){return this.center.copy(e.center),this.radius=e.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(e){return e.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(e){return e.distanceTo(this.center)-this.radius}intersectsSphere(e){let t=this.radius+e.radius;return e.center.distanceToSquared(this.center)<=t*t}intersectsBox(e){return e.intersectsSphere(this)}intersectsPlane(e){return Math.abs(e.distanceToPoint(this.center))<=this.radius}clampPoint(e,t){let i=this.center.distanceToSquared(e);return t.copy(e),i>this.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?e.makeEmpty():(e.set(this.center,this.center),e.expandByScalar(this.radius)),e}
2applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;iz.subVectors(e,this.center);let t=iz.lengthSq();if(t>this.radius*this.radius){let e=Math.sqrt(t),i=(e-this.radius)*.5;this.center.addScaledVector(iz,i/e),this.radius+=i}return this}union(e){return e.isEmpty()||(this.isEmpty()?this.copy(e):!0===this.center.equals(e.center)?this.radius=Math.max(this.radius,e.radius):(iF.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(iz.copy(e.center).add(iF)),this.expandByPoint(iz.copy(e.center).sub(iF)))),this}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}},ik=new iv,iU=new iv,iV=new iv,ij=new iv,iG=new iv,iH=new iv,iW=new iv,iq=class{constructor(e=new iv,t=new iv(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.direction).multiplyScalar(e).add(this.origin)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,ik)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);let i=t.dot(this.direction);return i<0?t.copy(this.origin):t.copy(this.direction).multiplyScalar(i).add(this.origin)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){let t=ik.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(ik.copy(this.direction).multiplyScalar(t).add(this.origin),ik.distanceToSquared(e))}distanceSqToSegment(e,t,i,r){iU.copy(e).add(t).multiplyScalar(.5),iV.copy(t).sub(e).normalize(),ij.copy(this.origin).sub(iU);let s=.5*e.distanceTo(t),a=-this.direction.dot(iV),o=ij.dot(this.direction),l=-ij.dot(iV),h=ij.lengthSq(),c=Math.abs(1-a*a),d,u,p,f;if(c>0){if(d=a*l-o,u=a*o-l,f=s*c,d>=0){if(u>=-f){if(u<=f){let e=1/c;d*=e,u*=e,p=d*(d+a*u+2*o)+u*(a*d+u+2*l)+h}else p=-(d=Math.max(0,-(a*(u=s)+o)))*d+u*(u+2*l)+h}else p=-(d=Math.max(0,-(a*(u=-s)+o)))*d+u*(u+2*l)+h}else u<=-f?(u=(d=Math.max(0,-(-a*s+o)))>0?-s:Math.min(Math.max(-s,-l),s),p=-d*d+u*(u+2*l)+h):u<=f?(d=0,p=(u=Math.min(Math.max(-s,-l),s))*(u+2*l)+h):(u=(d=Math.max(0,-(a*s+o)))>0?s:Math.min(Math.max(-s,-l),s),p=-d*d+u*(u+2*l)+h)}else u=a>0?-s:s,p=-(d=Math.max(0,-(a*u+o)))*d+u*(u+2*l)+h;return i&&i.copy(this.direction).multiplyScalar(d).add(this.origin),r&&r.copy(iV).multiplyScalar(u).add(iU),p}intersectSphere(e,t){ik.subVectors(e.center,this.origin);let i=ik.dot(this.direction),r=ik.dot(ik)-i*i,s=e.radius*e.radius;if(r>s)return null;let a=Math.sqrt(s-r),o=i-a,l=i+a;return o<0&&l<0?null:o<0?this.at(l,t):this.at(o,t)}intersectsSphere(e){return this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){let t=e.normal.dot(this.direction);if(0===t)return 0===e.distanceToPoint(this.origin)?0:null;let i=-(this.origin.dot(e.normal)+e.constant)/t;return i>=0?i:null}intersectPlane(e,t){let i=this.distanceToPlane(e);return null===i?null:this.at(i,t)}intersectsPlane(e){let t=e.distanceToPoint(this.origin);return 0===t||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let i,r,s,a,o,l,h=1/this.direction.x,c=1/this.direction.y,d=1/this.direction.z,u=this.origin;return h>=0?(i=(e.min.x-u.x)*h,r=(e.max.x-u.x)*h):(i=(e.max.x-u.x)*h,r=(e.min.x-u.x)*h),c>=0?(s=(e.min.y-u.y)*c,a=(e.max.y-u.y)*c):(s=(e.max.y-u.y)*c,a=(e.min.y-u.y)*c),i>a||s>r||((s>i||isNaN(i))&&(i=s),(a<r||isNaN(r))&&(r=a),d>=0?(o=(e.min.z-u.z)*d,l=(e.max.z-u.z)*d):(o=(e.max.z-u.z)*d,l=(e.min.z-u.z)*d),i>l||o>r)||((o>i||i!=i)&&(i=o),(l<r||r!=r)&&(r=l),r<0)?null:this.at(i>=0?i:r,t)}intersectsBox(e){return null!==this.intersectBox(e,ik)}intersectTriangle(e,t,i,r,s){iG.subVectors(t,e),iH.subVectors(i,e),iW.crossVectors(iG,iH);let a=this.direction.dot(iW),o;if(a>0){if(r)return null;o=1}else{if(!(a<0))return null;o=-1,a=-a}ij.subVectors(this.origin,e);let l=o*this.direction.dot(iH.crossVectors(ij,iH));if(l<0)return null;let h=o*this.direction.dot(iG.cross(ij));if(h<0||l+h>a)return null;
2let c=-o*ij.dot(iW);return c<0?null:this.at(c/a,s)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}},iX=class{constructor(){iX.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}set(e,t,i,r,s,a,o,l,h,c,d,u,p,f,m,g){let v=this.elements;return v[0]=e,v[4]=t,v[8]=i,v[12]=r,v[1]=s,v[5]=a,v[9]=o,v[13]=l,v[2]=h,v[6]=c,v[10]=d,v[14]=u,v[3]=p,v[7]=f,v[11]=m,v[15]=g,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new iX().fromArray(this.elements)}copy(e){let t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],t[9]=i[9],t[10]=i[10],t[11]=i[11],t[12]=i[12],t[13]=i[13],t[14]=i[14],t[15]=i[15],this}copyPosition(e){let t=this.elements,i=e.elements;return t[12]=i[12],t[13]=i[13],t[14]=i[14],this}setFromMatrix3(e){let t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,i){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this}makeBasis(e,t,i){return this.set(e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,0,0,0,1),this}extractRotation(e){let t=this.elements,i=e.elements,r=1/iY.setFromMatrixColumn(e,0).length(),s=1/iY.setFromMatrixColumn(e,1).length(),a=1/iY.setFromMatrixColumn(e,2).length();return t[0]=i[0]*r,t[1]=i[1]*r,t[2]=i[2]*r,t[3]=0,t[4]=i[4]*s,t[5]=i[5]*s,t[6]=i[6]*s,t[7]=0,t[8]=i[8]*a,t[9]=i[9]*a,t[10]=i[10]*a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){let t=this.elements,i=e.x,r=e.y,s=e.z,a=Math.cos(i),o=Math.sin(i),l=Math.cos(r),h=Math.sin(r),c=Math.cos(s),d=Math.sin(s);if("XYZ"===e.order){let e=a*c,i=a*d,r=o*c,s=o*d;t[0]=l*c,t[4]=-l*d,t[8]=h,t[1]=i+r*h,t[5]=e-s*h,t[9]=-o*l,t[2]=s-e*h,t[6]=r+i*h,t[10]=a*l}else if("YXZ"===e.order){let e=l*c,i=l*d,r=h*c,s=h*d;t[0]=e+s*o,t[4]=r*o-i,t[8]=a*h,t[1]=a*d,t[5]=a*c,t[9]=-o,t[2]=i*o-r,t[6]=s+e*o,t[10]=a*l}else if("ZXY"===e.order){let e=l*c,i=l*d,r=h*c,s=h*d;t[0]=e-s*o,t[4]=-a*d,t[8]=r+i*o,t[1]=i+r*o,t[5]=a*c,t[9]=s-e*o,t[2]=-a*h,t[6]=o,t[10]=a*l}else if("ZYX"===e.order){let e=a*c,i=a*d,r=o*c,s=o*d;t[0]=l*c,t[4]=r*h-i,t[8]=e*h+s,t[1]=l*d,t[5]=s*h+e,t[9]=i*h-r,t[2]=-h,t[6]=o*l,t[10]=a*l}else if("YZX"===e.order){let e=a*l,i=a*h,r=o*l,s=o*h;t[0]=l*c,t[4]=s-e*d,t[8]=r*d+i,t[1]=d,t[5]=a*c,t[9]=-o*c,t[2]=-h*c,t[6]=i*d+r,t[10]=e-s*d}else if("XZY"===e.order){let e=a*l,i=a*h,r=o*l,s=o*h;t[0]=l*c,t[4]=-d,t[8]=h*c,t[1]=e*d+s,t[5]=a*c,t[9]=i*d-r,t[2]=r*d-i,t[6]=o*c,t[10]=s*d+e}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(iK,e,iZ)}lookAt(e,t,i){let r=this.elements;return i0.subVectors(e,t),0===i0.lengthSq()&&(i0.z=1),i0.normalize(),iJ.crossVectors(i,i0),0===iJ.lengthSq()&&(1===Math.abs(i.z)?i0.x+=1e-4:i0.z+=1e-4,i0.normalize(),iJ.crossVectors(i,i0)),iJ.normalize(),i$.crossVectors(i0,iJ),r[0]=iJ.x,r[4]=i$.x,r[8]=i0.x,r[1]=iJ.y,r[5]=i$.y,r[9]=i0.y,r[2]=iJ.z,r[6]=i$.z,r[10]=i0.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let i=e.elements,r=t.elements,s=this.elements,a=i[0],o=i[4],l=i[8],h=i[12],c=i[1],d=i[5],u=i[9],p=i[13],f=i[2],m=i[6],g=i[10],v=i[14],y=i[3],x=i[7],b=i[11],w=i[15],S=r[0],_=r[4],A=r[8],M=r[12],E=r[1],C=r[5],T=r[9],P=r[13],D=r[2],I=r[6],O=r[10],R=r[14],L=r[3],B=r[7],z=r[11],F=r[15];return s[0]=a*S+o*E+l*D+h*L,s[4]=a*_+o*C+l*I+h*B,s[8]=a*A+o*T+l*O+h*z,s[12]=a*M+o*P+l*R+h*F,s[1]=c*S+d*E+u*D+p*L,s[5]=c*_+d*C+u*I+p*B,s[9]=c*A+d*T+u*O+p*z,s[13]=c*M+d*P+u*R+p*F,s[2]=f*S+m*E+g*D+v*L,s[6]=f*_+m*C+g*I+v*B,s[10]=f*A+m*T+g*O+v*z,s[14]=f*M+m*P+g*R+v*F,s[3]=y*S+x*E+b*D+w*L,s[7]=y*_+x*C+b*I+w*B,s[11]=y*A+x*T+b*O+w*z,s[15]=y*M+x*P+b*R+w*F,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){let e=this.elements,t=e[0],i=e[4],r=e[8],s=e[12],a=e[1],o=e[5],l=e[9],h=e[13],c=e[2],d=e[6],u=e[10],p=e[14];return e[3]*(+s*l*d-r*h*d-s*o*u+i*h*u+r*o*p-i*l*p)+e[7]*(+t*l*p-t*h*u+s*a*u-r*a*p+r*h*c-s*l*c)+e[11]*(+t*h*d-t*o*p-s*a*d+i*a*p+s*o*c-i*h*c)+e[15]*(-r*o*c-t*l*d+t*o*u+r*a*d-i*a*u+i*l*c)}transpose(){let e=this.elements,t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,i){let r=this.elements;return e.isVector3?(r[12]=e.x,r[13]=e.y,r[14]=e.z):(r[12]=e,r[13]=t,r[14]=i),this}invert(){let e=this.elements,t=e[0],i=e[1],r=e[2],s=e[3],a=e[4],o=e[5],l=e[6],h=e[7],c=e[8],d=e[9],u=e[10],p=e[11],f=e[12],m=e[13],g=e[14],v=e[15],y=d
2*g*h-m*u*h+m*l*p-o*g*p-d*l*v+o*u*v,x=f*u*h-c*g*h-f*l*p+a*g*p+c*l*v-a*u*v,b=c*m*h-f*d*h+f*o*p-a*m*p-c*o*v+a*d*v,w=f*d*l-c*m*l-f*o*u+a*m*u+c*o*g-a*d*g,S=t*y+i*x+r*b+s*w;if(0===S)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let _=1/S;return e[0]=y*_,e[1]=(m*u*s-d*g*s-m*r*p+i*g*p+d*r*v-i*u*v)*_,e[2]=(o*g*s-m*l*s+m*r*h-i*g*h-o*r*v+i*l*v)*_,e[3]=(d*l*s-o*u*s-d*r*h+i*u*h+o*r*p-i*l*p)*_,e[4]=x*_,e[5]=(c*g*s-f*u*s+f*r*p-t*g*p-c*r*v+t*u*v)*_,e[6]=(f*l*s-a*g*s-f*r*h+t*g*h+a*r*v-t*l*v)*_,e[7]=(a*u*s-c*l*s+c*r*h-t*u*h-a*r*p+t*l*p)*_,e[8]=b*_,e[9]=(f*d*s-c*m*s-f*i*p+t*m*p+c*i*v-t*d*v)*_,e[10]=(a*m*s-f*o*s+f*i*h-t*m*h-a*i*v+t*o*v)*_,e[11]=(c*o*s-a*d*s-c*i*h+t*d*h+a*i*p-t*o*p)*_,e[12]=w*_,e[13]=(c*m*r-f*d*r+f*i*u-t*m*u-c*i*g+t*d*g)*_,e[14]=(f*o*r-a*m*r-f*i*l+t*m*l+a*i*g-t*o*g)*_,e[15]=(a*d*r-c*o*r+c*i*l-t*d*l-a*i*u+t*o*u)*_,this}scale(e){let t=this.elements,i=e.x,r=e.y,s=e.z;return t[0]*=i,t[4]*=r,t[8]*=s,t[1]*=i,t[5]*=r,t[9]*=s,t[2]*=i,t[6]*=r,t[10]*=s,t[3]*=i,t[7]*=r,t[11]*=s,this}getMaxScaleOnAxis(){let e=this.elements;return Math.sqrt(Math.max(e[0]*e[0]+e[1]*e[1]+e[2]*e[2],e[4]*e[4]+e[5]*e[5]+e[6]*e[6],e[8]*e[8]+e[9]*e[9]+e[10]*e[10]))}makeTranslation(e,t,i){return this.set(1,0,0,e,0,1,0,t,0,0,1,i,0,0,0,1),this}makeRotationX(e){let t=Math.cos(e),i=Math.sin(e);return this.set(1,0,0,0,0,t,-i,0,0,i,t,0,0,0,0,1),this}makeRotationY(e){let t=Math.cos(e),i=Math.sin(e);return this.set(t,0,i,0,0,1,0,0,-i,0,t,0,0,0,0,1),this}makeRotationZ(e){let t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,0,i,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){let i=Math.cos(t),r=Math.sin(t),s=1-i,a=e.x,o=e.y,l=e.z,h=s*a,c=s*o;return this.set(h*a+i,h*o-r*l,h*l+r*o,0,h*o+r*l,c*o+i,c*l-r*a,0,h*l-r*o,c*l+r*a,s*l*l+i,0,0,0,0,1),this}makeScale(e,t,i){return this.set(e,0,0,0,0,t,0,0,0,0,i,0,0,0,0,1),this}makeShear(e,t,i,r,s,a){return this.set(1,i,s,0,e,1,a,0,t,r,1,0,0,0,0,1),this}compose(e,t,i){let r=this.elements,s=t._x,a=t._y,o=t._z,l=t._w,h=s+s,c=a+a,d=o+o,u=s*h,p=s*c,f=s*d,m=a*c,g=a*d,v=o*d,y=l*h,x=l*c,b=l*d,w=i.x,S=i.y,_=i.z;return r[0]=(1-(m+v))*w,r[1]=(p+b)*w,r[2]=(f-x)*w,r[3]=0,r[4]=(p-b)*S,r[5]=(1-(u+v))*S,r[6]=(g+y)*S,r[7]=0,r[8]=(f+x)*_,r[9]=(g-y)*_,r[10]=(1-(u+m))*_,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,this}decompose(e,t,i){let r=this.elements,s=iY.set(r[0],r[1],r[2]).length(),a=iY.set(r[4],r[5],r[6]).length(),o=iY.set(r[8],r[9],r[10]).length();0>this.determinant()&&(s=-s),e.x=r[12],e.y=r[13],e.z=r[14],iQ.copy(this);let l=1/s,h=1/a,c=1/o;return iQ.elements[0]*=l,iQ.elements[1]*=l,iQ.elements[2]*=l,iQ.elements[4]*=h,iQ.elements[5]*=h,iQ.elements[6]*=h,iQ.elements[8]*=c,iQ.elements[9]*=c,iQ.elements[10]*=c,t.setFromRotationMatrix(iQ),i.x=s,i.y=a,i.z=o,this}makePerspective(e,t,i,r,s,a){let o=this.elements;return o[0]=2*s/(t-e),o[4]=0,o[8]=(t+e)/(t-e),o[12]=0,o[1]=0,o[5]=2*s/(i-r),o[9]=(i+r)/(i-r),o[13]=0,o[2]=0,o[6]=0,o[10]=-(a+s)/(a-s),o[14]=-2*a
2*s/(a-s),o[3]=0,o[7]=0,o[11]=-1,o[15]=0,this}makeOrthographic(e,t,i,r,s,a){let o=this.elements,l=1/(t-e),h=1/(i-r),c=1/(a-s);return o[0]=2*l,o[4]=0,o[8]=0,o[12]=-((t+e)*l),o[1]=0,o[5]=2*h,o[9]=0,o[13]=-((i+r)*h),o[2]=0,o[6]=0,o[10]=-2*c,o[14]=-((a+s)*c),o[3]=0,o[7]=0,o[11]=0,o[15]=1,this}equals(e){let t=this.elements,i=e.elements;for(let e=0;e<16;e++)if(t[e]!==i[e])return!1;return!0}fromArray(e,t=0){for(let i=0;i<16;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){let i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e[t+9]=i[9],e[t+10]=i[10],e[t+11]=i[11],e[t+12]=i[12],e[t+13]=i[13],e[t+14]=i[14],e[t+15]=i[15],e}},iY=new iv,iQ=new iX,iK=new iv(0,0,0),iZ=new iv(1,1,1),iJ=new iv,i$=new iv,i0=new iv,i1=new iX,i2=new ig,i3=class{constructor(e=0,t=0,i=0,r=i3.DEFAULT_ORDER){this.isEuler=!0,this._x=e,this._y=t,this._z=i,this._order=r}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,i,r=this._order){return this._x=e,this._y=t,this._z=i,this._order=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,i=!0){let r=e.elements,s=r[0],a=r[4],o=r[8],l=r[1],h=r[5],c=r[9],d=r[2],u=r[6],p=r[10];switch(t){case"XYZ":this._y=Math.asin(tU(o,-1,1)),.9999999>Math.abs(o)?(this._x=Math.atan2(-c,p),this._z=Math.atan2(-a,s)):(this._x=Math.atan2(u,h),this._z=0);break;case"YXZ":this._x=Math.asin(-tU(c,-1,1)),.9999999>Math.abs(c)?(this._y=Math.atan2(o,p),this._z=Math.atan2(l,h)):(this._y=Math.atan2(-d,s),this._z=0);break;case"ZXY":this._x=Math.asin(tU(u,-1,1)),.9999999>Math.abs(u)?(this._y=Math.atan2(-d,p),this._z=Math.atan2(-a,h)):(this._y=0,this._z=Math.atan2(l,s));break;case"ZYX":this._y=Math.asin(-tU(d,-1,1)),.9999999>Math.abs(d)?(this._x=Math.atan2(u,p),this._z=Math.atan2(l,s)):(this._x=0,this._z=Math.atan2(-a,h));break;case"YZX":this._z=Math.asin(tU(l,-1,1)),.9999999>Math.abs(l)?(this._x=Math.atan2(-c,h),this._y=Math.atan2(-d,s)):(this._x=0,this._y=Math.atan2(o,p));break;case"XZY":this._z=Math.asin(-tU(a,-1,1)),.9999999>Math.abs(a)?(this._x=Math.atan2(u,h),this._y=Math.atan2(o,s)):(this._x=Math.atan2(-c,p),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+t)}return this._order=t,!0===i&&this._onChangeCallback(),this}setFromQuaternion(e,t,i){return i1.makeRotationFromQuaternion(e),this.setFromRotationMatrix(i1,t,i)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return i2.setFromEuler(this),this.setFromQuaternion(i2,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],void 0!==e[3]&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};i3.DEFAULT_ORDER="XYZ";var i4=class{constructor(){this.mask=1}set(e){this.mask=(1<<e|0)>>>0}enable(e){this.mask|=1<<e|0}enableAll(){this.mask=-1}toggle(e){this.mask^=1<<e|0}disable(e){this.mask&=~(1<<e|0)}disableAll(){this.mask=0}test(e){return(this.mask&e.mask)!=0}isEnabled(e){return(this.mask&(1<<e|0))!=0}},i5=0,i6=new iv,i8=new ig,i9=new iX,i7=new iv,re=new iv,rt=new iv,ri=new ig,rr=new iv(1,0,0),rs=new iv(0,1,0),ra=new iv(0,0,1),rn={type:"added"},ro={type:"removed"},rl=class extends tL{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:i5++}),this.uuid=tk(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=rl.DEFAULT_UP.clone();let e=new iv,t=new i3,i=new ig,r=new iv(1,1,1);t._onChange(function(){i.setFromEuler(t,!1)}),i._onChange(function(){t.setFromQuaternion(i,void 0,!1)}),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:e},rotation:{configurable:!0,enumerable:!0,value:t},quaternion:{configurable:!0,enumerable:!0,value:i},scale:{configurable:!0,enumerable:!0,value:r},modelViewMatrix:{value:new iX},normalMatrix:{value:new tK}}),this.matrix=new iX,this.matrixWorld=new iX,this.matrixAutoUpdate=rl.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.matrixWorldAutoUpdate=rl.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.layers=new i4,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.userData={}}onBeforeRender(){}onAfterRender(){}applyMatrix4(e){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(e),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(e){return this.quaternion.premultiply(e),this}setRotationFromAxisAngle(e,t){this.quaternion.setFromAxisAngle(e,t)}setRotationFromEuler(e){this.quaternion.setFromEuler(e,!0)}
2setRotationFromMatrix(e){this.quaternion.setFromRotationMatrix(e)}setRotationFromQuaternion(e){this.quaternion.copy(e)}rotateOnAxis(e,t){return i8.setFromAxisAngle(e,t),this.quaternion.multiply(i8),this}rotateOnWorldAxis(e,t){return i8.setFromAxisAngle(e,t),this.quaternion.premultiply(i8),this}rotateX(e){return this.rotateOnAxis(rr,e)}rotateY(e){return this.rotateOnAxis(rs,e)}rotateZ(e){return this.rotateOnAxis(ra,e)}translateOnAxis(e,t){return i6.copy(e).applyQuaternion(this.quaternion),this.position.add(i6.multiplyScalar(t)),this}translateX(e){return this.translateOnAxis(rr,e)}translateY(e){return this.translateOnAxis(rs,e)}translateZ(e){return this.translateOnAxis(ra,e)}localToWorld(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(this.matrixWorld)}worldToLocal(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(i9.copy(this.matrixWorld).invert())}lookAt(e,t,i){e.isVector3?i7.copy(e):i7.set(e,t,i);let r=this.parent;this.updateWorldMatrix(!0,!1),re.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?i9.lookAt(re,i7,this.up):i9.lookAt(i7,re,this.up),this.quaternion.setFromRotationMatrix(i9),r&&(i9.extractRotation(r.matrixWorld),i8.setFromRotationMatrix(i9),this.quaternion.premultiply(i8.invert()))}add(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return e===this?console.error("THREE.Object3D.add: object can't be added as a child of itself.",e):e&&e.isObject3D?(null!==e.parent&&e.parent.remove(e),e.parent=this,this.children.push(e),e.dispatchEvent(rn)):console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",e),this}remove(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.remove(arguments[e]);return this}let t=this.children.indexOf(e);return -1!==t&&(e.parent=null,this.children.splice(t,1),e.dispatchEvent(ro)),this}removeFromParent(){let e=this.parent;return null!==e&&e.remove(this),this}clear(){for(let e=0;e<this.children.length;e++){let t=this.children[e];t.parent=null,t.dispatchEvent(ro)}return this.children.length=0,this}attach(e){return this.updateWorldMatrix(!0,!1),i9.copy(this.matrixWorld).invert(),null!==e.parent&&(e.parent.updateWorldMatrix(!0,!1),i9.multiply(e.parent.matrixWorld)),e.applyMatrix4(i9),this.add(e),e.updateWorldMatrix(!1,!0),this}getObjectById(e){return this.getObjectByProperty("id",e)}getObjectByName(e){return this.getObjectByProperty("name",e)}getObjectByProperty(e,t){if(this[e]===t)return this;for(let i=0,r=this.children.length;i<r;i++){let r=this.children[i].getObjectByProperty(e,t);if(void 0!==r)return r}}getObjectsByProperty(e,t){let i=[];this[e]===t&&i.push(this);for(let r=0,s=this.children.length;r<s;r++){let s=this.children[r].getObjectsByProperty(e,t);s.length>0&&(i=i.concat(s))}return i}getWorldPosition(e){return this.updateWorldMatrix(!0,!1),e.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(re,e,rt),e}getWorldScale(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(re,ri,e),e}getWorldDirection(e){this.updateWorldMatrix(!0,!1);let t=this.matrixWorld.elements;return e.set(t[8],t[9],t[10]).normalize()}raycast(){}traverse(e){e(this);let t=this.children;for(let i=0,r=t.length;i<r;i++)t[i].traverse(e)}traverseVisible(e){if(!1===this.visible)return;e(this);let t=this.children;for(let i=0,r=t.length;i<r;i++)t[i].traverseVisible(e)}traverseAncestors(e){let t=this.parent;null!==t&&(e(t),t.traverseAncestors(e))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(e){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||e)&&(null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,e=!0);let t=this.children;for(let i=0,r=t.length;i<r;i++){let r=t[i];(!0===r.matrixWorldAutoUpdate||!0===e)&&r.updateMatrixWorld(e)}}updateWorldMatrix(e,t){let i=this.parent;if(!0===e&&null!==i&&!0===i.matrixWorldAutoUpdate&&i.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),null===this.parent?this.matrixWorld.copy(this.matrix
2):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),!0===t){let e=this.children;for(let t=0,i=e.length;t<i;t++){let i=e[t];!0===i.matrixWorldAutoUpdate&&i.updateWorldMatrix(!1,!0)}}}toJSON(e){let t=void 0===e||"string"==typeof e,i={};t&&(e={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},i.metadata={version:4.5,type:"Object",generator:"Object3D.toJSON"});let r={};function s(t,i){return void 0===t[i.uuid]&&(t[i.uuid]=i.toJSON(e)),i.uuid}if(r.uuid=this.uuid,r.type=this.type,""!==this.name&&(r.name=this.name),!0===this.castShadow&&(r.castShadow=!0),!0===this.receiveShadow&&(r.receiveShadow=!0),!1===this.visible&&(r.visible=!1),!1===this.frustumCulled&&(r.frustumCulled=!1),0!==this.renderOrder&&(r.renderOrder=this.renderOrder),Object.keys(this.userData).length>0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),!1===this.matrixAutoUpdate&&(r.matrixAutoUpdate=!1),this.isInstancedMesh&&(r.type="InstancedMesh",r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(r.instanceColor=this.instanceColor.toJSON())),this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&!0!==this.environment.isRenderTargetTexture&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=s(e.geometries,this.geometry);let t=this.geometry.parameters;if(void 0!==t&&void 0!==t.shapes){let i=t.shapes;if(Array.isArray(i))for(let t=0,r=i.length;t<r;t++){let r=i[t];s(e.shapes,r)}else s(e.shapes,i)}}if(this.isSkinnedMesh&&(r.bindMode=this.bindMode,r.bindMatrix=this.bindMatrix.toArray(),void 0!==this.skeleton&&(s(e.skeletons,this.skeleton),r.skeleton=this.skeleton.uuid)),void 0!==this.material){if(Array.isArray(this.material)){let t=[];for(let i=0,r=this.material.length;i<r;i++)t.push(s(e.materials,this.material[i]));r.material=t}else r.material=s(e.materials,this.material)}if(this.children.length>0){r.children=[];for(let t=0;t<this.children.length;t++)r.children.push(this.children[t].toJSON(e).object)}if(this.animations.length>0){r.animations=[];for(let t=0;t<this.animations.length;t++){let i=this.animations[t];r.animations.push(s(e.animations,i))}}if(t){let t=a(e.geometries),r=a(e.materials),s=a(e.textures),o=a(e.images),l=a(e.shapes),h=a(e.skeletons),c=a(e.animations),d=a(e.nodes);t.length>0&&(i.geometries=t),r.length>0&&(i.materials=r),s.length>0&&(i.textures=s),o.length>0&&(i.images=o),l.length>0&&(i.shapes=l),h.length>0&&(i.skeletons=h),c.length>0&&(i.animations=c),d.length>0&&(i.nodes=d)}return i.object=r,i;function a(e){let t=[];for(let i in e){let r=e[i];delete r.metadata,t.push(r)}return t}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.userData=JSON.parse(JSON.stringify(e.userData)),!0===t)for(let t=0;t<e.children.length;t++){let i=e.children[t];this.add(i.clone())}return this}};rl.DEFAULT_UP=new iv(0,1,0),rl.DEFAULT_MATRIX_AUTO_UPDATE=!0,rl.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;var rh=new iv,rc=new iv,rd=new iv,ru=new iv,rp=new iv,rf=new iv,rm=new iv,rg=new iv,rv=new iv,ry=new iv,rx=class{constructor(e=new iv,t=new iv,i=new iv){this.a=e,this.b=t,this.c=i}static getNormal(e,t,i,r){r.subVectors(i,t),rh.subVectors(e,t),r.cross(rh);let s=r.lengthSq();return s>0?r.multiplyScalar(1/Math.sqrt(s)):r.set(0,0,0)}static getBarycoord(e,t,i,r,s){rh.subVectors(r,t),rc.subVectors(i,t),rd.subVectors(e,t);let a=rh.dot(rh),o=rh.dot(rc),l=rh.dot(rd),h=rc.dot(rc),c=rc.dot(rd),d=a*h-o*o;if(0===d)return s.set(-2,-1,-1);let u=1/d,p=(h*l-o*c)*u,f=(a*c-o*l)*u;return s.set(1-p-f,f,p)}static containsPoint(e,t,i,r){return this.getBarycoord(e,t,i,r,ru),ru.x>=0&&ru.y>=0&&ru.x+ru.y<=1}static getUV(e,t,i,r,s,a,o,l){return this.getBarycoord(e,t,i,r,ru),l.set(0,0),l.addScaledVector(s,ru.x),l.addScaledVector(a,ru.y),l.addScaledVector(o,ru.z),l}static isFrontFacing(e,t,i,r){return rh.subVectors(i,t),rc.subVectors(e,t),0>rh.cross(rc).dot(r)}set(e,t,i){return this.a.copy(e),this.b.copy(t),this.c.copy(i),this}setFromPointsAndIndices(e,t,i,r){return this.a.copy(e[t]),this.b.copy(e[i]),this.c.copy(e[r]),this}setFromAttributeAndIndices(e,t,i,r){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,i),this.c.fromBufferAttribute(e,r),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return rh.subVectors(this.c,this.b),rc.subVectors(this.a,this.b),.5*rh.cross(rc).length()}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return rx.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return rx.getBarycoord(e,this.a,this.b,this.c,t)}
2getUV(e,t,i,r,s){return rx.getUV(e,this.a,this.b,this.c,t,i,r,s)}containsPoint(e){return rx.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return rx.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){let i=this.a,r=this.b,s=this.c,a,o;rp.subVectors(r,i),rf.subVectors(s,i),rg.subVectors(e,i);let l=rp.dot(rg),h=rf.dot(rg);if(l<=0&&h<=0)return t.copy(i);rv.subVectors(e,r);let c=rp.dot(rv),d=rf.dot(rv);if(c>=0&&d<=c)return t.copy(r);let u=l*d-c*h;if(u<=0&&l>=0&&c<=0)return a=l/(l-c),t.copy(i).addScaledVector(rp,a);ry.subVectors(e,s);let p=rp.dot(ry),f=rf.dot(ry);if(f>=0&&p<=f)return t.copy(s);let m=p*h-l*f;if(m<=0&&h>=0&&f<=0)return o=h/(h-f),t.copy(i).addScaledVector(rf,o);let g=c*f-p*d;if(g<=0&&d-c>=0&&p-f>=0)return rm.subVectors(s,r),o=(d-c)/(d-c+(p-f)),t.copy(r).addScaledVector(rm,o);let v=1/(g+m+u);return a=m*v,o=u*v,t.copy(i).addScaledVector(rp,a).addScaledVector(rf,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}},rb=0,rw=class extends tL{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:rb++}),this.uuid=tk(),this.name="",this.type="Material",this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=7680,this.stencilZFail=7680,this.stencilZPass=7680,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(e){this._alphaTest>0!=e>0&&this.version++,this._alphaTest=e}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(void 0!==e)for(let t in e){let i=e[t];if(void 0===i){console.warn("THREE.Material: '"+t+"' parameter is undefined.");continue}let r=this[t];if(void 0===r){console.warn("THREE."+this.type+": '"+t+"' is not a property of this material.");continue}r&&r.isColor?r.set(i):r&&r.isVector3&&i&&i.isVector3?r.copy(i):this[t]=i}}toJSON(e){let t=void 0===e||"string"==typeof e;t&&(e={textures:{},images:{}});let i={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};function r(e){let t=[];for(let i in e){let r=e[i];delete r.metadata,t.push(r)}return t}
vendor: 11,949 bytes, line 2
2if(i.uuid=this.uuid,i.type=this.type,""!==this.name&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),void 0!==this.roughness&&(i.roughness=this.roughness),void 0!==this.metalness&&(i.metalness=this.metalness),void 0!==this.sheen&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(i.shininess=this.shininess),void 0!==this.clearcoat&&(i.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),void 0!==this.iridescence&&(i.iridescence=this.iridescence),void 0!==this.iridescenceIOR&&(i.iridescenceIOR=this.iridescenceIOR),void 0!==this.iridescenceThicknessRange&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(e).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(e).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(e).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(e).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(e).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(e).uuid,void 0!==this.combine&&(i.combine=this.combine)),void 0!==this.envMapIntensity&&(i.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(i.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(e).uuid),void 0!==this.transmission&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(e).uuid),void 0!==this.thickness&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(e).uuid),void 0!==this.attenuationDistance&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(i.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(i.size=this.size),null!==this.shadowSide&&(i.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(i.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(i.blending=this.blending),0!==this.side&&(i.side=this.side),this.vertexColors&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),!0===this.transparent&&(i.transparent=this.transparent),i.depthFunc=this.depthFunc,i.depthTest=this.depthTest,i.depthWrite=this.depthWrite,i.colorWrite=this.colorWrite,i.stencilWrite=this.stencilWrite,i.stencilWriteMask=this.stencilWriteMask,i.stencilFunc=this.stencilFunc,i.stencilRef=this.stencilRef,i.stencilFuncMask=this.stencilFuncMask,i.stencilFail=this.stencilFail,i.stencilZFail=this.stencilZFail,i.stencilZPass=this.stencilZPass,void 0!==this.rotation&&0!==this.rotation&&(i.rotation=this.rotation),!0===this.polygonOffset&&(i.polygonOffset=!0),0!==this.polygonOffsetFactor&&(i.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(i.polygonOffsetUnits=this.polygonOffsetUnits),void 0!==this.linewidth&&1!==this.linewidth&&(i.linewidth=this.linewidth),void 0!==this.dashSize&&(i.dashSize=this.dashSize),void 0!==this.gapSize&&(i.gapSize=this.gapSize),void 0!==this.scale&&(i.scale=this.scale),!0===this.dithering&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(i.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(i.premultipliedAlpha=this.premultipliedAlpha),!0===this.forceSinglePass&&(i.forceSinglePass=this.forceSinglePass),!0===this.wireframe&&(i.wireframe=this.wireframe),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(i.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(i.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(i.flatShading=this.flatShading),!1===this.visible&&(i.visible=!1),!1===this.toneMapped&&(i.toneMapped=!1),!1===this.fog&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData),t){let t=r(e.textures),s=r(e.images);t.length>0&&(i.textures=t),s.length>0&&(i.images=s)}return i}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;let t=e.clippingPlanes,i=null;if(null!==t){let e=t.length;i=Array(e);for(let r=0;r!==e;++r)i[r]=t[r].clone()}return this.clippingPlanes=i,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){!0===e&&this.version++}},rS=class extends rw{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new ii(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}},r_=new iv,rA=new tQ,rM=class{constructor(e,t,i=!1){if(Array.isArray(e))throw TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,this.name="",this.array=e,this.itemSize=t,this.count=void 0!==e?e.length/t:0,this.normalized=i,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0}onUploadCallback(){}set needsUpdate(e){!0===e&&this.version++}setUsage(e){return this.usage=e,this}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this}copyAt(e,t,i){e*=this.itemSize,i*=t.itemSize;for(let r=0,s=this.itemSize;r<s;r++)this.array[e+r]=t.array[i+r];return this}copyArray(e){return this.array.set(e),this}applyMatrix3(e){if(2===this.itemSize)for(let t=0,i=this.count;t<i;t++)rA.fromBufferAttribute(this,t),rA.applyMatrix3(e),this.setXY(t,rA.x,rA.y);else if(3===this.itemSize)for(let t=0,i=this.count;t<i;t++)r_.fromBufferAttribute(this,t),r_.applyMatrix3(e),this.setXYZ(t,r_.x,r_.y,r_.z);return this}applyMatrix4(e){for(let t=0,i=this.count;t<i;t++)r_.fromBufferAttribute(this,t),r_.applyMatrix4(e),this.setXYZ(t,r_.x,r_.y,r_.z);return this}applyNormalMatrix(e){for(let t=0,i=this.count;t<i;t++)r_.fromBufferAttribute(this,t),r_.applyNormalMatrix(e),this.setXYZ(t,r_.x,r_.y,r_.z);return this}transformDirection(e){for(let t=0,i=this.count;t<i;t++)r_.fromBufferAttribute(this,t),r_.transformDirection(e),this.setXYZ(t,r_.x,r_.y,r_.z);return this}set(e,t=0){return this.array.set(e,t),this}getX(e){let t=this.array[e*this.itemSize];return this.normalized&&(t=tq(t,this.array)),t}setX(e,t){return this.normalized&&(t=tX(t,this.array)),this.array[e*this.itemSize]=t,this}getY(e){let t=this.array[e*this.itemSize+1];return this.normalized&&(t=tq(t,this.array)),t}setY(e,t){return this.normalized&&(t=tX(t,this.array)),this.array[e*this.itemSize+1]=t,this}getZ(e){let t=this.array[e*this.itemSize+2];return this.normalized&&(t=tq(t,this.array)),t}setZ(e,t){return this.normalized&&(t=tX(t,this.array)),this.array[e*this.itemSize+2]=t,this}getW(e){let t=this.array[e*this.itemSize+3];return this.normalized&&(t=tq(t,this.array)),t}setW(e,t){return this.normalized&&(t=tX(t,this.array)),this.array[e*this.itemSize+3]=t,this}setXY(e,t,i){return e*=this.itemSize,this.normalized&&(t=tX(t,this.array),i=tX(i,this.array)),this.array[e+0]=t,this.array[e+1]=i,this}setXYZ(e,t,i,r){return e*=this.itemSize,this.normalized&&(t=tX(t,this.array),i=tX(i,this.array),r=tX(r,this.array)),this.array[e+0]=t,this.array[e+1]=i,this.array[e+2]=r,this}setXYZW(e,t,i,r,s){return e*=this.itemSize,this.normalized&&(t=tX(t,this.array),i=tX(i,this.array),r=tX(r,this.array),s=tX(s,this.array)),this.array[e+0]=t,this.array[e+1]=i,this.array[e+2]=r,this.array[e+3]=s,this}
2onUpload(e){return this.onUploadCallback=e,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){let e={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return""!==this.name&&(e.name=this.name),35044!==this.usage&&(e.usage=this.usage),(0!==this.updateRange.offset||-1!==this.updateRange.count)&&(e.updateRange=this.updateRange),e}copyColorsArray(){console.error("THREE.BufferAttribute: copyColorsArray() was removed in r144.")}copyVector2sArray(){console.error("THREE.BufferAttribute: copyVector2sArray() was removed in r144.")}copyVector3sArray(){console.error("THREE.BufferAttribute: copyVector3sArray() was removed in r144.")}copyVector4sArray(){console.error("THREE.BufferAttribute: copyVector4sArray() was removed in r144.")}},rE=class extends rM{constructor(e,t,i){super(new Uint16Array(e),t,i)}},rC=class extends rM{constructor(e,t,i){super(new Uint32Array(e),t,i)}},rT=class extends rM{constructor(e,t,i){super(new Float32Array(e),t,i)}},rP=0,rD=new iX,rI=new rl,rO=new iv,rR=new ib,rL=new ib,rB=new iv,rz=class extends tL{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:rP++}),this.uuid=tk(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(e){return Array.isArray(e)?this.index=new(tJ(e)?rC:rE)(e,1):this.index=e,this}getAttribute(e){return this.attributes[e]}setAttribute(e,t){return this.attributes[e]=t,this}deleteAttribute(e){return delete this.attributes[e],this}hasAttribute(e){return void 0!==this.attributes[e]}addGroup(e,t,i=0){this.groups.push({start:e,count:t,materialIndex:i})}clearGroups(){this.groups=[]}setDrawRange(e,t){this.drawRange.start=e,this.drawRange.count=t}applyMatrix4(e){let t=this.attributes.position;void 0!==t&&(t.applyMatrix4(e),t.needsUpdate=!0);let i=this.attributes.normal;if(void 0!==i){let t=new tK().getNormalMatrix(e);i.applyNormalMatrix(t),i.needsUpdate=!0}let r=this.attributes.tangent;return void 0!==r&&(r.transformDirection(e),r.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this}applyQuaternion(e){return rD.makeRotationFromQuaternion(e),this.applyMatrix4(rD),this}rotateX(e){return rD.makeRotationX(e),this.applyMatrix4(rD),this}rotateY(e){return rD.makeRotationY(e),this.applyMatrix4(rD),this}rotateZ(e){return rD.makeRotationZ(e),this.applyMatrix4(rD),this}translate(e,t,i){return rD.makeTranslation(e,t,i),this.applyMatrix4(rD),this}scale(e,t,i){return rD.makeScale(e,t,i),this.applyMatrix4(rD),this}lookAt(e){return rI.lookAt(e),rI.updateMatrix(),this.applyMatrix4(rI.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(rO).negate(),this.translate(rO.x,rO.y,rO.z),this}setFromPoints(e){let t=[];for(let i=0,r=e.length;i<r;i++){let r=e[i];t.push(r.x,r.y,r.z||0)}return this.setAttribute("position",new rT(t,3)),this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new ib);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "fal
2se".',this),this.boundingBox.set(new iv(-1/0,-1/0,-1/0),new iv(1/0,1/0,1/0));return}if(void 0!==e){if(this.boundingBox.setFromBufferAttribute(e),t)for(let e=0,i=t.length;e<i;e++){let i=t[e];rR.setFromBufferAttribute(i),this.morphTargetsRelative?(rB.addVectors(this.boundingBox.min,rR.min),this.boundingBox.expandByPoint(rB),rB.addVectors(this.boundingBox.max,rR.max),this.boundingBox.expandByPoint(rB)):(this.boundingBox.expandByPoint(rR.min),this.boundingBox.expandByPoint(rR.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)}computeBoundingSphere(){null===this.boundingSphere&&(this.boundingSphere=new iN);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set "mesh.frustumCulled" to "fal
2se".',this),this.boundingSphere.set(new iv,1/0);return}if(e){let i=this.boundingSphere.center;if(rR.setFromBufferAttribute(e),t)for(let e=0,i=t.length;e<i;e++){let i=t[e];rL.setFromBufferAttribute(i),this.morphTargetsRelative?(rB.addVectors(rR.min,rL.min),rR.expandByPoint(rB),rB.addVectors(rR.max,rL.max),rR.expandByPoint(rB)):(rR.expandByPoint(rL.min),rR.expandByPoint(rL.max))}rR.getCenter(i);let r=0;for(let t=0,s=e.count;t<s;t++)rB.fromBufferAttribute(e,t),r=Math.max(r,i.distanceToSquared(rB));if(t)for(let s=0,a=t.length;s<a;s++){let a=t[s],o=this.morphTargetsRelative;for(let t=0,s=a.count;t<s;t++)rB.fromBufferAttribute(a,t),o&&(rO.fromBufferAttribute(e,t),rB.add(rO)),r=Math.max(r,i.distanceToSquared(rB))}this.boundingSphere.radius=Math.sqrt(r),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}computeTangents(){let e=this.index,t=this.attributes;if(null===e||void 0===t.position||void 0===t.normal||void 0===t.uv){console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");return}let i=e.array,r=t.position.array,s=t.normal.array,a=t.uv.array,o=r.length/3;!1===this.hasAttribute("tangent")&&this.setAttribute("tangent",new rM(new Float32Array(4*o),4));let l=this.getAttribute("tangent").array,h=[],c=[];for(let e=0;e<o;e++)h[e]=new iv,c[e]=new iv;let d=new iv,u=new iv,p=new iv,f=new tQ,m=new tQ,g=new tQ,v=new iv,y=new iv,x=this.groups;0===x.length&&(x=[{start:0,count:i.length}]);for(let e=0,t=x.length;e<t;++e){let t=x[e],s=t.start,o=t.count;for(let e=s,t=s+o;e<t;e+=3)!function(e,t,i){d.fromArray(r,3*e),u.fromArray(r,3*t),p.fromArray(r,3*i),f.fromArray(a,2*e),m.fromArray(a,2*t),g.fromArray(a,2*i),u.sub(d),p.sub(d),m.sub(f),g.sub(f);let s=1/(m.x*g.y-g.x*m.y);isFinite(s)&&(v.copy(u).multiplyScalar(g.y).addScaledVector(p,-m.y).multiplyScalar(s),y.copy(p).multiplyScalar(m.x).addScaledVector(u,-g.x).multiplyScalar(s),h[e].add(v),h[t].add(v),h[i].add(v),c[e].add(y),c[t].add(y),c[i].add(y))}(i[e+0],i[e+1],i[e+2])}let b=new iv,w=new iv,S=new iv,_=new iv;function A(e){S.fromArray(s,3*e),_.copy(S);let t=h[e];b.copy(t),b.sub(S.multiplyScalar(S.dot(t))).normalize(),w.crossVectors(_,t);let i=0>w.dot(c[e])?-1:1;l[4*e]=b.x,l[4*e+1]=b.y,l[4*e+2]=b.z,l[4*e+3]=i}for(let e=0,t=x.length;e<t;++e){let t=x[e],r=t.start,s=t.count;for(let e=r,t=r+s;e<t;e+=3)A(i[e+0]),A(i[e+1]),A(i[e+2])}}computeVertexNormals(){let e=this.index,t=this.getAttribute("position");if(void 0!==t){let i=this.getAttribute("normal");if(void 0===i)i=new rM(new Float32Array(3*t.count),3),this.setAttribute("normal",i);else for(let e=0,t=i.count;e<t;e++)i.setXYZ(e,0,0,0);let r=new iv,s=new iv,a=new iv,o=new iv,l=new iv,h=new iv,c=new iv,d=new iv;if(e)for(let u=0,p=e.count;u<p;u+=3){let p=e.getX(u+0),f=e.getX(u+1),m=e.getX(u+2);r.fromBufferAttribute(t,p),s.fromBufferAttribute(t,f),a.fromBufferAttribute(t,m),c.subVectors(a,s),d.subVectors(r,s),c.cross(d),o.fromBufferAttribute(i,p),l.fromBufferAttribute(i,f),h.fromBufferAttribute(i,m),o.add(c),l.add(c),h.add(c),i.setXYZ(p,o.x,o.y,o.z),i.setXYZ(f,l.x,l.y,l.z),i.setXYZ(m,h.x,h.y,h.z)}else for(let e=0,o=t.count;e<o;e+=3)r.fromBufferAttribute(t,e+0),s.fromBufferAttribute(t,e+1),a.fromBufferAttribute(t,e+2),c.subVectors(a,s),d.subVectors(r,s),c.cross(d),i.setXYZ(e+0,c.x,c.y,c.z),i.setXYZ(e+1,c.x,c.y,c.z),i.setXYZ(e+2,c.x,c.y,c.z);this.normalizeNormals(),i.needsUpdate=!0}}merge(){return console.error("THREE.BufferGeometry.merge() has been removed. Use THREE.BufferGeometryUtils.mergeBufferGeometries() instead."),this}normalizeNormals(){let e=this.attributes.normal;for(let t=0,i=e.count;t<i;t++)rB.fromBufferAttribute(e,t),rB.normalize(),e.setXYZ(t,rB.x,rB.y,rB.z)}toNonIndexed(){function e(e,t){let i=e.array,r=e.itemSize,s=e.normalized,a=new i.constructor(t.length*r),o=0,l=0;for(let s=0,h=t.length;s<h;s++){o=e.isInterleavedBufferAttribute?t[s]*e.data.stride+e.offset:t[s]*r;for(let e=0;e<r;e++)a[l++]=i[o++]}return new rM(a,r,s)}if(null===this.index)return console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."),this;let t=new rz,i=this.index.array,r=this.attributes;for(let s in r){let a=e(r[s],i);t.setAttribute(s,a)}let s=this.morphAttributes;for(let r in s){let a=[],o=s[r];for(let t=0,r=o.length;t<r;t++){let r=e(o[t],i);a.push(r)}t.morphAttributes[r]=a}t.morphTargetsRelative=this.morphTargetsRelative;let a=this.groups;for(let e=0,i=a.length;e<i;e++){let i=a[e];t.addGroup(i.start,i.count,i.materialIndex)}return t}toJSON(){let e={metadata:{version:4.5,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};
2if(e.uuid=this.uuid,e.type=this.type,""!==this.name&&(e.name=this.name),Object.keys(this.userData).length>0&&(e.userData=this.userData),void 0!==this.parameters){let t=this.parameters;for(let i in t)void 0!==t[i]&&(e[i]=t[i]);return e}e.data={attributes:{}};let t=this.index;null!==t&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});let i=this.attributes;for(let t in i){let r=i[t];e.data.attributes[t]=r.toJSON(e.data)}let r={},s=!1;for(let t in this.morphAttributes){let i=this.morphAttributes[t],a=[];for(let t=0,r=i.length;t<r;t++){let r=i[t];a.push(r.toJSON(e.data))}a.length>0&&(r[t]=a,s=!0)}s&&(e.data.morphAttributes=r,e.data.morphTargetsRelative=this.morphTargetsRelative);let a=this.groups;a.length>0&&(e.data.groups=JSON.parse(JSON.stringify(a)));let o=this.boundingSphere;return null!==o&&(e.data.boundingSphere={center:o.center.toArray(),radius:o.radius}),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let t={};this.name=e.name;let i=e.index;null!==i&&this.setIndex(i.clone(t));let r=e.attributes;for(let e in r){let i=r[e];this.setAttribute(e,i.clone(t))}let s=e.morphAttributes;for(let e in s){let i=[],r=s[e];for(let e=0,s=r.length;e<s;e++)i.push(r[e].clone(t));this.morphAttributes[e]=i}this.morphTargetsRelative=e.morphTargetsRelative;let a=e.groups;for(let e=0,t=a.length;e<t;e++){let t=a[e];this.addGroup(t.start,t.count,t.materialIndex)}let o=e.boundingBox;null!==o&&(this.boundingBox=o.clone());let l=e.boundingSphere;return null!==l&&(this.boundingSphere=l.clone()),this.drawRange.start=e.drawRange.start,this.drawRange.count=e.drawRange.count,this.userData=e.userData,void 0!==e.parameters&&(this.parameters=Object.assign({},e.parameters)),this}dispose(){this.dispatchEvent({type:"dispose"})}},rF=new iX,rN=new iq,rk=new iN,rU=new iv,rV=new iv,rj=new iv,rG=new iv,rH=new iv,rW=new tQ,rq=new tQ,rX=new tQ,rY=new iv,rQ=new iv,rK=class extends rl{constructor(e=new rz,t=new rS){super(),this.isMesh=!0,this.type="Mesh",this.geometry=e,this.material=t,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),void 0!==e.morphTargetInfluences&&(this.morphTargetInfluences=e.morphTargetInfluences.slice()),void 0!==e.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},e.morphTargetDictionary)),this.material=e.material,this.geometry=e.geometry,this}updateMorphTargets(){let e=this.geometry.morphAttributes,t=Object.keys(e);if(t.length>0){let i=e[t[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=i.length;e<t;e++){let t=i[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[t]=e}}}}getVertexPosition(e,t){let i=this.geometry,r=i.attributes.position,s=i.morphAttributes.position,a=i.morphTargetsRelative;t.fromBufferAttribute(r,e);let o=this.morphTargetInfluences;if(s&&o){rH.set(0,0,0);for(let i=0,r=s.length;i<r;i++){let r=o[i],l=s[i];0!==r&&(rG.fromBufferAttribute(l,e),a?rH.addScaledVector(rG,r):rH.addScaledVector(rG.sub(t),r))}t.add(rH)}return this.isSkinnedMesh&&this.boneTransform(e,t),t}raycast(e,t){let i=this.geometry,r=this.material,s=this.matrixWorld;if(void 0===r||(null===i.boundingSphere&&i.computeBoundingSphere(),rk.copy(i.boundingSphere),rk.applyMatrix4(s),!1===e.ray.intersectsSphere(rk))||(rF.copy(s).invert(),rN.copy(e.ray).applyMatrix4(rF),null!==i.boundingBox&&!1===rN.intersectsBox(i.boundingBox)))return;let a,o=i.index,l=i.attributes.position,h=i.attributes.uv,c=i.attributes.uv2,d=i.groups,u=i.drawRange;if(null!==o){if(Array.isArray(r))for(let i=0,s=d.length;i<s;i++){let s=d[i],l=r[s.materialIndex],p=Math.max(s.start,u.start),f=Math.min(o.count,Math.min(s.start+s.count,u.start+u.count));for(let i=p;i<f;i+=3)(a=rZ(this,l,e,rN,h,c,o.getX(i),o.getX(i+1),o.getX(i+2)))&&(a.faceIndex=Math.floor(i/3),a.face.materialIndex=s.materialIndex,t.push(a))}else{let i=Math.max(0,u.start),s=Math.min(o.count,u.start+u.count);for(let l=i;l<s;l+=3)(a=rZ(this,r,e,rN,h,c,o.getX(l),o.getX(l+1),o.getX(l+2)))&&(a.faceIndex=Math.floor(l/3),t.push(a))}}else if(void 0!==l){if(Array.isArray(r))for(let i=0,s=d.length;i<s;i++){let s=d[i],o=r[s.materialIndex],p=Math.max(s.start,u.start),f=Math.min(l.count,Math.min(s.start+s.count,u.start+u.count));for(let i=p;i<f;i+=3)(a=rZ(this,o,e,rN,h,c,i,i+1,i+2))&&(a.faceIndex=Math.floor(i/3),a.face.materialIndex=s.materialIndex,t.push(a))}else{let i=Math.max(0,u.start),s=Math.min(l.count,u.start+u.count);for(let o=i;o<s;o+=3)(a=rZ(this,r,e,rN,h,c,o,o+1,o+2))&&(a.faceIndex=Math.floor(o/3),t.pu
2sh(a))}}}};function rZ(e,t,i,r,s,a,o,l,h){e.getVertexPosition(o,rU),e.getVertexPosition(l,rV),e.getVertexPosition(h,rj);let c=function(e,t,i,r,s,a,o,l){if(null===(1===t.side?r.intersectTriangle(o,a,s,!0,l):r.intersectTriangle(s,a,o,0===t.side,l)))return null;rQ.copy(l),rQ.applyMatrix4(e.matrixWorld);let h=i.ray.origin.distanceTo(rQ);return h<i.near||h>i.far?null:{distance:h,point:rQ.clone(),object:e}}(e,t,i,r,rU,rV,rj,rY);if(c){s&&(rW.fromBufferAttribute(s,o),rq.fromBufferAttribute(s,l),rX.fromBufferAttribute(s,h),c.uv=rx.getUV(rY,rU,rV,rj,rW,rq,rX,new tQ)),a&&(rW.fromBufferAttribute(a,o),rq.fromBufferAttribute(a,l),rX.fromBufferAttribute(a,h),c.uv2=rx.getUV(rY,rU,rV,rj,rW,rq,rX,new tQ));let e={a:o,b:l,c:h,normal:new iv,materialIndex:0};rx.getNormal(rU,rV,rj,e.normal),c.face=e}return c}var rJ=class extends rz{constructor(e=1,t=1,i=1,r=1,s=1,a=1){super(),this.type="BoxGeometry",this.parameters={width:e,height:t,depth:i,widthSegments:r,heightSegments:s,depthSegments:a};let o=this;r=Math.floor(r),s=Math.floor(s);let l=[],h=[],c=[],d=[],u=0,p=0;function f(e,t,i,r,s,a,f,m,g,v,y){let x=a/g,b=f/v,w=a/2,S=f/2,_=m/2,A=g+1,M=v+1,E=0,C=0,T=new iv;for(let a=0;a<M;a++){let o=a*b-S;for(let l=0;l<A;l++){let u=l*x-w;T[e]=u*r,T[t]=o*s,T[i]=_,h.push(T.x,T.y,T.z),T[e]=0,T[t]=0,T[i]=m>0?1:-1,c.push(T.x,T.y,T.z),d.push(l/g),d.push(1-a/v),E+=1}}for(let e=0;e<v;e++)for(let t=0;t<g;t++){let i=u+t+A*e,r=u+t+A*(e+1),s=u+(t+1)+A*(e+1),a=u+(t+1)+A*e;l.push(i,r,a),l.push(r,s,a),C+=6}o.addGroup(p,C,y),p+=C,u+=E}f("z","y","x",-1,-1,i,t,e,a=Math.floor(a),s,0),f("z","y","x",1,-1,i,t,-e,a,s,1),f("x","z","y",1,1,e,i,t,r,a,2),f("x","z","y",1,-1,e,i,-t,r,a,3),f("x","y","z",1,-1,e,t,i,r,s,4),f("x","y","z",-1,-1,e,t,-i,r,s,5),this.setIndex(l),this.setAttribute("position",new rT(h,3)),this.setAttribute("normal",new rT(c,3)),this.setAttribute("uv",new rT(d,2))}static fromJSON(e){return new rJ(e.width,e.height,e.depth,e.widthSegments,e.heightSegments,e.depthSegments)}};function r$(e){let t={};for(let i in e)for(let r in t[i]={},e[i]){let s=e[i][r];s&&(s.isColor||s.isMatrix3||s.isMatrix4||s.isVector2||s.isVector3||s.isVector4||s.isTexture||s.isQuaternion)?t[i][r]=s.clone():Array.isArray(s)?t[i][r]=s.slice():t[i][r]=s}return t}function r0(e){let t={};for(let i=0;i<e.length;i++){let r=r$(e[i]);for(let e in r)t[e]=r[e]}return t}function r1(e){return null===e.getRenderTarget()&&3001===e.outputEncoding?tI:tO}var r2={clone:r$,merge:r0},r3=`void main() { 3 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); 4}`,r4=`void main() { 5 gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 ); 6}`,r5=class extends rw{constructor(e){super(),this.isShaderMaterial=!0,this.type="ShaderMaterial",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=r3,this.fragmentShader=r4,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,void 0!==e&&this.setValues(e)}copy(e){return super.copy(e),this.fragmentShader=e.fragmentShader,this.vertexShader=e.vertexShader,this.uniforms=r$(e.uniforms),this.uniformsGroups=function(e){let t=[];for(let i=0;i<e.length;i++)t.push(e[i].clone());return t}(e.uniformsGroups),this.defines=Object.assign({},e.defines),this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.fog=e.fog,this.lights=e.lights,this.clipping=e.clipping,this.extensions=Object.assign({},e.extensions),this.glslVersion=e.glslVersion,this}toJSON(e){let t=super.toJSON(e);for(let i in t.glslVersion=this.glslVersion,t.uniforms={},this.uniforms){let r=this.uniforms[i].value;r&&r.isTexture?t.uniforms[i]={type:"t",value:r.toJSON(e).uuid}:r&&r.isColor?t.uniforms[i]={type:"c",value:r.getHex()}:r&&r.isVector2?t.uniforms[i]={type:"v2",value:r.toArray()}:r&&r.isVector3?t.uniforms[i]={type:"v3",value:r.toArray()}:r&&r.isVector4?t.uniforms[i]={type:"v4",value:r.toArray()}:r&&r.isMatrix3?t.uniforms[i]={type:"m3",value:r.toArray()}:r&&r.isMatrix4?t.uniforms[i]={type:"m4",value:r.toArray()}:t.uniforms[i]={value:r}}Object.keys(this.defines).length>0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader;let i={};for(let e in this.extensions)!0===this.extensions[e]&&(i[e]=!0);return Object.keys(i).length>0&&(t.extensions=i),t}},r6=class extends rl{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new iX,this.projectionMatrix=new iX,this.projectionMatrixInverse=new iX}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this}getWorldDirection(e){this.updateWorldMatrix(!0,!1);let t=this.matrixWorld.elements;return e.set(-t[8],-t[9],-t[10]).normalize()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}},r8=class extends r6{constructor(e=50,t=1,i=.1,r=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=e,this.zoom=1,this.near=i,this.far=r,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=null===e.view?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){let t=.5*this.getFilmHeight()/e;this.fov=2*tN*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){let e=Math.tan(.5*tF*this.fov);return .5*this.getFilmHeight()/e}
6getEffectiveFOV(){return 2*tN*Math.atan(Math.tan(.5*tF*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(e,t,i,r,s,a){this.aspect=e/t,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=r,this.view.width=s,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let e=this.near,t=e*Math.tan(.5*tF*this.fov)/this.zoom,i=2*t,r=this.aspect*i,s=-.5*r,a=this.view;if(null!==this.view&&this.view.enabled){let e=a.fullWidth,o=a.fullHeight;s+=a.offsetX*r/e,t-=a.offsetY*i/o,r*=a.width/e,i*=a.height/o}let o=this.filmOffset;0!==o&&(s+=e*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(s,s+r,t,t-i,e,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,null!==this.view&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}},r9=class extends rl{constructor(e,t,i){super(),this.type="CubeCamera",this.renderTarget=i;let r=new r8(-90,1,e,t);r.layers=this.layers,r.up.set(0,1,0),r.lookAt(1,0,0),this.add(r);let s=new r8(-90,1,e,t);s.layers=this.layers,s.up.set(0,1,0),s.lookAt(-1,0,0),this.add(s);let a=new r8(-90,1,e,t);a.layers=this.layers,a.up.set(0,0,-1),a.lookAt(0,1,0),this.add(a);let o=new r8(-90,1,e,t);o.layers=this.layers,o.up.set(0,0,1),o.lookAt(0,-1,0),this.add(o);let l=new r8(-90,1,e,t);l.layers=this.layers,l.up.set(0,1,0),l.lookAt(0,0,1),this.add(l);let h=new r8(-90,1,e,t);h.layers=this.layers,h.up.set(0,1,0),h.lookAt(0,0,-1),this.add(h)}update(e,t){null===this.parent&&this.updateMatrixWorld();let i=this.renderTarget,[r,s,a,o,l,h]=this.children,c=e.getRenderTarget(),d=e.toneMapping,u=e.xr.enabled;e.toneMapping=0,e.xr.enabled=!1;let p=i.texture.generateMipmaps;i.texture.generateMipmaps=!1,e.setRenderTarget(i,0),e.render(t,r),e.setRenderTarget(i,1),e.render(t,s),e.setRenderTarget(i,2),e.render(t,a),e.setRenderTarget(i,3),e.render(t,o),e.setRenderTarget(i,4),e.render(t,l),i.texture.generateMipmaps=p,e.setRenderTarget(i,5),e.render(t,h),e.setRenderTarget(c),e.toneMapping=d,e.xr.enabled=u,i.texture.needsPMREMUpdate=!0}},r7=class extends ih{constructor(e,t,i,r,s,a,o,l,h,c){super(e=void 0!==e?e:[],t=void 0!==t?t:301,i,r,s,a,o,l,h,c),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}},se=class extends id{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;let i={width:e,height:e,depth:1};this.texture=new r7([i,i,i,i,i,i],t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.encoding),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==t.generateMipmaps&&t.generateMipmaps,this.texture.minFilter=void 0!==t.minFilter?t.minFilter:1006}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.encoding=t.encoding,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;let i={uniforms:{tEquirect:{value:null}},vertexShader:` 7 8 varying vec3 vWorldDirection; 9 10 vec3 transformDirection( in vec3 dir, in mat4 matrix ) { 11 12 return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); 13 14 } 15 16 void main() { 17 18 vWorldDirection = transformDirection( position, modelMatrix ); 19 20 #include <begin_vertex> 21 #include <project_vertex> 22 23 } 24 `,fragmentShader:` 25 26 uniform sampler2D tEquirect; 27 28 varying vec3 vWorldDirection; 29 30 #include <common> 31 32 void main() { 33 34 vec3 direction = normalize( vWorldDirection ); 35 36 vec2 sampleUV = equirectUv( direction ); 37 38 gl_FragColor = texture2D( tEquirect, sampleUV ); 39 40 } 41 `},r=new rJ(5,5,5),s=new r5({name:"CubemapFromEquirect",uniforms:r$(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:1,blending:0});s.uniforms.tEquirect.value=t;let a=new rK(r,s),o=t.minFilter;return 1008===t.minFilter&&(t.minFilter=1006),new r9(1,10,this).update(e,a),t.minFilter=o,a.geometry.dispose(),a.material.dispose(),this}clear(e,t,i,r){let s=e.getRenderTarget();for(let s=0;s<6;s++)e.setRenderTarget(this,s),e.clear(t,i,r);e.setRenderTarget(s)}},st=new iv,si=new iv,sr=new tK,ss=class{constructor(e=new iv(1,0,0),t=0){this.isPlane=!0,this.normal=e,this.constant=t}set(e,t){return this.normal.copy(e),this.constant=t,this}setComponents(e,t,i,r){return this.normal.set(e,t,i),this.constant=r,this}setFromNormalAndCoplanarPoint(e,t){return this.normal.copy(e),this.constant=-t.dot(this.normal),this}
41setFromCoplanarPoints(e,t,i){let r=st.subVectors(i,t).cross(si.subVectors(e,t)).normalize();return this.setFromNormalAndCoplanarPoint(r,e),this}copy(e){return this.normal.copy(e.normal),this.constant=e.constant,this}normalize(){let e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(e){return this.normal.dot(e)+this.constant}distanceToSphere(e){return this.distanceToPoint(e.center)-e.radius}projectPoint(e,t){return t.copy(this.normal).multiplyScalar(-this.distanceToPoint(e)).add(e)}intersectLine(e,t){let i=e.delta(st),r=this.normal.dot(i);if(0===r)return 0===this.distanceToPoint(e.start)?t.copy(e.start):null;let s=-(e.start.dot(this.normal)+this.constant)/r;return s<0||s>1?null:t.copy(i).multiplyScalar(s).add(e.start)}intersectsLine(e){let t=this.distanceToPoint(e.start),i=this.distanceToPoint(e.end);return t<0&&i>0||i<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){let i=t||sr.getNormalMatrix(e),r=this.coplanarPoint(st).applyMatrix4(e),s=this.normal.applyMatrix3(i).normalize();return this.constant=-r.dot(s),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}},sa=new iN,sn=new iv,so=class{constructor(e=new ss,t=new ss,i=new ss,r=new ss,s=new ss,a=new ss){this.planes=[e,t,i,r,s,a]}set(e,t,i,r,s,a){let o=this.planes;return o[0].copy(e),o[1].copy(t),o[2].copy(i),o[3].copy(r),o[4].copy(s),o[5].copy(a),this}copy(e){let t=this.planes;for(let i=0;i<6;i++)t[i].copy(e.planes[i]);return this}setFromProjectionMatrix(e){let t=this.planes,i=e.elements,r=i[0],s=i[1],a=i[2],o=i[3],l=i[4],h=i[5],c=i[6],d=i[7],u=i[8],p=i[9],f=i[10],m=i[11],g=i[12],v=i[13],y=i[14],x=i[15];return t[0].setComponents(o-r,d-l,m-u,x-g).normalize(),t[1].setComponents(o+r,d+l,m+u,x+g).normalize(),t[2].setComponents(o+s,d+h,m+p,x+v).normalize(),t[3].setComponents(o-s,d-h,m-p,x-v).normalize(),t[4].setComponents(o-a,d-c,m-f,x-y).normalize(),t[5].setComponents(o+a,d+c,m+f,x+y).normalize(),this}intersectsObject(e){let t=e.geometry;return null===t.boundingSphere&&t.computeBoundingSphere(),sa.copy(t.boundingSphere).applyMatrix4(e.matrixWorld),this.intersectsSphere(sa)}intersectsSprite(e){return sa.center.set(0,0,0),sa.radius=.7071067811865476,sa.applyMatrix4(e.matrixWorld),this.intersectsSphere(sa)}intersectsSphere(e){let t=this.planes,i=e.center,r=-e.radius;for(let e=0;e<6;e++)if(t[e].distanceToPoint(i)<r)return!1;return!0}intersectsBox(e){let t=this.planes;for(let i=0;i<6;i++){let r=t[i];if(sn.x=r.normal.x>0?e.max.x:e.min.x,sn.y=r.normal.y>0?e.max.y:e.min.y,sn.z=r.normal.z>0?e.max.z:e.min.z,0>r.distanceToPoint(sn))return!1}return!0}containsPoint(e){let t=this.planes;for(let i=0;i<6;i++)if(0>t[i].distanceToPoint(e))return!1;return!0}clone(){return new this.constructor().copy(this)}};function sl(){let e=null,t=!1,i=null,r=null;function s(t,a){i(t,a),r=e.requestAnimationFrame(s)}return{start:function(){!0!==t&&null!==i&&(r=e.requestAnimationFrame(s),t=!0)},stop:function(){e.cancelAnimationFrame(r),t=!1},setAnimationLoop:function(e){i=e},setContext:function(t){e=t}}}function sh(e,t){let i=t.isWebGL2,r=new WeakMap;return{get:function(e){return e.isInterleavedBufferAttribute&&(e=e.data),r.get(e)},remove:function(t){t.isInterleavedBufferAttribute&&(t=t.data);let i=r.get(t);i&&(e.deleteBuffer(i.buffer),r.delete(t))},update:function(t,s){var a,o;let l,h;if(t.isGLBufferAttribute){let e=r.get(t);(!e||e.version<t.version)&&r.set(t,{buffer:t.buffer,type:t.type,bytesPerElement:t.elementSize,version:t.version});return}t.isInterleavedBufferAttribute&&(t=t.data);let c=r.get(t);void 0===c?r.set(t,function(t,r){let s,a=t.array,o=t.usage,l=e.createBuffer();if(e.bindBuffer(r,l),e.bufferData(r,a,o),t.onUploadCallback(),a instanceof Float32Array)s=5126;else if(a instanceof Uint16Array){if(t.isFloat16BufferAttribute){if(i)s=5131;else throw Error("THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.")}else s=5123}else if(a instanceof Int16Array)s=5122;else if(a instanceof Uint32Array)s=5125;else if(a instanceof Int32Array)s=5124;else if(a instanceof Int8Array)s=5120;else if(a instanceof Uint8Array)s=5121;else if(a instanceof Uint8ClampedArray)s=5121;else throw Error("THREE.WebGLAttributes: Unsupported buffer data format: "+a);return{buffer:l,type:s,bytesPerElement:a.BYTES_PER_ELEMENT,version:t.version}}(t,s)):c.version<t.version&&(a=c.buffer,l=(o=t).array,h=o.updateRange,e.bindBuffer(s,a),-1===h.count?e.bufferSubData(s,0,l):(i?e.bufferSubData(s,h.offset*l.BYTES_PER_ELEMENT,l,h.offset,h.count):e.bufferSubData(s,h.offset*l.BYTES_PER_ELEMENT,l.subarray(h.offset,h.offset+h.count)),h.count=-1),o.onUploadCallback(),c.version=t.version)}}}var sc=class extends rz{constructor(e=1,t=1,i=1,r=1){super(),this.type="PlaneGeometry",this.parameters={width:e,height:t,widthSegments:i,heightSegments:r};let s=e/2,a=t/2,o=Math.floor(i),l=Math.floor(r),h=o+1,c=l+1,d=e/o,u=t/l,p=[],f=[],m=[],g=[];for(let e=0;e<c;
vendor: 4,273 bytes, lines 41-119
41e++){let t=e*u-a;for(let i=0;i<h;i++){let r=i*d-s;f.push(r,-t,0),m.push(0,0,1),g.push(i/o),g.push(1-e/l)}}for(let e=0;e<l;e++)for(let t=0;t<o;t++){let i=t+h*e,r=t+h*(e+1),s=t+1+h*(e+1),a=t+1+h*e;p.push(i,r,a),p.push(r,s,a)}this.setIndex(p),this.setAttribute("position",new rT(f,3)),this.setAttribute("normal",new rT(m,3)),this.setAttribute("uv",new rT(g,2))}static fromJSON(e){return new sc(e.width,e.height,e.widthSegments,e.heightSegments)}},sd={alphamap_fragment:`#ifdef USE_ALPHAMAP 42 diffuseColor.a *= texture2D( alphaMap, vUv ).g; 43#endif`,alphamap_pars_fragment:`#ifdef USE_ALPHAMAP 44 uniform sampler2D alphaMap; 45#endif`,alphatest_fragment:`#ifdef USE_ALPHATEST 46 if ( diffuseColor.a < alphaTest ) discard; 47#endif`,alphatest_pars_fragment:`#ifdef USE_ALPHATEST 48 uniform float alphaTest; 49#endif`,aomap_fragment:`#ifdef USE_AOMAP 50 float ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0; 51 reflectedLight.indirectDiffuse *= ambientOcclusion; 52 #if defined( USE_ENVMAP ) && defined( STANDARD ) 53 float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) ); 54 reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness ); 55 #endif 56#endif`,aomap_pars_fragment:`#ifdef USE_AOMAP 57 uniform sampler2D aoMap; 58 uniform float aoMapIntensity; 59#endif`,begin_vertex:"vec3 transformed = vec3( position );",beginnormal_vertex:`vec3 objectNormal = vec3( normal ); 60#ifdef USE_TANGENT 61 vec3 objectTangent = vec3( tangent.xyz ); 62#endif`,bsdfs:`vec3 BRDF_Lambert( const in vec3 diffuseColor ) { 63 return RECIPROCAL_PI * diffuseColor; 64} 65vec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) { 66 float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); 67 return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); 68} 69float F_Schlick( const in float f0, const in float f90, const in float dotVH ) { 70 float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); 71 return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); 72} 73vec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) { 74 float x = clamp( 1.0 - dotVH, 0.0, 1.0 ); 75 float x2 = x * x; 76 float x5 = clamp( x * x2 * x2, 0.0, 0.9999 ); 77 return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 ); 78} 79float V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) { 80 float a2 = pow2( alpha ); 81 float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) ); 82 float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) ); 83 return 0.5 / max( gv + gl, EPSILON ); 84} 85float D_GGX( const in float alpha, const in float dotNH ) { 86 float a2 = pow2( alpha ); 87 float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0; 88 return RECIPROCAL_PI * a2 / pow2( denom ); 89} 90vec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float roughness ) { 91 float alpha = pow2( roughness ); 92 vec3 halfDir = normalize( lightDir + viewDir ); 93 float dotNL = saturate( dot( normal, lightDir ) ); 94 float dotNV = saturate( dot( normal, viewDir ) ); 95 float dotNH = saturate( dot( normal, halfDir ) ); 96 float dotVH = saturate( dot( viewDir, halfDir ) ); 97 vec3 F = F_Schlick( f0, f90, dotVH ); 98 float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); 99 float D = D_GGX( alpha, dotNH ); 100 return F * ( V * D ); 101} 102#ifdef USE_IRIDESCENCE 103 vec3 BRDF_GGX_Iridescence( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float iridescence, const in vec3 iridescenceFresnel, const in float roughness ) { 104 float alpha = pow2( roughness ); 105 vec3 halfDir = normalize( lightDir + viewDir ); 106 float dotNL = saturate( dot( normal, lightDir ) ); 107 float dotNV = saturate( dot( normal, viewDir ) ); 108 float dotNH = saturate( dot( normal, halfDir ) ); 109 float dotVH = saturate( dot( viewDir, halfDir ) ); 110 vec3 F = mix( F_Schlick( f0, f90, dotVH ), iridescenceFresnel, iridescence ); 111 float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); 112 float D = D_GGX( alpha, dotNH ); 113 return F * ( V * D ); 114 } 115#endif 116vec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) { 117 const float LUT_SIZE = 64.0; 118 const float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE; 119 const float LUT_BIAS = 0.5 / LUT_SIZE;
120 float dotNV = saturate( dot( N, V ) ); 121 vec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) ); 122 uv = uv * LUT_SCALE + LUT_BIAS; 123 return uv; 124} 125float LTC_ClippedSphereFormFactor( const in vec3 f ) { 126 float l = length( f ); 127 return max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 ); 128} 129vec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) { 130 float x = dot( v1, v2 ); 131 float y = abs( x ); 132 float a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y; 133 float b = 3.4175940 + ( 4.1616724 + y ) * y; 134 float v = a / b; 135 float theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v; 136 return cross( v1, v2 ) * theta_sintheta; 137} 138vec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) { 139 vec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ]; 140 vec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ]; 141 vec3 lightNormal = cross( v1, v2 ); 142 if( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 ); 143 vec3 T1, T2; 144 T1 = normalize( V - N * dot( V, N ) ); 145 T2 = - cross( N, T1 ); 146 mat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) ); 147 vec3 coords[ 4 ]; 148 coords[ 0 ] = mat * ( rectCoords[ 0 ] - P ); 149 coords[ 1 ] = mat * ( rectCoords[ 1 ] - P ); 150 coords[ 2 ] = mat * ( rectCoords[ 2 ] - P ); 151 coords[ 3 ] = mat * ( rectCoords[ 3 ] - P ); 152 coords[ 0 ] = normalize( coords[ 0 ] ); 153 coords[ 1 ] = normalize( coords[ 1 ] ); 154 coords[ 2 ] = normalize( coords[ 2 ] ); 155 coords[ 3 ] = normalize( coords[ 3 ] ); 156 vec3 vectorFormFactor = vec3( 0.0 ); 157 vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] ); 158 vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] ); 159 vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] ); 160 vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] ); 161 float result = LTC_ClippedSphereFormFactor( vectorFormFactor ); 162 return vec3( result ); 163} 164float G_BlinnPhong_Implicit( ) { 165 return 0.25; 166} 167float D_BlinnPhong( const in float shininess, const in float dotNH ) { 168 return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess ); 169} 170vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) { 171 vec3 halfDir = normalize( lightDir + viewDir ); 172 float dotNH = saturate( dot( normal, halfDir ) ); 173 float dotVH = saturate( dot( viewDir, halfDir ) ); 174 vec3 F = F_Schlick( specularColor, 1.0, dotVH ); 175 float G = G_BlinnPhong_Implicit( ); 176 float D = D_BlinnPhong( shininess, dotNH ); 177 return F * ( G * D ); 178} 179#if defined( USE_SHEEN ) 180float D_Charlie( float roughness, float dotNH ) { 181 float alpha = pow2( roughness ); 182 float invAlpha = 1.0 / alpha; 183 float cos2h = dotNH * dotNH; 184 float sin2h = max( 1.0 - cos2h, 0.0078125 ); 185 return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI ); 186} 187float V_Neubelt( float dotNV, float dotNL ) { 188 return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) ); 189} 190vec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) { 191 vec3 halfDir = normalize( lightDir + viewDir ); 192 float dotNL = saturate( dot( normal, lightDir ) ); 193 float dotNV = saturate( dot( normal, viewDir ) ); 194 float dotNH = saturate( dot( normal, halfDir ) ); 195 float D = D_Charlie( sheenRoughness, dotNH ); 196 float V = V_Neubelt( dotNV, dotNL ); 197 return sheenColor * ( D * V ); 198} 199#endif`,iridescence_fragment:`#ifdef USE_IRIDESCENCE 200 const mat3 XYZ_TO_REC709 = mat3( 201 3.2404542, -0.9692660, 0.0556434, 202 -1.5371385, 1.8760108, -0.2040259, 203 -0.4985314, 0.0415560, 1.0572252 204 ); 205 vec3 Fresnel0ToIor( vec3 fresnel0 ) { 206 vec3 sqrtF0 = sqrt( fresnel0 ); 207 return ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 ); 208 } 209 vec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) { 210 return pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) ); 211 } 212 float IorToFresnel0( float transmittedIor, float incidentIor ) { 213 return pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor )); 214 } 215 vec3 evalSensitivity( float OPD, vec3 shift ) { 216 float phase = 2.0 * PI * OPD * 1.0e-9; 217 vec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 ); 218 vec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 ); 219 vec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 ); 220 vec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var ); 221 xyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) ); 222 xyz /= 1.0685e-7; 223 vec3 rgb = XYZ_TO_REC709 * xyz; 224 return rgb; 225 } 226 vec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) { 227 vec3 I; 228 float iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) ); 229 float sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) ); 230 float cosTheta2Sq = 1.0 - sinTheta2Sq; 231 if ( cosTheta2Sq < 0.0 ) { 232 return vec3( 1.0 ); 233 } 234 float cosTheta2 = sqrt( cosTheta2Sq ); 235 float R0 = IorToFresnel0( iridescenceIOR, outsideIOR );
236 float R12 = F_Schlick( R0, 1.0, cosTheta1 ); 237 float R21 = R12; 238 float T121 = 1.0 - R12; 239 float phi12 = 0.0; 240 if ( iridescenceIOR < outsideIOR ) phi12 = PI; 241 float phi21 = PI - phi12; 242 vec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) ); vec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR ); 243 vec3 R23 = F_Schlick( R1, 1.0, cosTheta2 ); 244 vec3 phi23 = vec3( 0.0 ); 245 if ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI; 246 if ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI; 247 if ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI; 248 float OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2; 249 vec3 phi = vec3( phi21 ) + phi23; 250 vec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 ); 251 vec3 r123 = sqrt( R123 ); 252 vec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 ); 253 vec3 C0 = R12 + Rs; 254 I = C0; 255 vec3 Cm = Rs - T121; 256 for ( int m = 1; m <= 2; ++ m ) { 257 Cm *= r123; 258 vec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi ); 259 I += Cm * Sm; 260 } 261 return max( I, vec3( 0.0 ) ); 262 } 263#endif`,bumpmap_pars_fragment:`#ifdef USE_BUMPMAP 264 uniform sampler2D bumpMap; 265 uniform float bumpScale; 266 vec2 dHdxy_fwd() { 267 vec2 dSTdx = dFdx( vUv ); 268 vec2 dSTdy = dFdy( vUv ); 269 float Hll = bumpScale * texture2D( bumpMap, vUv ).x; 270 float dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll; 271 float dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll; 272 return vec2( dBx, dBy ); 273 } 274 vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) { 275 vec3 vSigmaX = dFdx( surf_pos.xyz ); 276 vec3 vSigmaY = dFdy( surf_pos.xyz ); 277 vec3 vN = surf_norm; 278 vec3 R1 = cross( vSigmaY, vN ); 279 vec3 R2 = cross( vN, vSigmaX ); 280 float fDet = dot( vSigmaX, R1 ) * faceDirection; 281 vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 ); 282 return normalize( abs( fDet ) * surf_norm - vGrad ); 283 } 284#endif`,clipping_planes_fragment:`#if NUM_CLIPPING_PLANES > 0 285 vec4 plane; 286 #pragma unroll_loop_start 287 for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) { 288 plane = clippingPlanes[ i ]; 289 if ( dot( vClipPosition, plane.xyz ) > plane.w ) discard; 290 } 291 #pragma unroll_loop_end 292 #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES 293 bool clipped = true; 294 #pragma unroll_loop_start 295 for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) { 296 plane = clippingPlanes[ i ]; 297 clipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped; 298 } 299 #pragma unroll_loop_end 300 if ( clipped ) discard; 301 #endif 302#endif`,clipping_planes_pars_fragment:`#if NUM_CLIPPING_PLANES > 0 303 varying vec3 vClipPosition; 304 uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ]; 305#endif`,clipping_planes_pars_vertex:`#if NUM_CLIPPING_PLANES > 0 306 varying vec3 vClipPosition; 307#endif`,clipping_planes_vertex:`#if NUM_CLIPPING_PLANES > 0 308 vClipPosition = - mvPosition.xyz; 309#endif`,color_fragment:`#if defined( USE_COLOR_ALPHA ) 310 diffuseColor *= vColor; 311#elif defined( USE_COLOR ) 312 diffuseColor.rgb *= vColor; 313#endif`,color_pars_fragment:`#if defined( USE_COLOR_ALPHA ) 314 varying vec4 vColor; 315#elif defined( USE_COLOR ) 316 varying vec3 vColor; 317#endif`,color_pars_vertex:`#if defined( USE_COLOR_ALPHA ) 318 varying vec4 vColor; 319#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) 320 varying vec3 vColor; 321#endif`,color_vertex:`#if defined( USE_COLOR_ALPHA ) 322 vColor = vec4( 1.0 ); 323#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) 324 vColor = vec3( 1.0 ); 325#endif 326#ifdef USE_COLOR 327 vColor *= color; 328#endif 329#ifdef USE_INSTANCING_COLOR 330 vColor.xyz *= instanceColor.xyz; 331#endif`,common:`#define PI 3.141592653589793 332#define PI2 6.283185307179586 333#define PI_HALF 1.5707963267948966 334#define RECIPROCAL_PI 0.3183098861837907 335#define RECIPROCAL_PI2 0.15915494309189535 336#define EPSILON 1e-6 337#ifndef saturate 338#define saturate( a ) clamp( a, 0.0, 1.0 ) 339#endif 340#define whiteComplement( a ) ( 1.0 - saturate( a ) ) 341float pow2( const in float x ) { return x*x; } 342vec3 pow2( const in vec3 x ) { return x*x; } 343float pow3( const in float x ) { return x*x*x; } 344float pow4( const in float x ) { float x2 = x*x; return x2*x2; } 345float max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); } 346float average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); } 347highp float rand( const in vec2 uv ) { 348 const highp float a = 12.9898, b = 78.233, c = 43758.5453; 349 highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI ); 350 return fract( sin( sn ) * c ); 351} 352#ifdef HIGH_PRECISION 353 float precisionSafeLength( vec3 v ) { return length( v ); } 354#else 355 float precisionSafeLength( vec3 v ) { 356 float maxComponent = max3( abs( v ) ); 357 return length( v / maxComponent ) * maxComponent; 358 } 359#endif 360struct IncidentLight { 361 vec3 color; 362 vec3 direction; 363 bool visible; 364}; 365struct ReflectedLight { 366 vec3 directDiffuse; 367 vec3 directSpecular; 368 vec3 indirectDiffuse; 369 vec3 indirectSpecular; 370}; 371struct GeometricContext { 372 vec3 position; 373 vec3 normal; 374 vec3 viewDir; 375#ifdef USE_CLEARCOAT 376 vec3 clearcoatNormal; 377#endif 378}; 379vec3 transformDirection( in vec3 dir, in mat4 matrix ) { 380 return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); 381} 382vec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) { 383 return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz ); 384} 385mat3 transposeMat3( const in mat3 m ) { 386 mat3 tmp; 387 tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x ); 388 tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y ); 389 tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z ); 390 return tmp; 391} 392float luminance( const in vec3 rgb ) { 393 const vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 ); 394 return dot( weights, rgb ); 395} 396bool isPerspectiveMatrix( mat4 m ) { 397 return m[ 2 ][ 3 ] == - 1.0; 398} 399vec2 equirectUv( in vec3 dir ) { 400 float u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5; 401 float v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5; 402 return vec2( u, v ); 403}`,cube_uv_reflection_fragment:`#ifdef ENVMAP_TYPE_CUBE_UV 404 #define cubeUV_minMipLevel 4.0 405 #define cubeUV_minTileSize 16.0 406 float getFace( vec3 direction ) { 407 vec3 absDirection = abs( direction ); 408 float face = - 1.0; 409 if ( absDirection.x > absDirection.z ) { 410 if ( absDirection.x > absDirection.y ) 411 face = direction.x > 0.0 ? 0.0 : 3.0; 412 else 413 face = direction.y > 0.0 ? 1.0 : 4.0; 414 } else { 415 if ( absDirection.z > absDirection.y ) 416 face = direction.z > 0.0 ? 2.0 : 5.0; 417 else 418 face = direction.y > 0.0 ? 1.0 : 4.0; 419 } 420 return face; 421 } 422 vec2 getUV( vec3 direction, float face ) { 423 vec2 uv; 424 if ( face == 0.0 ) { 425 uv = vec2( direction.z, direction.y ) / abs( direction.x ); 426 } else if ( face == 1.0 ) { 427 uv = vec2( - direction.x, - direction.z ) / abs( direction.y ); 428 } else if ( face == 2.0 ) { 429 uv = vec2( - direction.x, direction.y ) / abs( direction.z ); 430 } else if ( face == 3.0 ) { 431 uv = vec2( - direction.z, direction.y ) / abs( direction.x ); 432 } else if ( face == 4.0 ) { 433 uv = vec2( - direction.x, direction.z ) / abs( direction.y ); 434 } else { 435 uv = vec2( direction.x, direction.y ) / abs( direction.z ); 436 } 437 return 0.5 * ( uv + 1.0 ); 438 } 439 vec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) { 440 float face = getFace( direction ); 441 float filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 ); 442 mipInt = max( mipInt, cubeUV_minMipLevel ); 443 float faceSize = exp2( mipInt );
444 highp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0; 445 if ( face > 2.0 ) { 446 uv.y += faceSize; 447 face -= 3.0; 448 } 449 uv.x += face * faceSize; 450 uv.x += filterInt * 3.0 * cubeUV_minTileSize; 451 uv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize ); 452 uv.x *= CUBEUV_TEXEL_WIDTH; 453 uv.y *= CUBEUV_TEXEL_HEIGHT; 454 #ifdef texture2DGradEXT 455 return texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb; 456 #else 457 return texture2D( envMap, uv ).rgb; 458 #endif 459 } 460 #define cubeUV_r0 1.0 461 #define cubeUV_v0 0.339 462 #define cubeUV_m0 - 2.0 463 #define cubeUV_r1 0.8 464 #define cubeUV_v1 0.276 465 #define cubeUV_m1 - 1.0 466 #define cubeUV_r4 0.4 467 #define cubeUV_v4 0.046 468 #define cubeUV_m4 2.0 469 #define cubeUV_r5 0.305 470 #define cubeUV_v5 0.016 471 #define cubeUV_m5 3.0 472 #define cubeUV_r6 0.21 473 #define cubeUV_v6 0.0038 474 #define cubeUV_m6 4.0 475 float roughnessToMip( float roughness ) { 476 float mip = 0.0; 477 if ( roughness >= cubeUV_r1 ) { 478 mip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0; 479 } else if ( roughness >= cubeUV_r4 ) { 480 mip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1; 481 } else if ( roughness >= cubeUV_r5 ) { 482 mip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4; 483 } else if ( roughness >= cubeUV_r6 ) { 484 mip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5; 485 } else { 486 mip = - 2.0 * log2( 1.16 * roughness ); } 487 return mip; 488 } 489 vec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) { 490 float mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP ); 491 float mipF = fract( mip ); 492 float mipInt = floor( mip ); 493 vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt ); 494 if ( mipF == 0.0 ) { 495 return vec4( color0, 1.0 ); 496 } else { 497 vec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 ); 498 return vec4( mix( color0, color1, mipF ), 1.0 ); 499 } 500 } 501#endif`,defaultnormal_vertex:`vec3 transformedNormal = objectNormal; 502#ifdef USE_INSTANCING 503 mat3 m = mat3( instanceMatrix ); 504 transformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) ); 505 transformedNormal = m * transformedNormal; 506#endif 507transformedNormal = normalMatrix * transformedNormal; 508#ifdef FLIP_SIDED 509 transformedNormal = - transformedNormal; 510#endif 511#ifdef USE_TANGENT 512 vec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz; 513 #ifdef FLIP_SIDED 514 transformedTangent = - transformedTangent; 515 #endif 516#endif`,displacementmap_pars_vertex:`#ifdef USE_DISPLACEMENTMAP 517 uniform sampler2D displacementMap; 518 uniform float displacementScale; 519 uniform float displacementBias; 520#endif`,displacementmap_vertex:`#ifdef USE_DISPLACEMENTMAP 521 transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias ); 522#endif`,emissivemap_fragment:`#ifdef USE_EMISSIVEMAP 523 vec4 emissiveColor = texture2D( emissiveMap, vUv ); 524 totalEmissiveRadiance *= emissiveColor.rgb; 525#endif`,emissivemap_pars_fragment:`#ifdef USE_EMISSIVEMAP 526 uniform sampler2D emissiveMap; 527#endif`,encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:`vec4 LinearToLinear( in vec4 value ) { 528 return value; 529} 530vec4 LinearTosRGB( in vec4 value ) { 531 return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a ); 532}`,envmap_fragment:`#ifdef USE_ENVMAP 533 #ifdef ENV_WORLDPOS 534 vec3 cameraToFrag; 535 if ( isOrthographic ) { 536 cameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); 537 } else { 538 cameraToFrag = normalize( vWorldPosition - cameraPosition ); 539 } 540 vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); 541 #ifdef ENVMAP_MODE_REFLECTION 542 vec3 reflectVec = reflect( cameraToFrag, worldNormal ); 543 #else 544 vec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio ); 545 #endif 546 #else 547 vec3 reflectVec = vReflect; 548 #endif 549 #ifdef ENVMAP_TYPE_CUBE 550 vec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) ); 551 #else 552 vec4 envColor = vec4( 0.0 ); 553 #endif 554 #ifdef ENVMAP_BLENDING_MULTIPLY 555 outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity ); 556 #elif defined( ENVMAP_BLENDING_MIX ) 557 outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity ); 558 #elif defined( ENVMAP_BLENDING_ADD ) 559 outgoingLight += envColor.xyz * specularStrength * reflectivity; 560 #endif 561#endif`,envmap_common_pars_fragment:`#ifdef USE_ENVMAP 562 uniform float envMapIntensity; 563 uniform float flipEnvMap; 564 #ifdef ENVMAP_TYPE_CUBE 565 uniform samplerCube envMap; 566 #else 567 uniform sampler2D envMap; 568 #endif 569 570#endif`,envmap_pars_fragment:`#ifdef USE_ENVMAP 571 uniform float reflectivity; 572 #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) 573 #define ENV_WORLDPOS 574 #endif 575 #ifdef ENV_WORLDPOS 576 varying vec3 vWorldPosition; 577 uniform float refractionRatio; 578 #else 579 varying vec3 vReflect; 580 #endif 581#endif`,envmap_pars_vertex:`#ifdef USE_ENVMAP 582 #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) 583 #define ENV_WORLDPOS 584 #endif 585 #ifdef ENV_WORLDPOS 586 587 varying vec3 vWorldPosition; 588 #else 589 varying vec3 vReflect; 590 uniform float refractionRatio; 591 #endif 592#endif`,envmap_physical_pars_fragment:`#if defined( USE_ENVMAP ) 593 vec3 getIBLIrradiance( const in vec3 normal ) { 594 #if defined( ENVMAP_TYPE_CUBE_UV ) 595 vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); 596 vec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 ); 597 return PI * envMapColor.rgb * envMapIntensity; 598 #else 599 return vec3( 0.0 ); 600 #endif 601 } 602 vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) { 603 #if defined( ENVMAP_TYPE_CUBE_UV ) 604 vec3 reflectVec = reflect( - viewDir, normal ); 605 reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) ); 606 reflectVec = inverseTransformDirection( reflectVec, viewMatrix ); 607 vec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness ); 608 return envMapColor.rgb * envMapIntensity; 609 #else 610 return vec3( 0.0 ); 611 #endif 612 } 613#endif`,envmap_vertex:`#ifdef USE_ENVMAP 614 #ifdef ENV_WORLDPOS 615 vWorldPosition = worldPosition.xyz; 616 #else 617 vec3 cameraToVertex; 618 if ( isOrthographic ) { 619 cameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); 620 } else {
621 cameraToVertex = normalize( worldPosition.xyz - cameraPosition ); 622 } 623 vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); 624 #ifdef ENVMAP_MODE_REFLECTION 625 vReflect = reflect( cameraToVertex, worldNormal ); 626 #else 627 vReflect = refract( cameraToVertex, worldNormal, refractionRatio ); 628 #endif 629 #endif 630#endif`,fog_vertex:`#ifdef USE_FOG 631 vFogDepth = - mvPosition.z; 632#endif`,fog_pars_vertex:`#ifdef USE_FOG 633 varying float vFogDepth; 634#endif`,fog_fragment:`#ifdef USE_FOG 635 #ifdef FOG_EXP2 636 float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth ); 637 #else 638 float fogFactor = smoothstep( fogNear, fogFar, vFogDepth ); 639 #endif 640 gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor ); 641#endif`,fog_pars_fragment:`#ifdef USE_FOG 642 uniform vec3 fogColor; 643 varying float vFogDepth; 644 #ifdef FOG_EXP2 645 uniform float fogDensity; 646 #else 647 uniform float fogNear; 648 uniform float fogFar; 649 #endif 650#endif`,gradientmap_pars_fragment:`#ifdef USE_GRADIENTMAP 651 uniform sampler2D gradientMap; 652#endif 653vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) { 654 float dotNL = dot( normal, lightDirection ); 655 vec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 ); 656 #ifdef USE_GRADIENTMAP 657 return vec3( texture2D( gradientMap, coord ).r ); 658 #else 659 vec2 fw = fwidth( coord ) * 0.5; 660 return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) ); 661 #endif 662}`,lightmap_fragment:`#ifdef USE_LIGHTMAP 663 vec4 lightMapTexel = texture2D( lightMap, vUv2 ); 664 vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity; 665 reflectedLight.indirectDiffuse += lightMapIrradiance; 666#endif`,lightmap_pars_fragment:`#ifdef USE_LIGHTMAP 667 uniform sampler2D lightMap; 668 uniform float lightMapIntensity; 669#endif`,lights_lambert_fragment:`LambertMaterial material; 670material.diffuseColor = diffuseColor.rgb; 671material.specularStrength = specularStrength;`,lights_lambert_pars_fragment:`varying vec3 vViewPosition; 672struct LambertMaterial { 673 vec3 diffuseColor; 674 float specularStrength; 675}; 676void RE_Direct_Lambert( const in IncidentLight directLight, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { 677 float dotNL = saturate( dot( geometry.normal, directLight.direction ) ); 678 vec3 irradiance = dotNL * directLight.color; 679 reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 680} 681void RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { 682 reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 683} 684#define RE_Direct RE_Direct_Lambert 685#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,lights_pars_begin:`uniform bool receiveShadow; 686uniform vec3 ambientLightColor; 687uniform vec3 lightProbe[ 9 ]; 688vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) { 689 float x = normal.x, y = normal.y, z = normal.z; 690 vec3 result = shCoefficients[ 0 ] * 0.886227; 691 result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y; 692 result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z; 693 result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x; 694 result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y; 695 result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z; 696 result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 ); 697 result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z; 698 result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y ); 699 return result; 700} 701vec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) { 702 vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); 703 vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe ); 704 return irradiance; 705} 706vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) { 707 vec3 irradiance = ambientLightColor; 708 return irradiance; 709} 710float getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) { 711 #if defined ( PHYSICALLY_CORRECT_LIGHTS ) 712 float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 ); 713 if ( cutoffDistance > 0.0 ) { 714 distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) ); 715 } 716 return distanceFalloff; 717 #else 718 if ( cutoffDistance > 0.0 && decayExponent > 0.0 ) { 719 return pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent ); 720 } 721 return 1.0; 722 #endif 723} 724float getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) { 725 return smoothstep( coneCosine, penumbraCosine, angleCosine ); 726} 727#if NUM_DIR_LIGHTS > 0 728 struct DirectionalLight { 729 vec3 direction; 730 vec3 color; 731 }; 732 uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ]; 733 void getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) { 734 light.color = directionalLight.color; 735 light.direction = directionalLight.direction; 736 light.visible = true; 737 } 738#endif 739#if NUM_POINT_LIGHTS > 0 740 struct PointLight { 741 vec3 position; 742 vec3 color; 743 float distance; 744 float decay; 745 }; 746 uniform PointLight pointLights[ NUM_POINT_LIGHTS ]; 747 void getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) { 748 vec3 lVector = pointLight.position - geometry.position; 749 light.direction = normalize( lVector ); 750 float lightDistance = length( lVector ); 751 light.color = pointLight.color; 752 light.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay ); 753 light.visible = ( light.color != vec3( 0.0 ) ); 754 } 755#endif
756#if NUM_SPOT_LIGHTS > 0 757 struct SpotLight { 758 vec3 position; 759 vec3 direction; 760 vec3 color; 761 float distance; 762 float decay; 763 float coneCos; 764 float penumbraCos; 765 }; 766 uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ]; 767 void getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) { 768 vec3 lVector = spotLight.position - geometry.position; 769 light.direction = normalize( lVector ); 770 float angleCos = dot( light.direction, spotLight.direction ); 771 float spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos ); 772 if ( spotAttenuation > 0.0 ) { 773 float lightDistance = length( lVector ); 774 light.color = spotLight.color * spotAttenuation; 775 light.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay ); 776 light.visible = ( light.color != vec3( 0.0 ) ); 777 } else { 778 light.color = vec3( 0.0 ); 779 light.visible = false; 780 } 781 } 782#endif 783#if NUM_RECT_AREA_LIGHTS > 0 784 struct RectAreaLight { 785 vec3 color; 786 vec3 position; 787 vec3 halfWidth; 788 vec3 halfHeight; 789 }; 790 uniform sampler2D ltc_1; uniform sampler2D ltc_2; 791 uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ]; 792#endif 793#if NUM_HEMI_LIGHTS > 0 794 struct HemisphereLight { 795 vec3 direction; 796 vec3 skyColor; 797 vec3 groundColor; 798 }; 799 uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ]; 800 vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) { 801 float dotNL = dot( normal, hemiLight.direction ); 802 float hemiDiffuseWeight = 0.5 * dotNL + 0.5; 803 vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight ); 804 return irradiance; 805 } 806#endif`,lights_toon_fragment:`ToonMaterial material; 807material.diffuseColor = diffuseColor.rgb;`,lights_toon_pars_fragment:`varying vec3 vViewPosition; 808struct ToonMaterial { 809 vec3 diffuseColor; 810}; 811void RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { 812 vec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color; 813 reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 814} 815void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { 816 reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 817} 818#define RE_Direct RE_Direct_Toon 819#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,lights_phong_fragment:`BlinnPhongMaterial material; 820material.diffuseColor = diffuseColor.rgb; 821material.specularColor = specular; 822material.specularShininess = shininess; 823material.specularStrength = specularStrength;`,lights_phong_pars_fragment:`varying vec3 vViewPosition; 824struct BlinnPhongMaterial { 825 vec3 diffuseColor; 826 vec3 specularColor; 827 float specularShininess; 828 float specularStrength; 829}; 830void RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { 831 float dotNL = saturate( dot( geometry.normal, directLight.direction ) ); 832 vec3 irradiance = dotNL * directLight.color; 833 reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 834 reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength; 835} 836void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { 837 reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 838} 839#define RE_Direct RE_Direct_BlinnPhong 840#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,lights_physical_fragment:`PhysicalMaterial material; 841material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor ); 842vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) ); 843float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z ); 844material.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness; 845material.roughness = min( material.roughness, 1.0 ); 846#ifdef IOR 847 material.ior = ior; 848 #ifdef SPECULAR 849 float specularIntensityFactor = specularIntensity; 850 vec3 specularColorFactor = specularColor; 851 #ifdef USE_SPECULARINTENSITYMAP 852 specularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a; 853 #endif 854 #ifdef USE_SPECULARCOLORMAP 855 specularColorFactor *= texture2D( specularColorMap, vUv ).rgb; 856 #endif 857 material.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor ); 858 #else 859 float specularIntensityFactor = 1.0; 860 vec3 specularColorFactor = vec3( 1.0 ); 861 material.specularF90 = 1.0; 862 #endif 863 material.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor ); 864#else 865 material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor ); 866 material.specularF90 = 1.0; 867#endif 868#ifdef USE_CLEARCOAT 869 material.clearcoat = clearcoat; 870 material.clearcoatRoughness = clearcoatRoughness; 871 material.clearcoatF0 = vec3( 0.04 ); 872 material.clearcoatF90 = 1.0; 873 #ifdef USE_CLEARCOATMAP 874 material.clearcoat *= texture2D( clearcoatMap, vUv ).x; 875 #endif 876 #ifdef USE_CLEARCOAT_ROUGHNESSMAP 877 material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y; 878 #endif 879 material.clearcoat = saturate( material.clearcoat ); material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 ); 880 material.clearcoatRoughness += geometryRoughness; 881 material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 ); 882#endif
883#ifdef USE_IRIDESCENCE 884 material.iridescence = iridescence; 885 material.iridescenceIOR = iridescenceIOR; 886 #ifdef USE_IRIDESCENCEMAP 887 material.iridescence *= texture2D( iridescenceMap, vUv ).r; 888 #endif 889 #ifdef USE_IRIDESCENCE_THICKNESSMAP 890 material.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vUv ).g + iridescenceThicknessMinimum; 891 #else 892 material.iridescenceThickness = iridescenceThicknessMaximum; 893 #endif 894#endif 895#ifdef USE_SHEEN 896 material.sheenColor = sheenColor; 897 #ifdef USE_SHEENCOLORMAP 898 material.sheenColor *= texture2D( sheenColorMap, vUv ).rgb; 899 #endif 900 material.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 ); 901 #ifdef USE_SHEENROUGHNESSMAP 902 material.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a; 903 #endif 904#endif`,lights_physical_pars_fragment:`struct PhysicalMaterial { 905 vec3 diffuseColor; 906 float roughness; 907 vec3 specularColor; 908 float specularF90; 909 #ifdef USE_CLEARCOAT 910 float clearcoat; 911 float clearcoatRoughness; 912 vec3 clearcoatF0; 913 float clearcoatF90; 914 #endif 915 #ifdef USE_IRIDESCENCE 916 float iridescence; 917 float iridescenceIOR; 918 float iridescenceThickness; 919 vec3 iridescenceFresnel; 920 vec3 iridescenceF0; 921 #endif 922 #ifdef USE_SHEEN 923 vec3 sheenColor; 924 float sheenRoughness; 925 #endif 926 #ifdef IOR 927 float ior; 928 #endif 929 #ifdef USE_TRANSMISSION 930 float transmission; 931 float transmissionAlpha; 932 float thickness; 933 float attenuationDistance; 934 vec3 attenuationColor; 935 #endif 936}; 937vec3 clearcoatSpecular = vec3( 0.0 ); 938vec3 sheenSpecular = vec3( 0.0 ); 939float IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) { 940 float dotNV = saturate( dot( normal, viewDir ) ); 941 float r2 = roughness * roughness; 942 float a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95; 943 float b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72; 944 float DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) ); 945 return saturate( DG * RECIPROCAL_PI ); 946} 947vec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) { 948 float dotNV = saturate( dot( normal, viewDir ) ); 949 const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 ); 950 const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 ); 951 vec4 r = roughness * c0 + c1; 952 float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y; 953 vec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw; 954 return fab; 955} 956vec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) { 957 vec2 fab = DFGApprox( normal, viewDir, roughness ); 958 return specularColor * fab.x + specularF90 * fab.y; 959} 960#ifdef USE_IRIDESCENCE 961void computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) { 962#else 963void computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) { 964#endif 965 vec2 fab = DFGApprox( normal, viewDir, roughness ); 966 #ifdef USE_IRIDESCENCE 967 vec3 Fr = mix( specularColor, iridescenceF0, iridescence ); 968 #else 969 vec3 Fr = specularColor; 970 #endif 971 vec3 FssEss = Fr * fab.x + specularF90 * fab.y; 972 float Ess = fab.x + fab.y; 973 float Ems = 1.0 - Ess; 974 vec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619; vec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg ); 975 singleScatter += FssEss; 976 multiScatter += Fms * Ems; 977} 978#if NUM_RECT_AREA_LIGHTS > 0 979 void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { 980 vec3 normal = geometry.normal; 981 vec3 viewDir = geometry.viewDir; 982 vec3 position = geometry.position; 983 vec3 lightPos = rectAreaLight.position; 984 vec3 halfWidth = rectAreaLight.halfWidth; 985 vec3 halfHeight = rectAreaLight.halfHeight; 986 vec3 lightColor = rectAreaLight.color; 987 float roughness = material.roughness; 988 vec3 rectCoords[ 4 ]; 989 rectCoords[ 0 ] = lightPos + halfWidth - halfHeight; rectCoords[ 1 ] = lightPos - halfWidth - halfHeight; 990 rectCoords[ 2 ] = lightPos - halfWidth + halfHeight; 991 rectCoords[ 3 ] = lightPos + halfWidth + halfHeight; 992 vec2 uv = LTC_Uv( normal, viewDir, roughness ); 993 vec4 t1 = texture2D( ltc_1, uv ); 994 vec4 t2 = texture2D( ltc_2, uv ); 995 mat3 mInv = mat3( 996 vec3( t1.x, 0, t1.y ), 997 vec3( 0, 1, 0 ), 998 vec3( t1.z, 0, t1.w ) 999 ); 1000 vec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y ); 1001 reflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords ); 1002 reflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords ); 1003 } 1004#endif 1005void RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {
1006 float dotNL = saturate( dot( geometry.normal, directLight.direction ) ); 1007 vec3 irradiance = dotNL * directLight.color; 1008 #ifdef USE_CLEARCOAT 1009 float dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) ); 1010 vec3 ccIrradiance = dotNLcc * directLight.color; 1011 clearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness ); 1012 #endif 1013 #ifdef USE_SHEEN 1014 sheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness ); 1015 #endif 1016 #ifdef USE_IRIDESCENCE 1017 reflectedLight.directSpecular += irradiance * BRDF_GGX_Iridescence( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness ); 1018 #else 1019 reflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness ); 1020 #endif 1021 reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 1022} 1023void RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { 1024 reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 1025} 1026void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) { 1027 #ifdef USE_CLEARCOAT 1028 clearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness ); 1029 #endif 1030 #ifdef USE_SHEEN 1031 sheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness ); 1032 #endif 1033 vec3 singleScattering = vec3( 0.0 ); 1034 vec3 multiScattering = vec3( 0.0 ); 1035 vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI; 1036 #ifdef USE_IRIDESCENCE 1037 computeMultiscatteringIridescence( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering ); 1038 #else 1039 computeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering ); 1040 #endif 1041 vec3 totalScattering = singleScattering + multiScattering; 1042 vec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) ); 1043 reflectedLight.indirectSpecular += radiance * singleScattering; 1044 reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance; 1045 reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance; 1046} 1047#define RE_Direct RE_Direct_Physical 1048#define RE_Direct_RectArea RE_Direct_RectArea_Physical 1049#define RE_IndirectDiffuse RE_IndirectDiffuse_Physical 1050#define RE_IndirectSpecular RE_IndirectSpecular_Physical 1051float computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) { 1052 return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion ); 1053}`,lights_fragment_begin:` 1054GeometricContext geometry; 1055geometry.position = - vViewPosition; 1056geometry.normal = normal; 1057geometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition ); 1058#ifdef USE_CLEARCOAT 1059 geometry.clearcoatNormal = clearcoatNormal; 1060#endif 1061#ifdef USE_IRIDESCENCE 1062 float dotNVi = saturate( dot( normal, geometry.viewDir ) ); 1063 if ( material.iridescenceThickness == 0.0 ) { 1064 material.iridescence = 0.0; 1065 } else { 1066 material.iridescence = saturate( material.iridescence ); 1067 } 1068 if ( material.iridescence > 0.0 ) { 1069 material.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor ); 1070 material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi ); 1071 } 1072#endif 1073IncidentLight directLight; 1074#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct ) 1075 PointLight pointLight; 1076 #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0 1077 PointLightShadow pointLightShadow; 1078 #endif 1079 #pragma unroll_loop_start 1080 for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) { 1081 pointLight = pointLights[ i ]; 1082 getPointLightInfo( pointLight, geometry, directLight ); 1083 #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS ) 1084 pointLightShadow = pointLightShadows[ i ]; 1085 directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0; 1086 #endif 1087 RE_Direct( directLight, geometry, material, reflectedLight ); 1088 } 1089 #pragma unroll_loop_end 1090#endif
1091#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct ) 1092 SpotLight spotLight; 1093 vec4 spotColor; 1094 vec3 spotLightCoord; 1095 bool inSpotLightMap; 1096 #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0 1097 SpotLightShadow spotLightShadow; 1098 #endif 1099 #pragma unroll_loop_start 1100 for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) { 1101 spotLight = spotLights[ i ]; 1102 getSpotLightInfo( spotLight, geometry, directLight ); 1103 #if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) 1104 #define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX 1105 #elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) 1106 #define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS 1107 #else 1108 #define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) 1109 #endif 1110 #if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS ) 1111 spotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w; 1112 inSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) ); 1113 spotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy ); 1114 directLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color; 1115 #endif 1116 #undef SPOT_LIGHT_MAP_INDEX 1117 #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) 1118 spotLightShadow = spotLightShadows[ i ]; 1119 directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0; 1120 #endif 1121 RE_Direct( directLight, geometry, material, reflectedLight ); 1122 } 1123 #pragma unroll_loop_end 1124#endif 1125#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) 1126 DirectionalLight directionalLight; 1127 #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0 1128 DirectionalLightShadow directionalLightShadow; 1129 #endif 1130 #pragma unroll_loop_start 1131 for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { 1132 directionalLight = directionalLights[ i ]; 1133 getDirectionalLightInfo( directionalLight, geometry, directLight ); 1134 #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) 1135 directionalLightShadow = directionalLightShadows[ i ]; 1136 directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; 1137 #endif 1138 RE_Direct( directLight, geometry, material, reflectedLight ); 1139 } 1140 #pragma unroll_loop_end 1141#endif 1142#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea ) 1143 RectAreaLight rectAreaLight; 1144 #pragma unroll_loop_start 1145 for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) { 1146 rectAreaLight = rectAreaLights[ i ]; 1147 RE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight ); 1148 } 1149 #pragma unroll_loop_end 1150#endif 1151#if defined( RE_IndirectDiffuse ) 1152 vec3 iblIrradiance = vec3( 0.0 ); 1153 vec3 irradiance = getAmbientLightIrradiance( ambientLightColor ); 1154 irradiance += getLightProbeIrradiance( lightProbe, geometry.normal ); 1155 #if ( NUM_HEMI_LIGHTS > 0 ) 1156 #pragma unroll_loop_start 1157 for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) { 1158 irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal ); 1159 } 1160 #pragma unroll_loop_end 1161 #endif 1162#endif 1163#if defined( RE_IndirectSpecular ) 1164 vec3 radiance = vec3( 0.0 ); 1165 vec3 clearcoatRadiance = vec3( 0.0 ); 1166#endif`,lights_fragment_maps:`#if defined( RE_IndirectDiffuse ) 1167 #ifdef USE_LIGHTMAP 1168 vec4 lightMapTexel = texture2D( lightMap, vUv2 ); 1169 vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity; 1170 irradiance += lightMapIrradiance; 1171 #endif 1172 #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV ) 1173 iblIrradiance += getIBLIrradiance( geometry.normal ); 1174 #endif 1175#endif 1176#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular ) 1177 radiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness ); 1178 #ifdef USE_CLEARCOAT 1179 clearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness ); 1180 #endif 1181#endif`,lights_fragment_end:`#if defined( RE_IndirectDiffuse ) 1182 RE_IndirectDiffuse( irradiance, geometry, material, reflectedLight ); 1183#endif 1184#if defined( RE_IndirectSpecular ) 1185 RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight ); 1186#endif`,logdepthbuf_fragment:`#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT ) 1187 gl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5; 1188#endif`,logdepthbuf_pars_fragment:`#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT ) 1189 uniform float logDepthBufFC; 1190 varying float vFragDepth; 1191 varying float vIsPerspective; 1192#endif`,logdepthbuf_pars_vertex:`#ifdef USE_LOGDEPTHBUF 1193 #ifdef USE_LOGDEPTHBUF_EXT 1194 varying float vFragDepth; 1195 varying float vIsPerspective; 1196 #else 1197 uniform float logDepthBufFC; 1198 #endif 1199#endif`,logdepthbuf_vertex:`#ifdef USE_LOGDEPTHBUF 1200 #ifdef USE_LOGDEPTHBUF_EXT 1201 vFragDepth = 1.0 + gl_Position.w; 1202 vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) ); 1203 #else 1204 if ( isPerspectiveMatrix( projectionMatrix ) ) { 1205 gl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0; 1206 gl_Position.z *= gl_Position.w; 1207 } 1208 #endif 1209#endif`,map_fragment:`#ifdef USE_MAP 1210 vec4 sampledDiffuseColor = texture2D( map, vUv ); 1211 #ifdef DECODE_VIDEO_TEXTURE 1212 sampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w ); 1213 #endif 1214 diffuseColor *= sampledDiffuseColor; 1215#endif`,map_pars_fragment:`#ifdef USE_MAP 1216 uniform sampler2D map; 1217#endif`,map_particle_fragment:`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) 1218 vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy; 1219#endif 1220#ifdef USE_MAP 1221 diffuseColor *= texture2D( map, uv ); 1222#endif 1223#ifdef USE_ALPHAMAP 1224 diffuseColor.a *= texture2D( alphaMap, uv ).g; 1225#endif`,map_particle_pars_fragment:`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) 1226 uniform mat3 uvTransform; 1227#endif 1228#ifdef USE_MAP 1229 uniform sampler2D map; 1230#endif 1231#ifdef USE_ALPHAMAP 1232 uniform sampler2D alphaMap; 1233#endif`,metalnessmap_fragment:`float metalnessFactor = metalness; 1234#ifdef USE_METALNESSMAP 1235 vec4 texelMetalness = texture2D( metalnessMap, vUv ); 1236 metalnessFactor *= texelMetalness.b; 1237#endif`,metalnessmap_pars_fragment:`#ifdef USE_METALNESSMAP 1238 uniform sampler2D metalnessMap; 1239#endif`,morphcolor_vertex:`#if defined( USE_MORPHCOLORS ) && defined( MORPHTARGETS_TEXTURE ) 1240 vColor *= morphTargetBaseInfluence; 1241 for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { 1242 #if defined( USE_COLOR_ALPHA ) 1243 if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ]; 1244 #elif defined( USE_COLOR ) 1245 if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ]; 1246 #endif 1247 } 1248#endif`,morphnormal_vertex:`#ifdef USE_MORPHNORMALS 1249 objectNormal *= morphTargetBaseInfluence; 1250 #ifdef MORPHTARGETS_TEXTURE 1251 for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { 1252 if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ]; 1253 } 1254 #else 1255 objectNormal += morphNormal0 * morphTargetInfluences[ 0 ]; 1256 objectNormal += morphNormal1 * morphTargetInfluences[ 1 ]; 1257 objectNormal += morphNormal2 * morphTargetInfluences[ 2 ]; 1258 objectNormal += morphNormal3 * morphTargetInfluences[ 3 ]; 1259 #endif 1260#endif`,morphtarget_pars_vertex:`#ifdef USE_MORPHTARGETS 1261 uniform float morphTargetBaseInfluence; 1262 #ifdef MORPHTARGETS_TEXTURE 1263 uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ]; 1264 uniform sampler2DArray morphTargetsTexture; 1265 uniform ivec2 morphTargetsTextureSize; 1266 vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) { 1267 int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset; 1268 int y = texelIndex / morphTargetsTextureSize.x; 1269 int x = texelIndex - y * morphTargetsTextureSize.x; 1270 ivec3 morphUV = ivec3( x, y, morphTargetIndex ); 1271 return texelFetch( morphTargetsTexture, morphUV, 0 ); 1272 } 1273 #else 1274 #ifndef USE_MORPHNORMALS 1275 uniform float morphTargetInfluences[ 8 ]; 1276 #else 1277 uniform float morphTargetInfluences[ 4 ]; 1278 #endif 1279 #endif 1280#endif`,morphtarget_vertex:`#ifdef USE_MORPHTARGETS 1281 transformed *= morphTargetBaseInfluence; 1282 #ifdef MORPHTARGETS_TEXTURE 1283 for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { 1284 if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ]; 1285 } 1286 #else 1287 transformed += morphTarget0 * morphTargetInfluences[ 0 ]; 1288 transformed += morphTarget1 * morphTargetInfluences[ 1 ]; 1289 transformed += morphTarget2 * morphTargetInfluences[ 2 ]; 1290 transformed += morphTarget3 * morphTargetInfluences[ 3 ]; 1291 #ifndef USE_MORPHNORMALS 1292 transformed += morphTarget4 * morphTargetInfluences[ 4 ]; 1293 transformed += morphTarget5 * morphTargetInfluences[ 5 ]; 1294 transformed += morphTarget6 * morphTargetInfluences[ 6 ]; 1295 transformed += morphTarget7 * morphTargetInfluences[ 7 ]; 1296 #endif 1297 #endif 1298#endif`,normal_fragment_begin:`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; 1299#ifdef FLAT_SHADED 1300 vec3 fdx = dFdx( vViewPosition ); 1301 vec3 fdy = dFdy( vViewPosition ); 1302 vec3 normal = normalize( cross( fdx, fdy ) ); 1303#else 1304 vec3 normal = normalize( vNormal ); 1305 #ifdef DOUBLE_SIDED 1306 normal = normal * faceDirection; 1307 #endif 1308 #ifdef USE_TANGENT 1309 vec3 tangent = normalize( vTangent ); 1310 vec3 bitangent = normalize( vBitangent ); 1311 #ifdef DOUBLE_SIDED 1312 tangent = tangent * faceDirection; 1313 bitangent = bitangent * faceDirection; 1314 #endif 1315 #if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP ) 1316 mat3 vTBN = mat3( tangent, bitangent, normal ); 1317 #endif 1318 #endif 1319#endif 1320vec3 geometryNormal = normal;`,normal_fragment_maps:`#ifdef OBJECTSPACE_NORMALMAP 1321 normal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0; 1322 #ifdef FLIP_SIDED 1323 normal = - normal; 1324 #endif 1325 #ifdef DOUBLE_SIDED 1326 normal = normal * faceDirection; 1327 #endif 1328 normal = normalize( normalMatrix * normal ); 1329#elif defined( TANGENTSPACE_NORMALMAP ) 1330 vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0; 1331 mapN.xy *= normalScale; 1332 #ifdef USE_TANGENT 1333 normal = normalize( vTBN * mapN ); 1334 #else
1335 normal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection ); 1336 #endif 1337#elif defined( USE_BUMPMAP ) 1338 normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection ); 1339#endif`,normal_pars_fragment:`#ifndef FLAT_SHADED 1340 varying vec3 vNormal; 1341 #ifdef USE_TANGENT 1342 varying vec3 vTangent; 1343 varying vec3 vBitangent; 1344 #endif 1345#endif`,normal_pars_vertex:`#ifndef FLAT_SHADED 1346 varying vec3 vNormal; 1347 #ifdef USE_TANGENT 1348 varying vec3 vTangent; 1349 varying vec3 vBitangent; 1350 #endif 1351#endif`,normal_vertex:`#ifndef FLAT_SHADED 1352 vNormal = normalize( transformedNormal ); 1353 #ifdef USE_TANGENT 1354 vTangent = normalize( transformedTangent ); 1355 vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w ); 1356 #endif 1357#endif`,normalmap_pars_fragment:`#ifdef USE_NORMALMAP 1358 uniform sampler2D normalMap; 1359 uniform vec2 normalScale; 1360#endif 1361#ifdef OBJECTSPACE_NORMALMAP 1362 uniform mat3 normalMatrix; 1363#endif 1364#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) ) 1365 vec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) { 1366 vec3 q0 = dFdx( eye_pos.xyz ); 1367 vec3 q1 = dFdy( eye_pos.xyz ); 1368 vec2 st0 = dFdx( vUv.st ); 1369 vec2 st1 = dFdy( vUv.st ); 1370 vec3 N = surf_norm; 1371 vec3 q1perp = cross( q1, N ); 1372 vec3 q0perp = cross( N, q0 ); 1373 vec3 T = q1perp * st0.x + q0perp * st1.x; 1374 vec3 B = q1perp * st0.y + q0perp * st1.y; 1375 float det = max( dot( T, T ), dot( B, B ) ); 1376 float scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det ); 1377 return normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z ); 1378 } 1379#endif`,clearcoat_normal_fragment_begin:`#ifdef USE_CLEARCOAT 1380 vec3 clearcoatNormal = geometryNormal; 1381#endif`,clearcoat_normal_fragment_maps:`#ifdef USE_CLEARCOAT_NORMALMAP 1382 vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0; 1383 clearcoatMapN.xy *= clearcoatNormalScale; 1384 #ifdef USE_TANGENT 1385 clearcoatNormal = normalize( vTBN * clearcoatMapN ); 1386 #else 1387 clearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection ); 1388 #endif 1389#endif`,clearcoat_pars_fragment:`#ifdef USE_CLEARCOATMAP 1390 uniform sampler2D clearcoatMap; 1391#endif 1392#ifdef USE_CLEARCOAT_ROUGHNESSMAP 1393 uniform sampler2D clearcoatRoughnessMap; 1394#endif 1395#ifdef USE_CLEARCOAT_NORMALMAP 1396 uniform sampler2D clearcoatNormalMap; 1397 uniform vec2 clearcoatNormalScale; 1398#endif`,iridescence_pars_fragment:`#ifdef USE_IRIDESCENCEMAP 1399 uniform sampler2D iridescenceMap; 1400#endif 1401#ifdef USE_IRIDESCENCE_THICKNESSMAP 1402 uniform sampler2D iridescenceThicknessMap; 1403#endif`,output_fragment:`#ifdef OPAQUE 1404diffuseColor.a = 1.0; 1405#endif 1406#ifdef USE_TRANSMISSION 1407diffuseColor.a *= material.transmissionAlpha + 0.1; 1408#endif 1409gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,packing:`vec3 packNormalToRGB( const in vec3 normal ) { 1410 return normalize( normal ) * 0.5 + 0.5; 1411} 1412vec3 unpackRGBToNormal( const in vec3 rgb ) { 1413 return 2.0 * rgb.xyz - 1.0; 1414} 1415const float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.; 1416const vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. ); 1417const vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. ); 1418const float ShiftRight8 = 1. / 256.; 1419vec4 packDepthToRGBA( const in float v ) { 1420 vec4 r = vec4( fract( v * PackFactors ), v ); 1421 r.yzw -= r.xyz * ShiftRight8; return r * PackUpscale; 1422} 1423float unpackRGBAToDepth( const in vec4 v ) { 1424 return dot( v, UnpackFactors ); 1425} 1426vec2 packDepthToRG( in highp float v ) { 1427 return packDepthToRGBA( v ).yx; 1428} 1429float unpackRGToDepth( const in highp vec2 v ) { 1430 return unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) ); 1431} 1432vec4 pack2HalfToRGBA( vec2 v ) { 1433 vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) ); 1434 return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w ); 1435} 1436vec2 unpackRGBATo2Half( vec4 v ) { 1437 return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) ); 1438} 1439float viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) { 1440 return ( viewZ + near ) / ( near - far ); 1441} 1442float orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) { 1443 return linearClipZ * ( near - far ) - near; 1444} 1445float viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) { 1446 return ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ ); 1447} 1448float perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) { 1449 return ( near * far ) / ( ( far - near ) * invClipZ - far ); 1450}`,premultiplied_alpha_fragment:`#ifdef PREMULTIPLIED_ALPHA 1451 gl_FragColor.rgb *= gl_FragColor.a; 1452#endif`,project_vertex:`vec4 mvPosition = vec4( transformed, 1.0 ); 1453#ifdef USE_INSTANCING 1454 mvPosition = instanceMatrix * mvPosition; 1455#endif 1456mvPosition = modelViewMatrix * mvPosition; 1457gl_Position = projectionMatrix * mvPosition;`,dithering_fragment:`#ifdef DITHERING 1458 gl_FragColor.rgb = dithering( gl_FragColor.rgb ); 1459#endif`,dithering_pars_fragment:`#ifdef DITHERING 1460 vec3 dithering( vec3 color ) { 1461 float grid_position = rand( gl_FragCoord.xy ); 1462 vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 ); 1463 dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position ); 1464 return color + dither_shift_RGB; 1465 } 1466#endif`,roughnessmap_fragment:`float roughnessFactor = roughness; 1467#ifdef USE_ROUGHNESSMAP 1468 vec4 texelRoughness = texture2D( roughnessMap, vUv ); 1469 roughnessFactor *= texelRoughness.g; 1470#endif`,roughnessmap_pars_fragment:`#ifdef USE_ROUGHNESSMAP 1471 uniform sampler2D roughnessMap;
1472#endif`,shadowmap_pars_fragment:`#if NUM_SPOT_LIGHT_COORDS > 0 1473 varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; 1474#endif 1475#if NUM_SPOT_LIGHT_MAPS > 0 1476 uniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ]; 1477#endif 1478#ifdef USE_SHADOWMAP 1479 #if NUM_DIR_LIGHT_SHADOWS > 0 1480 uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ]; 1481 varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; 1482 struct DirectionalLightShadow { 1483 float shadowBias; 1484 float shadowNormalBias; 1485 float shadowRadius; 1486 vec2 shadowMapSize; 1487 }; 1488 uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; 1489 #endif 1490 #if NUM_SPOT_LIGHT_SHADOWS > 0 1491 uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ]; 1492 struct SpotLightShadow { 1493 float shadowBias; 1494 float shadowNormalBias; 1495 float shadowRadius; 1496 vec2 shadowMapSize; 1497 }; 1498 uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; 1499 #endif 1500 #if NUM_POINT_LIGHT_SHADOWS > 0 1501 uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ]; 1502 varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; 1503 struct PointLightShadow { 1504 float shadowBias; 1505 float shadowNormalBias; 1506 float shadowRadius; 1507 vec2 shadowMapSize; 1508 float shadowCameraNear; 1509 float shadowCameraFar; 1510 }; 1511 uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; 1512 #endif 1513 float texture2DCompare( sampler2D depths, vec2 uv, float compare ) { 1514 return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) ); 1515 } 1516 vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) { 1517 return unpackRGBATo2Half( texture2D( shadow, uv ) ); 1518 } 1519 float VSMShadow (sampler2D shadow, vec2 uv, float compare ){ 1520 float occlusion = 1.0; 1521 vec2 distribution = texture2DDistribution( shadow, uv ); 1522 float hard_shadow = step( compare , distribution.x ); 1523 if (hard_shadow != 1.0 ) { 1524 float distance = compare - distribution.x ; 1525 float variance = max( 0.00000, distribution.y * distribution.y ); 1526 float softness_probability = variance / (variance + distance * distance ); softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 ); 1527 } 1528 return occlusion; 1529 } 1530 float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) { 1531 float shadow = 1.0; 1532 shadowCoord.xyz /= shadowCoord.w; 1533 shadowCoord.z += shadowBias; 1534 bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0; 1535 bool frustumTest = inFrustum && shadowCoord.z <= 1.0; 1536 if ( frustumTest ) { 1537 #if defined( SHADOWMAP_TYPE_PCF ) 1538 vec2 texelSize = vec2( 1.0 ) / shadowMapSize; 1539 float dx0 = - texelSize.x * shadowRadius; 1540 float dy0 = - texelSize.y * shadowRadius; 1541 float dx1 = + texelSize.x * shadowRadius; 1542 float dy1 = + texelSize.y * shadowRadius; 1543 float dx2 = dx0 / 2.0; 1544 float dy2 = dy0 / 2.0; 1545 float dx3 = dx1 / 2.0; 1546 float dy3 = dy1 / 2.0; 1547 shadow = ( 1548 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) + 1549 texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) + 1550 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) + 1551 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) + 1552 texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) + 1553 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) + 1554 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) + 1555 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) + 1556 texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) + 1557 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) + 1558 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) + 1559 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) + 1560 texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) + 1561 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) + 1562 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) + 1563 texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) + 1564 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z ) 1565 ) * ( 1.0 / 17.0 ); 1566 #elif defined( SHADOWMAP_TYPE_PCF_SOFT ) 1567 vec2 texelSize = vec2( 1.0 ) / shadowMapSize; 1568 float dx = texelSize.x; 1569 float dy = texelSize.y; 1570 vec2 uv = shadowCoord.xy;
1571 vec2 f = fract( uv * shadowMapSize + 0.5 ); 1572 uv -= f * texelSize; 1573 shadow = ( 1574 texture2DCompare( shadowMap, uv, shadowCoord.z ) + 1575 texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) + 1576 texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) + 1577 texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) + 1578 mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), 1579 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ), 1580 f.x ) + 1581 mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), 1582 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ), 1583 f.x ) + 1584 mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), 1585 texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ), 1586 f.y ) + 1587 mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), 1588 texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ), 1589 f.y ) + 1590 mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), 1591 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ), 1592 f.x ), 1593 mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), 1594 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ), 1595 f.x ), 1596 f.y ) 1597 ) * ( 1.0 / 9.0 ); 1598 #elif defined( SHADOWMAP_TYPE_VSM ) 1599 shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z ); 1600 #else 1601 shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ); 1602 #endif 1603 } 1604 return shadow; 1605 } 1606 vec2 cubeToUV( vec3 v, float texelSizeY ) { 1607 vec3 absV = abs( v ); 1608 float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) ); 1609 absV *= scaleToCube; 1610 v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY ); 1611 vec2 planar = v.xy; 1612 float almostATexel = 1.5 * texelSizeY; 1613 float almostOne = 1.0 - almostATexel; 1614 if ( absV.z >= almostOne ) { 1615 if ( v.z > 0.0 ) 1616 planar.x = 4.0 - v.x; 1617 } else if ( absV.x >= almostOne ) { 1618 float signX = sign( v.x ); 1619 planar.x = v.z * signX + 2.0 * signX; 1620 } else if ( absV.y >= almostOne ) { 1621 float signY = sign( v.y ); 1622 planar.x = v.x + 2.0 * signY + 2.0; 1623 planar.y = v.z * signY - 2.0; 1624 } 1625 return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 ); 1626 } 1627 float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) { 1628 vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) ); 1629 vec3 lightToPosition = shadowCoord.xyz; 1630 float dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); dp += shadowBias; 1631 vec3 bd3D = normalize( lightToPosition ); 1632 #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM ) 1633 vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y; 1634 return ( 1635 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) + 1636 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) + 1637 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) + 1638 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) + 1639 texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) + 1640 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) + 1641 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) + 1642 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) + 1643 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp ) 1644 ) * ( 1.0 / 9.0 ); 1645 #else 1646 return texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ); 1647 #endif 1648 } 1649#endif`,shadowmap_pars_vertex:`#if NUM_SPOT_LIGHT_COORDS > 0 1650 uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ]; 1651 varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; 1652#endif 1653#ifdef USE_SHADOWMAP 1654 #if NUM_DIR_LIGHT_SHADOWS > 0 1655 uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ]; 1656 varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; 1657 struct DirectionalLightShadow { 1658 float shadowBias; 1659 float shadowNormalBias; 1660 float shadowRadius; 1661 vec2 shadowMapSize; 1662 }; 1663 uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; 1664 #endif
1665 #if NUM_SPOT_LIGHT_SHADOWS > 0 1666 struct SpotLightShadow { 1667 float shadowBias; 1668 float shadowNormalBias; 1669 float shadowRadius; 1670 vec2 shadowMapSize; 1671 }; 1672 uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; 1673 #endif 1674 #if NUM_POINT_LIGHT_SHADOWS > 0 1675 uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ]; 1676 varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; 1677 struct PointLightShadow { 1678 float shadowBias; 1679 float shadowNormalBias; 1680 float shadowRadius; 1681 vec2 shadowMapSize; 1682 float shadowCameraNear; 1683 float shadowCameraFar; 1684 }; 1685 uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; 1686 #endif 1687#endif`,shadowmap_vertex:`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) 1688 vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); 1689 vec4 shadowWorldPosition; 1690#endif 1691#if defined( USE_SHADOWMAP ) 1692 #if NUM_DIR_LIGHT_SHADOWS > 0 1693 #pragma unroll_loop_start 1694 for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) { 1695 shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 ); 1696 vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition; 1697 } 1698 #pragma unroll_loop_end 1699 #endif 1700 #if NUM_POINT_LIGHT_SHADOWS > 0 1701 #pragma unroll_loop_start 1702 for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) { 1703 shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 ); 1704 vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition; 1705 } 1706 #pragma unroll_loop_end 1707 #endif 1708#endif 1709#if NUM_SPOT_LIGHT_COORDS > 0 1710 #pragma unroll_loop_start 1711 for ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) { 1712 shadowWorldPosition = worldPosition; 1713 #if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) 1714 shadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias; 1715 #endif 1716 vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition; 1717 } 1718 #pragma unroll_loop_end 1719#endif`,shadowmask_pars_fragment:`float getShadowMask() { 1720 float shadow = 1.0; 1721 #ifdef USE_SHADOWMAP 1722 #if NUM_DIR_LIGHT_SHADOWS > 0 1723 DirectionalLightShadow directionalLight; 1724 #pragma unroll_loop_start 1725 for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) { 1726 directionalLight = directionalLightShadows[ i ]; 1727 shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; 1728 } 1729 #pragma unroll_loop_end 1730 #endif 1731 #if NUM_SPOT_LIGHT_SHADOWS > 0 1732 SpotLightShadow spotLight; 1733 #pragma unroll_loop_start 1734 for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) { 1735 spotLight = spotLightShadows[ i ]; 1736 shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0; 1737 } 1738 #pragma unroll_loop_end 1739 #endif 1740 #if NUM_POINT_LIGHT_SHADOWS > 0 1741 PointLightShadow pointLight; 1742 #pragma unroll_loop_start 1743 for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) { 1744 pointLight = pointLightShadows[ i ]; 1745 shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0; 1746 } 1747 #pragma unroll_loop_end 1748 #endif 1749 #endif 1750 return shadow; 1751}`,skinbase_vertex:`#ifdef USE_SKINNING 1752 mat4 boneMatX = getBoneMatrix( skinIndex.x ); 1753 mat4 boneMatY = getBoneMatrix( skinIndex.y ); 1754 mat4 boneMatZ = getBoneMatrix( skinIndex.z ); 1755 mat4 boneMatW = getBoneMatrix( skinIndex.w ); 1756#endif`,skinning_pars_vertex:`#ifdef USE_SKINNING 1757 uniform mat4 bindMatrix; 1758 uniform mat4 bindMatrixInverse; 1759 uniform highp sampler2D boneTexture; 1760 uniform int boneTextureSize; 1761 mat4 getBoneMatrix( const in float i ) { 1762 float j = i * 4.0; 1763 float x = mod( j, float( boneTextureSize ) ); 1764 float y = floor( j / float( boneTextureSize ) ); 1765 float dx = 1.0 / float( boneTextureSize ); 1766 float dy = 1.0 / float( boneTextureSize ); 1767 y = dy * ( y + 0.5 ); 1768 vec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) ); 1769 vec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) ); 1770 vec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) ); 1771 vec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) ); 1772 mat4 bone = mat4( v1, v2, v3, v4 ); 1773 return bone; 1774 } 1775#endif`,skinning_vertex:`#ifdef USE_SKINNING 1776 vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 ); 1777 vec4 skinned = vec4( 0.0 ); 1778 skinned += boneMatX * skinVertex * skinWeight.x; 1779 skinned += boneMatY * skinVertex * skinWeight.y; 1780 skinned += boneMatZ * skinVertex * skinWeight.z; 1781 skinned += boneMatW * skinVertex * skinWeight.w; 1782 transformed = ( bindMatrixInverse * skinned ).xyz; 1783#endif`,skinnormal_vertex:`#ifdef USE_SKINNING 1784 mat4 skinMatrix = mat4( 0.0 ); 1785 skinMatrix += skinWeight.x * boneMatX; 1786 skinMatrix += skinWeight.y * boneMatY; 1787 skinMatrix += skinWeight.z * boneMatZ; 1788 skinMatrix += skinWeight.w * boneMatW; 1789 skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix; 1790 objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz; 1791 #ifdef USE_TANGENT 1792 objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz; 1793 #endif 1794#endif`,specularmap_fragment:`float specularStrength; 1795#ifdef USE_SPECULARMAP 1796 vec4 texelSpecular = texture2D( specularMap, vUv ); 1797 specularStrength = texelSpecular.r; 1798#else 1799 specularStrength = 1.0; 1800#endif`,specularmap_pars_fragment:`#ifdef USE_SPECULARMAP 1801 uniform sampler2D specularMap; 1802#endif`,tonemapping_fragment:`#if defined( TONE_MAPPING ) 1803 gl_FragColor.rgb = toneMapping( gl_FragColor.rgb ); 1804#endif`,tonemapping_pars_fragment:`#ifndef saturate 1805#define saturate( a ) clamp( a, 0.0, 1.0 ) 1806#endif 1807uniform float toneMappingExposure; 1808vec3 LinearToneMapping( vec3 color ) { 1809 return toneMappingExposure * color; 1810} 1811vec3 ReinhardToneMapping( vec3 color ) { 1812 color *= toneMappingExposure; 1813 return saturate( color / ( vec3( 1.0 ) + color ) ); 1814} 1815vec3 OptimizedCineonToneMapping( vec3 color ) { 1816 color *= toneMappingExposure; 1817 color = max( vec3( 0.0 ), color - 0.004 ); 1818 return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) ); 1819} 1820vec3 RRTAndODTFit( vec3 v ) { 1821 vec3 a = v * ( v + 0.0245786 ) - 0.000090537; 1822 vec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081; 1823 return a / b; 1824} 1825vec3 ACESFilmicToneMapping( vec3 color ) { 1826 const mat3 ACESInputMat = mat3( 1827 vec3( 0.59719, 0.07600, 0.02840 ), vec3( 0.35458, 0.90834, 0.13383 ), 1828 vec3( 0.04823, 0.01566, 0.83777 ) 1829 ); 1830 const mat3 ACESOutputMat = mat3( 1831 vec3( 1.60475, -0.10208, -0.00327 ), vec3( -0.53108, 1.10813, -0.07276 ), 1832 vec3( -0.07367, -0.00605, 1.07602 ) 1833 ); 1834 color *= toneMappingExposure / 0.6; 1835 color = ACESInputMat * color; 1836 color = RRTAndODTFit( color ); 1837 color = ACESOutputMat * color; 1838 return saturate( color ); 1839} 1840vec3 CustomToneMapping( vec3 color ) { return color; }`,transmission_fragment:`#ifdef USE_TRANSMISSION 1841 material.transmission = transmission; 1842 material.transmissionAlpha = 1.0; 1843 material.thickness = thickness; 1844 material.attenuationDistance = attenuationDistance; 1845 material.attenuationColor = attenuationColor; 1846 #ifdef USE_TRANSMISSIONMAP 1847 material.transmission *= texture2D( transmissionMap, vUv ).r; 1848 #endif 1849 #ifdef USE_THICKNESSMAP 1850 material.thickness *= texture2D( thicknessMap, vUv ).g;
1851 #endif 1852 vec3 pos = vWorldPosition; 1853 vec3 v = normalize( cameraPosition - pos ); 1854 vec3 n = inverseTransformDirection( normal, viewMatrix ); 1855 vec4 transmission = getIBLVolumeRefraction( 1856 n, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90, 1857 pos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness, 1858 material.attenuationColor, material.attenuationDistance ); 1859 material.transmissionAlpha = mix( material.transmissionAlpha, transmission.a, material.transmission ); 1860 totalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission ); 1861#endif`,transmission_pars_fragment:`#ifdef USE_TRANSMISSION 1862 uniform float transmission; 1863 uniform float thickness; 1864 uniform float attenuationDistance; 1865 uniform vec3 attenuationColor; 1866 #ifdef USE_TRANSMISSIONMAP 1867 uniform sampler2D transmissionMap; 1868 #endif 1869 #ifdef USE_THICKNESSMAP 1870 uniform sampler2D thicknessMap; 1871 #endif 1872 uniform vec2 transmissionSamplerSize; 1873 uniform sampler2D transmissionSamplerMap; 1874 uniform mat4 modelMatrix; 1875 uniform mat4 projectionMatrix; 1876 varying vec3 vWorldPosition; 1877 vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) { 1878 vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior ); 1879 vec3 modelScale; 1880 modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) ); 1881 modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) ); 1882 modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) ); 1883 return normalize( refractionVector ) * thickness * modelScale; 1884 } 1885 float applyIorToRoughness( const in float roughness, const in float ior ) { 1886 return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 ); 1887 } 1888 vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) { 1889 float framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior ); 1890 #ifdef texture2DLodEXT 1891 return texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod ); 1892 #else 1893 return texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod ); 1894 #endif 1895 } 1896 vec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) { 1897 if ( isinf( attenuationDistance ) ) { 1898 return radiance; 1899 } else { 1900 vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance; 1901 vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); return transmittance * radiance; 1902 } 1903 } 1904 vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor, 1905 const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix, 1906 const in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness, 1907 const in vec3 attenuationColor, const in float attenuationDistance ) { 1908 vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix ); 1909 vec3 refractedRayExit = position + transmissionRay; 1910 vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 ); 1911 vec2 refractionCoords = ndcPos.xy / ndcPos.w; 1912 refractionCoords += 1.0; 1913 refractionCoords /= 2.0; 1914 vec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior ); 1915 vec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance ); 1916 vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness ); 1917 return vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a ); 1918 } 1919#endif`,uv_pars_fragment:`#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) ) 1920 varying vec2 vUv; 1921#endif`,uv_pars_vertex:`#ifdef USE_UV 1922 #ifdef UVS_VERTEX_ONLY 1923 vec2 vUv; 1924 #else 1925 varying vec2 vUv; 1926 #endif 1927 uniform mat3 uvTransform; 1928#endif`,uv_vertex:`#ifdef USE_UV 1929 vUv = ( uvTransform * vec3( uv, 1 ) ).xy; 1930#endif`,uv2_pars_fragment:`#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP ) 1931 varying vec2 vUv2; 1932#endif`,uv2_pars_vertex:`#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP ) 1933 attribute vec2 uv2; 1934 varying vec2 vUv2; 1935 uniform mat3 uv2Transform; 1936#endif`,uv2_vertex:`#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP ) 1937 vUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy; 1938#endif`,worldpos_vertex:`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_L
1938IGHT_COORDS > 0 1939 vec4 worldPosition = vec4( transformed, 1.0 ); 1940 #ifdef USE_INSTANCING 1941 worldPosition = instanceMatrix * worldPosition; 1942 #endif 1943 worldPosition = modelMatrix * worldPosition; 1944#endif`,background_vert:`varying vec2 vUv; 1945uniform mat3 uvTransform; 1946void main() { 1947 vUv = ( uvTransform * vec3( uv, 1 ) ).xy; 1948 gl_Position = vec4( position.xy, 1.0, 1.0 ); 1949}`,background_frag:`uniform sampler2D t2D; 1950uniform float backgroundIntensity; 1951varying vec2 vUv; 1952void main() { 1953 vec4 texColor = texture2D( t2D, vUv ); 1954 #ifdef DECODE_VIDEO_TEXTURE 1955 texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w ); 1956 #endif 1957 texColor.rgb *= backgroundIntensity; 1958 gl_FragColor = texColor; 1959 #include <tonemapping_fragment> 1960 #include <encodings_fragment> 1961}`,backgroundCube_vert:`varying vec3 vWorldDirection; 1962#include <common> 1963void main() { 1964 vWorldDirection = transformDirection( position, modelMatrix ); 1965 #include <begin_vertex> 1966 #include <project_vertex> 1967 gl_Position.z = gl_Position.w; 1968}`,backgroundCube_frag:`#ifdef ENVMAP_TYPE_CUBE 1969 uniform samplerCube envMap; 1970#elif defined( ENVMAP_TYPE_CUBE_UV ) 1971 uniform sampler2D envMap; 1972#endif 1973uniform float flipEnvMap; 1974uniform float backgroundBlurriness; 1975uniform float backgroundIntensity; 1976varying vec3 vWorldDirection; 1977#include <cube_uv_reflection_fragment> 1978void main() { 1979 #ifdef ENVMAP_TYPE_CUBE 1980 vec4 texColor = textureCube( envMap, vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) ); 1981 #elif defined( ENVMAP_TYPE_CUBE_UV ) 1982 vec4 texColor = textureCubeUV( envMap, vWorldDirection, backgroundBlurriness ); 1983 #else 1984 vec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 ); 1985 #endif 1986 texColor.rgb *= backgroundIntensity; 1987 gl_FragColor = texColor; 1988 #include <tonemapping_fragment> 1989 #include <encodings_fragment> 1990}`,cube_vert:`varying vec3 vWorldDirection; 1991#include <common> 1992void main() { 1993 vWorldDirection = transformDirection( position, modelMatrix ); 1994 #include <begin_vertex> 1995 #include <project_vertex> 1996 gl_Position.z = gl_Position.w; 1997}`,cube_frag:`uniform samplerCube tCube; 1998uniform float tFlip; 1999uniform float opacity; 2000varying vec3 vWorldDirection; 2001void main() { 2002 vec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) ); 2003 gl_FragColor = texColor; 2004 gl_FragColor.a *= opacity; 2005 #include <tonemapping_fragment> 2006 #include <encodings_fragment> 2007}`,depth_vert:`#include <common> 2008#include <uv_pars_vertex> 2009#include <displacementmap_pars_vertex> 2010#include <morphtarget_pars_vertex> 2011#include <skinning_pars_vertex> 2012#include <logdepthbuf_pars_vertex> 2013#include <clipping_planes_pars_vertex> 2014varying vec2 vHighPrecisionZW; 2015void main() { 2016 #include <uv_vertex> 2017 #include <skinbase_vertex> 2018 #ifdef USE_DISPLACEMENTMAP 2019 #include <beginnormal_vertex> 2020 #include <morphnormal_vertex> 2021 #include <skinnormal_vertex> 2022 #endif 2023 #include <begin_vertex> 2024 #include <morphtarget_vertex> 2025 #include <skinning_vertex> 2026 #include <displacementmap_vertex> 2027 #include <project_vertex> 2028 #include <logdepthbuf_vertex> 2029 #include <clipping_planes_vertex> 2030 vHighPrecisionZW = gl_Position.zw; 2031}`,depth_frag:`#if DEPTH_PACKING == 3200 2032 uniform float opacity; 2033#endif 2034#include <common> 2035#include <packing> 2036#include <uv_pars_fragment> 2037#include <map_pars_fragment> 2038#include <alphamap_pars_fragment> 2039#include <alphatest_pars_fragment> 2040#include <logdepthbuf_pars_fragment> 2041#include <clipping_planes_pars_fragment> 2042varying vec2 vHighPrecisionZW; 2043void main() { 2044 #include <clipping_planes_fragment> 2045 vec4 diffuseColor = vec4( 1.0 ); 2046 #if DEPTH_PACKING == 3200 2047 diffuseColor.a = opacity; 2048 #endif 2049 #include <map_fragment> 2050 #include <alphamap_fragment> 2051 #include <alphatest_fragment> 2052 #include <logdepthbuf_fragment> 2053 float fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5; 2054 #if DEPTH_PACKING == 3200 2055 gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity ); 2056 #elif DEPTH_PACKING == 3201 2057 gl_FragColor = packDepthToRGBA( fragCoordZ ); 2058 #endif 2059}`,distanceRGBA_vert:`#define DISTANCE 2060varying vec3 vWorldPosition; 2061#include <common> 2062#include <uv_pars_vertex> 2063#include <displacementmap_pars_vertex> 2064#include <morphtarget_pars_vertex> 2065#include <skinning_pars_vertex> 2066#include <clipping_planes_pars_vertex> 2067void main() { 2068 #include <uv_vertex> 2069 #include <skinbase_vertex> 2070 #ifdef USE_DISPLACEMENTMAP 2071 #include <beginnormal_vertex> 2072 #include <morphnormal_vertex> 2073 #include <skinnormal_vertex> 2074 #endif 2075 #include <begin_vertex> 2076 #include <morphtarget_vertex> 2077 #include <skinning_vertex> 2078 #include <displacementmap_vertex> 2079 #include <project_vertex> 2080 #include <worldpos_vertex> 2081 #include <clipping_planes_vertex> 2082 vWorldPosition = worldPosition.xyz; 2083}`,distanceRGBA_frag:`#define DISTANCE 2084uniform vec3 referencePosition; 2085uniform float nearDistance; 2086uniform float farDistance; 2087varying vec3 vWorldPosition; 2088#include <common> 2089#include <packing> 2090#include <uv_pars_fragment> 2091#include <map_pars_fragment> 2092#include <alphamap_pars_fragment> 2093#include <alphatest_pars_fragment> 2094#include <clipping_planes_pars_fragment> 2095void main () { 2096 #include <clipping_planes_fragment> 2097 vec4 diffuseColor = vec4( 1.0 ); 2098 #include <map_fragment> 2099 #include <alphamap_fragment> 2100 #include <alphatest_fragment> 2101 float dist = length( vWorldPosition - referencePosition ); 2102 dist = ( dist - nearDistance ) / ( farDistance - nearDistance ); 2103 dist = saturate( dist ); 2104 gl_FragColor = packDepthToRGBA( dist ); 2105}`,equirect_vert:`varying vec3 vWorldDirection; 2106#include <common> 2107void main() { 2108 vWorldDirection = transformDirection( position, modelMatrix ); 2109 #include <begin_vertex> 2110 #include <project_vertex> 2111}`,equirect_frag:`uniform sampler2D tEquirect; 2112varying vec3 vWorldDirection; 2113#include <common> 2114void main() { 2115 vec3 direction = normalize( vWorldDirection ); 2116 vec2 sampleUV = equirectUv( direction ); 2117 gl_FragColor = texture2D( tEquirect, sampleUV ); 2118 #include <tonemapping_fragment> 2119 #include <encodings_fragment> 2120}`,linedashed_vert:`uniform float scale; 2121attribute float lineDistance; 2122varying float vLineDistance; 2123#include <common> 2124#include <color_pars_vertex> 2125#include <fog_pars_vertex> 2126#include <morphtarget_pars_vertex> 2127#include <logdepthbuf_pars_vertex> 2128#include <clipping_planes_pars_vertex> 2129void main() { 2130 vLineDistance = scale * lineDistance; 2131 #include <color_vertex> 2132 #include <morphcolor_vertex> 2133 #include <begin_vertex> 2134 #include <morphtarget_vertex> 2135 #include <project_vertex> 2136 #include <logdepthbuf_vertex> 2137 #include <clipping_planes_vertex> 2138 #include <fog_vertex> 2139}`,linedashed_frag:`uniform vec3 diffuse; 2140uniform float opacity; 2141uniform float dashSize; 2142uniform float totalSize; 2143varying float vLineDistance; 2144#include <common> 2145#include <color_pars_fragment> 2146#include <fog_pars_fragment> 2147#include <logdepthbuf_pars_fragment> 2148#include <clipping_planes_pars_fragment> 2149void main() { 2150 #include <clipping_planes_fragment> 2151 if ( mod( vLineDistance, totalSize ) > dashSize ) { 2152 discard; 2153 } 2154 vec3 outgoingLight = vec3( 0.0 ); 2155 vec4 diffuseColor = vec4( diffuse, opacity ); 2156 #include <logdepthbuf_fragment> 2157 #include <color_fragment> 2158 outgoingLight = diffuseColor.rgb; 2159 #include <output_fragment> 2160 #include <tonemapping_fragment> 2161 #include <encodings_fragment> 2162 #include <fog_fragment> 2163 #include <premultiplied_alpha_fragment> 2164}`,meshbasic_vert:`#include <common> 2165#include <uv_pars_vertex> 2166#include <uv2_pars_vertex> 2167#include <envmap_pars_vertex> 2168#include <color_pars_vertex> 2169#include <fog_pars_vertex> 2170#include <morphtarget_pars_vertex> 2171#include <skinning_pars_vertex> 2172#include <logdepthbuf_pars_vertex> 2173#include <clipping_planes_pars_vertex> 2174void main() { 2175 #include <uv_vertex> 2176 #include <uv2_vertex> 2177 #include <color_vertex> 2178 #include <morphcolor_vertex> 2179 #if defined ( USE_ENVMAP ) || defined ( USE_SKINNING ) 2180 #include <beginnormal_vertex> 2181 #include <morphnormal_vertex> 2182 #include <skinbase_vertex> 2183 #include <skinnormal_vertex> 2184 #include <defaultnormal_vertex> 2185 #endif 2186 #include <begin_vertex> 2187 #include <morphtarget_vertex> 2188 #include <skinning_vertex> 2189 #include <project_vertex> 2190 #include <logdepthbuf_vertex> 2191 #include <clipping_planes_vertex> 2192 #include <worldpos_vertex> 2193 #include <envmap_vertex> 2194 #include <fog_vertex> 2195}`,meshbasic_frag:`uniform vec3 diffuse; 2196uniform float opacity; 2197#ifndef FLAT_SHADED 2198 varying vec3 vNormal; 2199#endif 2200#include <common> 2201#include <dithering_pars_fragment> 2202#include <color_pars_fragment> 2203#include <uv_pars_fragment> 2204#include <uv2_pars_fragment> 2205#include <map_pars_fragment> 2206#include <alphamap_pars_fragment> 2207#include <alphatest_pars_fragment> 2208#include <aomap_pars_fragment> 2209#include <lightmap_pars_fragment> 2210#include <envmap_common_pars_fragment> 2211#include <envmap_pars_fragment> 2212#include <fog_pars_fragment> 2213#include <specularmap_pars_fragment> 2214#include <logdepthbuf_pars_fragment> 2215#include <clipping_planes_pars_fragment> 2216void main() { 2217 #include <clipping_planes_fragment> 2218 vec4 diffuseColor = vec4( diffuse, opacity ); 2219 #include <logdepthbuf_fragment> 2220 #include <map_fragment> 2221 #include <color_fragment> 2222 #include <alphamap_fragment> 2223 #include <alphatest_fragment> 2224 #include <specularmap_fragment> 2225 ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); 2226 #ifdef USE_LIGHTMAP 2227 vec4 lightMapTexel = texture2D( lightMap, vUv2 ); 2228 reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI; 2229 #else 2230 reflectedLight.indirectDiffuse += vec3( 1.0 ); 2231 #endif 2232 #include <aomap_fragment> 2233 reflectedLight.indirectDiffuse *= diffuseColor.rgb; 2234 vec3 outgoingLight = reflectedLight.indirectDiffuse; 2235 #include <envmap_fragment> 2236 #include <output_fragment> 2237 #include <tonemapping_fragment> 2238 #include <encodings_fragment> 2239 #include <fog_fragment> 2240 #include <premultiplied_alpha_fragment> 2241 #include <dithering_fragment> 2242}`,meshlambert_vert:`#define LAMBERT 2243varying vec3 vViewPosition; 2244#include <common> 2245#include <uv_pars_vertex> 2246#include <uv2_pars_vertex> 2247#include <displacementmap_pars_vertex> 2248#include <envmap_pars_vertex> 2249#include <color_pars_vertex> 2250#include <fog_pars_vertex> 2251#include <normal_pars_vertex> 2252#include <morphtarget_pars_vertex> 2253#include <skinning_pars_vertex> 2254#include <shadowmap_pars_vertex> 2255#include <logdepthbuf_pars_vertex> 2256#include <clipping_planes_pars_vertex> 2257void main() { 2258 #include <uv_vertex> 2259 #include <uv2_vertex> 2260 #include <color_vertex> 2261 #include <morphcolor_vertex> 2262 #include <beginnormal_vertex> 2263 #include <morphnormal_vertex> 2264 #include <skinbase_vertex> 2265 #include <skinnormal_vertex> 2266 #include <defaultnormal_vertex> 2267 #include <normal_vertex> 2268 #include <begin_vertex> 2269 #include <morphtarget_vertex> 2270 #include <skinning_vertex> 2271 #include <displacementmap_vertex> 2272 #include <project_vertex> 2273 #include <logdepthbuf_vertex> 2274 #include <clipping_planes_vertex> 2275 vViewPosition = - mvPosition.xyz; 2276 #include <worldpos_vertex> 2277 #include <envmap_vertex> 2278 #include <shadowmap_vertex> 2279 #include <fog_vertex> 2280}`,meshlambert_frag:`#define LAMBERT 2281uniform vec3 diffuse; 2282uniform vec3 emissive; 2283uniform float opacity; 2284#include <common> 2285#include <packing> 2286#include <dithering_pars_fragment> 2287#include <color_pars_fragment> 2288#include <uv_pars_fragment> 2289#include <uv2_pars_fragment> 2290#include <map_pars_fragment> 2291#include <alphamap_pars_fragment> 2292#include <alphatest_pars_fragment> 2293#include <aomap_pars_fragment> 2294#include <lightmap_pars_fragment> 2295#include <emissivemap_pars_fragment> 2296#include <envmap_common_pars_fragment> 2297#include <envmap_pars_fragment> 2298#include <fog_pars_fragment> 2299#include <bsdfs> 2300#include <lights_pars_begin> 2301#include <normal_pars_fragment> 2302#include <lights_lambert_pars_fragment> 2303#include <shadowmap_pars_fragment> 2304#include <bumpmap_pars_fragment> 2305#include <normalmap_pars_fragment> 2306#include <specularmap_pars_fragment> 2307#include <logdepthbuf_pars_fragment> 2308#include <clipping_planes_pars_fragment> 2309void main() { 2310 #include <clipping_planes_fragment> 2311 vec4 diffuseColor = vec4( diffuse, opacity ); 2312 ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); 2313 vec3 totalEmissiveRadiance = emissive; 2314 #include <logdepthbuf_fragment> 2315 #include <map_fragment> 2316 #include <color_fragment> 2317 #include <alphamap_fragment> 2318 #include <alphatest_fragment> 2319 #include <specularmap_fragment> 2320 #include <normal_fragment_begin> 2321 #include <normal_fragment_maps> 2322 #include <emissivemap_fragment> 2323 #include <lights_lambert_fragment> 2324 #include <lights_fragment_begin> 2325 #include <lights_fragment_maps> 2326 #include <lights_fragment_end> 2327 #include <aomap_fragment> 2328 vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance; 2329 #include <envmap_fragment> 2330 #include <output_fragment> 2331 #include <tonemapping_fragment> 2332 #include <encodings_fragment> 2333 #include <fog_fragment> 2334 #include <premultiplied_alpha_fragment> 2335 #include <dithering_fragment> 2336}`,meshmatcap_vert:`#define MATCAP 2337varying vec3 vViewPosition; 2338#include <common> 2339#include <uv_pars_vertex> 2340#include <color_pars_vertex> 2341#include <displacementmap_pars_vertex> 2342#include <fog_pars_vertex> 2343#include <normal_pars_vertex> 2344#include <morphtarget_pars_vertex> 2345#include <skinning_pars_vertex> 2346#include <logdepthbuf_pars_vertex> 2347#include <clipping_planes_pars_vertex> 2348void main() { 2349 #include <uv_vertex> 2350 #include <color_vertex> 2351 #include <morphcolor_vertex> 2352 #include <beginnormal_vertex> 2353 #include <morphnormal_vertex> 2354 #include <skinbase_vertex> 2355 #include <skinnormal_vertex> 2356 #include <defaultnormal_vertex> 2357 #include <normal_vertex> 2358 #include <begin_vertex> 2359 #include <morphtarget_vertex> 2360 #include <skinning_vertex> 2361 #include <displacementmap_vertex> 2362 #include <project_vertex> 2363 #include <logdepthbuf_vertex> 2364 #include <clipping_planes_vertex> 2365 #include <fog_vertex> 2366 vViewPosition = - mvPosition.xyz; 2367}`,meshmatcap_frag:`#define MATCAP 2368uniform vec3 diffuse; 2369uniform float opacity; 2370uniform sampler2D matcap; 2371varying vec3 vViewPosition; 2372#include <common> 2373#include <dithering_pars_fragment> 2374#include <color_pars_fragment> 2375#include <uv_pars_fragment> 2376#include <map_pars_fragment> 2377#include <alphamap_pars_fragment> 2378#include <alphatest_pars_fragment> 2379#include <fog_pars_fragment> 2380#include <normal_pars_fragment> 2381#include <bumpmap_pars_fragment> 2382#include <normalmap_pars_fragment> 2383#include <logdepthbuf_pars_fragment> 2384#include <clipping_planes_pars_fragment> 2385void main() { 2386 #include <clipping_planes_fragment> 2387 vec4 diffuseColor = vec4( diffuse, opacity ); 2388 #include <logdepthbuf_fragment> 2389 #include <map_fragment> 2390 #include <color_fragment> 2391 #include <alphamap_fragment> 2392 #include <alphatest_fragment> 2393 #include <normal_fragment_begin> 2394 #include <normal_fragment_maps> 2395 vec3 viewDir = normalize( vViewPosition ); 2396 vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) ); 2397 vec3 y = cross( viewDir, x ); 2398 vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; 2399 #ifdef USE_MATCAP
2400 vec4 matcapColor = texture2D( matcap, uv ); 2401 #else 2402 vec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 ); 2403 #endif 2404 vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb; 2405 #include <output_fragment> 2406 #include <tonemapping_fragment> 2407 #include <encodings_fragment> 2408 #include <fog_fragment> 2409 #include <premultiplied_alpha_fragment> 2410 #include <dithering_fragment> 2411}`,meshnormal_vert:`#define NORMAL 2412#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP ) 2413 varying vec3 vViewPosition; 2414#endif 2415#include <common> 2416#include <uv_pars_vertex> 2417#include <displacementmap_pars_vertex> 2418#include <normal_pars_vertex> 2419#include <morphtarget_pars_vertex> 2420#include <skinning_pars_vertex> 2421#include <logdepthbuf_pars_vertex> 2422#include <clipping_planes_pars_vertex> 2423void main() { 2424 #include <uv_vertex> 2425 #include <beginnormal_vertex> 2426 #include <morphnormal_vertex> 2427 #include <skinbase_vertex> 2428 #include <skinnormal_vertex> 2429 #include <defaultnormal_vertex> 2430 #include <normal_vertex> 2431 #include <begin_vertex> 2432 #include <morphtarget_vertex> 2433 #include <skinning_vertex> 2434 #include <displacementmap_vertex> 2435 #include <project_vertex> 2436 #include <logdepthbuf_vertex> 2437 #include <clipping_planes_vertex> 2438#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP ) 2439 vViewPosition = - mvPosition.xyz; 2440#endif 2441}`,meshnormal_frag:`#define NORMAL 2442uniform float opacity; 2443#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP ) 2444 varying vec3 vViewPosition; 2445#endif 2446#include <packing> 2447#include <uv_pars_fragment> 2448#include <normal_pars_fragment> 2449#include <bumpmap_pars_fragment> 2450#include <normalmap_pars_fragment> 2451#include <logdepthbuf_pars_fragment> 2452#include <clipping_planes_pars_fragment> 2453void main() { 2454 #include <clipping_planes_fragment> 2455 #include <logdepthbuf_fragment> 2456 #include <normal_fragment_begin> 2457 #include <normal_fragment_maps> 2458 gl_FragColor = vec4( packNormalToRGB( normal ), opacity ); 2459 #ifdef OPAQUE 2460 gl_FragColor.a = 1.0; 2461 #endif 2462}`,meshphong_vert:`#define PHONG 2463varying vec3 vViewPosition; 2464#include <common> 2465#include <uv_pars_vertex> 2466#include <uv2_pars_vertex> 2467#include <displacementmap_pars_vertex> 2468#include <envmap_pars_vertex> 2469#include <color_pars_vertex> 2470#include <fog_pars_vertex> 2471#include <normal_pars_vertex> 2472#include <morphtarget_pars_vertex> 2473#include <skinning_pars_vertex> 2474#include <shadowmap_pars_vertex> 2475#include <logdepthbuf_pars_vertex> 2476#include <clipping_planes_pars_vertex> 2477void main() { 2478 #include <uv_vertex> 2479 #include <uv2_vertex> 2480 #include <color_vertex> 2481 #include <morphcolor_vertex> 2482 #include <beginnormal_vertex> 2483 #include <morphnormal_vertex> 2484 #include <skinbase_vertex> 2485 #include <skinnormal_vertex> 2486 #include <defaultnormal_vertex> 2487 #include <normal_vertex> 2488 #include <begin_vertex> 2489 #include <morphtarget_vertex> 2490 #include <skinning_vertex> 2491 #include <displacementmap_vertex> 2492 #include <project_vertex> 2493 #include <logdepthbuf_vertex> 2494 #include <clipping_planes_vertex> 2495 vViewPosition = - mvPosition.xyz; 2496 #include <worldpos_vertex> 2497 #include <envmap_vertex> 2498 #include <shadowmap_vertex> 2499 #include <fog_vertex> 2500}`,meshphong_frag:`#define PHONG 2501uniform vec3 diffuse; 2502uniform vec3 emissive; 2503uniform vec3 specular; 2504uniform float shininess; 2505uniform float opacity; 2506#include <common> 2507#include <packing> 2508#include <dithering_pars_fragment> 2509#include <color_pars_fragment> 2510#include <uv_pars_fragment> 2511#include <uv2_pars_fragment> 2512#include <map_pars_fragment> 2513#include <alphamap_pars_fragment> 2514#include <alphatest_pars_fragment> 2515#include <aomap_pars_fragment> 2516#include <lightmap_pars_fragment> 2517#include <emissivemap_pars_fragment> 2518#include <envmap_common_pars_fragment> 2519#include <envmap_pars_fragment> 2520#include <fog_pars_fragment> 2521#include <bsdfs> 2522#include <lights_pars_begin> 2523#include <normal_pars_fragment> 2524#include <lights_phong_pars_fragment> 2525#include <shadowmap_pars_fragment> 2526#include <bumpmap_pars_fragment> 2527#include <normalmap_pars_fragment> 2528#include <specularmap_pars_fragment> 2529#include <logdepthbuf_pars_fragment> 2530#include <clipping_planes_pars_fragment> 2531void main() { 2532 #include <clipping_planes_fragment> 2533 vec4 diffuseColor = vec4( diffuse, opacity ); 2534 ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); 2535 vec3 totalEmissiveRadiance = emissive; 2536 #include <logdepthbuf_fragment> 2537 #include <map_fragment> 2538 #include <color_fragment> 2539 #include <alphamap_fragment> 2540 #include <alphatest_fragment> 2541 #include <specularmap_fragment> 2542 #include <normal_fragment_begin> 2543 #include <normal_fragment_maps> 2544 #include <emissivemap_fragment> 2545 #include <lights_phong_fragment> 2546 #include <lights_fragment_begin> 2547 #include <lights_fragment_maps> 2548 #include <lights_fragment_end> 2549 #include <aomap_fragment> 2550 vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance; 2551 #include <envmap_fragment> 2552 #include <output_fragment> 2553 #include <tonemapping_fragment> 2554 #include <encodings_fragment> 2555 #include <fog_fragment> 2556 #include <premultiplied_alpha_fragment> 2557 #include <dithering_fragment> 2558}`,meshphysical_vert:`#define STANDARD 2559varying vec3 vViewPosition; 2560#ifdef USE_TRANSMISSION 2561 varying vec3 vWorldPosition; 2562#endif 2563#include <common> 2564#include <uv_pars_vertex> 2565#include <uv2_pars_vertex> 2566#include <displacementmap_pars_vertex> 2567#include <color_pars_vertex> 2568#include <fog_pars_vertex> 2569#include <normal_pars_vertex> 2570#include <morphtarget_pars_vertex> 2571#include <skinning_pars_vertex> 2572#include <shadowmap_pars_vertex> 2573#include <logdepthbuf_pars_vertex> 2574#include <clipping_planes_pars_vertex> 2575void main() { 2576 #include <uv_vertex> 2577 #include <uv2_vertex> 2578 #include <color_vertex> 2579 #include <morphcolor_vertex> 2580 #include <beginnormal_vertex> 2581 #include <morphnormal_vertex> 2582 #include <skinbase_vertex> 2583 #include <skinnormal_vertex> 2584 #include <defaultnormal_vertex> 2585 #include <normal_vertex> 2586 #include <begin_vertex> 2587 #include <morphtarget_vertex> 2588 #include <skinning_vertex> 2589 #include <displacementmap_vertex> 2590 #include <project_vertex> 2591 #include <logdepthbuf_vertex> 2592 #include <clipping_planes_vertex> 2593 vViewPosition = - mvPosition.xyz; 2594 #include <worldpos_vertex> 2595 #include <shadowmap_vertex> 2596 #include <fog_vertex> 2597#ifdef USE_TRANSMISSION 2598 vWorldPosition = worldPosition.xyz; 2599#endif 2600}`,meshphysical_frag:`#define STANDARD 2601#ifdef PHYSICAL 2602 #define IOR 2603 #define SPECULAR 2604#endif 2605uniform vec3 diffuse; 2606uniform vec3 emissive; 2607uniform float roughness; 2608uniform float metalness; 2609uniform float opacity; 2610#ifdef IOR 2611 uniform float ior; 2612#endif 2613#ifdef SPECULAR 2614 uniform float specularIntensity; 2615 uniform vec3 specularColor; 2616 #ifdef USE_SPECULARINTENSITYMAP 2617 uniform sampler2D specularIntensityMap; 2618 #endif 2619 #ifdef USE_SPECULARCOLORMAP 2620 uniform sampler2D specularColorMap; 2621 #endif 2622#endif 2623#ifdef USE_CLEARCOAT 2624 uniform float clearcoat; 2625 uniform float clearcoatRoughness; 2626#endif
2627#ifdef USE_IRIDESCENCE 2628 uniform float iridescence; 2629 uniform float iridescenceIOR; 2630 uniform float iridescenceThicknessMinimum; 2631 uniform float iridescenceThicknessMaximum; 2632#endif 2633#ifdef USE_SHEEN 2634 uniform vec3 sheenColor; 2635 uniform float sheenRoughness; 2636 #ifdef USE_SHEENCOLORMAP 2637 uniform sampler2D sheenColorMap; 2638 #endif 2639 #ifdef USE_SHEENROUGHNESSMAP 2640 uniform sampler2D sheenRoughnessMap; 2641 #endif 2642#endif 2643varying vec3 vViewPosition; 2644#include <common> 2645#include <packing> 2646#include <dithering_pars_fragment> 2647#include <color_pars_fragment> 2648#include <uv_pars_fragment> 2649#include <uv2_pars_fragment> 2650#include <map_pars_fragment> 2651#include <alphamap_pars_fragment> 2652#include <alphatest_pars_fragment> 2653#include <aomap_pars_fragment> 2654#include <lightmap_pars_fragment> 2655#include <emissivemap_pars_fragment> 2656#include <bsdfs> 2657#include <iridescence_fragment> 2658#include <cube_uv_reflection_fragment> 2659#include <envmap_common_pars_fragment> 2660#include <envmap_physical_pars_fragment> 2661#include <fog_pars_fragment> 2662#include <lights_pars_begin> 2663#include <normal_pars_fragment> 2664#include <lights_physical_pars_fragment> 2665#include <transmission_pars_fragment> 2666#include <shadowmap_pars_fragment> 2667#include <bumpmap_pars_fragment> 2668#include <normalmap_pars_fragment> 2669#include <clearcoat_pars_fragment> 2670#include <iridescence_pars_fragment> 2671#include <roughnessmap_pars_fragment> 2672#include <metalnessmap_pars_fragment> 2673#include <logdepthbuf_pars_fragment> 2674#include <clipping_planes_pars_fragment> 2675void main() { 2676 #include <clipping_planes_fragment> 2677 vec4 diffuseColor = vec4( diffuse, opacity ); 2678 ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); 2679 vec3 totalEmissiveRadiance = emissive; 2680 #include <logdepthbuf_fragment> 2681 #include <map_fragment> 2682 #include <color_fragment> 2683 #include <alphamap_fragment> 2684 #include <alphatest_fragment> 2685 #include <roughnessmap_fragment> 2686 #include <metalnessmap_fragment> 2687 #include <normal_fragment_begin> 2688 #include <normal_fragment_maps> 2689 #include <clearcoat_normal_fragment_begin> 2690 #include <clearcoat_normal_fragment_maps> 2691 #include <emissivemap_fragment> 2692 #include <lights_physical_fragment> 2693 #include <lights_fragment_begin> 2694 #include <lights_fragment_maps> 2695 #include <lights_fragment_end> 2696 #include <aomap_fragment> 2697 vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse; 2698 vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular; 2699 #include <transmission_fragment> 2700 vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance; 2701 #ifdef USE_SHEEN 2702 float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor ); 2703 outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular; 2704 #endif 2705 #ifdef USE_CLEARCOAT 2706 float dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) ); 2707 vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc ); 2708 outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat; 2709 #endif 2710 #include <output_fragment> 2711 #include <tonemapping_fragment> 2712 #include <encodings_fragment> 2713 #include <fog_fragment> 2714 #include <premultiplied_alpha_fragment> 2715 #include <dithering_fragment> 2716}`,meshtoon_vert:`#define TOON 2717varying vec3 vViewPosition; 2718#include <common> 2719#include <uv_pars_vertex> 2720#include <uv2_pars_vertex> 2721#include <displacementmap_pars_vertex> 2722#include <color_pars_vertex> 2723#include <fog_pars_vertex> 2724#include <normal_pars_vertex> 2725#include <morphtarget_pars_vertex> 2726#include <skinning_pars_vertex> 2727#include <shadowmap_pars_vertex> 2728#include <logdepthbuf_pars_vertex> 2729#include <clipping_planes_pars_vertex> 2730void main() { 2731 #include <uv_vertex> 2732 #include <uv2_vertex> 2733 #include <color_vertex> 2734 #include <morphcolor_vertex> 2735 #include <beginnormal_vertex> 2736 #include <morphnormal_vertex> 2737 #include <skinbase_vertex> 2738 #include <skinnormal_vertex> 2739 #include <defaultnormal_vertex> 2740 #include <normal_vertex> 2741 #include <begin_vertex> 2742 #include <morphtarget_vertex> 2743 #include <skinning_vertex> 2744 #include <displacementmap_vertex> 2745 #include <project_vertex> 2746 #include <logdepthbuf_vertex> 2747 #include <clipping_planes_vertex> 2748 vViewPosition = - mvPosition.xyz; 2749 #include <worldpos_vertex> 2750 #include <shadowmap_vertex> 2751 #include <fog_vertex> 2752}`,meshtoon_frag:`#define TOON 2753uniform vec3 diffuse; 2754uniform vec3 emissive; 2755uniform float opacity; 2756#include <common> 2757#include <packing> 2758#include <dithering_pars_fragment> 2759#include <color_pars_fragment> 2760#include <uv_pars_fragment> 2761#include <uv2_pars_fragment> 2762#include <map_pars_fragment> 2763#include <alphamap_pars_fragment> 2764#include <alphatest_pars_fragment> 2765#include <aomap_pars_fragment> 2766#include <lightmap_pars_fragment> 2767#include <emissivemap_pars_fragment> 2768#include <gradientmap_pars_fragment> 2769#include <fog_pars_fragment> 2770#include <bsdfs> 2771#include <lights_pars_begin> 2772#include <normal_pars_fragment> 2773#include <lights_toon_pars_fragment> 2774#include <shadowmap_pars_fragment> 2775#include <bumpmap_pars_fragment> 2776#include <normalmap_pars_fragment> 2777#include <logdepthbuf_pars_fragment> 2778#include <clipping_planes_pars_fragment> 2779void main() { 2780 #include <clipping_planes_fragment> 2781 vec4 diffuseColor = vec4( diffuse, opacity ); 2782 ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); 2783 vec3 totalEmissiveRadiance = emissive; 2784 #include <logdepthbuf_fragment> 2785 #include <map_fragment> 2786 #include <color_fragment> 2787 #include <alphamap_fragment> 2788 #include <alphatest_fragment> 2789 #include <normal_fragment_begin> 2790 #include <normal_fragment_maps> 2791 #include <emissivemap_fragment> 2792 #include <lights_toon_fragment> 2793 #include <lights_fragment_begin> 2794 #include <lights_fragment_maps> 2795 #include <lights_fragment_end> 2796 #include <aomap_fragment> 2797 vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance; 2798 #include <output_fragment> 2799 #include <tonemapping_fragment> 2800 #include <encodings_fragment> 2801 #include <fog_fragment> 2802 #include <premultiplied_alpha_fragment> 2803 #include <dithering_fragment> 2804}`,points_vert:`uniform float size; 2805uniform float scale; 2806#include <common> 2807#include <color_pars_vertex> 2808#include <fog_pars_vertex> 2809#include <morphtarget_pars_vertex> 2810#include <logdepthbuf_pars_vertex> 2811#include <clipping_planes_pars_vertex> 2812void main() { 2813 #include <color_vertex> 2814 #include <morphcolor_vertex> 2815 #include <begin_vertex> 2816 #include <morphtarget_vertex> 2817 #include <project_vertex> 2818 gl_PointSize = size; 2819 #ifdef USE_SIZEATTENUATION 2820 bool isPerspective = isPerspectiveMatrix( projectionMatrix ); 2821 if ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z ); 2822 #endif 2823 #include <logdepthbuf_vertex> 2824 #include <clipping_planes_vertex> 2825 #include <worldpos_vertex> 2826 #include <fog_vertex> 2827}`,points_frag:`uniform vec3 diffuse; 2828uniform float opacity; 2829#include <common> 2830#include <color_pars_fragment> 2831#include <map_particle_pars_fragment> 2832#include <alphatest_pars_fragment> 2833#include <fog_pars_fragment> 2834#include <logdepthbuf_pars_fragment> 2835#include <clipping_planes_pars_fragment> 2836void main() { 2837 #include <clipping_planes_fragment> 2838 vec3 outgoingLight = vec3( 0.0 ); 2839 vec4 diffuseColor = vec4( diffuse, opacity ); 2840 #include <logdepthbuf_fragment> 2841 #include <map_particle_fragment> 2842 #include <color_fragment> 2843 #include <alphatest_fragment> 2844 outgoingLight = diffuseColor.rgb; 2845 #include <output_fragment> 2846 #include <tonemapping_fragment> 2847 #include <encodings_fragment> 2848 #include <fog_fragment> 2849 #include <premultiplied_alpha_fragment> 2850}`,shadow_vert:`#include <common> 2851#include <fog_pars_vertex> 2852#include <morphtarget_pars_vertex> 2853#include <skinning_pars_vertex> 2854#include <shadowmap_pars_vertex> 2855void main() { 2856 #include <beginnormal_vertex> 2857 #include <morphnormal_vertex> 2858 #include <skinbase_vertex> 2859 #include <skinnormal_vertex> 2860 #include <defaultnormal_vertex> 2861 #include <begin_vertex> 2862 #include <morphtarget_vertex> 2863 #include <skinning_vertex> 2864 #include <project_vertex> 2865 #include <worldpos_vertex> 2866 #include <shadowmap_vertex> 2867 #include <fog_vertex> 2868}`,shadow_frag:`uniform vec3 color; 2869uniform float opacity; 2870#include <common> 2871#include <packing> 2872#include <fog_pars_fragment> 2873#include <bsdfs> 2874#include <lights_pars_begin> 2875#include <shadowmap_pars_fragment> 2876#include <shadowmask_pars_fragment> 2877void main() { 2878 gl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) ); 2879 #include <tonemapping_fragment> 2880 #include <encodings_fragment> 2881 #include <fog_fragment> 2882}`,sprite_vert:`uniform float rotation; 2883uniform vec2 center; 2884#include <common> 2885#include <uv_pars_vertex> 2886#include <fog_pars_vertex> 2887#include <logdepthbuf_pars_vertex> 2888#include <clipping_planes_pars_vertex> 2889void main() { 2890 #include <uv_vertex> 2891 vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 ); 2892 vec2 scale; 2893 scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) ); 2894 scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) ); 2895 #ifndef USE_SIZEATTENUATION 2896 bool isPerspective = isPerspectiveMatrix( projectionMatrix ); 2897 if ( isPerspective ) scale *= - mvPosition.z; 2898 #endif 2899 vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale; 2900 vec2 rotatedPosition; 2901 rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y; 2902 rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y; 2903 mvPosition.xy += rotatedPosition; 2904 gl_Position = projectionMatrix * mvPosition; 2905 #include <logdepthbuf_vertex> 2906 #include <clipping_planes_vertex> 2907 #include <fog_vertex> 2908}`,sprite_frag:`uniform vec3 diffuse; 2909uniform float opacity; 2910#include <common> 2911#include <uv_pars_fragment> 2912#include <map_pars_fragment> 2913#include <alphamap_pars_fragment> 2914#include <alphatest_pars_fragment> 2915#include <fog_pars_fragment> 2916#include <logdepthbuf_pars_fragment> 2917#include <clipping_planes_pars_fragment> 2918void main() { 2919 #include <clipping_planes_fragment> 2920 vec3 outgoingLight = vec3( 0.0 ); 2921 vec4 diffuseColor = vec4( diffuse, opacity ); 2922 #include <logdepthbuf_fragment> 2923 #include <map_fragment> 2924 #include <alphamap_fragment> 2925 #include <alphatest_fragment> 2926 outgoingLight = diffuseColor.rgb; 2927 #include <output_fragment> 2928 #include <tonemapping_fragment> 2929 #include <encodings_fragment> 2930 #include <fog_fragment> 2931}`},su={common:{diffuse:{value:new ii(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new tK},uv2Transform:{value:new tK}
vendor: 4,239 bytes, line 2931
2931,alphaMap:{value:null},alphaTest:{value:0}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new tQ(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new ii(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new ii(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new tK}},sprite:{diffuse:{value:new ii(16777215)},opacity:{value:1},center:{value:new tQ(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new tK}}},sp={basic:{uniforms:r0([su.common,su.specularmap,su.envmap,su.aomap,su.lightmap,su.fog]),vertexShader:sd.meshbasic_vert,fragmentShader:sd.meshbasic_frag},lambert:{uniforms:r0([su.common,su.specularmap,su.envmap,su.aomap,su.lightmap,su.emissivemap,su.bumpmap,su.normalmap,su.displacementmap,su.fog,su.lights,{emissive:{value:new ii(0)}}]),vertexShader:sd.meshlambert_vert,fragmentShader:sd.meshlambert_frag},phong:{uniforms:r0([su.common,su.specularmap,su.envmap,su.aomap,su.lightmap,su.emissivemap,su.bumpmap,su.normalmap,su.displacementmap,su.fog,su.lights,{emissive:{value:new ii(0)},specular:{value:new ii(1118481)},shininess:{value:30}}]),vertexShader:sd.meshphong_vert,fragmentShader:sd.meshphong_frag},standard:{uniforms:r0([su.common,su.envmap,su.aomap,su.lightmap,su.emissivemap,su.bumpmap,su.normalmap,su.displacementmap,su.roughnessmap,su.metalnessmap,su.fog,su.lights,{emissive:{value:new ii(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:sd.meshphysical_vert,fragmentShader:sd.meshphysical_frag},toon:{uniforms:r0([su.common,su.aomap,su.lightmap,su.emissivemap,su.bumpmap,su.normalmap,su.displacementmap,su.gradientmap,su.fog,su.lights,{emissive:{value:new ii(0)}}]),vertexShader:sd.meshtoon_vert,fragmentShader:sd.meshtoon_frag},matcap:{uniforms:r0([su.common,su.bumpmap,su.normalmap,su.displacementmap,su.fog,{matcap:{value:null}}]),vertexShader:sd.meshmatcap_vert,fragmentShader:sd.meshmatcap_frag},points:{uniforms:r0([su.points,su.fog]),vertexShader:sd.points_vert,fragmentShader:sd.points_frag},dashed:{uniforms:r0([su.common,su.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:sd.linedashed_vert,fragmentShader:sd.linedashed_frag},depth:{uniforms:r0([su.common,su.displacementmap]),vertexShader:sd.depth_vert,fragmentShader:sd.depth_frag},normal:{uniforms:r0([su.common,su.bumpmap,su.normalmap,su.displacementmap,{opacity:{value:1}}]),vertexShader:sd.meshnormal_vert,fragmentShader:sd.meshnormal_frag}
2931,sprite:{uniforms:r0([su.sprite,su.fog]),vertexShader:sd.sprite_vert,fragmentShader:sd.sprite_frag},background:{uniforms:{uvTransform:{value:new tK},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:sd.background_vert,fragmentShader:sd.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1}},vertexShader:sd.backgroundCube_vert,fragmentShader:sd.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:sd.cube_vert,fragmentShader:sd.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:sd.equirect_vert,fragmentShader:sd.equirect_frag},distanceRGBA:{uniforms:r0([su.common,su.displacementmap,{referencePosition:{value:new iv},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:sd.distanceRGBA_vert,fragmentShader:sd.distanceRGBA_frag},shadow:{uniforms:r0([su.lights,su.fog,{color:{value:new ii(0)},opacity:{value:1}}]),vertexShader:sd.shadow_vert,fragmentShader:sd.shadow_frag}};sp.physical={uniforms:r0([sp.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new tQ(1,1)},clearcoatNormalMap:{value:null},iridescence:{value:0},iridescenceMap:{value:null},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},sheen:{value:0},sheenColor:{value:new ii(0)},sheenColorMap:{value:null},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new tQ},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationColor:{value:new ii(0)},specularIntensity:{value:1},specularIntensityMap:{value:null},specularColor:{value:new ii(1,1,1)},specularColorMap:{value:null}}]),vertexShader:sd.meshphysical_vert,fragmentShader:sd.meshphysical_frag};var sf={r:0,b:0,g:0};function sm(e,t,i,r,s,a,o){let l=new ii(0),h=!0===a?0:1,c,d,u=null,p=0,f=null;function m(t,i){t.getRGB(sf,r1(e)),r.buffers.color.setClear(sf.r,sf.g,sf.b,i,o)}return{getClearColor:function(){return l},setClearColor:function(e,t=1){l.set(e),m(l,h=t)},getClearAlpha:function(){return h},setClearAlpha:function(e){m(l,h=e)},render:function(r,a){let o=!1,g=!0===a.isScene?a.background:null;g&&g.isTexture&&(g=(a.backgroundBlurriness>0?i:t).get(g));let v=e.xr,y=v.getSession&&v.getSession();y&&"additive"===y.environmentBlendMode&&(g=null),null===g?m(l,h):g&&g.isColor&&(m(g,1),o=!0),(e.autoClear||o)&&e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil),g&&(g.isCubeTexture||306===g.mapping)?(void 0===d&&((d=new rK(new rJ(1,1,1),new r5({name:"BackgroundCubeMaterial",uniforms:r$(sp.backgroundCube.uniforms),vertexShader:sp.backgroundCube.vertexShader,fragmentShader:sp.backgroundCube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.deleteAttribute("normal"),d.geometry.deleteAttribute("uv"),d.onBeforeRender=function(e,t,i){this.matrixWorld.copyPosition(i.matrixWorld)},Object.defineProperty(d.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),s.update(d)),d.material.uniforms.envMap.value=g,d.material.uniforms.flipEnvMap.value=g.isCubeTexture&&!1===g.isRenderTargetTexture?-1:1,d.material.uniforms.backgroundBlurriness.value=a.backgroundBlurriness,d.material.uniforms.backgroundIntensity.value=a.backgroundIntensity,d.material.toneMapped=3001!==g.encoding,(u!==g||p!==g.version||f!==e.toneMapping)&&(d.material.needsUpdate=!0,u=g,p=g.version,f=e.toneMapping),d.layers.enableAll(),r.unshift(d,d.geometry,d.material,0,0,null)):g&&g.isTexture&&(void 0===c&&((c=new rK(new sc(2,2),new r5({name:"BackgroundMaterial",uniforms:r$(sp.background.uniforms),vertexShader:sp.background.vertexShader,fragmentShader:sp.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.deleteAttribute("normal"),Object.defineProperty(c.material,"map",{get:function(){return this.uniforms.t2D.value}}),s.update(c)),c.material.uniforms.t2D.value=g,c.material.uniforms.backgroundIntensity.value=a.backgroundIntensity,c.material.toneMapped=3001!==g.encoding,!0===g.matrixAutoUpdate&&g.updateMatrix(),c.material.uniforms.uvTransform.value.copy(g.matrix),(u!==g||p!==g.ver
2931sion||f!==e.toneMapping)&&(c.material.needsUpdate=!0,u=g,p=g.version,f=e.toneMapping),c.layers.enableAll(),r.unshift(c,c.geometry,c.material,0,0,null))}}}function sg(e,t,i,r){let s=e.getParameter(34921),a=r.isWebGL2?null:t.get("OES_vertex_array_object"),o=r.isWebGL2||null!==a,l={},h=f(null),c=h,d=!1;function u(t){return r.isWebGL2?e.bindVertexArray(t):a.bindVertexArrayOES(t)}function p(t){return r.isWebGL2?e.deleteVertexArray(t):a.deleteVertexArrayOES(t)}function f(e){let t=[],i=[],r=[];for(let e=0;e<s;e++)t[e]=0,i[e]=0,r[e]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:t,enabledAttributes:i,attributeDivisors:r,object:e,attributes:{},index:null}}function m(){let e=c.newAttributes;for(let t=0,i=e.length;t<i;t++)e[t]=0}function g(e){v(e,0)}function v(i,s){let a=c.newAttributes,o=c.enabledAttributes,l=c.attributeDivisors;a[i]=1,0===o[i]&&(e.enableVertexAttribArray(i),o[i]=1),l[i]!==s&&((r.isWebGL2?e:t.get("ANGLE_instanced_arrays"))[r.isWebGL2?"vertexAttribDivisor":"vertexAttribDivisorANGLE"](i,s),l[i]=s)}function y(){let t=c.newAttributes,i=c.enabledAttributes;for(let r=0,s=i.length;r<s;r++)i[r]!==t[r]&&(e.disableVertexAttribArray(r),i[r]=0)}function x(t,i,s,a,o,l){!0===r.isWebGL2&&(5124===s||5125===s)?e.vertexAttribIPointer(t,i,s,o,l):e.vertexAttribPointer(t,i,s,a,o,l)}function b(){w(),d=!0,c!==h&&u((c=h).object)}function w(){h.geometry=null,h.program=null,h.wireframe=!1}return{setup:function(s,h,p,b,w){let S=!1;if(o){let t,i,o,d;let m=(t=!0===h.wireframe,void 0===(i=l[b.id])&&(i={},l[b.id]=i),void 0===(o=i[p.id])&&(o={},i[p.id]=o),void 0===(d=o[t])&&(d=f(r.isWebGL2?e.createVertexArray():a.createVertexArrayOES()),o[t]=d),d);c!==m&&u((c=m).object),(S=function(e,t,i,r){let s=c.attributes,a=t.attributes,o=0,l=i.getAttributes();for(let t in l)if(l[t].location>=0){let i=s[t],r=a[t];if(void 0===r&&("instanceMatrix"===t&&e.instanceMatrix&&(r=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(r=e.instanceColor)),void 0===i||i.attribute!==r||r&&i.data!==r.data)return!0;o++}return c.attributesNum!==o||c.index!==r}(s,b,p,w))&&function(e,t,i,r){let s={},a=t.attributes,o=0,l=i.getAttributes();for(let t in l)if(l[t].location>=0){let i=a[t];void 0===i&&("instanceMatrix"===t&&e.instanceMatrix&&(i=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(i=e.instanceColor));let r={};r.attribute=i,i&&i.data&&(r.data=i.data),s[t]=r,o++}c.attributes=s,c.attributesNum=o,c.index=r}(s,b,p,w)}else{let e=!0===h.wireframe;(c.geometry!==b.id||c.program!==p.id||c.wireframe!==e)&&(c.geometry=b.id,c.program=p.id,c.wireframe=e,S=!0)}null!==w&&i.update(w,34963),(S||d)&&(d=!1,function(s,a,o,l){if(!1===r.isWebGL2&&(s.isInstancedMesh||l.isInstancedBufferGeometry)&&null===t.get("ANGLE_instanced_arrays"))return;m();let h=l.attributes,c=o.getAttributes(),d=a.defaultAttributeValues;for(let t in c){let r=c[t];if(r.location>=0){let a=h[t];if(void 0===a&&("instanceMatrix"===t&&s.instanceMatrix&&(a=s.instanceMatrix),"instanceColor"===t&&s.instanceColor&&(a=s.instanceColor)),void 0!==a){let t=a.normalized,o=a.itemSize,h=i.get(a);if(void 0===h)continue;let c=h.buffer,d=h.type,u=h.bytesPerElement;if(a.isInterleavedBufferAttribute){let i=a.data,h=i.stride,p=a.offset;if(i.isInstancedInterleavedBuffer){for(let e=0;e<r.locationSize;e++)v(r.location+e,i.meshPerAttribute);!0!==s.isInstancedMesh&&void 0===l._maxInstanceCount&&(l._maxInstanceCount=i.meshPerAttribute*i.count)}else for(let e=0;e<r.locationSize;e++)g(r.location+e);e.bindBuffer(34962,c);for(let e=0;e<r.locationSize;e++)x(r.location+e,o/r.locationSize,d,t,h*u,(p+o/r.locationSize*e)*u)}else{if(a.isInstancedBufferAttribute){for(let e=0;e<r.locationSize;e++)v(r.location+e,a.meshPerAttribute);!0!==s.isInstancedMesh&&void 0===l._maxInstanceCount&&(l._maxInstanceCount=a.meshPerAttribute*a.count)}else for(let e=0;e<r.locationSize;e++)g(r.location+e);e.bindBuffer(34962,c);for(let e=0;e<r.locationSize;e++)x(r.location+e,o/r.locationSize,d,t,o*u,o/r.locationSize*e*u)}}else if(void 0!==d){let i=d[t];if(void 0!==i)switch(i.length){case 2:e.vertexAttrib2fv(r.location,i);break;case 3:e.vertexAttrib3fv(r.location,i);break;case 4:e.vertexAttrib4fv(r.location,i);break;default:e.vertexAttrib1fv(r.location,i)}}}}y()}(s,h,p,b),null!==w&&e.bindBuffer(34963,i.get(w).buffer))},reset:b,resetDefaultState:w,dispose:function(){for(let e in b(),l){let t=l[e];for(let e in t){let i=t[e];for(let e in i)p(i[e].object),delete i[e];delete t[e]}delete l[e]}},releaseStatesOfGeometry:function(e){if(void 0===l[e.id])return;
2931let t=l[e.id];for(let e in t){let i=t[e];for(let e in i)p(i[e].object),delete i[e];delete t[e]}delete l[e.id]},releaseStatesOfProgram:function(e){for(let t in l){let i=l[t];if(void 0===i[e.id])continue;let r=i[e.id];for(let e in r)p(r[e].object),delete r[e];delete i[e.id]}},initAttributes:m,enableAttribute:g,disableUnusedAttributes:y}}function sv(e,t,i,r){let s=r.isWebGL2,a;this.setMode=function(e){a=e},this.render=function(t,r){e.drawArrays(a,t,r),i.update(r,a,1)},this.renderInstances=function(r,o,l){let h,c;if(0!==l){if(s)h=e,c="drawArraysInstanced";else if(h=t.get("ANGLE_instanced_arrays"),c="drawArraysInstancedANGLE",null===h){console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}h[c](a,r,o,l),i.update(o,a,l)}}}function sy(e,t,i){let r;function s(t){if("highp"===t){if(e.getShaderPrecisionFormat(35633,36338).precision>0&&e.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";t="mediump"}return"mediump"===t&&e.getShaderPrecisionFormat(35633,36337).precision>0&&e.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}let a="u">typeof WebGL2RenderingContext&&e instanceof WebGL2RenderingContext,o=void 0!==i.precision?i.precision:"highp",l=s(o);l!==o&&(console.warn("THREE.WebGLRenderer:",o,"not supported, using",l,"instead."),o=l);let h=a||t.has("WEBGL_draw_buffers"),c=!0===i.logarithmicDepthBuffer,d=e.getParameter(34930),u=e.getParameter(35660),p=e.getParameter(3379),f=e.getParameter(34076),m=e.getParameter(34921),g=e.getParameter(36347),v=e.getParameter(36348),y=e.getParameter(36349),x=u>0,b=a||t.has("OES_texture_float"),w=a?e.getParameter(36183):0;return{isWebGL2:a,drawBuffers:h,getMaxAnisotropy:function(){if(void 0!==r)return r;if(!0===t.has("EXT_texture_filter_anisotropic")){let i=t.get("EXT_texture_filter_anisotropic");r=e.getParameter(i.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else r=0;return r},getMaxPrecision:s,precision:o,logarithmicDepthBuffer:c,maxTextures:d,maxVertexTextures:u,maxTextureSize:p,maxCubemapSize:f,maxAttributes:m,maxVertexUniforms:g,maxVaryings:v,maxFragmentUniforms:y,vertexTextures:x,floatFragmentTextures:b,floatVertexTextures:x&&b,maxSamples:w}}function sx(e){let t=this,i=null,r=0,s=!1,a=!1,o=new ss,l=new tK,h={value:null,needsUpdate:!1};function c(e,i,r,s){let a=null!==e?e.length:0,c=null;if(0!==a){if(c=h.value,!0!==s||null===c){let t=r+4*a,s=i.matrixWorldInverse;l.getNormalMatrix(s),(null===c||c.length<t)&&(c=new Float32Array(t));for(let t=0,i=r;t!==a;++t,i+=4)o.copy(e[t]).applyMatrix4(s,l),o.normal.toArray(c,i),c[i+3]=o.constant}h.value=c,h.needsUpdate=!0}return t.numPlanes=a,t.numIntersection=0,c}this.uniform=h,this.numPlanes=0,this.numIntersection=0,this.init=function(e,t){let i=0!==e.length||t||0!==r||s;return s=t,r=e.length,i},this.beginShadows=function(){a=!0,c(null)},this.endShadows=function(){a=!1},this.setGlobalState=function(e,t){i=c(e,t,0)},this.setState=function(o,l,d){let u=o.clippingPlanes,p=o.clipIntersection,f=o.clipShadows,m=e.get(o);if(s&&null!==u&&0!==u.length&&(!a||f)){let e=a?0:r,t=4*e,s=m.clippingState||null;h.value=s,s=c(u,l,t,d);for(let e=0;e!==t;++e)s[e]=i[e];m.clippingState=s,this.numIntersection=p?this.numPlanes:0,this.numPlanes+=e}else a?c(null):(h.value!==i&&(h.value=i,h.needsUpdate=r>0),t.numPlanes=r,t.numIntersection=0)}}function sb(e){let t=new WeakMap;function i(e,t){return 303===t?e.mapping=301:304===t&&(e.mapping=302),e}function r(e){let i=e.target;i.removeEventListener("dispose",r);let s=t.get(i);void 0!==s&&(t.delete(i),s.dispose())}return{get:function(s){if(s&&s.isTexture&&!1===s.isRenderTargetTexture){let a=s.mapping;if(303===a||304===a){if(t.has(s))return i(t.get(s).texture,s.mapping);{let a=s.image;if(!a||!(a.height>0))return null;{let o=new se(a.height/2);return o.fromEquirectangularTexture(e,s),t.set(s,o),s.addEventListener("dispose",r),i(o.texture,s.mapping)}}}}return s},dispose:function(){t=new WeakMap}}}var sw=class extends r6{constructor(e=-1,t=1,i=1,r=-1,s=.1,a=2e3){super(),this.isOrthographicCamera=!0,this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=e,this.right=t,this.top=i,this.bottom=r,this.near=s,this.far=a,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.near=e.near,this.far=e.far,this.zoom=e.zoom,this.view=null===e.view?null:Object.assign({},e.view),this}setViewOffset(e,t,i,r,s,a){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=r,this.view.width=s,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let e=(this.right-this.left)/(2*this.zoom),t=(this.top-this.bottom)/(2*this.zoom),i=(this.right+this.left)/2,r=(this.top+this.bottom)/2,s=i-e,a=i+e,o=r+t,l=r-t;if(null!==this.view&&this.view.enabled){let e=(this.right-this.left)/this.view.fullWidth/this.zoom,t=(this.top-this.bottom)/this.view.fullHeight/this.zoom;s+=e*this.view.offsetX,a=s+e*this.view.width,o-=t*this.view.offsetY,l=o-t*this.view.height}
2931this.projectionMatrix.makeOrthographic(s,a,o,l,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);return t.object.zoom=this.zoom,t.object.left=this.left,t.object.right=this.right,t.object.top=this.top,t.object.bottom=this.bottom,t.object.near=this.near,t.object.far=this.far,null!==this.view&&(t.object.view=Object.assign({},this.view)),t}},sS=[.125,.215,.35,.446,.526,.582],s_=new sw,sA=new ii,sM=null,sE=(1+Math.sqrt(5))/2,sC=1/sE,sT=[new iv(1,1,1),new iv(-1,1,1),new iv(1,1,-1),new iv(-1,1,-1),new iv(0,sE,sC),new iv(0,sE,-sC),new iv(sC,0,sE),new iv(-sC,0,sE),new iv(sE,sC,0),new iv(-sE,sC,0)],sP=class{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(e,t=0,i=.1,r=100){sM=this._renderer.getRenderTarget(),this._setSize(256);let s=this._allocateTargets();return s.depthBuffer=!0,this._sceneToCubeUV(e,i,r,s),t>0&&this._blur(s,0,0,t),this._applyPMREM(s),this._cleanup(s),s}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=sR(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=sO(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose()}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let e=0;e<this._lodPlanes.length;e++)this._lodPlanes[e].dispose()}_cleanup(e){this._renderer.setRenderTarget(sM),e.scissorTest=!1,sI(e,0,0,e.width,e.height)}_fromTexture(e,t){301===e.mapping||302===e.mapping?this._setSize(0===e.image.length?16:e.image[0].width||e.image[0].image.width):this._setSize(e.image.width/4),sM=this._renderer.getRenderTarget();let i=t||this._allocateTargets();return this._textureToCubeUV(e,i),this._applyPMREM(i),this._cleanup(i),i}_allocateTargets(){let e=3*Math.max(this._cubeSize,112),t=4*this._cubeSize,i={magFilter:1006,minFilter:1006,generateMipmaps:!1,type:1016,format:1023,encoding:3e3,depthBuffer:!1},r=sD(e,t,i);if(null===this._pingPongRenderTarget||this._pingPongRenderTarget.width!==e||this._pingPongRenderTarget.height!==t){null!==this._pingPongRenderTarget&&this._dispose(),this._pingPongRenderTarget=sD(e,t,i);let{_lodMax:r}=this;({sizeLods:this._sizeLods,lodPlanes:this._lodPlanes,sigmas:this._sigmas}=function(e){let t=[],i=[],r=[],s=e,a=e-4+1+sS.length;for(let o=0;o<a;o++){let a=Math.pow(2,s);i.push(a);let l=1/a;o>e-4?l=sS[o-e+4-1]:0===o&&(l=0),r.push(l);let h=1/(a-2),c=-h,d=1+h,u=[c,c,d,c,d,d,c,c,d,d,c,d],p=new Float32Array(108),f=new Float32Array(72),m=new Float32Array(36);for(let e=0;e<6;e++){let t=e%3*2/3-1,i=e>2?0:-1,r=[t,i,0,t+2/3,i,0,t+2/3,i+1,0,t,i,0,t+2/3,i+1,0,t,i+1,0];p.set(r,18*e),f.set(u,12*e);let s=[e,e,e,e,e,e];m.set(s,6*e)}let g=new rz;g.setAttribute("position",new rM(p,3)),g.setAttribute("uv",new rM(f,2)),g.setAttribute("faceIndex",new rM(m,1)),t.push(g),s>4&&s--}return{lodPlanes:t,sizeLods:i,sigmas:r}}(r)),this._blurMaterial=new r5({name:"SphericalGaussianBlur",defines:{n:20,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${r}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:new Float32Array(20)},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:new iv(0,1,0)}},vertexShader:sL(),fragmentShader:` 2932 2933 precision mediump float; 2934 precision mediump int; 2935 2936 varying vec3 vOutputDirection; 2937 2938 uniform sampler2D envMap; 2939 uniform int samples; 2940 uniform float weights[ n ]; 2941 uniform bool latitudinal; 2942 uniform float dTheta; 2943 uniform float mipInt; 2944 uniform vec3 poleAxis; 2945 2946 #define ENVMAP_TYPE_CUBE_UV 2947 #include <cube_uv_reflection_fragment> 2948 2949 vec3 getSample( float theta, vec3 axis ) { 2950 2951 float cosTheta = cos( theta ); 2952 // Rodrigues' axis-angle rotation 2953 vec3 sampleDirection = vOutputDirection * cosTheta 2954 + cross( axis, vOutputDirection ) * sin( theta ) 2955 + axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta ); 2956 2957 return bilinearCubeUV( envMap, sampleDirection, mipInt ); 2958 2959 } 2960 2961 void main() { 2962 2963 vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection ); 2964 2965 if ( all( equal( axis, vec3( 0.0 ) ) ) ) { 2966 2967 axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x ); 2968 2969 } 2970 2971 axis = normalize( axis ); 2972 2973 gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); 2974 gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis ); 2975 2976 for ( int i = 1; i < n; i++ ) { 2977 2978 if ( i >= samples ) { 2979 2980 break; 2981 2982 } 2983 2984 float theta = dTheta * float( i ); 2985 gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis ); 2986 gl_FragColor.rgb += weights[ i ] * getSample( theta, axis ); 2987 2988 } 2989 2990 } 2991 `,blending:0,depthTest:!1,depthWrite:!1})}return r}_compileMaterial(e){let t=new rK(this._lodPlanes[0],e);this._renderer.compile(t,s_)}_sceneToCubeUV(e,t,i,r){let s=new r8(90,1,t,i),a=[1,-1,1,1,1,1],o=[1,1,1,-1,-1,-1],l=this._renderer,h=l.autoClear,c=l.toneMapping;l.getClearColor(sA),l.toneMapping=0,l.autoClear=!1;
2991let d=new rS({name:"PMREM.Background",side:1,depthWrite:!1,depthTest:!1}),u=new rK(new rJ,d),p=!1,f=e.background;f?f.isColor&&(d.color.copy(f),e.background=null,p=!0):(d.color.copy(sA),p=!0);for(let t=0;t<6;t++){let i=t%3;0===i?(s.up.set(0,a[t],0),s.lookAt(o[t],0,0)):1===i?(s.up.set(0,0,a[t]),s.lookAt(0,o[t],0)):(s.up.set(0,a[t],0),s.lookAt(0,0,o[t]));let h=this._cubeSize;sI(r,i*h,t>2?h:0,h,h),l.setRenderTarget(r),p&&l.render(u,s),l.render(e,s)}u.geometry.dispose(),u.material.dispose(),l.toneMapping=c,l.autoClear=h,e.background=f}_textureToCubeUV(e,t){let i=this._renderer,r=301===e.mapping||302===e.mapping;r?(null===this._cubemapMaterial&&(this._cubemapMaterial=sR()),this._cubemapMaterial.uniforms.flipEnvMap.value=!1===e.isRenderTargetTexture?-1:1):null===this._equirectMaterial&&(this._equirectMaterial=sO());let s=r?this._cubemapMaterial:this._equirectMaterial,a=new rK(this._lodPlanes[0],s);s.uniforms.envMap.value=e;let o=this._cubeSize;sI(t,0,0,3*o,2*o),i.setRenderTarget(t),i.render(a,s_)}_applyPMREM(e){let t=this._renderer,i=t.autoClear;t.autoClear=!1;for(let t=1;t<this._lodPlanes.length;t++){let i=Math.sqrt(this._sigmas[t]*this._sigmas[t]-this._sigmas[t-1]*this._sigmas[t-1]),r=sT[(t-1)%sT.length];this._blur(e,t-1,t,i,r)}t.autoClear=i}_blur(e,t,i,r,s){let a=this._pingPongRenderTarget;this._halfBlur(e,a,t,i,r,"latitudinal",s),this._halfBlur(a,e,i,i,r,"longitudinal",s)}_halfBlur(e,t,i,r,s,a,o){let l=this._renderer,h=this._blurMaterial;"latitudinal"!==a&&"longitudinal"!==a&&console.error("blur direction must be either latitudinal or longitudinal!");let c=new rK(this._lodPlanes[r],h),d=h.uniforms,u=this._sizeLods[i]-1,p=isFinite(s)?Math.PI/(2*u):2*Math.PI/39,f=s/p,m=isFinite(s)?1+Math.floor(3*f):20;m>20&&console.warn(`sigmaRadians, ${s}, is too large and will clip, as it requested ${m} samples when the maximum is set to 20`);let g=[],v=0;for(let e=0;e<20;++e){let t=e/f,i=Math.exp(-t*t/2);g.push(i),0===e?v+=i:e<m&&(v+=2*i)}for(let e=0;e<g.length;e++)g[e]=g[e]/v;d.envMap.value=e.texture,d.samples.value=m,d.weights.value=g,d.latitudinal.value="latitudinal"===a,o&&(d.poleAxis.value=o);let{_lodMax:y}=this;d.dTheta.value=p,d.mipInt.value=y-i;let x=this._sizeLods[r],b=4*(this._cubeSize-x);sI(t,3*x*(r>y-4?r-y+4:0),b,3*x,2*x),l.setRenderTarget(t),l.render(c,s_)}};function sD(e,t,i){let r=new id(e,t,i);return r.texture.mapping=306,r.texture.name="PMREM.cubeUv",r.scissorTest=!0,r}function sI(e,t,i,r,s){e.viewport.set(t,i,r,s),e.scissor.set(t,i,r,s)}function sO(){return new r5({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:sL(),fragmentShader:` 2992 2993 precision mediump float; 2994 precision mediump int; 2995 2996 varying vec3 vOutputDirection; 2997 2998 uniform sampler2D envMap; 2999 3000 #include <common> 3001 3002 void main() { 3003 3004 vec3 outputDirection = normalize( vOutputDirection ); 3005 vec2 uv = equirectUv( outputDirection ); 3006 3007 gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); 3008 3009 } 3010 `,blending:0,depthTest:!1,depthWrite:!1})}function sR(){return new r5({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:sL(),fragmentShader:` 3011 3012 precision mediump float; 3013 precision mediump int; 3014 3015 uniform float flipEnvMap; 3016 3017 varying vec3 vOutputDirection; 3018 3019 uniform samplerCube envMap; 3020 3021 void main() { 3022 3023 gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); 3024 3025 } 3026 `,blending:0,depthTest:!1,depthWrite:!1})}function sL(){return` 3027 3028 precision mediump float; 3029 precision mediump int; 3030 3031 attribute float faceIndex; 3032 3033 varying vec3 vOutputDirection; 3034 3035 // RH coordinate system; PMREM face-indexing convention 3036 vec3 getDirection( vec2 uv, float face ) { 3037 3038 uv = 2.0 * uv - 1.0; 3039 3040 vec3 direction = vec3( uv, 1.0 ); 3041 3042 if ( face == 0.0 ) { 3043 3044 direction = direction.zyx; // ( 1, v, u ) pos x 3045 3046 } else if ( face == 1.0 ) { 3047 3048 direction = direction.xzy; 3049 direction.xz *= -1.0; // ( -u, 1, -v ) pos y 3050 3051 } else if ( face == 2.0 ) { 3052 3053 direction.x *= -1.0; // ( -u, v, 1 ) pos z 3054 3055 } else if ( face == 3.0 ) { 3056 3057 direction = direction.zyx; 3058 direction.xz *= -1.0; // ( -1, v, -u ) neg x 3059 3060 } else if ( face == 4.0 ) { 3061 3062 direction = direction.xzy; 3063 direction.xy *= -1.0; // ( -u, -1, v ) neg y 3064 3065 } else if ( face == 5.0 ) { 3066 3067 direction.z *= -1.0; // ( u, v, -1 ) neg z 3068 3069 } 3070 3071 return direction; 3072 3073 } 3074 3075 void main() { 3076 3077 vOutputDirection = getDirection( uv, faceIndex ); 3078 gl_Position = vec4( position, 1.0 ); 3079 3080 } 3081 `}function sB(e){let t=new WeakMap,i=null;function r(e){let i=e.target;i.removeEventListener("dispose",r);let s=t.get(i);void 0!==s&&(t.delete(i),s.dispose())}return{get:function(s){if(s&&s.isTexture){let a=s.mapping,o=303===a||304===a,l=301===a||302===a;if(o||l){if(s.isRenderTargetTexture&&!0===s.needsPMREMUpdate){s.needsPMREMUpdate=!1;let r=t.get(s);return null===i&&(i=new sP(e)),r=o?i.fromEquirectangular(s,r):i.fromCubemap(s,r),t.set(s,r),r.texture}if(t.has(s))return t.get(s).texture;{let a=s.image;if(!(o&&a&&a.height>0||l&&a&&function(e){let t=0;for(let i=0;i<6;i++)void 0!==e[i]&&t++;return 6===t}(a)))return null;{null===i&&(i=new sP(e));let a=o?i.fromEquirectangular(s):i.fromCubemap(s);return t.set(s,a),s.addEventListener("dispose",r),a.texture}}}}return s},dispose:function(){t=new WeakMap,null!==i&&(i.dispose(),i=null)}}}function sz(e){let t={};function i(i){let r;if(void 0!==t[i])return t[i];switch(i){case"WEBGL_depth_texture":r=e.getExtension("WEBGL_depth_texture")||e.getExtension("MOZ_WEBGL_depth_texture")||e.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":r=e.getExtension("EXT_texture_filter_anisotropic")||e.getExtension("MOZ_EXT_texture_filter_anisotropic")||e.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":r=e.getExtension("WEBGL_compressed_texture_s3tc")||e.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||e.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":r=e.getExtension("WEBGL_compressed_texture_pvrtc")||e.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:r=e.getExtension(i)}return t[i]=r,r}return{has:function(e){return null!==i(e)},init:function(e){e.isWebGL2?i("EXT_color_buffer_float"):(i("WEBGL_depth_texture"),i("OES_texture_float"),i("OES_texture_half_float"),i("OES_texture_half_float_linear"),i("OES_standard_derivatives"),i("OES_element_index_uint"),i("OES_vertex_array_object"),i("ANGLE_instanced_arrays")),i("OES_texture_float_linear"),i("EXT_color_buffer_half_float"),i("WEBGL_multisampled_render_to_texture")},get:function(e){let t=i(e);return null===t&&console.warn("THREE.WebGLRenderer: "+e+" extension not supported."),t}}}function sF(e,t,i,r){let s={},a=new WeakMap;function o(e){let l=e.target;for(let e in null!==l.index&&t.remove(l.index),l.attributes)t.remove(l.attributes[e]);l.removeEventListener("dispose",o),delete s[l.id];let h=a.get(l);
3081h&&(t.remove(h),a.delete(l)),r.releaseStatesOfGeometry(l),!0===l.isInstancedBufferGeometry&&delete l._maxInstanceCount,i.memory.geometries--}function l(e){let i=[],r=e.index,s=e.attributes.position,o=0;if(null!==r){let e=r.array;o=r.version;for(let t=0,r=e.length;t<r;t+=3){let r=e[t+0],s=e[t+1],a=e[t+2];i.push(r,s,s,a,a,r)}}else{let e=s.array;o=s.version;for(let t=0,r=e.length/3-1;t<r;t+=3){let e=t+0,r=t+1,s=t+2;i.push(e,r,r,s,s,e)}}let l=new(tJ(i)?rC:rE)(i,1);l.version=o;let h=a.get(e);h&&t.remove(h),a.set(e,l)}return{get:function(e,t){return!0===s[t.id]||(t.addEventListener("dispose",o),s[t.id]=!0,i.memory.geometries++),t},update:function(e){let i=e.attributes;for(let e in i)t.update(i[e],34962);let r=e.morphAttributes;for(let e in r){let i=r[e];for(let e=0,r=i.length;e<r;e++)t.update(i[e],34962)}},getWireframeAttribute:function(e){let t=a.get(e);if(t){let i=e.index;null!==i&&t.version<i.version&&l(e)}else l(e);return a.get(e)}}}function sN(e,t,i,r){let s,a,o=r.isWebGL2,l;this.setMode=function(e){l=e},this.setIndex=function(e){s=e.type,a=e.bytesPerElement},this.render=function(t,r){e.drawElements(l,r,s,t*a),i.update(r,l,1)},this.renderInstances=function(r,h,c){let d,u;if(0!==c){if(o)d=e,u="drawElementsInstanced";else if(d=t.get("ANGLE_instanced_arrays"),u="drawElementsInstancedANGLE",null===d){console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}d[u](l,h,s,r*a,c),i.update(h,l,c)}}}function sk(e){let t={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:{geometries:0,textures:0},render:t,programs:null,autoReset:!0,reset:function(){t.frame++,t.calls=0,t.triangles=0,t.points=0,t.lines=0},update:function(e,i,r){switch(t.calls++,i){case 4:t.triangles+=e/3*r;break;case 1:t.lines+=e/2*r;break;case 3:t.lines+=r*(e-1);break;case 2:t.lines+=r*e;break;case 0:t.points+=r*e;break;default:console.error("THREE.WebGLInfo: Unknown draw mode:",i)}}}}function sU(e,t){return e[0]-t[0]}function sV(e,t){return Math.abs(t[1])-Math.abs(e[1])}function sj(e,t,i){let r={},s=new Float32Array(8),a=new WeakMap,o=new ic,l=[];for(let e=0;e<8;e++)l[e]=[e,0];return{update:function(h,c,d,u){let p=h.morphTargetInfluences;if(!0===t.isWebGL2){let r=c.morphAttributes.position||c.morphAttributes.normal||c.morphAttributes.color,s=void 0!==r?r.length:0,l=a.get(c);if(void 0===l||l.count!==s){let e=function(){y.dispose(),a.delete(c),c.removeEventListener("dispose",e)};void 0!==l&&l.texture.dispose();let i=void 0!==c.morphAttributes.position,r=void 0!==c.morphAttributes.normal,h=void 0!==c.morphAttributes.color,d=c.morphAttributes.position||[],u=c.morphAttributes.normal||[],p=c.morphAttributes.color||[],f=0;!0===i&&(f=1),!0===r&&(f=2),!0===h&&(f=3);let m=c.attributes.position.count*f,g=1;m>t.maxTextureSize&&(g=Math.ceil(m/t.maxTextureSize),m=t.maxTextureSize);let v=new Float32Array(m*g*4*s),y=new iu(v,m,g,s);y.type=1015,y.needsUpdate=!0;let x=4*f;for(let e=0;e<s;e++){let t=d[e],s=u[e],a=p[e],l=m*g*4*e;for(let e=0;e<t.count;e++){let c=e*x;!0===i&&(o.fromBufferAttribute(t,e),v[l+c+0]=o.x,v[l+c+1]=o.y,v[l+c+2]=o.z,v[l+c+3]=0),!0===r&&(o.fromBufferAttribute(s,e),v[l+c+4]=o.x,v[l+c+5]=o.y,v[l+c+6]=o.z,v[l+c+7]=0),!0===h&&(o.fromBufferAttribute(a,e),v[l+c+8]=o.x,v[l+c+9]=o.y,v[l+c+10]=o.z,v[l+c+11]=4===a.itemSize?o.w:1)}}l={count:s,texture:y,size:new tQ(m,g)},a.set(c,l),c.addEventListener("dispose",e)}let h=0;for(let e=0;e<p.length;e++)h+=p[e];let d=c.morphTargetsRelative?1:1-h;u.getUniforms().setValue(e,"morphTargetBaseInfluence",d),u.getUniforms().setValue(e,"morphTargetInfluences",p),u.getUniforms().setValue(e,"morphTargetsTexture",l.texture,i),u.getUniforms().setValue(e,"morphTargetsTextureSize",l.size)}else{let t=void 0===p?0:p.length,i=r[c.id];if(void 0===i||i.length!==t){i=[];for(let e=0;e<t;e++)i[e]=[e,0];r[c.id]=i}for(let e=0;e<t;e++){let t=i[e];t[0]=e,t[1]=p[e]}i.sort(sV);for(let e=0;e<8;e++)e<t&&i[e][1]?(l[e][0]=i[e][0],l[e][1]=i[e][1]):(l[e][0]=Number.MAX_SAFE_INTEGER,l[e][1]=0);l.sort(sU);let a=c.morphAttributes.position,o=c.morphAttributes.normal,h=0;for(let e=0;e<8;e++){let t=l[e],i=t[0],r=t[1];i!==Number.MAX_SAFE_INTEGER&&r?(a&&c.getAttribute("morphTarget"+e)!==a[i]&&c.setAttribute("morphTarget"+e,a[i]),o&&c.getAttribute("morphNormal"+e)!==o[i]&&c.setAttribute("morphNormal"+e,o[i]),s[e]=r,h+=r):(a&&!0===c.hasAttribute("morphTarget"+e)&&c.deleteAttribute("morphTarget"+e),o&&!0===c.hasAttribute("morphNormal"+e)&&c.deleteAttribute("morphNormal"+e),s[e]=0)}let d=c.morphTargetsRelative?1:1-h;u.getUniforms().setValue(e,"morphTargetBaseInfluence",d),u.getUniforms().setValue(e,"morphTargetInfluences",s)}}}}function sG(e,t,i,r){let s=new WeakMap;function a(e){let t=e.target;t.removeEventListener("dispose",a),i.remove(t.instanceMatrix),null!==t.instanceColor&&i.remove(t.instanceColor)}return{update:function(e){let o=r.render.frame,l=e.geometry,h=t.get(e,l);return s.get(h)!==o&&(t.update(h),s.set(h,o)),e.isInstancedMesh&&(!1===e.hasEventListener("dispose",a)&&e.addEventListener("dispose",a),i.update(e.instanceMatrix,34962),null!==e.instanceColor&&i.update(e.instanceColor,34962)),h},dispose:function(){s=new WeakMap}}}var sH=new ih,sW=new iu,sq=new ip,sX=new r7,sY=[],sQ=[],sK=new Float32Array(16),sZ=new Float32Array(9),sJ=new Float32Array(4);function s$(e,t,i){let r=e[0];if(null==r||r<=0||r>0)return e;let s=t*i,a=sY[s];if(void 0===a&&(a=new Float32Array(s),sY[s]=a),0!==t){r.toArray(a,0);for(let r=1,s=0;r!==t;++r)s+=i,e[r].toArray(a,s)}return a}function s0(e,t){if(e.length!==t.length)return!1;for(let i=0,r=e.length;i<r;i++)if(e[i]!==t[i])return!1;return!0}function s1(e,t){for(let i=0,r=t.length;i<r;i++)e[i]=t[i]}function s2(e,t){let i=sQ[t];void 0===i&&(i=new Int32Array(t),sQ[t]=i);for(let r=0;r!==t;++r)i[r]=e.allocateTextureUnit();return i}function s3(e,t){let i=this.cache;i[0]!==t&&(e.uniform1f(this.addr,t),i[0]=t)}function s4(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y)&&(e.uniform2f(this.addr,t.x,t.y),i[0]=t.x,i[1]=t.y);else{if(s0(i,t))return;e.uniform2fv(this.addr,t),s1(i,t)}}function s5(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z)&&(e.uniform3f(this.addr,t.x,t.y,t.z),i[0]=t.x,i[1]=t.y,i[2]=t.z);else if(void 0!==t.r)(i[0]!==t.r||i[1]!==t.g||i[2]!==t.b)&&(e.uniform3f(this.addr,t.r,t.g,t.b),i[0]=t.r,i[1]=t.g,i[2]=t.b);else{if(s0(i,t))return;e.uniform3fv(this.addr,t),s1(i,t)}}function s6(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z||i[3]!==t.w)&&(e.uniform4f(this.addr,t.x,t.y,t.z,t.w),i[0]=t.x,i[1]=t.y,i[2]=t.z,i[3]=t.w);else{if(s0(i,t))return;e.uniform4fv(this.addr,t),s1(i,t)}}function s8(e,t){let i=this.cache,r=t.elements;if(void 0===r){if(s0(i,t))return;e.uniformMatrix2fv(this.addr,!1,t),s1(i,t)}else{if(s0(i,r))return;sJ.set(r),e.uniformMatrix2fv(this.addr,!1,sJ),s1(i,r)}}function s9(e,t){let i=this.cache,r=t.elements;if(void 0===r){if(s0(i,t))return;e.uniformMatrix3fv(this.addr,!1,t),s1(i,t)}else{if(s0(i,r))return;sZ.set(r),e.uniformMatrix3fv(this.addr,!1,sZ),s1(i,r)}}function s7(e,t){let i=this.cache,r=t.elements;if(void 0===r){if(s0(i,t))return;e.uniformMatrix4fv(this.addr,!1,t),s1(i,t)}else{if(s0(i,r))return;sK.set(r),e.uniformMatrix4fv(this.addr,!1,sK),s1(i,r)}}function ae(e,t){let i=this.cache;i[0]!==t&&(e.uniform1i(this.addr,t),i[0]=t)}function at(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y)&&(e.uniform2i(this.addr,t.x,t.y),i[0]=t.x,i[1]=t.y);else{if(s0(i,t))return;e.uniform2iv(this.addr,t),s1(i,t)}}function ai(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z)&&(e.uniform3i(this.addr,t.x,t.y,t.z),i[0]=t.x,i[1]=t.y,i[2]=t.z);else{if(s0(i,t))return;e.uniform3iv(this.addr,t),s1(i,t)}}function ar(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z||i[3]!==t.w)&&(e.uniform4i(this.addr,t.x,t.y,t.z,t.w),i[0]=t.x,i[1]=t.y,i[2]=t.z,i[3]=t.w);else{if(s0(i,t))return;e.uniform4iv(this.addr,t),s1(i,t)}}function as(e,t){let i=this.cache;i[0]!==t&&(e.uniform1ui(this.addr,t),i[0]=t)}function aa(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y)&&(e.uniform2ui(this.addr,t.x,t.y),i[0]=t.x,i[1]=t.y);else{if(s0(i,t))return;e.uniform2uiv(this.addr,t),s1(i,t)}}function an(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z)&&(e.uniform3ui(this.addr,t.x,t.y,t.z),i[0]=t.x,i[1]=t.y,i[2]=t.z);else{if(s0(i,t))return;e.uniform3uiv(this.addr,t),s1(i,t)}}function ao(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z||i[3]!==t.w)&&(e.uniform4ui(this.addr,t.x,t.y,t.z,t.w),i[0]=t.x,i[1]=t.y,i[2]=t.z,i[3]=t.w);else{if(s0(i,t))return;e.uniform4uiv(this.addr,t),s1(i,t)}}function al(e,t,i){let r=this.cache,s=i.allocateTextureUnit();r[0]!==s&&(e.uniform1i(this.addr,s),r[0]=s),i.setTexture2D(t||sH,s)}function ah(e,t,i){let r=this.cache,s=i.allocateTextureUnit();r[0]!==s&&(e.uniform1i(this.addr,s),r[0]=s),i.setTexture3D(t||sq,s)}function ac(e,t,i){let r=this.cache,s=i.allocateTextureUnit();r[0]!==s&&(e.uniform1i(this.addr,s),r[0]=s),i.setTextureCube(t||sX,s)}function ad(e,t,i){let r=this.cache,s=i.allocateTextureUnit();r[0]!==s&&(e.uniform1i(this.addr,s),r[0]=s),i.setTexture2DArray(t||sW,s)}function au(e,t){e.uniform1fv(this.addr,t)}function ap(e,t){let i=s$(t,this.size,2);e.uniform2fv(this.addr,i)}function af(e,t){let i=s$(t,this.size,3);e.uniform3fv(this.addr,i)}function am(e,t){let i=s$(t,this.size,4);e.uniform4fv(this.addr,i)}function ag(e,t){let i=s$(t,this.size,4);e.uniformMatrix2fv(this.addr,!1,i)}function av(e,t){let i=s$(t,this.size,9);e.uniformMatrix3fv(this.addr,!1,i)}function ay(e,t){let i=s$(t,this.size,16);e.uniformMatrix4fv(this.addr,!1,i)}function ax(e,t){e.uniform1iv(this.addr,t)}function ab(e,t){e.uniform2iv(this.addr,t)}function aw(e,t){e.uniform3iv(this.addr,t)}function aS(e,t){e.uniform4iv(this.addr,t)}function a_(e,t){e.uniform1uiv(this.addr,t)}function aA(e,t){e.uniform2uiv(this.addr,t)}function aM(e,t){e.uniform3uiv(this.addr,t)}function aE(e,t){e.uniform4uiv(this.addr,t)}function aC(e,t,i){let r=this.cache,s=t.length,a=s2(i,s);s0(r,a)||(e.uniform1iv(this.addr,a),s1(r,a));for(let e=0;e!==s;++e)i.setTexture2D(t[e]||sH,a[e])}function aT(e,t,i){let r=this.cache,s=t.length,a=s2(i,s);s0(r,a)||(e.uniform1iv(this.addr,a),s1(r,a));for(let e=0;e!==s;++e)i.setTexture3D(t[e]||sq,a[e])}function aP(e,t,i){let r=this.cache,s=t.length,a=s2(i,s);s0(r,a)||(e.uniform1iv(this.addr,a),s1(r,a));for(let e=0;e!==s;++e)i.setTextureCube(t[e]||sX,a[e])}function aD(e,t,i){let r=this.cache,s=t.length,a=s2(i,s);s0(r,a)||(e.uniform1iv(this.addr,a),s1(r,a));for(let e=0;e!==s;++e)i.setTexture2DArray(t[e]||sW,a[e])}var aI=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.setValue=function(e){switch(e){case 5126:return s3;case 35664:return s4;case 35665:return s5;case 35666:return s6;case 35674:return s8;case 35675:return s9;case 35676:return s7;case 5124:case 35670:return ae;case 35667:case 35671:return at;case 35668:case 35672:return ai;case 35669:case 35673:return ar;case 5125:return as;case 36294:return aa;case 36295:return an;case 36296:return ao;case 35678:case 36198:case 36298:case 36306:case 35682:return al;case 35679:case 36299:case 36307:return ah;case 35680:case 36300:case 36308:case 36293:return ac;case 36289:case 36303:case 36311:case 36292:return ad}}(t.type)}},aO=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.size=t.size,this.setValue=function(e){switch(e){case 5126:return au;case 35664:return ap;case 35665:return af;
3081case 35666:return am;case 35674:return ag;case 35675:return av;case 35676:return ay;case 5124:case 35670:return ax;case 35667:case 35671:return ab;case 35668:case 35672:return aw;case 35669:case 35673:return aS;case 5125:return a_;case 36294:return aA;case 36295:return aM;case 36296:return aE;case 35678:case 36198:case 36298:case 36306:case 35682:return aC;case 35679:case 36299:case 36307:return aT;case 35680:case 36300:case 36308:case 36293:return aP;case 36289:case 36303:case 36311:case 36292:return aD}}(t.type)}},aR=class{constructor(e){this.id=e,this.seq=[],this.map={}}setValue(e,t,i){if(void 0===t)return;let r=this.seq;for(let s=0,a=r.length;s!==a;++s){let a=r[s];a.setValue(e,t[a.id],i)}}},aL=/(\w+)(\])?(\[|\.)?/g;function aB(e,t){e.seq.push(t),e.map[t.id]=t}var az=class{constructor(e,t){this.seq=[],this.map={};let i=e.getProgramParameter(t,35718);for(let r=0;r<i;++r){let i=e.getActiveUniform(t,r),s=e.getUniformLocation(t,i.name);!function(e,t,i){let r=e.name,s=r.length;for(aL.lastIndex=0;;){let a=aL.exec(r),o=aL.lastIndex,l=a[1],h="]"===a[2],c=a[3];if(h&&(l|=0),void 0===c||"["===c&&o+2===s){aB(i,void 0===c?new aI(l,e,t):new aO(l,e,t));break}{let e=i.map[l];void 0===e&&aB(i,e=new aR(l)),i=e}}}(i,s,this)}}setValue(e,t,i,r){let s=this.map[t];void 0!==s&&s.setValue(e,i,r)}setOptional(e,t,i){let r=t[i];void 0!==r&&this.setValue(e,i,r)}static upload(e,t,i,r){for(let s=0,a=t.length;s!==a;++s){let a=t[s],o=i[a.id];!1!==o.needsUpdate&&a.setValue(e,o.value,r)}}static seqWithValue(e,t){let i=[];for(let r=0,s=e.length;r!==s;++r){let s=e[r];s.id in t&&i.push(s)}return i}};function aF(e,t,i){let r=e.createShader(t);return e.shaderSource(r,i),e.compileShader(r),r}var aN=0;function ak(e,t,i){let r=e.getShaderParameter(t,35713),s=e.getShaderInfoLog(t).trim();if(r&&""===s)return"";let a=/ERROR: 0:(\d+)/.exec(s);if(!a)return s;{let r=parseInt(a[1]);return i.toUpperCase()+` 3082 3083`+s+` 3084 3085`+function(e,t){let i=e.split(` 3086`),r=[],s=Math.max(t-6,0),a=Math.min(t+6,i.length);for(let e=s;e<a;e++){let s=e+1;r.push(`${s===t?">":" "} ${s}: ${i[e]}`)}return r.join(` 3087`)}(e.getShaderSource(t),r)}}function aU(e){return""!==e}function aV(e,t){let i=t.numSpotLightShadows+t.numSpotLightMaps-t.numSpotLightShadowsWithMaps;return e.replace(/NUM_DIR_LIGHTS/g,t.numDirLights).replace(/NUM_SPOT_LIGHTS/g,t.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,t.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,i).replace(/NUM_RECT_AREA_LIGHTS/g,t.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,t.numPointLights).replace(/NUM_HEMI_LIGHTS/g,t.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,t.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,t.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,t.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,t.numPointLightShadows)}function aj(e,t){return e.replace(/NUM_CLIPPING_PLANES/g,t.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,t.numClippingPlanes-t.numClipIntersection)}var aG=/^[ \t]*#include +<([\w\d./]+)>/gm;function aH(e){return e.replace(aG,aW)}function aW(e,t){let i=sd[t];if(void 0===i)throw Error("Can not resolve #include <"+t+">");return aH(i)}var aq=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function aX(e){return e.replace(aq,aY)}function aY(e,t,i,r){let s="";for(let e=parseInt(t);e<parseInt(i);e++)s+=r.replace(/\[\s*i\s*\]/g,"[ "+e+" ]").replace(/UNROLLED_LOOP_INDEX/g,e);return s}function aQ(e){let t="precision "+e.precision+` float; 3088precision `+e.precision+" int;";return"highp"===e.precision?t+=` 3089#define HIGH_PRECISION`:"mediump"===e.precision?t+=` 3090#define MEDIUM_PRECISION`:"lowp"===e.precision&&(t+=` 3091#define LOW_PRECISION`),t}function aK(e,t,i,r){let s,a,o;let l,h,c=e.getContext(),d=i.defines,u=i.vertexShader,p=i.fragmentShader,f=(s="SHADOWMAP_TYPE_BASIC",1===i.shadowMapType?s="SHADOWMAP_TYPE_PCF":2===i.shadowMapType?s="SHADOWMAP_TYPE_PCF_SOFT":3===i.shadowMapType&&(s="SHADOWMAP_TYPE_VSM"),s),m=function(e){let t="ENVMAP_TYPE_CUBE";if(e.envMap)switch(e.envMapMode){case 301:case 302:t="ENVMAP_TYPE_CUBE";break;case 306:t="ENVMAP_TYPE_CUBE_UV"}return t}(i),g=(a="ENVMAP_MODE_REFLECTION",i.envMap&&302===i.envMapMode&&(a="ENVMAP_MODE_REFRACTION"),a),v=function(e){let t="ENVMAP_BLENDING_NONE";if(e.envMap)switch(e.combine){case 0:t="ENVMAP_BLENDING_MULTIPLY";break;case 1:t="ENVMAP_BLENDING_MIX";break;case 2:t="ENVMAP_BLENDING_ADD"}return t}(i),y=function(e){let t=e.envMapCubeUVHeight;if(null===t)return null;let i=Math.log2(t)-2;return{texelWidth:1/(3*Math.max(Math.pow(2,i),112)),texelHeight:1/t,maxMip:i}}
3091(i),x=i.isWebGL2?"":[i.extensionDerivatives||i.envMapCubeUVHeight||i.bumpMap||i.tangentSpaceNormalMap||i.clearcoatNormalMap||i.flatShading||"physical"===i.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(i.extensionFragDepth||i.logarithmicDepthBuffer)&&i.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",i.extensionDrawBuffers&&i.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(i.extensionShaderTextureLOD||i.envMap||i.transmission)&&i.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(aU).join(` 3092`),b=function(e){let t=[];for(let i in e){let r=e[i];!1!==r&&t.push("#define "+i+" "+r)}return t.join(` 3093`)}(d),w=c.createProgram(),S,_,A=i.glslVersion?"#version "+i.glslVersion+` 3094`:"";i.isRawShaderMaterial?((S=[b].filter(aU).join(` 3095`)).length>0&&(S+=` 3096`),(_=[x,b].filter(aU).join(` 3097`)).length>0&&(_+=` 3098`)):(S=[aQ(i),"#define SHADER_NAME "+i.shaderName,b,i.instancing?"#define USE_INSTANCING":"",i.instancingColor?"#define USE_INSTANCING_COLOR":"",i.supportsVertexTextures?"#define VERTEX_TEXTURES":"",i.useFog&&i.fog?"#define USE_FOG":"",i.useFog&&i.fogExp2?"#define FOG_EXP2":"",i.map?"#define USE_MAP":"",i.envMap?"#define USE_ENVMAP":"",i.envMap?"#define "+g:"",i.lightMap?"#define USE_LIGHTMAP":"",i.aoMap?"#define USE_AOMAP":"",i.emissiveMap?"#define USE_EMISSIVEMAP":"",i.bumpMap?"#define USE_BUMPMAP":"",i.normalMap?"#define USE_NORMALMAP":"",i.normalMap&&i.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",i.normalMap&&i.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",i.clearcoatMap?"#define USE_CLEARCOATMAP":"",i.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",i.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",i.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",i.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",i.displacementMap&&i.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",i.specularMap?"#define USE_SPECULARMAP":"",i.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",i.specularColorMap?"#define USE_SPECULARCOLORMAP":"",i.roughnessMap?"#define USE_ROUGHNESSMAP":"",i.metalnessMap?"#define USE_METALNESSMAP":"",i.alphaMap?"#define USE_ALPHAMAP":"",i.transmission?"#define USE_TRANSMISSION":"",i.transmissionMap?"#define USE_TRANSMISSIONMAP":"",i.thicknessMap?"#define USE_THICKNESSMAP":"",i.sheenColorMap?"#define USE_SHEENCOLORMAP":"",i.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",i.vertexTangents?"#define USE_TANGENT":"",i.vertexColors?"#define USE_COLOR":"",i.vertexAlphas?"#define USE_COLOR_ALPHA":"",i.vertexUvs?"#define USE_UV":"",i.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",i.flatShading?"#define FLAT_SHADED":"",i.skinning?"#define USE_SKINNING":"",i.morphTargets?"#define USE_MORPHTARGETS":"",i.morphNormals&&!1===i.flatShading?"#define USE_MORPHNORMALS":"",i.morphColors&&i.isWebGL2?"#define USE_MORPHCOLORS":"",i.morphTargetsCount>0&&i.isWebGL2?"#define MORPHTARGETS_TEXTURE":"",i.morphTargetsCount>0&&i.isWebGL2?"#define MORPHTARGETS_TEXTURE_STRIDE "+i.morphTextureStride:"",i.morphTargetsCount>0&&i.isWebGL2?"#define MORPHTARGETS_COUNT "+i.morphTargetsCount:"",i.doubleSided?"#define DOUBLE_SIDED":"",i.flipSided?"#define FLIP_SIDED":"",i.shadowMapEnabled?"#define USE_SHADOWMAP":"",i.shadowMapEnabled?"#define "+f:"",i.sizeAttenuation?"#define USE_SIZEATTENUATION":"",i.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",i.logarithmicDepthBuffer&&i.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR"," attribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT"," attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )"," attribute vec4 color;","#elif defined( USE_COLOR )"," attribute vec3 color;","#endif","#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )"," attribute vec3 morphTarget0;"," attribute vec3 morphTarget1;"," attribute vec3 morphTarget2;"," attribute vec3 morphTarget3;"," #ifdef USE_MORPHNORMALS"," attribute vec3 morphNormal0;"," attribute vec3 morphNormal1;"," attribute vec3 morphNormal2;"," attribute vec3 morphNormal3;"," #else"," attribute vec3 morphTarget4;"," attribute vec3 morphTarget5;"," attribute vec3 morphTarget6;"," attribute vec3 morphTarget7;"," #endif","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif",` 3099`].filter(aU).join(` 3100`),_=[x,aQ(i),"#define SHADER_NAME "+i.shaderName,b,i.useFog&&i.fog?"#define USE_FOG":"",i.useFog&&i.fogExp2?"#define FOG_EXP2":"",i.map?"#define USE_MAP":"",i.matcap?"#define USE_MATCAP":"",i.envMap?"#define USE_ENVMAP":"",i.envMap?"#define "+m:"",i.envMap?"#define "+g:"",i.envMap?"#define "+v:"",
3100y?"#define CUBEUV_TEXEL_WIDTH "+y.texelWidth:"",y?"#define CUBEUV_TEXEL_HEIGHT "+y.texelHeight:"",y?"#define CUBEUV_MAX_MIP "+y.maxMip+".0":"",i.lightMap?"#define USE_LIGHTMAP":"",i.aoMap?"#define USE_AOMAP":"",i.emissiveMap?"#define USE_EMISSIVEMAP":"",i.bumpMap?"#define USE_BUMPMAP":"",i.normalMap?"#define USE_NORMALMAP":"",i.normalMap&&i.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",i.normalMap&&i.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",i.clearcoat?"#define USE_CLEARCOAT":"",i.clearcoatMap?"#define USE_CLEARCOATMAP":"",i.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",i.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",i.iridescence?"#define USE_IRIDESCENCE":"",i.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",i.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",i.specularMap?"#define USE_SPECULARMAP":"",i.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",i.specularColorMap?"#define USE_SPECULARCOLORMAP":"",i.roughnessMap?"#define USE_ROUGHNESSMAP":"",i.metalnessMap?"#define USE_METALNESSMAP":"",i.alphaMap?"#define USE_ALPHAMAP":"",i.alphaTest?"#define USE_ALPHATEST":"",i.sheen?"#define USE_SHEEN":"",i.sheenColorMap?"#define USE_SHEENCOLORMAP":"",i.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",i.transmission?"#define USE_TRANSMISSION":"",i.transmissionMap?"#define USE_TRANSMISSIONMAP":"",i.thicknessMap?"#define USE_THICKNESSMAP":"",i.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",i.vertexTangents?"#define USE_TANGENT":"",i.vertexColors||i.instancingColor?"#define USE_COLOR":"",i.vertexAlphas?"#define USE_COLOR_ALPHA":"",i.vertexUvs?"#define USE_UV":"",i.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",i.gradientMap?"#define USE_GRADIENTMAP":"",i.flatShading?"#define FLAT_SHADED":"",i.doubleSided?"#define DOUBLE_SIDED":"",i.flipSided?"#define FLIP_SIDED":"",i.shadowMapEnabled?"#define USE_SHADOWMAP":"",i.shadowMapEnabled?"#define "+f:"",i.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",i.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",i.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",i.logarithmicDepthBuffer&&i.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==i.toneMapping?"#define TONE_MAPPING":"",0!==i.toneMapping?sd.tonemapping_pars_fragment:"",0!==i.toneMapping?function(e,t){let i;switch(t){case 1:i="Linear";break;case 2:i="Reinhard";break;case 3:i="OptimizedCineon";break;case 4:i="ACESFilmic";break;case 5:i="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",t),i="Linear"}return"vec3 "+e+"( vec3 color ) { return "+i+"ToneMapping( color ); }"}("toneMapping",i.toneMapping):"",i.dithering?"#define DITHERING":"",i.opaque?"#define OPAQUE":"",sd.encodings_pars_fragment,"vec4 linearToOutputTexel( vec4 value ) { return LinearTo"+(o=function(e){switch(e){case 3e3:return["Linear","( value )"];case 3001:return["sRGB","( value )"];default:return console.warn("THREE.WebGLProgram: Unsupported encoding:",e),["Linear","( value )"]}}(i.outputEncoding))[0]+o[1]+"; }",i.useDepthPacking?"#define DEPTH_PACKING "+i.depthPacking:"",` 3101`].filter(aU).join(` 3102`)),u=aj(u=aV(u=aH(u),i),i),p=aj(p=aV(p=aH(p),i),i),u=aX(u),p=aX(p),i.isWebGL2&&!0!==i.isRawShaderMaterial&&(A=`#version 300 es 3103`,S=["precision mediump sampler2DArray;","#define attribute in","#define varying out","#define texture2D texture"].join(` 3104`)+` 3105`+S,_=["#define varying in",i.glslVersion===tR?"":"layout(location = 0) out highp vec4 pc_fragColor;",i.glslVersion===tR?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join(` 3106`)+` 3107`+_);let M=A+S+u,E=A+_+p,C=aF(c,35633,M),T=aF(c,35632,E);if(c.attachShader(w,C),c.attachShader(w,T),void 0!==i.index0AttributeName?c.bindAttribLocation(w,0,i.index0AttributeName):!0===i.morphTargets&&c.bindAttribLocation(w,0,"position"),c.linkProgram(w),e.debug.checkSha
3107derErrors){let e=c.getProgramInfoLog(w).trim(),t=c.getShaderInfoLog(C).trim(),i=c.getShaderInfoLog(T).trim(),r=!0,s=!0;if(!1===c.getProgramParameter(w,35714)){r=!1;let t=ak(c,C,"vertex"),i=ak(c,T,"fragment");console.error("THREE.WebGLProgram: Shader Error "+c.getError()+" - VALIDATE_STATUS "+c.getProgramParameter(w,35715)+` 3108 3109Program Info Log: `+e+` 3110`+t+` 3111`+i)}else""!==e?console.warn("THREE.WebGLProgram: Program Info Log:",e):(""===t||""===i)&&(s=!1);s&&(this.diagnostics={runnable:r,programLog:e,vertexShader:{log:t,prefix:S},fragmentShader:{log:i,prefix:_}})}return c.deleteShader(C),c.deleteShader(T),this.getUniforms=function(){return void 0===l&&(l=new az(c,w)),l},this.getAttributes=function(){return void 0===h&&(h=function(e,t){let i={},r=e.getProgramParameter(t,35721);for(let s=0;s<r;s++){let r=e.getActiveAttrib(t,s),a=r.name,o=1;35674===r.type&&(o=2),35675===r.type&&(o=3),35676===r.type&&(o=4),i[a]={type:r.type,location:e.getAttribLocation(t,a),locationSize:o}}return i}(c,w)),h},this.destroy=function(){r.releaseStatesOfProgram(this),c.deleteProgram(w),this.program=void 0},this.name=i.shaderName,this.id=aN++,this.cacheKey=t,this.usedTimes=1,this.program=w,this.vertexShader=C,this.fragmentShader=T,this}var aZ=0,aJ=class{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e){let t=e.vertexShader,i=e.fragmentShader,r=this._getShaderStage(t),s=this._getShaderStage(i),a=this._getShaderCacheForMaterial(e);return!1===a.has(r)&&(a.add(r),r.usedTimes++),!1===a.has(s)&&(a.add(s),s.usedTimes++),this}remove(e){for(let t of this.materialCache.get(e))t.usedTimes--,0===t.usedTimes&&this.shaderCache.delete(t.code);return this.materialCache.delete(e),this}getVertexShaderID(e){return this._getShaderStage(e.vertexShader).id}getFragmentShaderID(e){return this._getShaderStage(e.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(e){let t=this.materialCache,i=t.get(e);return void 0===i&&(i=new Set,t.set(e,i)),i}_getShaderStage(e){let t=this.shaderCache,i=t.get(e);return void 0===i&&(i=new a$(e),t.set(e,i)),i}},a$=class{constructor(e){this.id=aZ++,this.code=e,this.usedTimes=0}};function a0(e,t,i,r,s,a,o){let l=new i4,h=new aJ,c=[],d=s.isWebGL2,u=s.logarithmicDepthBuffer,p=s.vertexTextures,f=s.precision,m={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};return{getParameters:function(a,l,c,g,v){let y,x,b,w,S=g.fog,_=v.geometry,A=a.isMeshStandardMaterial?g.environment:null,M=(a.isMeshStandardMaterial?i:t).get(a.envMap||A),E=M&&306===M.mapping?M.image.height:null,C=m[a.type];null!==a.precision&&(f=s.getMaxPrecision(a.precision))!==a.precision&&console.warn("THREE.WebGLProgram.getParameters:",a.precision,"not supported, using",f,"instead.");let T=_.morphAttributes.position||_.morphAttributes.normal||_.morphAttributes.color,P=void 0!==T?T.length:0,D=0;if(void 0!==_.morphAttributes.position&&(D=1),void 0!==_.morphAttributes.normal&&(D=2),void 0!==_.morphAttributes.color&&(D=3),C){let e=sp[C];y=e.vertexShader,x=e.fragmentShader}else y=a.vertexShader,x=a.fragmentShader,h.update(a),b=h.getVertexShaderID(a),w=h.getFragmentShaderID(a);let I=e.getRenderTarget(),O=a.alphaTest>0,R=a.clearcoat>0,L=a.iridescence>0;return{isWebGL2:d,shaderID:C,shaderName:a.type,vertexShader:y,fragmentShader:x,defines:a.defines,customVertexShaderID:b,customFragmentShaderID:w,isRawShaderMaterial:!0===a.isRawShaderMaterial,glslVersion:a.glslVersion,precision:f,instancing:!0===v.isInstancedMesh,instancingColor:!0===v.isInstancedMesh&&null!==v.instanceColor,supportsVertexTextures:p,outputEncoding:null===I?e.outputEncoding:!0===I.isXRRenderTarget?I.texture.encoding:3e3,map:!!a.map,matcap:!!a.matcap,envMap:!!M,envMapMode:M&&M.mapping,envMapCubeUVHeight:E,lightMap:!!a.lightMap,aoMap:!!a.aoMap,emissiveMap:!!a.emissiveMap,bumpMap:!!a.bumpMap,normalMap:!!a.normalMap,objectSpaceNormalMap:1===a.normalMapType,tangentSpaceNormalMap:0===a.normalMapType,decodeVideoTexture:!!a.map&&!0===a.map.isVideoTexture&&3001===a.map.encoding,clearcoat:R,clearcoatMap:R&&!!a.clearcoatMap,clearcoatRoughnessMap:R&&!!a.clearcoatRoughnessMap,clearcoatNormalMap:R&&!!a.clearcoatNormalMap,iridescence:L,iridescenceMap:L&&!!a.iridescenceMap,iridescenceThicknessMap:L&&!!a.iridescenceThicknessMap,displacementMap:!!a.displacementMap,roughnessMap:!!a.roughnessMap,metalnessMap:!!a.metalnessMap,specularMap:!!a.specularMap,specularIntensityMap:!!a.specularIntensityMap,specularColorMap:!!a.specularColorMap,opaque:!1===a.transparent&&1===a.blending,alphaMap:!!a.alphaMap,alphaTest:O,gradientMap:!!a.gradientMap,sheen:a.sheen>0,sheenColorMap:!!a.sheenColorMap,sheenRoughnessMap:!!a.sheenRoughnessMap,transmission:a.transmission>0,transmissionMap:!!a.transmissionMap,thicknessMap:!!a.thicknessMap,combine:a.combine,vertexTangents:!!a.normalMap&&!!_.attributes.tangent,vertexColors:a.vertexColors,vertexAlphas:!0===a.vertexColors&&!!_.attributes.color&&4===_.attributes.color.itemSize,vertexUvs:!!a.map||!!a.bumpMap||!!a.normalMap||!!a.specularMap||!!a.alphaMap||!!a.emissiveMap||!!a.roughnessMap||!!a.metalnessMap||!!a.clearcoatMap||!!a.clearcoatRoughnessMap||!!a.clearcoatNormalMap||!!a.iridescenceMap||!!a.iridescenceThicknessMap||!!a.displacementMap||!!a.transmissionMap||!!a.thicknessMap||!!a.specularIntensityMap||!!a.specularColorMap||!!a.sheenColorMap||!!a.sheenRoughnessMap,uvsVertexOnly:!(a.map||a.bumpMap||a.normalMap||a.specularMap||a.alphaMap||a.emissiveMap||a.roughnessMap||a.metalnessMap||a.clearcoatNormalMap||a.iridescenceMap||a.iridescenceThicknessMap||a.transmission>0||a.transmissionMap||a.thicknessMap||a.specularIntensityMap||a.specularColorMap||a.sheen>0||a.sheenColorMap||a.sheenRoughnessMap)&&!!a.displacementMap,fog:!!S,useFog:!0===a.fog,fogExp2:S&&S.isFogExp2,flatShading:!!a.flatShading,sizeAttenuation:a.sizeAttenuation,logarithmicDepthBuffer:u,skinning:!0===v.isSkinnedMesh,morphTargets:void 0!==_.morphAttributes.position,morphNormals:void 0!==_.morphAttributes.normal,morphColors:void 0!==_.morphAttributes.color,morphTargetsCount:P,morphTextureStride:D,numDirLights:l.directional.length,numPointLights:l.point.length,numSpotLights:l.spot.length,numSpotLightMaps:l.spotLightMap.length,numRectAreaLights:l.rectArea.length,numHemiLights:l.hemi.length,numDirLightShadows:l.directionalShadowMap.length,numPointLightShadows:l.pointShadowMap.length,numSpotLightShadows:l.spotShadowMap.length,numSpotLightShadowsWithMaps:l.numSpotLightShadowsWithMaps,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,dithering:a.dithering,shadowMapEnabled:e.shadowMap.enabled&&c.length>0,shadowMapType:e.shadowMap.type,toneMapping:a.toneMapped?e.toneMapping:0,physicallyCorrectLights:e.physicallyCorrectLights,premultipliedAlpha:a.premultipliedAlpha,doubleSided:2===a.side,flipSided:1===a.side,useDepthPacking:!!a.depthPacking,depthPacking:a.depthPacking||0,index0AttributeName:a.index0AttributeName,extensionDerivatives:a.extensions&&a.extensions.derivatives,extensionFragDepth:a.extensions&&a.extensions.fragDepth,extensionDrawBuffers:a.extensions&&a.extensions.drawBuffers,extensionShaderTextureLOD:a.extensions&&a.extensions.shaderTextureLOD,rendererExtensionFragDepth:d||r.has("EXT_frag_depth"),rendererExtensionDrawBuffers:d||r.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:d||r.has("EXT_shader_texture_lod"),customProgramCacheKey:a.customProgramCacheKey()}},getProgramCacheKey:function(t){let i=[];if(t.shaderID?i.push(t.shaderID):(i.push(t.customVertexShaderID),i.push(t.customFragmentShaderID)),void 0!==t.defines)for(let e in t.defines)i.push(e),i.push(t.defines[e]);return!1===t.isRawShaderMaterial&&(i.push(t.precision),i.push(t.outputEncoding),i.push(t.envMapMode),i.push(t.envMapCubeUVHeight),i.push(t.combine),i.push(t.vertexUvs),i.push(t.fogExp2),i.push(t.sizeAttenuation),i.push(t.morphTargetsCount),i.push(t.morphAttributeCount),i.push(t.numDirLights),i.push(t.numPointLights),i.push(t.numSpotLights),i.push(t.numSpotLightMaps),i.push(t.numHemiLights),i.push(t.numRectAreaLights),i.push(t.numDirLightShadows),i.push(t.numPointLightShadows),i.push(t.numSpotLightShadows),i.push(t.numSpotLightShadowsWithMaps),i.push(t.shadowMapType),i.push(t.toneMapping),i.push(t.numClippingPlanes),i.push(t.numClipIntersection),i.push(t.depthPacking),l.disableAll(),t.isWebGL2&&l.enable(0),t.supportsVertexTextures&&l.enable(1),t.instancing&&l.enable(2),t.instancingColor&&l.enable(3),t.map&&l.enable(4),t.matcap&&l.enable(5),t.envMap&&l.enable(6),t.lightMap&&l.enable(7),t.aoMap&&l.enable(8),t.emissiveMap&&l.enable(9),t.bumpMap&&l.enable(10),t.normalMap&&l.enable(11),t.objectSpaceNormalMap&&l.enable(12),t.tangentSpaceNormalMap&&l.enable(13),t.clearcoat&&l.enable(14),t.clearcoatMap&&l.enable(15),t.clearcoatRoughnessMap&&l.enable(16),t.clearcoatNormalMap&&l.enable(17),t.iridescence&&l.enable(18),t.iridescenceMap&&l.enable(19),t.iridescenceThicknessMap&&l.enable(20),t.dis
3111placementMap&&l.enable(21),t.specularMap&&l.enable(22),t.roughnessMap&&l.enable(23),t.metalnessMap&&l.enable(24),t.gradientMap&&l.enable(25),t.alphaMap&&l.enable(26),t.alphaTest&&l.enable(27),t.vertexColors&&l.enable(28),t.vertexAlphas&&l.enable(29),t.vertexUvs&&l.enable(30),t.vertexTangents&&l.enable(31),t.uvsVertexOnly&&l.enable(32),i.push(l.mask),l.disableAll(),t.fog&&l.enable(0),t.useFog&&l.enable(1),t.flatShading&&l.enable(2),t.logarithmicDepthBuffer&&l.enable(3),t.skinning&&l.enable(4),t.morphTargets&&l.enable(5),t.morphNormals&&l.enable(6),t.morphColors&&l.enable(7),t.premultipliedAlpha&&l.enable(8),t.shadowMapEnabled&&l.enable(9),t.physicallyCorrectLights&&l.enable(10),t.doubleSided&&l.enable(11),t.flipSided&&l.enable(12),t.useDepthPacking&&l.enable(13),t.dithering&&l.enable(14),t.specularIntensityMap&&l.enable(15),t.specularColorMap&&l.enable(16),t.transmission&&l.enable(17),t.transmissionMap&&l.enable(18),t.thicknessMap&&l.enable(19),t.sheen&&l.enable(20),t.sheenColorMap&&l.enable(21),t.sheenRoughnessMap&&l.enable(22),t.decodeVideoTexture&&l.enable(23),t.opaque&&l.enable(24),i.push(l.mask),i.push(e.outputEncoding)),i.push(t.customProgramCacheKey),i.join()},getUniforms:function(e){let t=m[e.type],i;if(t){let e=sp[t];i=r2.clone(e.uniforms)}else i=e.uniforms;return i},acquireProgram:function(t,i){let r;for(let e=0,t=c.length;e<t;e++){let t=c[e];if(t.cacheKey===i){r=t,++r.usedTimes;break}}return void 0===r&&(r=new aK(e,i,t,a),c.push(r)),r},releaseProgram:function(e){if(0==--e.usedTimes){let t=c.indexOf(e);c[t]=c[c.length-1],c.pop(),e.destroy()}},releaseShaderCache:function(e){h.remove(e)},programs:c,dispose:function(){h.dispose()}}}function a1(){let e=new WeakMap;return{get:function(t){let i=e.get(t);return void 0===i&&(i={},e.set(t,i)),i},remove:function(t){e.delete(t)},update:function(t,i,r){e.get(t)[i]=r},dispose:function(){e=new WeakMap}}}function a2(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.material.id!==t.material.id?e.material.id-t.material.id:e.z!==t.z?e.z-t.z:e.id-t.id}function a3(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.z!==t.z?t.z-e.z:e.id-t.id}function a4(){let e=[],t=0,i=[],r=[],s=[];function a(i,r,s,a,o,l){let h=e[t];return void 0===h?(h={id:i.id,object:i,geometry:r,material:s,groupOrder:a,renderOrder:i.renderOrder,z:o,group:l},e[t]=h):(h.id=i.id,h.object=i,h.geometry=r,h.material=s,h.groupOrder=a,h.renderOrder=i.renderOrder,h.z=o,h.group=l),t++,h}return{opaque:i,transmissive:r,transparent:s,init:function(){t=0,i.length=0,r.length=0,s.length=0},push:function(e,t,o,l,h,c){let d=a(e,t,o,l,h,c);o.transmission>0?r.push(d):!0===o.transparent?s.push(d):i.push(d)},unshift:function(e,t,o,l,h,c){let d=a(e,t,o,l,h,c);o.transmission>0?r.unshift(d):!0===o.transparent?s.unshift(d):i.unshift(d)},finish:function(){for(let i=t,r=e.length;i<r;i++){let t=e[i];if(null===t.id)break;t.id=null,t.object=null,t.geometry=null,t.material=null,t.group=null}},sort:function(e,t){i.length>1&&i.sort(e||a2),r.length>1&&r.sort(t||a3),s.length>1&&s.sort(t||a3)}}}function a5(){let e=new WeakMap;return{get:function(t,i){let r=e.get(t),s;return void 0===r?(s=new a4,e.set(t,[s])):i>=r.length?(s=new a4,r.push(s)):s=r[i],s},dispose:function(){e=new WeakMap}}}function a6(){let e={};return{get:function(t){let i;if(void 0!==e[t.id])return e[t.id];switch(t.type){case"DirectionalLight":i={direction:new iv,color:new ii};break;case"SpotLight":i={position:new iv,direction:new iv,color:new ii,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":i={position:new iv,color:new ii,distance:0,decay:0};break;case"HemisphereLight":i={direction:new iv,skyColor:new ii,groundColor:new ii};break;case"RectAreaLight":i={color:new ii,position:new iv,halfWidth:new iv,halfHeight:new iv}}return e[t.id]=i,i}}}var a8=0;function a9(e,t){return(t.castShadow?2:0)-(e.castShadow?2:0)+(t.map?1:0)-(e.map?1:0)}function a7(e,t){let i;let r=new a6,s=(i={},{get:function(e){let t;if(void 0!==i[e.id])return i[e.id];switch(e.type){case"DirectionalLight":case"SpotLight":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new tQ};break;case"PointLight":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new tQ,shadowCameraNear:1,shadowCameraFar:1e3}}return i[e.id]=t,t}}),a={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0};for(let e=0;e<9;e++)a.probe.push(new iv);let o=new iv,l=new iX,h=new iX;return{setup:function(i,o){let l=0,h=0,c=0;for(let e=0;e<9;e++)a.probe[e].set(0,0,0);let d=0,u=0,p=0,f=0,m=0,g=0,v=0,y=0,x=0,b=0;i.sort(a9);let w=!0!==o?Math.PI:1;for(let e=0,t=i.length;e<t;e++){let t=i[e],o=t.color,S=t.intensity,_=t.distance,A=t.shadow&&t.shadow.map?t.shadow.map.texture:null;
3111if(t.isAmbientLight)l+=o.r*S*w,h+=o.g*S*w,c+=o.b*S*w;else if(t.isLightProbe)for(let e=0;e<9;e++)a.probe[e].addScaledVector(t.sh.coefficients[e],S);else if(t.isDirectionalLight){let e=r.get(t);if(e.color.copy(t.color).multiplyScalar(t.intensity*w),t.castShadow){let e=t.shadow,i=s.get(t);i.shadowBias=e.bias,i.shadowNormalBias=e.normalBias,i.shadowRadius=e.radius,i.shadowMapSize=e.mapSize,a.directionalShadow[d]=i,a.directionalShadowMap[d]=A,a.directionalShadowMatrix[d]=t.shadow.matrix,g++}a.directional[d]=e,d++}else if(t.isSpotLight){let e=r.get(t);e.position.setFromMatrixPosition(t.matrixWorld),e.color.copy(o).multiplyScalar(S*w),e.distance=_,e.coneCos=Math.cos(t.angle),e.penumbraCos=Math.cos(t.angle*(1-t.penumbra)),e.decay=t.decay,a.spot[p]=e;let i=t.shadow;if(t.map&&(a.spotLightMap[x]=t.map,x++,i.updateMatrices(t),t.castShadow&&b++),a.spotLightMatrix[p]=i.matrix,t.castShadow){let e=s.get(t);e.shadowBias=i.bias,e.shadowNormalBias=i.normalBias,e.shadowRadius=i.radius,e.shadowMapSize=i.mapSize,a.spotShadow[p]=e,a.spotShadowMap[p]=A,y++}p++}else if(t.isRectAreaLight){let e=r.get(t);e.color.copy(o).multiplyScalar(S),e.halfWidth.set(.5*t.width,0,0),e.halfHeight.set(0,.5*t.height,0),a.rectArea[f]=e,f++}else if(t.isPointLight){let e=r.get(t);if(e.color.copy(t.color).multiplyScalar(t.intensity*w),e.distance=t.distance,e.decay=t.decay,t.castShadow){let e=t.shadow,i=s.get(t);i.shadowBias=e.bias,i.shadowNormalBias=e.normalBias,i.shadowRadius=e.radius,i.shadowMapSize=e.mapSize,i.shadowCameraNear=e.camera.near,i.shadowCameraFar=e.camera.far,a.pointShadow[u]=i,a.pointShadowMap[u]=A,a.pointShadowMatrix[u]=t.shadow.matrix,v++}a.point[u]=e,u++}else if(t.isHemisphereLight){let e=r.get(t);e.skyColor.copy(t.color).multiplyScalar(S*w),e.groundColor.copy(t.groundColor).multiplyScalar(S*w),a.hemi[m]=e,m++}}f>0&&(t.isWebGL2||!0===e.has("OES_texture_float_linear")?(a.rectAreaLTC1=su.LTC_FLOAT_1,a.rectAreaLTC2=su.LTC_FLOAT_2):!0===e.has("OES_texture_half_float_linear")?(a.rectAreaLTC1=su.LTC_HALF_1,a.rectAreaLTC2=su.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),a.ambient[0]=l,a.ambient[1]=h,a.ambient[2]=c;let S=a.hash;(S.directionalLength!==d||S.pointLength!==u||S.spotLength!==p||S.rectAreaLength!==f||S.hemiLength!==m||S.numDirectionalShadows!==g||S.numPointShadows!==v||S.numSpotShadows!==y||S.numSpotMaps!==x)&&(a.directional.length=d,a.spot.length=p,a.rectArea.length=f,a.point.length=u,a.hemi.length=m,a.directionalShadow.length=g,a.directionalShadowMap.length=g,a.pointShadow.length=v,a.pointShadowMap.length=v,a.spotShadow.length=y,a.spotShadowMap.length=y,a.directionalShadowMatrix.length=g,a.pointShadowMatrix.length=v,a.spotLightMatrix.length=y+x-b,a.spotLightMap.length=x,a.numSpotLightShadowsWithMaps=b,S.directionalLength=d,S.pointLength=u,S.spotLength=p,S.rectAreaLength=f,S.hemiLength=m,S.numDirectionalShadows=g,S.numPointShadows=v,S.numSpotShadows=y,S.numSpotMaps=x,a.version=a8++)},setupView:function(e,t){let i=0,r=0,s=0,c=0,d=0,u=t.matrixWorldInverse;for(let t=0,p=e.length;t<p;t++){let p=e[t];if(p.isDirectionalLight){let e=a.directional[i];e.direction.setFromMatrixPosition(p.matrixWorld),o.setFromMatrixPosition(p.target.matrixWorld),e.direction.sub(o),e.direction.transformDirection(u),i++}else if(p.isSpotLight){let e=a.spot[s];e.position.setFromMatrixPosition(p.matrixWorld),e.position.applyMatrix4(u),e.direction.setFromMatrixPosition(p.matrixWorld),o.setFromMatrixPosition(p.target.matrixWorld),e.direction.sub(o),e.direction.transformDirection(u),s++}else if(p.isRectAreaLight){let e=a.rectArea[c];e.position.setFromMatrixPosition(p.matrixWorld),e.position.applyMatrix4(u),h.identity(),l.copy(p.matrixWorld),l.premultiply(u),h.extractRotation(l),e.halfWidth.set(.5*p.width,0,0),e.halfHeight.set(0,.5*p.height,0),e.halfWidth.applyMatrix4(h),e.halfHeight.applyMatrix4(h),c++}else if(p.isPointLight){let e=a.point[r];e.position.setFromMatrixPosition(p.matrixWorld),e.position.applyMatrix4(u),r++}else if(p.isHemisphereLight){let e=a.hemi[d];e.direction.setFromMatrixPosition(p.matrixWorld),e.direction.transformDirection(u),d++}}},state:a}}function ne(e,t){let i=new a7(e,t),r=[],s=[];return{init:function(){r.length=0,s.length=0},state:{lightsArray:r,shadowsArray:s,lights:i},setupLights:function(e){i.setup(r,e)},setupLightsView:function(e){i.setupView(r,e)},pushLight:function(e){r.push(e)},pushShadow:function(e){s.push(e)}}}function nt(e,t){let i=new WeakMap;return{get:function(r,s=0){let a=i.get(r),o;return void 0===a?(o=new ne(e,t),i.set(r,[o])):s>=a.length?(o=new ne(e,t),a.push(o)):o=a[s],o},dispose:function(){i=new WeakMap}}}var ni=class extends rw{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}},nr=class extends rw{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.referencePosition=new iv,this.nearDistance=1,this.farDistance=1e3,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.referencePosition.copy(e.referencePosition),this.nearDistance=e.nearDistance,this.farDistance=e.farDistance,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}},ns=`void main() { 3112 gl_Position = vec4( position, 1.0 ); 3113}`,na=`uniform sampler2D shadow_pass; 3114uniform vec2 resolution; 3115uniform float radius; 3116#include <packing> 3117void main() {
3118 const float samples = float( VSM_SAMPLES ); 3119 float mean = 0.0; 3120 float squared_mean = 0.0; 3121 float uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 ); 3122 float uvStart = samples <= 1.0 ? 0.0 : - 1.0; 3123 for ( float i = 0.0; i < samples; i ++ ) { 3124 float uvOffset = uvStart + i * uvStride; 3125 #ifdef HORIZONTAL_PASS 3126 vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) ); 3127 mean += distribution.x; 3128 squared_mean += distribution.y * distribution.y + distribution.x * distribution.x; 3129 #else 3130 float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) ); 3131 mean += depth; 3132 squared_mean += depth * depth; 3133 #endif 3134 } 3135 mean = mean / samples; 3136 squared_mean = squared_mean / samples; 3137 float std_dev = sqrt( squared_mean - mean * mean ); 3138 gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) ); 3139}`;function nn(e,t,i){let r=new so,s=new tQ,a=new tQ,o=new ic,l=new ni({depthPacking:3201}),h=new nr,c={},d=i.maxTextureSize,u={0:1,1:0,2:2},p=new r5({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new tQ},radius:{value:4}},vertexShader:ns,fragmentShader:na}),f=p.clone();f.defines.HORIZONTAL_PASS=1;let m=new rz;m.setAttribute("position",new rM(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));let g=new rK(m,p),v=this;function y(t,i,r,s,a,o){let d=null,p=!0===r.isPointLight?t.customDistanceMaterial:t.customDepthMaterial;if(void 0!==p)d=p;else if(d=!0===r.isPointLight?h:l,e.localClippingEnabled&&!0===i.clipShadows&&Array.isArray(i.clippingPlanes)&&0!==i.clippingPlanes.length||i.displacementMap&&0!==i.displacementScale||i.alphaMap&&i.alphaTest>0||i.map&&i.alphaTest>0){let e=d.uuid,t=i.uuid,r=c[e];void 0===r&&(r={},c[e]=r);let s=r[t];void 0===s&&(s=d.clone(),r[t]=s),d=s}return d.visible=i.visible,d.wireframe=i.wireframe,3===o?d.side=null!==i.shadowSide?i.shadowSide:i.side:d.side=null!==i.shadowSide?i.shadowSide:u[i.side],d.alphaMap=i.alphaMap,d.alphaTest=i.alphaTest,d.map=i.map,d.clipShadows=i.clipShadows,d.clippingPlanes=i.clippingPlanes,d.clipIntersection=i.clipIntersection,d.displacementMap=i.displacementMap,d.displacementScale=i.displacementScale,d.displacementBias=i.displacementBias,d.wireframeLinewidth=i.wireframeLinewidth,d.linewidth=i.linewidth,!0===r.isPointLight&&!0===d.isMeshDistanceMaterial&&(d.referencePosition.setFromMatrixPosition(r.matrixWorld),d.nearDistance=s,d.farDistance=a),d}this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=1,this.render=function(i,l,h){if(!1===v.enabled||!1===v.autoUpdate&&!1===v.needsUpdate||0===i.length)return;let c=e.getRenderTarget(),u=e.getActiveCubeFace(),m=e.getActiveMipmapLevel(),x=e.state;x.setBlending(0),x.buffers.color.setClear(1,1,1,1),x.buffers.depth.setTest(!0),x.setScissorTest(!1);for(let c=0,u=i.length;c<u;c++){let u=i[c],m=u.shadow;if(void 0===m){console.warn("THREE.WebGLShadowMap:",u,"has no shadow.");continue}if(!1===m.autoUpdate&&!1===m.needsUpdate)continue;s.copy(m.mapSize);let v=m.getFrameExtents();if(s.multiply(v),a.copy(m.mapSize),(s.x>d||s.y>d)&&(s.x>d&&(a.x=Math.floor(d/v.x),s.x=a.x*v.x,m.mapSize.x=a.x),s.y>d&&(a.y=Math.floor(d/v.y),s.y=a.y*v.y,m.mapSize.y=a.y)),null===m.map){let e=3!==this.type?{minFilter:1003,magFilter:1003}:{};m.map=new id(s.x,s.y,e),m.map.texture.name=u.name+".shadowMap",m.camera.updateProjectionMatrix()}e.setRenderTarget(m.map),e.clear();let b=m.getViewportCount();for(let i=0;i<b;i++){let s=m.getViewport(i);o.set(a.x*s.x,a.y*s.y,a.x*s.z,a.y*s.w),x.viewport(o),m.updateMatrices(u,i),r=m.getFrustum(),function i(s,a,o,l,h){if(!1===s.visible)return;if(s.layers.test(a.layers)&&(s.isMesh||s.isLine||s.isPoints)&&(s.castShadow||s.receiveShadow&&3===h)&&(!s.frustumCulled||r.intersectsObject(s))){s.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse,s.matrixWorld);let i=t.update(s),r=s.material;if(Array.isArray(r)){let t=i.groups;for(let a=0,c=t.length;a<c;a++){let c=t[a],d=r[c.materialIndex];if(d&&d.visible){let t=y(s,d,l,o.near,o.far,h);e.renderBufferDirect(o,null,i,t,s,c)}}}else if(r.visible){let t=y(s,r,l,o.near,o.far,h);e.renderBufferDirect(o,null,i,t,s,null)}}let c=s.children;for(let e=0,t=c.length;e<t;e++)i(c[e],a,o,l,h)}(l,h,m.camera,u,this.type)}!0!==m.isPointLightShadow&&3===this.type&&function(i,r){let a=t.update(g);p.defines.VSM_SAMPLES!==i.blurSamples&&(p.defines.VSM_SAMPLES=i.blurSamples,f.defines.VSM_SAMPLES=i.blurSamples,p.needsUpdate=!0,f.needsUpdate=!0),null===i.mapPass&&(i.mapPass=new id(s.x,s.y)),p.uniforms.shadow_pass.value=i.map.texture,p.uniforms.resolution.value=i.mapSize,p.uniforms.radius.value=i.radius,e.setRenderTarget(i.mapPass),e.clear(),e.renderBufferDirect(r,null,a,p,g,null),f.uniforms.shadow_pass.value=i.mapPass.texture,f.uniforms.resolution.value=i.mapSize,f.uniforms.radius.value=i.radius,e.setRenderTarget(i.map),e.clear(),e.renderBufferDirect(r,null,a,f,g,null)}(m,h),m.needsUpdate=!1}v.needsUpdate=!1,e.setRenderTarget(c,u,m)}
3139}function no(e,t,i){let r=i.isWebGL2,s=new function(){let t=!1,i=new ic,r=null,s=new ic(0,0,0,0);return{setMask:function(i){r===i||t||(e.colorMask(i,i,i,i),r=i)},setLocked:function(e){t=e},setClear:function(t,r,a,o,l){!0===l&&(t*=o,r*=o,a*=o),i.set(t,r,a,o),!1===s.equals(i)&&(e.clearColor(t,r,a,o),s.copy(i))},reset:function(){t=!1,r=null,s.set(-1,0,0,0)}}},a=new function(){let t=!1,i=null,r=null,s=null;return{setTest:function(e){e?U(2929):V(2929)},setMask:function(r){i===r||t||(e.depthMask(r),i=r)},setFunc:function(t){if(r!==t){switch(t){case 0:e.depthFunc(512);break;case 1:e.depthFunc(519);break;case 2:e.depthFunc(513);break;case 3:default:e.depthFunc(515);break;case 4:e.depthFunc(514);break;case 5:e.depthFunc(518);break;case 6:e.depthFunc(516);break;case 7:e.depthFunc(517)}r=t}},setLocked:function(e){t=e},setClear:function(t){s!==t&&(e.clearDepth(t),s=t)},reset:function(){t=!1,i=null,r=null,s=null}}},o=new function(){let t=!1,i=null,r=null,s=null,a=null,o=null,l=null,h=null,c=null;return{setTest:function(e){t||(e?U(2960):V(2960))},setMask:function(r){i===r||t||(e.stencilMask(r),i=r)},setFunc:function(t,i,o){(r!==t||s!==i||a!==o)&&(e.stencilFunc(t,i,o),r=t,s=i,a=o)},setOp:function(t,i,r){(o!==t||l!==i||h!==r)&&(e.stencilOp(t,i,r),o=t,l=i,h=r)},setLocked:function(e){t=e},setClear:function(t){c!==t&&(e.clearStencil(t),c=t)},reset:function(){t=!1,i=null,r=null,s=null,a=null,o=null,l=null,h=null,c=null}}},l=new WeakMap,h=new WeakMap,c={},d={},u=new WeakMap,p=[],f=null,m=!1,g=null,v=null,y=null,x=null,b=null,w=null,S=null,_=!1,A=null,M=null,E=null,C=null,T=null,P=e.getParameter(35661),D=!1,I=e.getParameter(7938);-1!==I.indexOf("WebGL")?D=parseFloat(/^WebGL (\d)/.exec(I)[1])>=1:-1!==I.indexOf("OpenGL ES")&&(D=parseFloat(/^OpenGL ES (\d)/.exec(I)[1])>=2);let O=null,R={},L=e.getParameter(3088),B=e.getParameter(2978),z=new ic().fromArray(L),F=new ic().fromArray(B);function N(t,i,r){let s=new Uint8Array(4),a=e.createTexture();e.bindTexture(t,a),e.texParameteri(t,10241,9728),e.texParameteri(t,10240,9728);for(let t=0;t<r;t++)e.texImage2D(i+t,0,6408,1,1,0,6408,5121,s);return a}let k={};function U(t){!0!==c[t]&&(e.enable(t),c[t]=!0)}function V(t){!1!==c[t]&&(e.disable(t),c[t]=!1)}k[3553]=N(3553,3553,1),k[34067]=N(34067,34069,6),s.setClear(0,0,0,1),a.setClear(1),o.setClear(0),U(2929),a.setFunc(3),W(!1),q(1),U(2884),H(0);let j={100:32774,101:32778,102:32779};if(r)j[103]=32775,j[104]=32776;else{let e=t.get("EXT_blend_minmax");null!==e&&(j[103]=e.MIN_EXT,j[104]=e.MAX_EXT)}let G={200:0,201:1,202:768,204:770,210:776,208:774,206:772,203:769,205:771,209:775,207:773};function H(t,i,r,s,a,o,l,h){if(0===t){!0===m&&(V(3042),m=!1);return}if(!1===m&&(U(3042),m=!0),5!==t){if(t!==g||h!==_){if((100!==v||100!==b)&&(e.blendEquation(32774),v=100,b=100),h)switch(t){case 1:e.blendFuncSeparate(1,771,1,771);break;case 2:e.blendFunc(1,1);break;case 3:e.blendFuncSeparate(0,769,0,1);break;case 4:e.blendFuncSeparate(0,768,0,770);break;default:console.error("THREE.WebGLState: Invalid blending: ",t)}else switch(t){case 1:e.blendFuncSeparate(770,771,1,771);break;case 2:e.blendFunc(770,1);break;case 3:e.blendFuncSeparate(0,769,0,1);break;case 4:e.blendFunc(0,768);break;default:console.error("THREE.WebGLState: Invalid blending: ",t)}y=null,x=null,w=null,S=null,g=t,_=h}return}a=a||i,o=o||r,l=l||s,(i!==v||a!==b)&&(e.blendEquationSeparate(j[i],j[a]),v=i,b=a),(r!==y||s!==x||o!==w||l!==S)&&(e.blendFuncSeparate(G[r],G[s],G[o],G[l]),y=r,x=s,w=o,S=l),g=t,_=!1}function W(t){A!==t&&(t?e.frontFace(2304):e.frontFace(2305),A=t)}function q(t){0!==t?(U(2884),t!==M&&(1===t?e.cullFace(1029):2===t?e.cullFace(1028):e.cullFace(1032))):V(2884),M=t}function X(t,i,r){t?(U(32823),(C!==i||T!==r)&&(e.polygonOffset(i,r),C=i,T=r)):V(32823)}return{buffers:{color:s,depth:a,stencil:o},enable:U,disable:V,bindFramebuffer:function(t,i){return d[t]!==i&&(e.bindFramebuffer(t,i),d[t]=i,r&&(36009===t&&(d[36160]=i),36160===t&&(d[36009]=i)),!0)},drawBuffers:function(r,s){let a=p,o=!1;if(r){if(void 0===(a=u.get(s))&&(a=[],u.set(s,a)),r.isWebGLMultipleRenderTargets){let e=r.texture;if(a.length!==e.length||36064!==a[0]){for(let t=0,i=e.length;t<i;t++)a[t]=36064+t;a.length=e.length,o=!0}}else 36064!==a[0]&&(a[0]=36064,o=!0)}else 1029!==a[0]&&(a[0]=1029,o=!0);
3139o&&(i.isWebGL2?e.drawBuffers(a):t.get("WEBGL_draw_buffers").drawBuffersWEBGL(a))},useProgram:function(t){return f!==t&&(e.useProgram(t),f=t,!0)},setBlending:H,setMaterial:function(e,t){2===e.side?V(2884):U(2884);let i=1===e.side;t&&(i=!i),W(i),1===e.blending&&!1===e.transparent?H(0):H(e.blending,e.blendEquation,e.blendSrc,e.blendDst,e.blendEquationAlpha,e.blendSrcAlpha,e.blendDstAlpha,e.premultipliedAlpha),a.setFunc(e.depthFunc),a.setTest(e.depthTest),a.setMask(e.depthWrite),s.setMask(e.colorWrite);let r=e.stencilWrite;o.setTest(r),r&&(o.setMask(e.stencilWriteMask),o.setFunc(e.stencilFunc,e.stencilRef,e.stencilFuncMask),o.setOp(e.stencilFail,e.stencilZFail,e.stencilZPass)),X(e.polygonOffset,e.polygonOffsetFactor,e.polygonOffsetUnits),!0===e.alphaToCoverage?U(32926):V(32926)},setFlipSided:W,setCullFace:q,setLineWidth:function(t){t!==E&&(D&&e.lineWidth(t),E=t)},setPolygonOffset:X,setScissorTest:function(e){e?U(3089):V(3089)},activeTexture:function(t){void 0===t&&(t=33984+P-1),O!==t&&(e.activeTexture(t),O=t)},bindTexture:function(t,i,r){void 0===r&&(r=null===O?33984+P-1:O);let s=R[r];void 0===s&&(s={type:void 0,texture:void 0},R[r]=s),(s.type!==t||s.texture!==i)&&(O!==r&&(e.activeTexture(r),O=r),e.bindTexture(t,i||k[t]),s.type=t,s.texture=i)},unbindTexture:function(){let t=R[O];void 0!==t&&void 0!==t.type&&(e.bindTexture(t.type,null),t.type=void 0,t.texture=void 0)},compressedTexImage2D:function(){try{e.compressedTexImage2D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},compressedTexImage3D:function(){try{e.compressedTexImage3D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},texImage2D:function(){try{e.texImage2D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},texImage3D:function(){try{e.texImage3D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},updateUBOMapping:function(t,i){let r=h.get(i);void 0===r&&(r=new WeakMap,h.set(i,r));let s=r.get(t);void 0===s&&(s=e.getUniformBlockIndex(i,t.name),r.set(t,s))},uniformBlockBinding:function(t,i){let r=h.get(i).get(t);l.get(i)!==r&&(e.uniformBlockBinding(i,r,t.__bindingPointIndex),l.set(i,r))},texStorage2D:function(){try{e.texStorage2D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},texStorage3D:function(){try{e.texStorage3D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},texSubImage2D:function(){try{e.texSubImage2D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},texSubImage3D:function(){try{e.texSubImage3D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},compressedTexSubImage2D:function(){try{e.compressedTexSubImage2D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},compressedTexSubImage3D:function(){try{e.compressedTexSubImage3D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},scissor:function(t){!1===z.equals(t)&&(e.scissor(t.x,t.y,t.z,t.w),z.copy(t))},viewport:function(t){!1===F.equals(t)&&(e.viewport(t.x,t.y,t.z,t.w),F.copy(t))},reset:function(){e.disable(3042),e.disable(2884),e.disable(2929),e.disable(32823),e.disable(3089),e.disable(2960),e.disable(32926),e.blendEquation(32774),e.blendFunc(1,0),e.blendFuncSeparate(1,0,1,0),e.colorMask(!0,!0,!0,!0),e.clearColor(0,0,0,0),e.depthMask(!0),e.depthFunc(513),e.clearDepth(1),e.stencilMask(4294967295),e.stencilFunc(519,0,4294967295),e.stencilOp(7680,7680,7680),e.clearStencil(0),e.cullFace(1029),e.frontFace(2305),e.polygonOffset(0,0),e.activeTexture(33984),e.bindFramebuffer(36160,null),!0===r&&(e.bindFramebuffer(36009,null),e.bindFramebuffer(36008,null)),e.useProgram(null),e.lineWidth(1),e.scissor(0,0,e.canvas.width,e.canvas.height),e.viewport(0,0,e.canvas.width,e.canvas.height),c={},O=null,R={},d={},u=new WeakMap,p=[],f=null,m=!1,g=null,v=null,y=null,x=null,b=null,w=null,S=null,_=!1,A=null,M=null,E=null,C=null,T=null,z.set(0,0,e.canvas.width,e.canvas.height),F.set(0,0,e.canvas.width,e.canvas.height),s.reset(),a.reset(),o.reset()}}}function nl(e,t,i,r,s,a,o){let l=s.isWebGL2,h=s.maxTextures,c=s.maxCubemapSize,d=s.maxTextureSize,u=s.maxSamples,p=t.has("WEBGL_multisampled_render_to_texture")?t.get("WEBGL_multisampled_render_to_texture"):null,f=!(typeof navigator>"u")&&/OculusBrowser/g.test(navigator.userAgent),m=new WeakMap,g,v=new WeakMap,y=!1;try{y="u">typeof OffscreenCanvas&&null!==new OffscreenCanvas(1,1).getContext("2d")}catch{}function x(e,t){return y?new OffscreenCanvas(e,t):t1("canvas")}function b(e,t,i,r){let s=1;if((e.width>r||e.height>r)&&(s=r/Math.max(e.width,e.height)),s<1||!0===t){if(!("u">typeof HTMLImageElement&&e instanceof HTMLImageElement||"u">typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"u">typeof ImageBitmap&&e instanceof ImageBitmap))return"data"in e&&c
3139onsole.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+e.width+"x"+e.height+")."),e;{let r=t?tW:Math.floor,a=r(s*e.width),o=r(s*e.height);void 0===g&&(g=x(a,o));let l=i?x(a,o):g;return l.width=a,l.height=o,l.getContext("2d").drawImage(e,0,0,a,o),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+e.width+"x"+e.height+") to ("+a+"x"+o+")."),l}}return e}function w(e){return tG(e.width)&&tG(e.height)}function S(e,t){return e.generateMipmaps&&t&&1003!==e.minFilter&&1006!==e.minFilter}function _(t){e.generateMipmap(t)}function A(i,r,s,a,o=!1){if(!1===l)return r;if(null!==i){if(void 0!==e[i])return e[i];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+i+"'")}let h=r;return 6403===r&&(5126===s&&(h=33326),5131===s&&(h=33325),5121===s&&(h=33321)),33319===r&&(5126===s&&(h=33328),5131===s&&(h=33327),5121===s&&(h=33323)),6408===r&&(5126===s&&(h=34836),5131===s&&(h=34842),5121===s&&(h=3001===a&&!1===o?35907:32856),32819===s&&(h=32854),32820===s&&(h=32855)),(33325===h||33326===h||33327===h||33328===h||34842===h||34836===h)&&t.get("EXT_color_buffer_float"),h}function M(e,t,i){return!0===S(e,i)||e.isFramebufferTexture&&1003!==e.minFilter&&1006!==e.minFilter?Math.log2(Math.max(t.width,t.height))+1:void 0!==e.mipmaps&&e.mipmaps.length>0?e.mipmaps.length:e.isCompressedTexture&&Array.isArray(e.image)?t.mipmaps.length:1}function E(e){return 1003===e||1004===e||1005===e?9728:9729}function C(e){let t=e.target;t.removeEventListener("dispose",C),function(e){let t=r.get(e);if(void 0===t.__webglInit)return;let i=e.source,s=v.get(i);if(s){let r=s[t.__cacheKey];r.usedTimes--,0===r.usedTimes&&P(e),0===Object.keys(s).length&&v.delete(i)}r.remove(e)}(t),t.isVideoTexture&&m.delete(t)}function T(t){let i=t.target;i.removeEventListener("dispose",T),function(t){let i=t.texture,s=r.get(t),a=r.get(i);if(void 0!==a.__webglTexture&&(e.deleteTexture(a.__webglTexture),o.memory.textures--),t.depthTexture&&t.depthTexture.dispose(),t.isWebGLCubeRenderTarget)for(let t=0;t<6;t++)e.deleteFramebuffer(s.__webglFramebuffer[t]),s.__webglDepthbuffer&&e.deleteRenderbuffer(s.__webglDepthbuffer[t]);else{if(e.deleteFramebuffer(s.__webglFramebuffer),s.__webglDepthbuffer&&e.deleteRenderbuffer(s.__webglDepthbuffer),s.__webglMultisampledFramebuffer&&e.deleteFramebuffer(s.__webglMultisampledFramebuffer),s.__webglColorRenderbuffer)for(let t=0;t<s.__webglColorRenderbuffer.length;t++)s.__webglColorRenderbuffer[t]&&e.deleteRenderbuffer(s.__webglColorRenderbuffer[t]);s.__webglDepthRenderbuffer&&e.deleteRenderbuffer(s.__webglDepthRenderbuffer)}if(t.isWebGLMultipleRenderTargets)for(let t=0,s=i.length;t<s;t++){let s=r.get(i[t]);s.__webglTexture&&(e.deleteTexture(s.__webglTexture),o.memory.textures--),r.remove(i[t])}r.remove(i),r.remove(t)}(i)}function P(t){let i=r.get(t);e.deleteTexture(i.__webglTexture);let s=t.source,a=v.get(s);delete a[i.__cacheKey],o.memory.textures--}let D=0;function I(e,t){let s,a=r.get(e);if(e.isVideoTexture&&(s=o.render.frame,m.get(e)!==s&&(m.set(e,s),e.update())),!1===e.isRenderTargetTexture&&e.version>0&&a.__version!==e.version){let i=e.image;if(null===i)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else if(!1===i.complete)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{z(a,e,t);return}}i.bindTexture(3553,a.__webglTexture,33984+t)}let O={1e3:10497,1001:33071,1002:33648},R={1003:9728,1004:9984,1005:9986,1006:9729,1007:9985,1008:9987};function L(i,a,o){if(o?(e.texParameteri(i,10242,O[a.wrapS]),e.texParameteri(i,10243,O[a.wrapT]),(32879===i||35866===i)&&e.texParameteri(i,32882,O[a.wrapR]),e.texParameteri(i,10240,R[a.magFilter]),e.texParameteri(i,10241,R[a.minFilter])):(e.texParameteri(i,10242,33071),e.texParameteri(i,10243,33071),(32879===i||35866===i)&&e.texParameteri(i,32882,33071),(1001!==a.wrapS||1001!==a.wrapT)&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),e.texParameteri(i,10240,E(a.magFilter)),e.texParameteri(i,10241,E(a.minFilter)),1003!==a.minFilter&&1006!==a.minFilter&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")),!0===t.has("EXT_texture_filter_anisotropic")){let o=t.get("EXT_texture_filter_anisotropic");1003!==a.magFilter&&(1005===a.minFilter||1008===a.minFilter)&&(1015!==a.type||!1!==t.has("OES_texture_float_linear"))&&(!1!==l||1016!==a.type||!1!==t.has("OES_texture_half_float_linear"))&&(a.anisotropy>1||r.get(a).__currentAnisotropy)&&(e.texParameterf(i,o.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,s.getMaxAnisotropy())),r.get(a).__currentAnisotropy=a.anisotropy)}}function B(t,i){let r,s=!1;void 0===t.__webglInit&&(t.__webglInit=!0,i.addEventListener("dispose",C));let a=i.source,l=v.get(a);void 0===l&&(l={},v.set(a,l));let h=((r=[]).push(i.wrapS),r.push(i.wrapT),r.push(i.wrapR||0),r.push(i.magFilter),r.push(i.minFilter),r.push(i.anisotropy),r.push(i.internalFormat),r.push(i.format),r.push(i.type),r.push(i.generateMipmaps),r.push(i.premultiplyAlpha),r.push(i.flipY),r.push(i.unpackAlignment),r.push(i.encoding),r.join());if(h!==t.__cacheKey){void 0===l[h]&&(l[h]={texture:e.createTexture(),usedTimes:0},o.memory.textures++,s=!0),l[h].usedTimes++;let r=l[t.__cacheKey];void 0!==r&&(l[t.__cacheKey].usedTimes--,0===r.usedTimes&&P(i)),t.__cacheKey=h,t.__webglTexture=l[h].texture}return s}function z(t,s,o){let h=3553;(s.isDataArrayTexture||s.isCompressedArrayTexture)&&(h=35866),s.isData3DTexture&&(h=32879);let c=B(t,s),u=s.source;i.bindTexture(h,t.__webglTexture,33984+o);let p=r.get(u);if(u.version!==p.__version||!0===c){i.activeTexture(33984+o),e.pixelStorei(37440,s.flipY),e.pixelStorei(37441,s.premultiplyAlpha),e.pixelStorei(3317,s.unpackAlignment),e.pixelStorei(37443,0);let t=!l&&(1001!==s.wrapS||1001!==s.wrapT||1003!==s.minFilter&&1006!==s.minFilter)&&!1===w(s.image),r=b
3139(s.image,t,!1,d),f=w(r=j(s,r))||l,m=a.convert(s.format,s.encoding),g=a.convert(s.type),v=A(s.internalFormat,m,g,s.encoding,s.isVideoTexture);L(h,s,f);let y,x=s.mipmaps,E=l&&!0!==s.isVideoTexture,C=void 0===p.__version||!0===c,T=M(s,r,f);if(s.isDepthTexture)v=6402,l?v=1015===s.type?36012:1014===s.type?33190:1020===s.type?35056:33189:1015===s.type&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),1026===s.format&&6402===v&&1012!==s.type&&1014!==s.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),s.type=1014,g=a.convert(s.type)),1027===s.format&&6402===v&&(v=34041,1020!==s.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),s.type=1020,g=a.convert(s.type))),C&&(E?i.texStorage2D(3553,1,v,r.width,r.height):i.texImage2D(3553,0,v,r.width,r.height,0,m,g,null));else if(s.isDataTexture){if(x.length>0&&f){E&&C&&i.texStorage2D(3553,T,v,x[0].width,x[0].height);for(let e=0,t=x.length;e<t;e++)y=x[e],E?i.texSubImage2D(3553,e,0,0,y.width,y.height,m,g,y.data):i.texImage2D(3553,e,v,y.width,y.height,0,m,g,y.data);s.generateMipmaps=!1}else E?(C&&i.texStorage2D(3553,T,v,r.width,r.height),i.texSubImage2D(3553,0,0,0,r.width,r.height,m,g,r.data)):i.texImage2D(3553,0,v,r.width,r.height,0,m,g,r.data)}else if(s.isCompressedTexture){if(s.isCompressedArrayTexture){E&&C&&i.texStorage3D(35866,T,v,x[0].width,x[0].height,r.depth);for(let e=0,t=x.length;e<t;e++)y=x[e],1023!==s.format?null!==m?E?i.compressedTexSubImage3D(35866,e,0,0,0,y.width,y.height,r.depth,m,y.data,0,0):i.compressedTexImage3D(35866,e,v,y.width,y.height,r.depth,0,y.data,0,0):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):E?i.texSubImage3D(35866,e,0,0,0,y.width,y.height,r.depth,m,g,y.data):i.texImage3D(35866,e,v,y.width,y.height,r.depth,0,m,g,y.data)}else{E&&C&&i.texStorage2D(3553,T,v,x[0].width,x[0].height);for(let e=0,t=x.length;e<t;e++)y=x[e],1023!==s.format?null!==m?E?i.compressedTexSubImage2D(3553,e,0,0,y.width,y.height,m,y.data):i.compressedTexImage2D(3553,e,v,y.width,y.height,0,y.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):E?i.texSubImage2D(3553,e,0,0,y.width,y.height,m,g,y.data):i.texImage2D(3553,e,v,y.width,y.height,0,m,g,y.data)}}else if(s.isDataArrayTexture)E?(C&&i.texStorage3D(35866,T,v,r.width,r.height,r.depth),i.texSubImage3D(35866,0,0,0,0,r.width,r.height,r.depth,m,g,r.data)):i.texImage3D(35866,0,v,r.width,r.height,r.depth,0,m,g,r.data);else if(s.isData3DTexture)E?(C&&i.texStorage3D(32879,T,v,r.width,r.height,r.depth),i.texSubImage3D(32879,0,0,0,0,r.width,r.height,r.depth,m,g,r.data)):i.texImage3D(32879,0,v,r.width,r.height,r.depth,0,m,g,r.data);else if(s.isFramebufferTexture){if(C){if(E)i.texStorage2D(3553,T,v,r.width,r.height);else{let e=r.width,t=r.height;for(let r=0;r<T;r++)i.texImage2D(3553,r,v,e,t,0,m,g,null),e>>=1,t>>=1}}}else if(x.length>0&&f){E&&C&&i.texStorage2D(3553,T,v,x[0].width,x[0].height);for(let e=0,t=x.length;e<t;e++)y=x[e],E?i.texSubImage2D(3553,e,0,0,m,g,y):i.texImage2D(3553,e,v,m,g,y);s.generateMipmaps=!1}else E?(C&&i.texStorage2D(3553,T,v,r.width,r.height),i.texSubImage2D(3553,0,0,0,m,g,r)):i.texImage2D(3553,0,v,m,g,r);S(s,f)&&_(h),p.__version=u.version,s.onUpdate&&s.onUpdate(s)}t.__version=s.version}function F(t,s,o,l,h){let c=a.convert(o.format,o.encoding),d=a.convert(o.type),u=A(o.internalFormat,c,d,o.encoding);r.get(s).__hasExternalTextures||(32879===h||35866===h?i.texImage3D(h,0,u,s.width,s.height,s.depth,0,c,d,null):i.texImage2D(h,0,u,s.width,s.height,0,c,d,null)),i.bindFramebuffer(36160,t),V(s)?p.framebufferTexture2DMultisampleEXT(36160,l,h,r.get(o).__webglTexture,0,U(s)):(3553===h||h>=34069&&h<=34074)&&e.framebufferTexture2D(36160,l,h,r.get(o).__webglTexture,0),i.bindFramebuffer(36160,null)}function N(t,i,r){if(e.bindRenderbuffer(36161,t),i.depthBuffer&&!i.stencilBuffer){let s=33189;if(r||V(i)){let t=i.depthTexture;t&&t.isDepthTexture&&(1015===t.type?s=36012:1014===t.type&&(s=33190));let r=U(i);V(i)?p.renderbufferStorageMultisampleEXT(36161,r,s,i.width,i.height):e.renderbufferStorageMultisample(36161,r,s,i.width,i.height)}else e.renderbufferStorage(36161,s,i.width,i.height);e.framebufferRenderbuffer(36160,36096,36161,t)}else if(i.depthBuffer&&i.stencilBuffer){let s=U(i);r&&!1===V(i)?e.renderbufferStorageMultisample(36161,s,35056,i.width,i.height):V(i)?p.renderbufferStorageMultisampleEXT(36161,s,35056,i.width,i.height):e.renderbufferStorage(36161,34041,i.width,i.height),e.framebufferRenderbuffer(36160,33306,36161,t)}
3139else{let t=!0===i.isWebGLMultipleRenderTargets?i.texture:[i.texture];for(let s=0;s<t.length;s++){let o=t[s],l=a.convert(o.format,o.encoding),h=a.convert(o.type),c=A(o.internalFormat,l,h,o.encoding),d=U(i);r&&!1===V(i)?e.renderbufferStorageMultisample(36161,d,c,i.width,i.height):V(i)?p.renderbufferStorageMultisampleEXT(36161,d,c,i.width,i.height):e.renderbufferStorage(36161,c,i.width,i.height)}}e.bindRenderbuffer(36161,null)}function k(t){let s=r.get(t),a=!0===t.isWebGLCubeRenderTarget;if(t.depthTexture&&!s.__autoAllocateDepthBuffer){if(a)throw Error("target.depthTexture not supported in Cube render targets");!function(t,s){if(s&&s.isWebGLCubeRenderTarget)throw Error("Depth Texture with cube render targets is not supported");if(i.bindFramebuffer(36160,t),!(s.depthTexture&&s.depthTexture.isDepthTexture))throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");r.get(s.depthTexture).__webglTexture&&s.depthTexture.image.width===s.width&&s.depthTexture.image.height===s.height||(s.depthTexture.image.width=s.width,s.depthTexture.image.height=s.height,s.depthTexture.needsUpdate=!0),I(s.depthTexture,0);let a=r.get(s.depthTexture).__webglTexture,o=U(s);if(1026===s.depthTexture.format)V(s)?p.framebufferTexture2DMultisampleEXT(36160,36096,3553,a,0,o):e.framebufferTexture2D(36160,36096,3553,a,0);else if(1027===s.depthTexture.format)V(s)?p.framebufferTexture2DMultisampleEXT(36160,33306,3553,a,0,o):e.framebufferTexture2D(36160,33306,3553,a,0);else throw Error("Unknown depthTexture format")}(s.__webglFramebuffer,t)}else if(a){s.__webglDepthbuffer=[];for(let r=0;r<6;r++)i.bindFramebuffer(36160,s.__webglFramebuffer[r]),s.__webglDepthbuffer[r]=e.createRenderbuffer(),N(s.__webglDepthbuffer[r],t,!1)}else i.bindFramebuffer(36160,s.__webglFramebuffer),s.__webglDepthbuffer=e.createRenderbuffer(),N(s.__webglDepthbuffer,t,!1);i.bindFramebuffer(36160,null)}function U(e){return Math.min(u,e.samples)}function V(e){let i=r.get(e);return l&&e.samples>0&&!0===t.has("WEBGL_multisampled_render_to_texture")&&!1!==i.__useRenderToTexture}function j(e,i){let r=e.encoding,s=e.format,a=e.type;return!0===e.isCompressedTexture||!0===e.isVideoTexture||1035===e.format||3e3!==r&&(3001===r?!1===l?!0===t.has("EXT_sRGB")&&1023===s?(e.format=1035,e.minFilter=1006,e.generateMipmaps=!1):i=is.sRGBToLinear(i):(1023!==s||1009!==a)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture encoding:",r)),i}this.allocateTextureUnit=function(){let e=D;return e>=h&&console.warn("THREE.WebGLTextures: Trying to use "+e+" texture units while this GPU supports only "+h),D+=1,e},this.resetTextureUnits=function(){D=0},this.setTexture2D=I,this.setTexture2DArray=function(e,t){let s=r.get(e);if(e.version>0&&s.__version!==e.version){z(s,e,t);return}i.bindTexture(35866,s.__webglTexture,33984+t)},this.setTexture3D=function(e,t){let s=r.get(e);if(e.version>0&&s.__version!==e.version){z(s,e,t);return}i.bindTexture(32879,s.__webglTexture,33984+t)},this.setTextureCube=function(t,s){let o=r.get(t);if(t.version>0&&o.__version!==t.version){(function(t,s,o){if(6!==s.image.length)return;let h=B(t,s),d=s.source;i.bindTexture(34067,t.__webglTexture,33984+o);let u=r.get(d);if(d.version!==u.__version||!0===h){let t;i.activeTexture(33984+o),e.pixelStorei(37440,s.flipY),e.pixelStorei(37441,s.premultiplyAlpha),e.pixelStorei(3317,s.unpackAlignment),e.pixelStorei(37443,0);let r=s.isCompressedTexture||s.image[0].isCompressedTexture,p=s.image[0]&&s.image[0].isDataTexture,f=[];for(let e=0;e<6;e++)r||p?f[e]=p?s.image[e].image:s.image[e]:f[e]=b(s.image[e],!1,!0,c),f[e]=j(s,f[e]);let m=f[0],g=w(m)||l,v=a.convert(s.format,s.encoding),y=a.convert(s.type),x=A(s.internalFormat,v,y,s.encoding),E=l&&!0!==s.isVideoTexture,C=void 0===u.__version||!0===h,T=M(s,m,g);if(L(34067,s,g),r){E&&C&&i.texStorage2D(34067,T,x,m.width,m.height);for(let e=0;e<6;e++){t=f[e].mipmaps;for(let r=0;r<t.length;r++){let a=t[r];1023!==s.format?null!==v?E?i.compressedTexSubImage2D(34069+e,r,0,0,a.width,a.height,v,a.data):i.compressedTexImage2D(34069+e,r,x,a.width,a.height,0,a.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):E?i.texSubImage2D(34069+e,r,0,0,a.width,a.height,v,y,a.data):i.texImage2D(34069+e,r,x,a.width,a.height,0,v,y,a.data)}}}else{t=s.mipmaps,E&&C&&(t.length>0&&T++,i.texStorage2D(34067,T,x,f[0].width,f[0].height));for(let e=0;e<6;e++)if(p){E?i.texSubImage2D(34069+e,0,0,0,f[e].width,f[e].height,v,y,f[e].data):i.texImage2D(34069+e,0,x,f[e].width,f[e].height,0,v,y,f[e].data);for(let r=0;r<t.length;r++){let s=t[r].image[e].image;E?i.texSubImage2D(34069+e,r+1,0,0,s.width,s.height,v,y,s.data):i.texImage2D(34069+e,r+1,x,s.width,s.height,0,v,y,s.data)}}else{E?i.texSubImage2D(34069+e,0,0,0,v,y,f[e]):i.texImage2D(34069+e,0,x,v,y,f[e]);for(let r=0;r<t.length;r++){let s=t[r];E?i.texSubImage2D(34069+e,r+1,0,0,v,y,s.image[e]):i.texImage2D(34069+e,r+1,x,v,y,s.image[e])}}}
3139S(s,g)&&_(34067),u.__version=d.version,s.onUpdate&&s.onUpdate(s)}t.__version=s.version})(o,t,s);return}i.bindTexture(34067,o.__webglTexture,33984+s)},this.rebindTextures=function(e,t,i){let s=r.get(e);void 0!==t&&F(s.__webglFramebuffer,e,e.texture,36064,3553),void 0!==i&&k(e)},this.setupRenderTarget=function(t){let h=t.texture,c=r.get(t),d=r.get(h);t.addEventListener("dispose",T),!0!==t.isWebGLMultipleRenderTargets&&(void 0===d.__webglTexture&&(d.__webglTexture=e.createTexture()),d.__version=h.version,o.memory.textures++);let u=!0===t.isWebGLCubeRenderTarget,p=!0===t.isWebGLMultipleRenderTargets,f=w(t)||l;if(u){c.__webglFramebuffer=[];for(let t=0;t<6;t++)c.__webglFramebuffer[t]=e.createFramebuffer()}else{if(c.__webglFramebuffer=e.createFramebuffer(),p){if(s.drawBuffers){let i=t.texture;for(let t=0,s=i.length;t<s;t++){let s=r.get(i[t]);void 0===s.__webglTexture&&(s.__webglTexture=e.createTexture(),o.memory.textures++)}}else console.warn("THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.")}if(l&&t.samples>0&&!1===V(t)){let r=p?h:[h];c.__webglMultisampledFramebuffer=e.createFramebuffer(),c.__webglColorRenderbuffer=[],i.bindFramebuffer(36160,c.__webglMultisampledFramebuffer);for(let i=0;i<r.length;i++){let s=r[i];c.__webglColorRenderbuffer[i]=e.createRenderbuffer(),e.bindRenderbuffer(36161,c.__webglColorRenderbuffer[i]);let o=a.convert(s.format,s.encoding),l=a.convert(s.type),h=A(s.internalFormat,o,l,s.encoding,!0===t.isXRRenderTarget),d=U(t);e.renderbufferStorageMultisample(36161,d,h,t.width,t.height),e.framebufferRenderbuffer(36160,36064+i,36161,c.__webglColorRenderbuffer[i])}e.bindRenderbuffer(36161,null),t.depthBuffer&&(c.__webglDepthRenderbuffer=e.createRenderbuffer(),N(c.__webglDepthRenderbuffer,t,!0)),i.bindFramebuffer(36160,null)}}if(u){i.bindTexture(34067,d.__webglTexture),L(34067,h,f);for(let e=0;e<6;e++)F(c.__webglFramebuffer[e],t,h,36064,34069+e);S(h,f)&&_(34067),i.unbindTexture()}else if(p){let e=t.texture;for(let s=0,a=e.length;s<a;s++){let a=e[s],o=r.get(a);i.bindTexture(3553,o.__webglTexture),L(3553,a,f),F(c.__webglFramebuffer,t,a,36064+s,3553),S(a,f)&&_(3553)}i.unbindTexture()}else{let e=3553;(t.isWebGL3DRenderTarget||t.isWebGLArrayRenderTarget)&&(l?e=t.isWebGL3DRenderTarget?32879:35866:console.error("THREE.WebGLTextures: THREE.Data3DTexture and THREE.DataArrayTexture only supported with WebGL2.")),i.bindTexture(e,d.__webglTexture),L(e,h,f),F(c.__webglFramebuffer,t,h,36064,e),S(h,f)&&_(e),i.unbindTexture()}t.depthBuffer&&k(t)},this.updateRenderTargetMipmap=function(e){let t=w(e)||l,s=!0===e.isWebGLMultipleRenderTargets?e.texture:[e.texture];for(let a=0,o=s.length;a<o;a++){let o=s[a];if(S(o,t)){let t=e.isWebGLCubeRenderTarget?34067:3553,s=r.get(o).__webglTexture;i.bindTexture(t,s),_(t),i.unbindTexture()}}},this.updateMultisampleRenderTarget=function(t){if(l&&t.samples>0&&!1===V(t)){let s=t.isWebGLMultipleRenderTargets?t.texture:[t.texture],a=t.width,o=t.height,l=16384,h=[],c=t.stencilBuffer?33306:36096,d=r.get(t),u=!0===t.isWebGLMultipleRenderTargets;if(u)for(let t=0;t<s.length;t++)i.bindFramebuffer(36160,d.__webglMultisampledFramebuffer),e.framebufferRenderbuffer(36160,36064+t,3
31396161,null),i.bindFramebuffer(36160,d.__webglFramebuffer),e.framebufferTexture2D(36009,36064+t,3553,null,0);i.bindFramebuffer(36008,d.__webglMultisampledFramebuffer),i.bindFramebuffer(36009,d.__webglFramebuffer);for(let i=0;i<s.length;i++){h.push(36064+i),t.depthBuffer&&h.push(c);let p=void 0!==d.__ignoreDepthValues&&d.__ignoreDepthValues;if(!1===p&&(t.depthBuffer&&(l|=256),t.stencilBuffer&&(l|=1024)),u&&e.framebufferRenderbuffer(36008,36064,36161,d.__webglColorRenderbuffer[i]),!0===p&&(e.invalidateFramebuffer(36008,[c]),e.invalidateFramebuffer(36009,[c])),u){let t=r.get(s[i]).__webglTexture;e.framebufferTexture2D(36009,36064,3553,t,0)}e.blitFramebuffer(0,0,a,o,0,0,a,o,l,9728),f&&e.invalidateFramebuffer(36008,h)}if(i.bindFramebuffer(36008,null),i.bindFramebuffer(36009,null),u)for(let t=0;t<s.length;t++){i.bindFramebuffer(36160,d.__webglMultisampledFramebuffer),e.framebufferRenderbuffer(36160,36064+t,36161,d.__webglColorRenderbuffer[t]);let a=r.get(s[t]).__webglTexture;i.bindFramebuffer(36160,d.__webglFramebuffer),e.framebufferTexture2D(36009,36064+t,3553,a,0)}i.bindFramebuffer(36009,d.__webglMultisampledFramebuffer)}},this.setupDepthRenderbuffer=k,this.setupFrameBufferTexture=F,this.useMultisampledRTT=V}function nh(e,t,i){let r=i.isWebGL2;return{convert:function(i,s=null){let a;if(1009===i)return 5121;if(1017===i)return 32819;if(1018===i)return 32820;if(1010===i)return 5120;if(1011===i)return 5122;if(1012===i)return 5123;if(1013===i)return 5124;if(1014===i)return 5125;if(1015===i)return 5126;if(1016===i)return r?5131:null!==(a=t.get("OES_texture_half_float"))?a.HALF_FLOAT_OES:null;if(1021===i)return 6406;if(1023===i)return 6408;if(1024===i)return 6409;if(1025===i)return 6410;if(1026===i)return 6402;if(1027===i)return 34041;if(1035===i)return null!==(a=t.get("EXT_sRGB"))?a.SRGB_ALPHA_EXT:null;if(1028===i)return 6403;if(1029===i)return 36244;if(1030===i)return 33319;if(1031===i)return 33320;if(1033===i)return 36249;if(33776===i||33777===i||33778===i||33779===i){if(3001===s){if(null===(a=t.get("WEBGL_compressed_texture_s3tc_srgb")))return null;if(33776===i)return a.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(33777===i)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(33778===i)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(33779===i)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else{if(null===(a=t.get("WEBGL_compressed_texture_s3tc")))return null;if(33776===i)return a.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===i)return a.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===i)return a.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===i)return a.COMPRESSED_RGBA_S3TC_DXT5_EXT}}if(35840===i||35841===i||35842===i||35843===i){if(null===(a=t.get("WEBGL_compressed_texture_pvrtc")))return null;if(35840===i)return a.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===i)return a.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===i)return a.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===i)return a.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===i)return null!==(a=t.get("WEBGL_compressed_texture_etc1"))?a.COMPRESSED_RGB_ETC1_WEBGL:null;if(37492===i||37496===i){if(null===(a=t.get("WEBGL_compressed_texture_etc")))return null;if(37492===i)return 3001===s?a.COMPRESSED_SRGB8_ETC2:a.COMPRESSED_RGB8_ETC2;if(37496===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:a.COMPRESSED_RGBA8_ETC2_EAC}if(37808===i||37809===i||37810===i||37811===i||37812===i||37813===i||37814===i||37815===i||37816===i||37817===i||37818===i||37819===i||37820===i||37821===i){if(null===(a=t.get("WEBGL_compressed_texture_astc")))return null;if(37808===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:a.COMPRESSED_RGBA_ASTC_4x4_KHR;if(37809===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:a.COMPRESSED_RGBA_ASTC_5x4_KHR;if(37810===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:a.COMPRESSED_RGBA_ASTC_5x5_KHR;if(37811===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:a.COMPRESSED_RGBA_ASTC_6x5_KHR;if(37812===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:a.COMPRESSED_RGBA_ASTC_6x6_KHR;if(37813===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:a.COMPRESSED_RGBA_ASTC_8x5_KHR;if(37814===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:a.COMPRESSED_RGBA_ASTC_8x6_KHR;if(37815===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:a.COMPRESSED_RGBA_ASTC_8x8_KHR;if(37816===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:a.COMPRESSED_RGBA_ASTC_10x5_KHR;if(37817===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:a.COMPRESSED_RGBA_ASTC_10x6_KHR;if(37818===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:a.COMPRESSED_RGBA_ASTC_10x8_KHR;if(37819===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:a.COMPRESSED_RGBA_ASTC_10x10_KHR;if(37820===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:a.COMPRESSED_RGBA_ASTC_12x10_KHR;if(37821===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:a.COMPRESSED_RGBA_ASTC_12x12_KHR}if(36492===i){if(null===(a=t.get("EXT_texture_compression_bptc")))return null;if(36492===i)return 3001===s?a.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:a.COMPRESSED_RGBA_BPTC_UNORM_EXT}if(36283===i||36284===i||36285===i||36286===i){if(null===(a=t.get("EXT_texture_compression_rgtc")))return null;
3139if(36492===i)return a.COMPRESSED_RED_RGTC1_EXT;if(36284===i)return a.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(36285===i)return a.COMPRESSED_RED_GREEN_RGTC2_EXT;if(36286===i)return a.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}return 1020===i?r?34042:null!==(a=t.get("WEBGL_depth_texture"))?a.UNSIGNED_INT_24_8_WEBGL:null:void 0!==e[i]?e[i]:null}}}var nc=class extends r8{constructor(e=[]){super(),this.isArrayCamera=!0,this.cameras=e}},nd=class extends rl{constructor(){super(),this.isGroup=!0,this.type="Group"}},nu={type:"move"},np=class{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return null===this._hand&&(this._hand=new nd,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return null===this._targetRay&&(this._targetRay=new nd,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new iv,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new iv),this._targetRay}getGripSpace(){return null===this._grip&&(this._grip=new nd,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new iv,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new iv),this._grip}dispatchEvent(e){return null!==this._targetRay&&this._targetRay.dispatchEvent(e),null!==this._grip&&this._grip.dispatchEvent(e),null!==this._hand&&this._hand.dispatchEvent(e),this}connect(e){if(e&&e.hand){let t=this._hand;if(t)for(let i of e.hand.values())this._getHandJoint(t,i)}return this.dispatchEvent({type:"connected",data:e}),this}disconnect(e){return this.dispatchEvent({type:"disconnected",data:e}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this}update(e,t,i){let r=null,s=null,a=null,o=this._targetRay,l=this._grip,h=this._hand;if(e&&"visible-blurred"!==t.session.visibilityState){if(h&&e.hand){for(let r of(a=!0,e.hand.values())){let e=t.getJointPose(r,i),s=this._getHandJoint(h,r);null!==e&&(s.matrix.fromArray(e.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale),s.jointRadius=e.radius),s.visible=null!==e}let r=h.joints["index-finger-tip"],s=h.joints["thumb-tip"],o=r.position.distanceTo(s.position);h.inputState.pinching&&o>.025?(h.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!h.inputState.pinching&&o<=.015&&(h.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else null!==l&&e.gripSpace&&null!==(s=t.getPose(e.gripSpace,i))&&(l.matrix.fromArray(s.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),s.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(s.linearVelocity)):l.hasLinearVelocity=!1,s.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(s.angularVelocity)):l.hasAngularVelocity=!1);null!==o&&(null===(r=t.getPose(e.targetRaySpace,i))&&null!==s&&(r=s),null!==r&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(nu)))}return null!==o&&(o.visible=null!==r),null!==l&&(l.visible=null!==s),null!==h&&(h.visible=null!==a),this}_getHandJoint(e,t){if(void 0===e.joints[t.jointName]){let i=new nd;i.matrixAutoUpdate=!1,i.visible=!1,e.joints[t.jointName]=i,e.add(i)}return e.joints[t.jointName]}},nf=class extends ih{constructor(e,t,i,r,s,a,o,l,h,c){if(1026!==(c=void 0!==c?c:1026)&&1027!==c)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===i&&1026===c&&(i=1014),void 0===i&&1027===c&&(i=1020),super(null,r,s,a,o,l,c,i,h),this.isDepthTexture=!0,this.image={width:e,height:t},this.magFilter=void 0!==o?o:1003,this.minFilter=void 0!==l?l:1003,this.flipY=!1,this.generateMipmaps=!1}},nm=class extends tL{constructor(e,t){super();let i=this,r=null,s=1,a=null,o="local-floor",l=1,h=null,c=null,d=null,u=null,p=null,f=null,m=t.getContextAttributes(),g=null,v=null,y=[],x=[],b=new Set,w=new Map,S=new r8;S.layers.enable(1),S.viewport=new ic;let _=new r8;_.layers.enable(2),_.viewport=new ic;let A=[S,_],M=new nc;M.layers.enable(1),M.layers.enable(2);let E=null,C=null;function T(e){let t=x.indexOf(e.inputSource);if(-1===t)return;let i=y[t];void 0!==i&&i.dispatchEvent({type:e.type,data:e.inputSource})}function P(){r.removeEventListener("select",T),r.removeEventListener("selectstart",T),r.removeEventListener("selectend",T),r.removeEventListener("squeeze",T),r.removeEventListener("squeezestart",T),r.removeEventListener("squeezeend",T),r.removeEventListener("end",P),r.removeEventListener("inputsourceschange",D);for(let e=0;e<y.length;e++){let t=x[e];null!==t&&(x[e]=null,y[e].disconnect(t))}E=null,C=null,e.setRenderTarget(g),p=null,u=null,d=null,r=null,v=null,B.stop(),i.isPresenting=!1,i.dispatchEvent({type:"sessionend"})}function D(e){for(let t=0;t<e.removed.length;t++){let i=e.removed[t],r=x.indexOf(i);r>=0&&(x[r]=null,y[r].disconnect(i))}for(let t=0;t<e.added.length;t++){let i=e.added[t],r=x.indexOf(i);if(-1===r){for(let e=0;e<y.length;e++)if(e>=x.length){x.push(i),r=e;break}else if(null===x[e]){x[e]=i,r=e;break}if(-1===r)break}let s=y[r];s&&s.connect(i)}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(e){let t=y[e];return void 0===t&&(t=new np,y[e]=t),t.getTargetRaySpace()},this.getControllerGrip=function(e){let t=y[e];return void 0===t&&(t=new np,y[e]=t),t.getGripSpace()},this.getHand=function(e){let t=y[e];return void 0===t&&(t=new np,y[e]=t),t.getHandSpace()},this.setFramebufferScaleFactor=function(e){s=e,!0===i.isPresenting&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(e){o=e,!0===i.isPresenting&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return h||a},this.setReferenceSpace=function(e){h=e},this.getBaseLayer=function(){return null!==u?u:p},this.getBinding=function(){return d},this.getFrame=function(){return f}
3139,this.getSession=function(){return r},this.setSession=async function(c){if(null!==(r=c)){if(g=e.getRenderTarget(),r.addEventListener("select",T),r.addEventListener("selectstart",T),r.addEventListener("selectend",T),r.addEventListener("squeeze",T),r.addEventListener("squeezestart",T),r.addEventListener("squeezeend",T),r.addEventListener("end",P),r.addEventListener("inputsourceschange",D),!0!==m.xrCompatible&&await t.makeXRCompatible(),void 0===r.renderState.layers||!1===e.capabilities.isWebGL2){let i={antialias:void 0!==r.renderState.layers||m.antialias,alpha:m.alpha,depth:m.depth,stencil:m.stencil,framebufferScaleFactor:s};p=new XRWebGLLayer(r,t,i),r.updateRenderState({baseLayer:p}),v=new id(p.framebufferWidth,p.framebufferHeight,{format:1023,type:1009,encoding:e.outputEncoding,stencilBuffer:m.stencil})}else{let i=null,a=null,o=null;m.depth&&(o=m.stencil?35056:33190,i=m.stencil?1027:1026,a=m.stencil?1020:1014);let l={colorFormat:32856,depthFormat:o,scaleFactor:s};u=(d=new XRWebGLBinding(r,t)).createProjectionLayer(l),r.updateRenderState({layers:[u]}),v=new id(u.textureWidth,u.textureHeight,{format:1023,type:1009,depthTexture:new nf(u.textureWidth,u.textureHeight,a,void 0,void 0,void 0,void 0,void 0,void 0,i),stencilBuffer:m.stencil,encoding:e.outputEncoding,samples:m.antialias?4:0}),e.properties.get(v).__ignoreDepthValues=u.ignoreDepthValues}v.isXRRenderTarget=!0,this.setFoveation(l),h=null,a=await r.requestReferenceSpace(o),B.setContext(r),B.start(),i.isPresenting=!0,i.dispatchEvent({type:"sessionstart"})}};let I=new iv,O=new iv;function R(e,t){null===t?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.copy(e.matrixWorld).invert()}this.updateCamera=function(e){if(null===r)return;M.near=_.near=S.near=e.near,M.far=_.far=S.far=e.far,(E!==M.near||C!==M.far)&&(r.updateRenderState({depthNear:M.near,depthFar:M.far}),E=M.near,C=M.far);let t=e.parent,i=M.cameras;R(M,t);for(let e=0;e<i.length;e++)R(i[e],t);M.matrixWorld.decompose(M.position,M.quaternion,M.scale),e.matrix.copy(M.matrix),e.matrix.decompose(e.position,e.quaternion,e.scale);let s=e.children;for(let e=0,t=s.length;e<t;e++)s[e].updateMatrixWorld(!0);2===i.length?function(e,t,i){I.setFromMatrixPosition(t.matrixWorld),O.setFromMatrixPosition(i.matrixWorld);let r=I.distanceTo(O),s=t.projectionMatrix.elements,a=i.projectionMatrix.elements,o=s[14]/(s[10]-1),l=s[14]/(s[10]+1),h=(s[9]+1)/s[5],c=(s[9]-1)/s[5],d=(s[8]-1)/s[0],u=(a[8]+1)/a[0],p=r/(-d+u),f=-(p*d);t.matrixWorld.decompose(e.position,e.quaternion,e.scale),e.translateX(f),e.translateZ(p),e.matrixWorld.compose(e.position,e.quaternion,e.scale),e.matrixWorldInverse.copy(e.matrixWorld).invert();let m=o+p,g=l+p;e.projectionMatrix.makePerspective(o*d-f,o*u+(r-f),h*l/g*m,c*l/g*m,m,g)}(M,S,_):M.projectionMatrix.copy(S.projectionMatrix)},this.getCamera=function(){return M},this.getFoveation=function(){if(!(null===u&&null===p))return l},this.setFoveation=function(e){l=e,null!==u&&(u.fixedFoveation=e),null!==p&&void 0!==p.fixedFoveation&&(p.fixedFoveation=e)},this.getPlanes=function(){return b};let L=null,B=new sl;B.setAnimationLoop(function(t,r){if(c=r.getViewerPose(h||a),f=r,null!==c){let t=c.views;null!==p&&(e.setRenderTargetFramebuffer(v,p.framebuffer),e.setRenderTarget(v));let i=!1;t.length!==M.cameras.length&&(M.cameras.length=0,i=!0);for(let r=0;r<t.length;r++){let s=t[r],a=null;if(null!==p)a=p.getViewport(s);else{let t=d.getViewSubImage(u,s);a=t.viewport,0===r&&(e.setRenderTargetTextures(v,t.colorTexture,u.ignoreDepthValues?void 0:t.depthStencilTexture),e.setRenderTarget(v))}let o=A[r];void 0===o&&((o=new r8).layers.enable(r),o.viewport=new ic,A[r]=o),o.matrix.fromArray(s.transform.matrix),o.projectionMatrix.fromArray(s.projectionMatrix),o.viewport.set(a.x,a.y,a.width,a.height),0===r&&M.matrix.copy(o.matrix),!0===i&&M.cameras.push(o)}}for(let e=0;e<y.length;e++){let t=x[e],i=y[e];null!==t&&void 0!==i&&i.update(t,r,h||a)}if(L&&L(t,r),r.detectedPlanes){i.dispatchEvent({type:"planesdetected",data:r.detectedPlanes});let e=null;for(let t of b)r.detectedPlanes.has(t)||(null===e&&(e=[]),e.push(t));if(null!==e)for(let t of e)b.delete(t),w.delete(t),i.dispatchEvent({type:"planeremoved",data:t});for(let e of r.detectedPlanes)if(b.has(e)){let t=w.get(e);e.lastChangedTime>t&&(w.set(e,e.lastChangedTime),i.dispatchEvent({type:"planechanged",data:e}))}else b.add(e),w.set(e,r.lastChangedTime),i.dispatchEvent({type:"planeadded",data:e})}f=null}),this.setAnimationLoop=function(e){L=e},this.dispose=function(){}}};function ng(e,t){function i(i,r){let s,a;i.opacity.value=r.opacity,r.color&&i.diffuse.value.copy(r.color),r.emissive&&i.emissive.value.copy(r.emissive).multiplyScalar(r.emissiveIntensity),r.map&&(i.map.value=r.map),r.alphaMap&&(i.alphaMap.value=r.alphaMap),r.bumpMap&&(i.bumpMap.value=r.bumpMap,i.bumpScale.value=r.bumpScale,1===r.side&&(i.bumpScale.value*=-1)),r.displacementMap&&(i.displacementMap.value=r.displacementMap,i.displacementScale.value=r.displacementScale,i.displacementBias.value=r.displacementBias),r.emissiveMap&&(i.emissiveMap.value=r.emissiveMap),r.normalMap&&(i.normalMap.value=r.normalMap,i.normalScale.value.copy(r.normalScale),1===r.side&&i.normalScale.value.negate()),r.specularMap&&(i.specularMap.value=r.specularMap),r.alphaTest>0&&(i.alphaTest.value=r.alphaTest);let o=t.get(r).envMap;if(o&&(i.envMap.value=o,i.flipEnvMap.value=o.isCubeTexture&&!1===o.isRenderTargetTexture?-1:1,i.reflectivity.value=r.reflectivity,i.ior.value=r.
3139ior,i.refractionRatio.value=r.refractionRatio),r.lightMap){i.lightMap.value=r.lightMap;let t=!0!==e.physicallyCorrectLights?Math.PI:1;i.lightMapIntensity.value=r.lightMapIntensity*t}r.aoMap&&(i.aoMap.value=r.aoMap,i.aoMapIntensity.value=r.aoMapIntensity),r.map?s=r.map:r.specularMap?s=r.specularMap:r.displacementMap?s=r.displacementMap:r.normalMap?s=r.normalMap:r.bumpMap?s=r.bumpMap:r.roughnessMap?s=r.roughnessMap:r.metalnessMap?s=r.metalnessMap:r.alphaMap?s=r.alphaMap:r.emissiveMap?s=r.emissiveMap:r.clearcoatMap?s=r.clearcoatMap:r.clearcoatNormalMap?s=r.clearcoatNormalMap:r.clearcoatRoughnessMap?s=r.clearcoatRoughnessMap:r.iridescenceMap?s=r.iridescenceMap:r.iridescenceThicknessMap?s=r.iridescenceThicknessMap:r.specularIntensityMap?s=r.specularIntensityMap:r.specularColorMap?s=r.specularColorMap:r.transmissionMap?s=r.transmissionMap:r.thicknessMap?s=r.thicknessMap:r.sheenColorMap?s=r.sheenColorMap:r.sheenRoughnessMap&&(s=r.sheenRoughnessMap),void 0!==s&&(s.isWebGLRenderTarget&&(s=s.texture),!0===s.matrixAutoUpdate&&s.updateMatrix(),i.uvTransform.value.copy(s.matrix)),r.aoMap?a=r.aoMap:r.lightMap&&(a=r.lightMap),void 0!==a&&(a.isWebGLRenderTarget&&(a=a.texture),!0===a.matrixAutoUpdate&&a.updateMatrix(),i.uv2Transform.value.copy(a.matrix))}return{refreshFogUniforms:function(t,i){i.color.getRGB(t.fogColor.value,r1(e)),i.isFog?(t.fogNear.value=i.near,t.fogFar.value=i.far):i.isFogExp2&&(t.fogDensity.value=i.density)},refreshMaterialUniforms:function(e,r,s,a,o){let l,h;r.isMeshBasicMaterial||r.isMeshLambertMaterial?i(e,r):r.isMeshToonMaterial?(i(e,r),r.gradientMap&&(e.gradientMap.value=r.gradientMap)):r.isMeshPhongMaterial?(i(e,r),e.specular.value.copy(r.specular),e.shininess.value=Math.max(r.shininess,1e-4)):r.isMeshStandardMaterial?(i(e,r),e.roughness.value=r.roughness,e.metalness.value=r.metalness,r.roughnessMap&&(e.roughnessMap.value=r.roughnessMap),r.metalnessMap&&(e.metalnessMap.value=r.metalnessMap),t.get(r).envMap&&(e.envMapIntensity.value=r.envMapIntensity),r.isMeshPhysicalMaterial&&(e.ior.value=r.ior,r.sheen>0&&(e.sheenColor.value.copy(r.sheenColor).multiplyScalar(r.sheen),e.sheenRoughness.value=r.sheenRoughness,r.sheenColorMap&&(e.sheenColorMap.value=r.sheenColorMap),r.sheenRoughnessMap&&(e.sheenRoughnessMap.value=r.sheenRoughnessMap)),r.clearcoat>0&&(e.clearcoat.value=r.clearcoat,e.clearcoatRoughness.value=r.clearcoatRoughness,r.clearcoatMap&&(e.clearcoatMap.value=r.clearcoatMap),r.clearcoatRoughnessMap&&(e.clearcoatRoughnessMap.value=r.clearcoatRoughnessMap),r.clearcoatNormalMap&&(e.clearcoatNormalScale.value.copy(r.clearcoatNormalScale),e.clearcoatNormalMap.value=r.clearcoatNormalMap,1===r.side&&e.clearcoatNormalScale.value.negate())),r.iridescence>0&&(e.iridescence.value=r.iridescence,e.iridescenceIOR.value=r.iridescenceIOR,e.iridescenceThicknessMinimum.value=r.iridescenceThicknessRange[0],e.iridescenceThicknessMaximum.value=r.iridescenceThicknessRange[1],r.iridescenceMap&&(e.iridescenceMap.value=r.iridescenceMap),r.iridescenceThicknessMap&&(e.iridescenceThicknessMap.value=r.iridescenceThicknessMap)),r.transmission>0&&(e.transmission.value=r.transmission,e.transmissionSamplerMap.value=o.texture,e.transmissionSamplerSize.value.set(o.width,o.height),r.transmissionMap&&(e.transmissionMap.value=r.transmissionMap),e.thickness.value=r.thickness,r.thicknessMap&&(e.thicknessMap.value=r.thicknessMap),e.attenuationDistance.value=r.attenuationDistance,e.attenuationColor.value.copy(r.attenuationColor)),e.specularIntensity.value=r.specularIntensity,e.specularColor.value.copy(r.specularColor),r.specularIntensityMap&&(e.specularIntensityMap.value=r.specularIntensityMap),r.specularColorMap&&(e.specularColorMap.value=r.specularColorMap))):r.isMeshMatcapMaterial?(i(e,r),r.matcap&&(e.matcap.value=r.matcap)):r.isMeshDepthMaterial?i(e,r):r.isMeshDistanceMaterial?(i(e,r),e.referencePosition.value.copy(r.referencePosition),e.nearDistance.value=r.nearDistance,e.farDistance.value=r.farDistance):r.isMeshNormalMaterial?i(e,r):r.isLineBasicMaterial?(e.diffuse.value.copy(r.color),e.opacity.value=r.opacity,r.isLineDashedMaterial&&(e.dashSize.value=r.dashSize,e.totalSize.value=r.dashSize
3139+r.gapSize,e.scale.value=r.scale)):r.isPointsMaterial?(e.diffuse.value.copy(r.color),e.opacity.value=r.opacity,e.size.value=r.size*s,e.scale.value=.5*a,r.map&&(e.map.value=r.map),r.alphaMap&&(e.alphaMap.value=r.alphaMap),r.alphaTest>0&&(e.alphaTest.value=r.alphaTest),r.map?l=r.map:r.alphaMap&&(l=r.alphaMap),void 0!==l&&(!0===l.matrixAutoUpdate&&l.updateMatrix(),e.uvTransform.value.copy(l.matrix))):r.isSpriteMaterial?(e.diffuse.value.copy(r.color),e.opacity.value=r.opacity,e.rotation.value=r.rotation,r.map&&(e.map.value=r.map),r.alphaMap&&(e.alphaMap.value=r.alphaMap),r.alphaTest>0&&(e.alphaTest.value=r.alphaTest),r.map?h=r.map:r.alphaMap&&(h=r.alphaMap),void 0!==h&&(!0===h.matrixAutoUpdate&&h.updateMatrix(),e.uvTransform.value.copy(h.matrix))):r.isShadowMaterial?(e.color.value.copy(r.color),e.opacity.value=r.opacity):r.isShaderMaterial&&(r.uniformsNeedUpdate=!1)}}}function nv(e,t,i,r){let s={},a={},o=[],l=i.isWebGL2?e.getParameter(35375):0;function h(e){let t={boundary:0,storage:0};return"number"==typeof e?(t.boundary=4,t.storage=4):e.isVector2?(t.boundary=8,t.storage=8):e.isVector3||e.isColor?(t.boundary=16,t.storage=12):e.isVector4?(t.boundary=16,t.storage=16):e.isMatrix3?(t.boundary=48,t.storage=48):e.isMatrix4?(t.boundary=64,t.storage=64):e.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",e),t}function c(t){let i=t.target;i.removeEventListener("dispose",c);let r=o.indexOf(i.__bindingPointIndex);o.splice(r,1),e.deleteBuffer(s[i.id]),delete s[i.id],delete a[i.id]}return{bind:function(e,t){let i=t.program;r.uniformBlockBinding(e,i)},update:function(i,d){let u,p,f,m,g=s[i.id];void 0===g&&(function(e){let t=e.uniforms,i=0,r=0;for(let e=0,s=t.length;e<s;e++){let s=t[e],a={boundary:0,storage:0},o=Array.isArray(s.value)?s.value:[s.value];for(let e=0,t=o.length;e<t;e++){let t=h(o[e]);a.boundary+=t.boundary,a.storage+=t.storage}if(s.__data=new Float32Array(a.storage/Float32Array.BYTES_PER_ELEMENT),s.__offset=i,e>0){let e=16-(r=i%16);0!==r&&e-a.boundary<0&&(i+=16-r,s.__offset=i)}i+=a.storage}(r=i%16)>0&&(i+=16-r),e.__size=i,e.__cache={}}(i),u=function(){for(let e=0;e<l;e++)if(-1===o.indexOf(e))return o.push(e),e;return console.error("THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."),0}(),i.__bindingPointIndex=u,p=e.createBuffer(),f=i.__size,m=i.usage,e.bindBuffer(35345,p),e.bufferData(35345,f,m),e.bindBuffer(35345,null),e.bindBufferBase(35345,u,p),g=p,s[i.id]=g,i.addEventListener("dispose",c));let v=d.program;r.updateUBOMapping(i,v);let y=t.render.frame;a[i.id]!==y&&(function(t){let i=s[t.id],r=t.uniforms,a=t.__cache;e.bindBuffer(35345,i);for(let t=0,i=r.length;t<i;t++){let i=r[t];if(!0===function(e,t,i){let r=e.value;if(void 0===i[t]){if("number"==typeof r)i[t]=r;else{let e=Array.isArray(r)?r:[r],s=[];for(let t=0;t<e.length;t++)s.push(e[t].clone());i[t]=s}return!0}if("number"==typeof r){if(i[t]!==r)return i[t]=r,!0}else{let e=Array.isArray(i[t])?i[t]:[i[t]],s=Array.isArray(r)?r:[r];for(let t=0;t<e.length;t++){let i=e[t];if(!1===i.equals(s[t]))return i.copy(s[t]),!0}}return!1}(i,t,a)){let t=i.__offset,r=Array.isArray(i.value)?i.value:[i.value],s=0;for(let a=0;a<r.length;a++){let o=r[a],l=h(o);"number"==typeof o?(i.__data[0]=o,e.bufferSubData(35345,t+s,i.__data)):o.isMatrix3?(i.__data[0]=o.elements[0],i.__data[1]=o.elements[1],i.__data[2]=o.elements[2],i.__data[3]=o.elements[0],i.__data[4]=o.elements[3],i.__data[5]=o.elements[4],i.__data[6]=o.elements[5],i.__data[7]=o.elements[0],i.__data[8]=o.elements[6],i.__data[9]=o.elements[7],i.__data[10]=o.elements[8],i.__data[11]=o.elements[0]):(o.toArray(i.__data,s),s+=l.storage/Float32Array.BYTES_PER_ELEMENT)}e.bufferSubData(35345,t,i.__data)}}e.bindBuffer(35345,null)}(i),a[i.id]=y)},dispose:function(){for(let t in s)e.deleteBuffer(s[t]);o=[],s={},a={}}}}function ny(e={}){let t,i,r,s,a,o,l,h,c,d,u,p,f,m,g,v,y,x,b,w,S,_,A,M,E;this.isWebGLRenderer=!0;let C=void 0!==e.canvas?e.canvas:((E=t1("canvas")).style.display="block",E),T=void 0!==e.context?e.context:null,P=void 0===e.depth||e.depth,D=void 0===e.stencil||e.stencil,I=void 0!==e.antialias&&e.antialias,O=void 0===e.premultipliedAlpha||e.premultipliedAlpha,R=void 0!==e.preserveDrawingBuffer&&e.preserveDrawingBuffer,L=void 0!==e.powerPreference?e.powerPreference:"default",B=void 0!==e.failIfMajorPerformanceCaveat&&e.failIfMajorPerformanceCaveat,z;z=null!==T?T.getContextAttributes().alpha:void 0!==e.alpha&&e.alpha;let F=null,N=null,k=[],U=[];
3139this.domElement=C,this.debug={checkShaderErrors:!0},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.outputEncoding=3e3,this.physicallyCorrectLights=!1,this.toneMapping=0,this.toneMappingExposure=1;let V=this,j=!1,G=0,H=0,W=null,q=-1,X=null,Y=new ic,Q=new ic,K=null,Z=C.width,J=C.height,$=1,ee=null,et=null,ei=new ic(0,0,Z,J),er=new ic(0,0,Z,J),es=!1,ea=new so,en=!1,eo=!1,el=null,eh=new iX,ec=new tQ,ed=new iv,eu={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function ep(){return null===W?$:1}let ef=T;function em(e,t){for(let i=0;i<e.length;i++){let r=e[i],s=C.getContext(r,t);if(null!==s)return s}return null}try{if("setAttribute"in C&&C.setAttribute("data-engine","three.js r149"),C.addEventListener("webglcontextlost",ey,!1),C.addEventListener("webglcontextrestored",ex,!1),C.addEventListener("webglcontextcreationerror",eb,!1),null===ef){let e=["webgl2","webgl","experimental-webgl"];if(!0===V.isWebGL1Renderer&&e.shift(),ef=em(e,{alpha:!0,depth:P,stencil:D,antialias:I,premultipliedAlpha:O,preserveDrawingBuffer:R,powerPreference:L,failIfMajorPerformanceCaveat:B}),null===ef)throw em(e)?Error("Error creating WebGL context with your selected attributes."):Error("Error creating WebGL context.")}void 0===ef.getShaderPrecisionFormat&&(ef.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(e){throw console.error("THREE.WebGLRenderer: "+e.message),e}function eg(){t=new sz(ef),i=new sy(ef,t,e),t.init(i),_=new nh(ef,t,i),r=new no(ef,t,i),s=new sk,a=new a1,o=new nl(ef,t,r,a,i,_,s),l=new sb(V),h=new sB(V),c=new sh(ef,i),A=new sg(ef,t,c,i),d=new sF(ef,c,s,A),u=new sG(ef,d,c,s),b=new sj(ef,i,o),v=new sx(a),p=new a0(V,l,h,t,i,A,v),f=new ng(V,a),m=new a5,g=new nt(t,i),x=new sm(V,l,h,r,u,z,O),y=new nn(V,u,i),M=new nv(ef,s,i,r),w=new sv(ef,t,s,i),S=new sN(ef,t,s,i),s.programs=p.programs,V.capabilities=i,V.extensions=t,V.properties=a,V.renderLists=m,V.shadowMap=y,V.state=r,V.info=s}eg();let ev=new nm(V,ef);function ey(e){e.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),j=!0}function ex(){console.log("THREE.WebGLRenderer: Context Restored."),j=!1;let e=s.autoReset,t=y.enabled,i=y.autoUpdate,r=y.needsUpdate,a=y.type;eg(),s.autoReset=e,y.enabled=t,y.autoUpdate=i,y.needsUpdate=r,y.type=a}function eb(e){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",e.statusMessage)}function ew(e){let t,i=e.target;i.removeEventListener("dispose",ew),void 0!==(t=a.get(i).programs)&&(t.forEach(function(e){p.releaseProgram(e)}),i.isShaderMaterial&&p.releaseShaderCache(i)),a.remove(i)}this.xr=ev,this.getContext=function(){return ef},this.getContextAttributes=function(){return ef.getContextAttributes()},this.forceContextLoss=function(){let e=t.get("WEBGL_lose_context");e&&e.loseContext()},this.forceContextRestore=function(){let e=t.get("WEBGL_lose_context");e&&e.restoreContext()},this.getPixelRatio=function(){return $},this.setPixelRatio=function(e){void 0!==e&&($=e,this.setSize(Z,J,!1))},this.getSize=function(e){return e.set(Z,J)},this.setSize=function(e,t,i){if(ev.isPresenting){console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");return}Z=e,J=t,C.width=Math.floor(e*$),C.height=Math.floor(t*$),!1!==i&&(C.style.width=e+"px",C.style.height=t+"px"),this.setViewport(0,0,e,t)},this.getDrawingBufferSize=function(e){return e.set(Z*$,J*$).floor()},this.setDrawingBufferSize=function(e,t,i){Z=e,J=t,$=i,C.width=Math.floor(e*i),C.height=Math.floor(t*i),this.setViewport(0,0,e,t)},this.getCurrentViewport=function(e){return e.copy(Y)},this.getViewport=function(e){return e.copy(ei)},this.setViewport=function(e,t,i,s){e.isVector4?ei.set(e.x,e.y,e.z,e.w):ei.set(e,t,i,s),r.viewport(Y.copy(ei).multiplyScalar($).floor())},this.getScissor=function(e){return e.copy(er)},this.setScissor=function(e,t,i,s){e.isVector4?er.set(e.x,e.y,e.z,e.w):er.set(e,t,i,s),r.scissor(Q.copy(er).multiplyScalar($).floor())},this.getScissorTest=function(){return es},this.setScissorTest=function(e){r.setScissorTest(es=e)},this.setOpaqueSort=function(e){ee=e},this.setTransparentSort=function(e){et=e},this.getClearColor=function(e){return e.copy(x.getClearColor())},this.setClearColor=function(){x.setClearColor.apply(x,arguments)},this.getClearAlpha=function(){return x.getClearAlpha()},this.setClearAlpha=function(){x.setClearAlpha.apply(x,arguments)},this.clear=function(e=!0,t=!0,i=!0){let r=0;e&&(r|=16384),t&&(r|=256),i&&(r|=1024),ef.clear(r)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){C.removeEventListener("webglcontextlost",ey,!1),C.removeEventListener("webglcontextrestored",ex,!1),C.removeEventListener("webglcontextcreationerror",eb,!1),m.dispose(),g.dispose(),a.dispose(),l.dispose(),h.dispose(),u.dispose(),A.dispose(),M.dispose(),p.dispose(),ev.dispose(),ev.removeEventListener("sessionstart",e_),ev.removeEventListener("sessionend",eA),el&&(el.dispose(),el=null),eM.stop()},this.renderBufferDirect=function(e,t,s,u,p,m){null===t&&(t=eu);let g=p.isMesh&&0>p.matrixWorld.determinant(),y=function(e,t,s,c,d){var u;!0!==t.isScene&&(t=eu),o.resetTextureUnits();let p=t.fog,m=c.isMeshStandardMaterial?t.environment:null,g=null===W?V.outputEncoding:!0===W.isXRRenderTarget?W.texture.encoding:3e3,y=(c.isMeshStandardMaterial?h:l).get(c.envMap||m),x=!0===c.vertexColors&&!!s.attributes.color&&4===s.attributes.color.itemSize,w=!!c.normalMap&&!!s.attributes.tangent,S=!!s.morphAttributes.position,_=!!s.morphAttributes.normal,A=!!s.morphAttributes.color,E=c.toneMapped?V.toneMapping:0,C=s.morphAttributes.position||s.morphAttributes.normal||s.morphAttributes.color,T=void 0!==C?C.length:0,P=a.get(c),D=N.state.lights;if(!0===en&&(!0===eo||e!==X)){let t=e===X&&c.id===q;v.setState(c,e,t)}let I=!1;c.version===P.__version?(P.needsLights&&P.lightsStateVersion!==D.state.ver
3139sion||P.outputEncoding!==g||d.isInstancedMesh&&!1===P.instancing||!d.isInstancedMesh&&!0===P.instancing||d.isSkinnedMesh&&!1===P.skinning||!d.isSkinnedMesh&&!0===P.skinning||P.envMap!==y||!0===c.fog&&P.fog!==p||void 0!==P.numClippingPlanes&&(P.numClippingPlanes!==v.numPlanes||P.numIntersection!==v.numIntersection)||P.vertexAlphas!==x||P.vertexTangents!==w||P.morphTargets!==S||P.morphNormals!==_||P.morphColors!==A||P.toneMapping!==E||!0===i.isWebGL2&&P.morphTargetsCount!==T)&&(I=!0):(I=!0,P.__version=c.version);let O=P.currentProgram;!0===I&&(O=eT(c,t,d));let R=!1,L=!1,B=!1,z=O.getUniforms(),F=P.uniforms;if(r.useProgram(O.program)&&(R=!0,L=!0,B=!0),c.id!==q&&(q=c.id,L=!0),R||X!==e){if(z.setValue(ef,"projectionMatrix",e.projectionMatrix),i.logarithmicDepthBuffer&&z.setValue(ef,"logDepthBufFC",2/(Math.log(e.far+1)/Math.LN2)),X!==e&&(X=e,L=!0,B=!0),c.isShaderMaterial||c.isMeshPhongMaterial||c.isMeshToonMaterial||c.isMeshStandardMaterial||c.envMap){let t=z.map.cameraPosition;void 0!==t&&t.setValue(ef,ed.setFromMatrixPosition(e.matrixWorld))}(c.isMeshPhongMaterial||c.isMeshToonMaterial||c.isMeshLambertMaterial||c.isMeshBasicMaterial||c.isMeshStandardMaterial||c.isShaderMaterial)&&z.setValue(ef,"isOrthographic",!0===e.isOrthographicCamera),(c.isMeshPhongMaterial||c.isMeshToonMaterial||c.isMeshLambertMaterial||c.isMeshBasicMaterial||c.isMeshStandardMaterial||c.isShaderMaterial||c.isShadowMaterial||d.isSkinnedMesh)&&z.setValue(ef,"viewMatrix",e.matrixWorldInverse)}if(d.isSkinnedMesh){z.setOptional(ef,d,"bindMatrix"),z.setOptional(ef,d,"bindMatrixInverse");let e=d.skeleton;e&&(i.floatVertexTextures?(null===e.boneTexture&&e.computeBoneTexture(),z.setValue(ef,"boneTexture",e.boneTexture,o),z.setValue(ef,"boneTextureSize",e.boneTextureSize)):console.warn("THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required."))}let k=s.morphAttributes;if((void 0!==k.position||void 0!==k.normal||void 0!==k.color&&!0===i.isWebGL2)&&b.update(d,s,c,O),(L||P.receiveShadow!==d.receiveShadow)&&(P.receiveShadow=d.receiveShadow,z.setValue(ef,"receiveShadow",d.receiveShadow)),c.isMeshGouraudMaterial&&null!==c.envMap&&(F.envMap.value=y,F.flipEnvMap.value=y.isCubeTexture&&!1===y.isRenderTargetTexture?-1:1),L&&(z.setValue(ef,"toneMappingExposure",V.toneMappingExposure),P.needsLights&&(u=B,F.ambientLightColor.needsUpdate=u,F.lightProbe.needsUpdate=u,F.directionalLights.needsUpdate=u,F.directionalLightShadows.needsUpdate=u,F.pointLights.needsUpdate=u,F.pointLightShadows.needsUpdate=u,F.spotLights.needsUpdate=u,F.spotLightShadows.needsUpdate=u,F.rectAreaLights.needsUpdate=u,F.hemisphereLights.needsUpdate=u),p&&!0===c.fog&&f.refreshFogUniforms(F,p),f.refreshMaterialUniforms(F,c,$,J,el),az.upload(ef,P.uniformsList,F,o)),c.isShaderMaterial&&!0===c.uniformsNeedUpdate&&(az.upload(ef,P.uniformsList,F,o),c.uniformsNeedUpdate=!1),c.isSpriteMaterial&&z.setValue(ef,"center",d.center),z.setValue(ef,"modelViewMatrix",d.modelViewMatrix),z.setValue(ef,"normalMatrix",d.normalMatrix),z.setValue(ef,"modelMatrix",d.matrixWorld),d.previousModelViewMatrix&&z.setValue(ef,"previousModelViewMatrix",d.previousModelViewMatrix),e.previousProjectionMatrix&&z.setValue(ef,"previousProjectionMatrix",e.previousProjectionMatrix),c.isShaderMaterial||c.isRawShaderMaterial){let e=c.uniformsGroups;for(let t=0,r=e.length;t<r;t++)if(i.isWebGL2){let i=e[t];M.update(i,O),M.bind(i,O)}else console.warn("THREE.WebGLRenderer: Uniform Buffer Objects can only be used with WebGL 2.")}return O}(e,t,s,u,p);r.setMaterial(u,g);let x=s.index,_=1;!0===u.wireframe&&(x=d.getWireframeAttribute(s),_=2);let E=s.drawRange,C=s.attributes.position,T=E.start*_,P=(E.start+E.count)*_;null!==m&&(T=Math.max(T,m.start*_),P=Math.min(P,(m.start+m.count)*_)),null!==x?(T=Math.max(T,0),P=Math.min(P,x.count)):null!=C&&(T=Math.max(T,0),P=Math.min(P,C.count));let D=P-T;if(D<0||D===1/0)return;A.setup(p,u,y,s,x);let I,O=w;if(null!==x&&(I=c.get(x),(O=S).setIndex(I)),p.isMesh)!0===u.wireframe?(r.setLineWidth(u.wireframeLinewidth*ep()),O.setMode(1)):O.setMode(4);
3139else if(p.isLine){let e=u.linewidth;void 0===e&&(e=1),r.setLineWidth(e*ep()),p.isLineSegments?O.setMode(1):p.isLineLoop?O.setMode(2):O.setMode(3)}else p.isPoints?O.setMode(0):p.isSprite&&O.setMode(4);if(p.isInstancedMesh)O.renderInstances(T,D,p.count);else if(s.isInstancedBufferGeometry){let e=void 0!==s._maxInstanceCount?s._maxInstanceCount:1/0,t=Math.min(s.instanceCount,e);O.renderInstances(T,D,t)}else O.render(T,D)},this.compile=function(e,t){function i(e,t,i){!0===e.transparent&&2===e.side&&!1===e.forceSinglePass?(e.side=1,e.needsUpdate=!0,eT(e,t,i),e.side=0,e.needsUpdate=!0,eT(e,t,i),e.side=2):eT(e,t,i)}(N=g.get(e)).init(),U.push(N),e.traverseVisible(function(e){e.isLight&&e.layers.test(t.layers)&&(N.pushLight(e),e.castShadow&&N.pushShadow(e))}),N.setupLights(V.physicallyCorrectLights),e.traverse(function(t){let r=t.material;if(r){if(Array.isArray(r))for(let s=0;s<r.length;s++)i(r[s],e,t);else i(r,e,t)}}),U.pop(),N=null};let eS=null;function e_(){eM.stop()}function eA(){eM.start()}let eM=new sl;function eE(e,s,a,l){let h,c,d,u=e.opaque,p=e.transmissive,f=e.transparent;N.setupLightsView(a),!0===en&&v.setGlobalState(V.clippingPlanes,a),p.length>0&&(h=i.isWebGL2,null===el&&(el=new id(1,1,{generateMipmaps:!0,type:t.has("EXT_color_buffer_half_float")?1016:1009,minFilter:1008,samples:h&&!0===I?4:0})),V.getDrawingBufferSize(ec),h?el.setSize(ec.x,ec.y):el.setSize(tW(ec.x),tW(ec.y)),c=V.getRenderTarget(),V.setRenderTarget(el),V.clear(),d=V.toneMapping,V.toneMapping=0,eC(u,s,a),V.toneMapping=d,o.updateMultisampleRenderTarget(el),o.updateRenderTargetMipmap(el),V.setRenderTarget(c)),l&&r.viewport(Y.copy(l)),u.length>0&&eC(u,s,a),p.length>0&&eC(p,s,a),f.length>0&&eC(f,s,a),r.buffers.depth.setTest(!0),r.buffers.depth.setMask(!0),r.buffers.color.setMask(!0),r.setPolygonOffset(!1)}function eC(e,t,i){let r=!0===t.isScene?t.overrideMaterial:null;for(let s=0,a=e.length;s<a;s++){let a=e[s],o=a.object,l=a.geometry,h=null===r?a.material:r,c=a.group;o.layers.test(i.layers)&&(o.onBeforeRender(V,t,i,l,h,c),o.modelViewMatrix.multiplyMatrices(i.matrixWorldInverse,o.matrixWorld),o.normalMatrix.getNormalMatrix(o.modelViewMatrix),h.onBeforeRender(V,t,i,l,o,c),!0===h.transparent&&2===h.side&&!1===h.forceSinglePass?(h.side=1,h.needsUpdate=!0,V.renderBufferDirect(i,t,l,h,o,c),h.side=0,h.needsUpdate=!0,V.renderBufferDirect(i,t,l,h,o,c),h.side=2):V.renderBufferDirect(i,t,l,h,o,c),o.onAfterRender(V,t,i,l,h,c))}}function eT(e,t,i){!0!==t.isScene&&(t=eu);let r=a.get(e),s=N.state.lights,o=N.state.shadowsArray,c=s.state.version,d=p.getParameters(e,s.state,o,t,i),u=p.getProgramCacheKey(d),f=r.programs;r.environment=e.isMeshStandardMaterial?t.environment:null,r.fog=t.fog,r.envMap=(e.isMeshStandardMaterial?h:l).get(e.envMap||r.environment),void 0===f&&(e.addEventListener("dispose",ew),f=new Map,r.programs=f);let m=f.get(u);if(void 0!==m){if(r.currentProgram===m&&r.lightsStateVersion===c)return eP(e,d),m}else d.uniforms=p.getUniforms(e),e.onBuild(i,d,V),e.onBeforeCompile(d,V),m=p.acquireProgram(d,u),f.set(u,m),r.uniforms=d.uniforms;let g=r.uniforms;(e.isShaderMaterial||e.isRawShaderMaterial)&&!0!==e.clipping||(g.clippingPlanes=v.uniform),eP(e,d),r.needsLights=e.isMeshLambertMaterial||e.isMeshToonMaterial||e.isMeshPhongMaterial||e.isMeshStandardMaterial||e.isShadowMaterial||e.isShaderMaterial&&!0===e.lights,r.lightsStateVersion=c,r.needsLights&&(g.ambientLightColor.value=s.state.ambient,g.lightProbe.value=s.state.probe,g.directionalLights.value=s.state.directional,g.directionalLightShadows.value=s.state.directionalShadow,g.spotLights.value=s.state.spot,g.spotLightShadows.value=s.state.spotShadow,g.rectAreaLights.value=s.state.rectArea,g.ltc_1.value=s.state.rectAreaLTC1,g.ltc_2.value=s.state.rectAreaLTC2,g.pointLights.value=s.state.point,g.pointLightShadows.value=s.state.pointShadow,g.hemisphereLights.value=s.state.hemi,g.directionalShadowMap.value=s.state.directionalShadowMap,g.directionalShadowMatrix.value=s.state.directionalShadowMatrix,g.spotShadowMap.value=s.state.spotShadowMap,g.spotLightMatrix.value=s.state.spotLightMatrix,g.spotLightMap.value=s.state.spotLightMap,g.pointShadowMap.value=s.state.pointShadowMap,g.pointShadowMatrix.value=s.state.pointShadowMatrix);let y=m.getUniforms(),x=az.seqWithValue(y.seq,g);return r.currentProgram=m,r.uniformsList=x,m}function eP(e,t){let i=a.get(e);i.outputEncoding=t.outputEncoding,i.instancing=t.instancing,i.skinning=t.skinning,i.morphTargets=t.morphTargets,i.morphNormals=t.morphNormals,i.morphColors=t.morphColors,i.morphTargetsCount=t.morphTargetsCount,i.numClippingPlanes=t.numClippingPlanes,i.numIntersection=t.numClipIntersection,i.vertexAlphas=t.vertexAlphas,i.vertexTangents=t.vertexTangents,i.toneMapping=t.toneMapping}eM.setAnimationLoop(function(e){eS&&eS(e)}),"u">typeof self&&eM.setContext(self),this.setAnimationLoop=function(e){eS=e,ev.setAnimationLoop(e),null===e?eM.stop():eM.start()},ev.addEventListener("sessionstart",e_),ev.addEventListener("sessionend",eA),this.render=function(e,t){if(void 0!==t&&!0!==t.isCamera){console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(!0===j)return;!0===e.matrixWorldAutoUpdate&&e.updateMatrixWorld(),null===t.parent&&!0===t.matrixWorldAutoUpdate&&t.updateMatrixWorld(),!0===ev.enabled&&!0===ev.isPresenting&&(!0===ev.cameraAutoUpdate&&ev.updateCamera(t),t=ev.getCamera()),!0===e.isScene&&e.onBeforeRender(V,e,t,W),(N=g.get(e,U.length)).init(),U.push(N),eh.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),ea.setFromProjectionMatrix(eh),eo=this.localClippingEnabled,en=v.init(this.clippingPlanes,eo),(F=m.get(e,k.length)).init(),k.push(F),function e(t,i,r,a){if(!1===t.visible)return;if(t.layers.test(i.layers)){if(t.isGroup)r=t.renderOrder;else if(t.isLOD)!0===t.autoUpdate&&t.update(i);else if(t.isLight)N.pushLight(t),t.castShadow&&N.pushShadow(t);else if(t.isSprite){if(!t.frustumCulled||ea.intersectsSprite(t)){a&&ed.setFromMatrixPosition(t.matrixWorld).applyMatrix4(eh);let e=u.update(t),i=t.material;i.visible&&F.push(t,e,i,r,ed.z,null)}}else if((t.isMesh||t.isLine||t.isPoints)&&(t.isSkinnedMesh&&t.skeleton.frame!==s.render.frame&&(t.skeleton.update(),t.skeleton.frame=s.render.frame),!t.frustumCulled||ea.intersectsObject(t))){a&&ed.setFromMatrixPosition(t.matrixWorld).applyMatrix4(eh);let e=u.update(t),i=t.material;if(Array.isArray(i)){let s=e.groups;for(let a=0,o=s.length;a<o;a++){let o=s[a],l=i[o.materialIndex];l&&l.visible&&F.push(t,e,l,r,ed.z,o)}}else i.visible&&F.push(t,e,i,r,ed.z,null)}}let o=t.children;for(let t=0,s=o.length;t<s;t++)e(o[t],i,r,a)}(e,t,0,V.sortObjects),F.finish(),!0===V.sortObjects&&F.sort(ee,et),!0===en&&v.beginShadows();let i=N.state.shadowsArray;if(y.render(i,e,t),!0===en&&v.endShadows(),!0===this.info.autoReset&&this.info.reset(),x.render(F,e),N.setupLights(V.physicallyCorrectLights),t.isArrayCamera){let i=t.cameras;for(let t=0,r=i.length;t<r;t++){let r=i[t];eE(F,e,r,r.viewport)}}else eE(F,e,t);null!==W&&(o.updateMultisampleRenderTarget(W),o.updateRenderTargetMipmap(W)),!0===e.isScene&&e.onAfterRender(V,e,t),A.resetDefaultState(),q=-1,X=null,U.pop(),N=U.length>0?U[U.length-1]:null,k.pop(),F=k.length>0?k[k.length-1]:null},this.getActiveCubeFace=function(){return G},this.getActiveMipmapLevel=function(){return H},this.getRenderTarget=function(){return W},this.setRenderTargetTextures=function(e,i,r){a.get(e.texture).__webglTexture=i,a.get(e.depthTexture).__webglTexture=r;let s=a.get(e);s.__hasExternalTextures=!0,s.__hasExternalTextures&&(s.__autoAllocateDepthBuffer=void 0===r,s.__autoAllocateDepthBuffer||!0===t.has("WEBGL_multisampled_render_to_texture")&&(console.warn("THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided"),s.__useRenderToTexture=!1))},this.setRenderTargetFramebuffer=function(e,t){let i=a.get(e);i.__webglFramebuffer=t,i.__useDefaultFramebuffer=void 0===t},this.setRenderTarget=function(e,t=0,s=0){W=e,G=t,H=s;let l=!0,h=null,c=!1,d=!1;if(e){let s=a.get(e);void 0!==s.__useDefaultFramebuffer?(r.bindFramebuffer(36160,null),l=!1):void 0===s.__webglFramebuffer?o.setupRenderTarget(e):s.__hasExternalTextures&&o.rebindTextures(e,a.get(e.texture).__webglTexture,a.get(e.depthTexture).__webglTexture);let u=e.texture;(u.isData3DTexture||u.isDataArrayTexture||u.isCompressedArrayTexture)&&(d=!0);let p=a.get(e).__webglFramebuffer;
3139e.isWebGLCubeRenderTarget?(h=p[t],c=!0):h=i.isWebGL2&&e.samples>0&&!1===o.useMultisampledRTT(e)?a.get(e).__webglMultisampledFramebuffer:p,Y.copy(e.viewport),Q.copy(e.scissor),K=e.scissorTest}else Y.copy(ei).multiplyScalar($).floor(),Q.copy(er).multiplyScalar($).floor(),K=es;if(r.bindFramebuffer(36160,h)&&i.drawBuffers&&l&&r.drawBuffers(e,h),r.viewport(Y),r.scissor(Q),r.setScissorTest(K),c){let i=a.get(e.texture);ef.framebufferTexture2D(36160,36064,34069+t,i.__webglTexture,s)}else if(d){let i=a.get(e.texture);ef.framebufferTextureLayer(36160,36064,i.__webglTexture,s||0,t||0)}q=-1},this.readRenderTargetPixels=function(e,s,o,l,h,c,d){if(!(e&&e.isWebGLRenderTarget)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let u=a.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&void 0!==d&&(u=u[d]),u){r.bindFramebuffer(36160,u);try{let r=e.texture,a=r.format,d=r.type;if(1023!==a&&_.convert(a)!==ef.getParameter(35739)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}let u=1016===d&&(t.has("EXT_color_buffer_half_float")||i.isWebGL2&&t.has("EXT_color_buffer_float"));if(1009!==d&&_.convert(d)!==ef.getParameter(35738)&&!(1015===d&&(i.isWebG
3139L2||t.has("OES_texture_float")||t.has("WEBGL_color_buffer_float")))&&!u){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}s>=0&&s<=e.width-l&&o>=0&&o<=e.height-h&&ef.readPixels(s,o,l,h,_.convert(a),_.convert(d),c)}finally{let e=null!==W?a.get(W).__webglFramebuffer:null;r.bindFramebuffer(36160,e)}}},this.readRenderTargetPixelsAsync=async function(e,t,i,s,o,l,h){if(!(e&&e.isWebGLRenderTarget))throw Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let c=a.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&void 0!==h&&(c=c[h]),c){let h=e.texture,u=h.format,p=h.type;if(t>=0&&t<=e.width-s&&i>=0&&i<=e.height-o){var d;r.bindFramebuffer(ef.FRAMEBUFFER,c);let e=ef.createBuffer();ef.bindBuffer(ef.PIXEL_PACK_BUFFER,e),ef.bufferData(ef.PIXEL_PACK_BUFFER,l.byteLength,ef.STREAM_READ),ef.readPixels(t,i,s,o,_.convert(u),_.convert(p),0);let h=null!==W?a.get(W).__webglFramebuffer:null;r.bindFramebuffer(ef.FRAMEBUFFER,h);let f=ef.fenceSync(ef.SYNC_GPU_COMMANDS_COMPLETE,0);return ef.flush(),await (d=ef,new Promise(function(e,t){setTimeout(function i(){switch(d.clientWaitSync(f,d.SYNC_FLUSH_COMMANDS_BIT,0)){case d.WAIT_FAILED:t();break;case d.TIMEOUT_EXPIRED:setTimeout(i,4);break;default:e()}},4)})),ef.bindBuffer(ef.PIXEL_PACK_BUFFER,e),ef.getBufferSubData(ef.PIXEL_PACK_BUFFER,0,l),ef.deleteBuffer(e),ef.deleteSync(f),l}throw Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")}},this.copyFramebufferToTexture=function(e,t,i=0){let s=Math.pow(2,-i),a=Math.floor(t.image.width*s),l=Math.floor(t.image.height*s);o.setTexture2D(t,0),ef.copyTexSubImage2D(3553,i,0,0,e.x,e.y,a,l),r.unbindTexture()},this.copyTextureToTexture=function(e,t,i,s=0){let a=t.image.width,l=t.image.height,h=_.convert(i.format),c=_.convert(i.type);o.setTexture2D(i,0),ef.pixelStorei(37440,i.flipY),ef.pixelStorei(37441,i.premultiplyAlpha),ef.pixelStorei(3317,i.unpackAlignment),t.isDataTexture?ef.texSubImage2D(3553,s,e.x,e.y,a,l,h,c,t.image.data):t.isCompressedTexture?ef.compressedTexSubImage2D(3553,s,e.x,e.y,t.mipmaps[0].width,t.mipmaps[0].height,h,t.mipmaps[0].data):ef.texSubImage2D(3553,s,e.x,e.y,h,c,t.image),0===s&&i.generateMipmaps&&ef.generateMipmap(3553),r.unbindTexture()},this.copyTextureToTexture3D=function(e,t,i,s,a=0){if(V.isWebGL1Renderer){console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.");return}let l=e.max.x-e.min.x+1,h=e.max.y-e.min.y+1,c=e.max.z-e.min.z+1,d=_.convert(s.format),u=_.convert(s.type),p;if(s.isData3DTexture)o.setTexture3D(s,0),p=32879;else if(s.isDataArrayTexture)o.setTexture2DArray(s,0),p=35866;else{console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");return}ef.pixelStorei(37440,s.flipY),ef.pixelStorei(37441,s.premultiplyAlpha),ef.pixelStorei(3317,s.unpackAlignment);let f=ef.getParameter(3314),m=ef.getParameter(32878),g=ef.getParameter(3316),v=ef.getParameter(3315),y=ef.getParameter(32877),x=i.isCompressedTexture?i.mipmaps[0]:i.image;ef.pixelStorei(3314,x.width),ef.pixelStorei(32878,x.height),ef.pixelStorei(3316,e.min.x),ef.pixelStorei(3315,e.min.y),ef.pixelStorei(32877,e.min.z),i.isDataTexture||i.isData3DTexture?ef.texSubImage3D(p,a,t.x,t.y,t.z,l,h,c,d,u,x.data):i.isCompressedArrayTexture?(console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture."),ef.compressedTexSubImage3D(p,a,t.x,t.y,t.z,l,h,c,d,x.data)):ef.texSubImage3D(p,a,t.x,t.y,t.z,l,h,c,d,u,x),ef.pixelStorei(3314,f),ef.pixelStorei(32878,m),ef.pixelStorei(3316,g),ef.pixelStorei(3315,v),ef.pixelStorei(32877,y),0===a&&s.generateMipmaps&&ef.generateMipmap(p),r.unbindTexture()},this.initRenderTarget=function(e){void 0===a.get(e).__webglFramebuffer&&o.setupRenderTarget(e)},this.initTexture=function(e){e.isCubeTexture?o.setTextureCube(e,0):e.isData3DTexture?o.setTexture3D(e,0):e.isDataArrayTexture||e.isCompressedArrayTexture?o.setTexture2DArray(e,0):o.setTexture2D(e,0),r.unbindTexture()},this.resetState=function(){G=0,H=0,W=null,r.reset(),A.reset()},"u">typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}(class extends ny{}).prototype.isWebGL1Renderer=!0;var nx=class{constructor(e,t=1,i=1e3){this.isFog=!0,this.name="",this.color=new ii(e),this.near=t,this.far=i}clone(){return new nx(this.color,this.near,this.far)}toJSON(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}},nb=class extends rl{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.overrideMaterial=null,"u">typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(e,t){return super.copy(e,t),null!==e.background&&(this.background=e.background.clone()),null!==e.environment&&(this.environment=e.environment.clone()),null!==e.fog&&(this.fog=e.fog.clone()),this.backgroundBlurriness=e.backgroundBlurriness,this.backgroundIntensity=e.backgroundIntensity,null!==e.overrideMaterial&&(this.overrideMaterial=e.overrideMaterial.clone()),this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){let t=super.toJSON(e);return null!==this.fog&&(t.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),1!==this.backgroundIntensity&&(t.object.backgroundIntensity=this.backgroundIntensity),t}get autoUpdate(){return console.warn("THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144."),this.matrixWorldAutoUpdate}set autoUpdate(e){console.warn("THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144."),this.matrixWorldAutoUpdate=e}},nw=class{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=void 0!==e?e.length/t:0,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=tk()}onUploadCallback(){}set needsUpdate(e){!0===e&&this.version++}setUsage(e){return this.usage=e,this}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,i){e*=this.stride,i*=t.stride;for(let r=0,s=this.stride;r<s;r++)this.array[e+r]=t.array[i+r];return this}set(e,t=0){return this.array.set(e,t),this}clone(e){void 0===e.arrayBuffers&&(e.arrayBuffers={}),void 0===this.array.buffer._uuid&&(this.array.buffer._uuid=tk()),void 0===e.arrayBuffers[this.array.buffer._uuid]&&(e.arrayBuffers[this.array.buffer._uuid]=this.array.slice(0).buffer);let t=new this.array.constructor(e.arrayBuffers[this.array.buffer._uuid]),i=new this.constructor(t,this.stride);return i.setUsage(this.usage),i}onUpload(e){return this.onUploadCallback=e,this}toJSON(e){return void 0===e.arrayBuffers&&(e.arrayBuffers={}),void 0===this.array.buffer._uuid&&(this.array.buffer._uuid=tk()),void 0===e.arrayBuffers[this.array.buffer._uuid]&&(e.arrayBuffers[this.array.buffer._uuid]=Array.from(new Uint32Array(this.array.buffer))),{uuid:this.uuid,buffer:this.array.buffer._uuid,type:this.array.constructor.name,stride:this.stride}}},nS=new iv,n_=class{constructor(e,t,i,r=!1){this.isInterleavedBufferAttribute=!0,this.name="",this.data=e,this.itemSize=t,this.offset=i,this.normalized=r}
3139get count(){return this.data.count}get array(){return this.data.array}set needsUpdate(e){this.data.needsUpdate=e}applyMatrix4(e){for(let t=0,i=this.data.count;t<i;t++)nS.fromBufferAttribute(this,t),nS.applyMatrix4(e),this.setXYZ(t,nS.x,nS.y,nS.z);return this}applyNormalMatrix(e){for(let t=0,i=this.count;t<i;t++)nS.fromBufferAttribute(this,t),nS.applyNormalMatrix(e),this.setXYZ(t,nS.x,nS.y,nS.z);return this}transformDirection(e){for(let t=0,i=this.count;t<i;t++)nS.fromBufferAttribute(this,t),nS.transformDirection(e),this.setXYZ(t,nS.x,nS.y,nS.z);return this}setX(e,t){return this.normalized&&(t=tX(t,this.array)),this.data.array[e*this.data.stride+this.offset]=t,this}setY(e,t){return this.normalized&&(t=tX(t,this.array)),this.data.array[e*this.data.stride+this.offset+1]=t,this}setZ(e,t){return this.normalized&&(t=tX(t,this.array)),this.data.array[e*this.data.stride+this.offset+2]=t,this}setW(e,t){return this.normalized&&(t=tX(t,this.array)),this.data.array[e*this.data.stride+this.offset+3]=t,this}getX(e){let t=this.data.array[e*this.data.stride+this.offset];return this.normalized&&(t=tq(t,this.array)),t}getY(e){let t=this.data.array[e*this.data.stride+this.offset+1];return this.normalized&&(t=tq(t,this.array)),t}getZ(e){let t=this.data.array[e*this.data.stride+this.offset+2];return this.normalized&&(t=tq(t,this.array)),t}getW(e){let t=this.data.array[e*this.data.stride+this.offset+3];return this.normalized&&(t=tq(t,this.array)),t}setXY(e,t,i){return e=e*this.data.stride+this.offset,this.normalized&&(t=tX(t,this.array),i=tX(i,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=i,this}setXYZ(e,t,i,r){return e=e*this.data.stride+this.offset,this.normalized&&(t=tX(t,this.array),i=tX(i,this.array),r=tX(r,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=i,this.data.array[e+2]=r,this}setXYZW(e,t,i,r,s){return e=e*this.data.stride+this.offset,this.normalized&&(t=tX(t,this.array),i=tX(i,this.array),r=tX(r,this.array),s=tX(s,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=i,this.data.array[e+2]=r,this.data.array[e+3]=s,this}clone(e){if(void 0!==e)return void 0===e.interleavedBuffers&&(e.interleavedBuffers={}),void 0===e.interleavedBuffers[this.data.uuid]&&(e.interleavedBuffers[this.data.uuid]=this.data.clone(e)),new n_(e.interleavedBuffers[this.data.uuid],this.itemSize,this.offset,this.normalized);{console.log("THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.");let e=[];for(let t=0;t<this.count;t++){let i=t*this.data.stride+this.offset;for(let t=0;t<this.itemSize;t++)e.push(this.data.array[i+t])}return new rM(new this.array.constructor(e),this.itemSize,this.normalized)}}toJSON(e){if(void 0!==e)return void 0===e.interleavedBuffers&&(e.interleavedBuffers={}),void 0===e.interleavedBuffers[this.data.uuid]&&(e.interleavedBuffers[this.data.uuid]=this.data.toJSON(e)),{isInterleavedBufferAttribute:!0,itemSize:this.itemSize,data:this.data.uuid,offset:this.offset,normalized:this.normalized};{console.log("THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.");let e=[];for(let t=0;t<this.count;t++){let i=t*this.data.stride+this.offset;for(let t=0;t<this.itemSize;t++)e.push(this.data.array[i+t])}return{itemSize:this.itemSize,type:this.array.constructor.name,array:e,normalized:this.normalized}}}},nA=class extends rl{constructor(){super(),this.isBone=!0,this.type="Bone"}},nM=class extends ih{constructor(e=null,t=1,i=1,r,s,a,o,l,h=1003,c=1003,d,u){super(null,a,o,l,h,c,r,s,d,u),this.isDataTexture=!0,this.image={data:e,width:t,height:i},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}},nE=new iX,nC=new iX,nT=class{constructor(e=[],t=[]){this.uuid=tk(),this.bones=e.slice(0),this.boneInverses=t,this.boneMatrices=null,this.boneTexture=null,this.boneTextureSize=0,this.frame=-1,this.init()}init(){let e=this.bones,t=this.boneInverses;if(this.boneMatrices=new Float32Array(16*e.length),0===t.length)this.calculateInverses();else if(e.length!==t.length){console.warn("THREE.Skeleton: Number of inverse bone matrices does not match amount of bones."),this.boneInverses=[];for(let e=0,t=this.bones.length;e<t;e++)this.boneInverses.push(new iX)}}calculateInverses(){this.boneInverses.length=0;for(let e=0,t=this.bones.length;e<t;e++){let t=new iX;this.bones[e]&&t.copy(this.bones[e].matrixWorld).invert(),this.boneInverses.push(t)}}pose(){for(let e=0,t=this.bones.length;e<t;e++){let t=this.bones[e];t&&t.matrixWorld.copy(this.boneInverses[e]).invert()}for(let e=0,t=this.bones.length;e<t;e++){let t=this.bones[e];t&&(t.parent&&t.parent.isBone?(t.matrix.copy(t.parent.matrixWorld).invert(),t.matrix.multiply(t.matrixWorld)):t.matrix.copy(t.matrixWorld),t.matrix.decompose(t.position,t.quaternion,t.scale))}}update(){let e=this.bones,t=this.boneInverses,i=this.boneMatrices,r=this.boneTexture;for(let r=0,s=e.length;r<s;r++){let s=e[r]?e[r].matrixWorld:nC;nE.multiplyMatrices(s,t[r]),nE.toArray(i,16*r)}null!==r&&(r.needsUpdate=!0)}clone(){return new nT(this.bones,this.boneInverses)}computeBoneTexture(){let e=Math.sqrt(4*this.bones.length),t=new Float32Array((e=Math.max(e=tH(e),4))*e*4);t.set(this.boneMatrices);let i=new nM(t,e,e,1023,1015);return i.needsUpdate=!0,this.boneMatrices=t,this.boneTexture=i,this.boneTextureSize=e,this}getBoneByName(e){for(let t=0,i=this.bones.length;t<i;t++){let i=this.bones[t];if(i.name===e)return i}}dispose(){null!==this.boneTexture&&(this.boneTexture.dispose(),this.boneTexture=null)}fromJSON(e,t){this.uuid=e.uuid;
3139for(let i=0,r=e.bones.length;i<r;i++){let r=e.bones[i],s=t[r];void 0===s&&(console.warn("THREE.Skeleton: No bone found with UUID:",r),s=new nA),this.bones.push(s),this.boneInverses.push(new iX().fromArray(e.boneInverses[i]))}return this.init(),this}toJSON(){let e={metadata:{version:4.5,type:"Skeleton",generator:"Skeleton.toJSON"},bones:[],boneInverses:[]};e.uuid=this.uuid;let t=this.bones,i=this.boneInverses;for(let r=0,s=t.length;r<s;r++){let s=t[r];e.bones.push(s.uuid);let a=i[r];e.boneInverses.push(a.toArray())}return e}},nP=class extends rM{constructor(e,t,i,r=1){super(e,t,i),this.isInstancedBufferAttribute=!0,this.meshPerAttribute=r}copy(e){return super.copy(e),this.meshPerAttribute=e.meshPerAttribute,this}toJSON(){let e=super.toJSON();return e.meshPerAttribute=this.meshPerAttribute,e.isInstancedBufferAttribute=!0,e}},nD=new iX,nI=new iX,nO=[],nR=new iX,nL=new rK,nB=class extends rK{constructor(e,t,i){super(e,t),this.isInstancedMesh=!0,this.instanceMatrix=new nP(new Float32Array(16*i),16),this.instanceColor=null,this.count=i,this.frustumCulled=!1;for(let e=0;e<i;e++)this.setMatrixAt(e,nR)}copy(e,t){return super.copy(e,t),this.instanceMatrix.copy(e.instanceMatrix),null!==e.instanceColor&&(this.instanceColor=e.instanceColor.clone()),this.count=e.count,this}getColorAt(e,t){t.fromArray(this.instanceColor.array,3*e)}getMatrixAt(e,t){t.fromArray(this.instanceMatrix.array,16*e)}raycast(e,t){let i=this.matrixWorld,r=this.count;if(nL.geometry=this.geometry,nL.material=this.material,void 0!==nL.material)for(let s=0;s<r;s++){this.getMatrixAt(s,nD),nI.multiplyMatrices(i,nD),nL.matrixWorld=nI,nL.raycast(e,nO);for(let e=0,i=nO.length;e<i;e++){let i=nO[e];i.instanceId=s,i.object=this,t.push(i)}nO.length=0}}setColorAt(e,t){null===this.instanceColor&&(this.instanceColor=new nP(new Float32Array(3*this.instanceMatrix.count),3)),t.toArray(this.instanceColor.array,3*e)}setMatrixAt(e,t){t.toArray(this.instanceMatrix.array,16*e)}updateMorphTargets(){}dispose(){this.dispatchEvent({type:"dispose"})}},nz=class extends rw{constructor(e){super(),this.isLineBasicMaterial=!0,this.type="LineBasicMaterial",this.color=new ii(16777215),this.linewidth=1,this.linecap="round",this.linejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.linewidth=e.linewidth,this.linecap=e.linecap,this.linejoin=e.linejoin,this.fog=e.fog,this}},nF=new iv,nN=new iv,nk=new iX,nU=new iq,nV=new iN,nj=class extends rl{constructor(e=new rz,t=new nz){super(),this.isLine=!0,this.type="Line",this.geometry=e,this.material=t,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),this.material=e.material,this.geometry=e.geometry,this}computeLineDistances(){let e=this.geometry;if(null===e.index){let t=e.attributes.position,i=[0];for(let e=1,r=t.count;e<r;e++)nF.fromBufferAttribute(t,e-1),nN.fromBufferAttribute(t,e),i[e]=i[e-1],i[e]+=nF.distanceTo(nN);e.setAttribute("lineDistance",new rT(i,1))}else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");return this}raycast(e,t){let i=this.geometry,r=this.matrixWorld,s=e.params.Line.threshold,a=i.drawRange;if(null===i.boundingSphere&&i.computeBoundingSphere(),nV.copy(i.boundingSphere),nV.applyMatrix4(r),nV.radius+=s,!1===e.ray.intersectsSphere(nV))return;nk.copy(r).invert(),nU.copy(e.ray).applyMatrix4(nk);let o=s/((this.scale.x+this.scale.y+this.scale.z)/3),l=o*o,h=new iv,c=new iv,d=new iv,u=new iv,p=this.isLineSegments?2:1,f=i.index,m=i.attributes.position;if(null!==f){let i=Math.max(0,a.start),r=Math.min(f.count,a.start+a.count);for(let s=i,a=r-1;s<a;s+=p){let i=f.getX(s),r=f.getX(s+1);if(h.fromBufferAttribute(m,i),c.fromBufferAttribute(m,r),nU.distanceSqToSegment(h,c,u,d)>l)continue;u.applyMatrix4(this.matrixWorld);let a=e.ray.origin.distanceTo(u);a<e.near||a>e.far||t.push({distance:a,point:d.clone().applyMatrix4(this.matrixWorld),index:s,face:null,faceIndex:null,object:this})}}else{let i=Math.max(0,a.start),r=Math.min(m.count,a.start+a.count);for(let s=i,a=r-1;s<a;s+=p){if(h.fromBufferAttribute(m,s),c.fromBufferAttribute(m,s+1),nU.distanceSqToSegment(h,c,u,d)>l)continue;
3139u.applyMatrix4(this.matrixWorld);let i=e.ray.origin.distanceTo(u);i<e.near||i>e.far||t.push({distance:i,point:d.clone().applyMatrix4(this.matrixWorld),index:s,face:null,faceIndex:null,object:this})}}}updateMorphTargets(){let e=this.geometry.morphAttributes,t=Object.keys(e);if(t.length>0){let i=e[t[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=i.length;e<t;e++){let t=i[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[t]=e}}}}},nG=new iv,nH=new iv,nW=class extends nj{constructor(e,t){super(e,t),this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){let e=this.geometry;if(null===e.index){let t=e.attributes.position,i=[];for(let e=0,r=t.count;e<r;e+=2)nG.fromBufferAttribute(t,e),nH.fromBufferAttribute(t,e+1),i[e]=0===e?0:i[e-1],i[e+1]=i[e]+nG.distanceTo(nH);e.setAttribute("lineDistance",new rT(i,1))}else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");return this}},nq=class extends ih{constructor(e,t,i,r,s,a,o,l,h){super(e,t,i,r,s,a,o,l,h),this.isVideoTexture=!0,this.minFilter=void 0!==a?a:1006,this.magFilter=void 0!==s?s:1006,this.generateMipmaps=!1;let c=this;"requestVideoFrameCallback"in e&&e.requestVideoFrameCallback(function t(){c.needsUpdate=!0,e.requestVideoFrameCallback(t)})}clone(){return new this.constructor(this.image).copy(this)}update(){let e=this.image;"requestVideoFrameCallback"in e==!1&&e.readyState>=e.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}},nX=class extends ih{constructor(e,t,i,r,s,a,o,l,h){super(e,t,i,r,s,a,o,l,h),this.isCanvasTexture=!0,this.needsUpdate=!0}},nY=class{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(e,t){let i=this.getUtoTmapping(e);return this.getPoint(i,t)}getPoints(e=5){let t=[];for(let i=0;i<=e;i++)t.push(this.getPoint(i/e));return t}getSpacedPoints(e=5){let t=[];for(let i=0;i<=e;i++)t.push(this.getPointAt(i/e));return t}getLength(){let e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===e+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;let t=[],i,r=this.getPoint(0),s=0;t.push(0);for(let a=1;a<=e;a++)t.push(s+=(i=this.getPoint(a/e)).distanceTo(r)),r=i;return this.cacheArcLengths=t,t}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t){let i=this.getLengths(),r=0,s=i.length,a;a=t||e*i[s-1];let o=0,l=s-1,h;for(;o<=l;)if((h=i[r=Math.floor(o+(l-o)/2)]-a)<0)o=r+1;else if(h>0)l=r-1;else{l=r;break}if(i[r=l]===a)return r/(s-1);let c=i[r],d=i[r+1]-c;return(r+(a-c)/d)/(s-1)}getTangent(e,t){let i=e-1e-4,r=e+1e-4;i<0&&(i=0),r>1&&(r=1);let s=this.getPoint(i),a=this.getPoint(r),o=t||(s.isVector2?new tQ:new iv);return o.copy(a).sub(s).normalize(),o}getTangentAt(e,t){let i=this.getUtoTmapping(e);return this.getTangent(i,t)}computeFrenetFrames(e,t){let i=new iv,r=[],s=[],a=[],o=new iv,l=new iX;for(let t=0;t<=e;t++){let i=t/e;r[t]=this.getTangentAt(i,new iv)}s[0]=new iv,a[0]=new iv;let h=Number.MAX_VALUE,c=Math.abs(r[0].x),d=Math.abs(r[0].y),u=Math.abs(r[0].z);c<=h&&(h=c,i.set(1,0,0)),d<=h&&(h=d,i.set(0,1,0)),u<=h&&i.set(0,0,1),o.crossVectors(r[0],i).normalize(),s[0].crossVectors(r[0],o),a[0].crossVectors(r[0],s[0]);for(let t=1;t<=e;t++){if(s[t]=s[t-1].clone(),a[t]=a[t-1].clone(),o.crossVectors(r[t-1],r[t]),o.length()>Number.EPSILON){o.normalize();let e=Math.acos(tU(r[t-1].dot(r[t]),-1,1));s[t].applyMatrix4(l.makeRotationAxis(o,e))}a[t].crossVectors(r[t],s[t])}if(!0===t){let t=Math.acos(tU(s[0].dot(s[e]),-1,1));t/=e,r[0].dot(o.crossVectors(s[0],s[e]))>0&&(t=-t);for(let i=1;i<=e;i++)s[i].applyMatrix4(l.makeRotationAxis(r[i],t*i)),a[i].crossVectors(r[i],s[i])}return{tangents:r,normals:s,binormals:a}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){let e={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.t
3139ype,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}},nQ=class extends nY{constructor(e=0,t=0,i=1,r=1,s=0,a=2*Math.PI,o=!1,l=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=e,this.aY=t,this.xRadius=i,this.yRadius=r,this.aStartAngle=s,this.aEndAngle=a,this.aClockwise=o,this.aRotation=l}getPoint(e,t){let i=t||new tQ,r=2*Math.PI,s=this.aEndAngle-this.aStartAngle,a=Math.abs(s)<Number.EPSILON;for(;s<0;)s+=r;for(;s>r;)s-=r;s<Number.EPSILON&&(s=a?0:r),!0!==this.aClockwise||a||(s===r?s=-r:s-=r);let o=this.aStartAngle+e*s,l=this.aX+this.xRadius*Math.cos(o),h=this.aY+this.yRadius*Math.sin(o);if(0!==this.aRotation){let e=Math.cos(this.aRotation),t=Math.sin(this.aRotation),i=l-this.aX,r=h-this.aY;l=i*e-r*t+this.aX,h=i*t+r*e+this.aY}return i.set(l,h)}copy(e){return super.copy(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}toJSON(){let e=super.toJSON();return e.aX=this.aX,e.aY=this.aY,e.xRadius=this.xRadius,e.yRadius=this.yRadius,e.aStartAngle=this.aStartAngle,e.aEndAngle=this.aEndAngle,e.aClockwise=this.aClockwise,e.aRotation=this.aRotation,e}fromJSON(e){return super.fromJSON(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}},nK=class extends nQ{constructor(e,t,i,r,s,a){super(e,t,i,i,r,s,a),this.isArcCurve=!0,this.type="ArcCurve"}};function nZ(){let e=0,t=0,i=0,r=0;
3139function s(s,a,o,l){e=s,t=o,i=-3*s+3*a-2*o-l,r=2*s-2*a+o+l}return{initCatmullRom:function(e,t,i,r,a){s(t,i,a*(i-e),a*(r-t))},initNonuniformCatmullRom:function(e,t,i,r,a,o,l){let h=(t-e)/a-(i-e)/(a+o)+(i-t)/o,c=(i-t)/o-(r-t)/(o+l)+(r-i)/l;s(t,i,h*=o,c*=o)},calc:function(s){let a=s*s;return e+t*s+i*a+a*s*r}}}var nJ=new iv,n$=new nZ,n0=new nZ,n1=new nZ,n2=class extends nY{constructor(e=[],t=!1,i="centripetal",r=.5){super(),this.isCatmullRomCurve3=!0,this.type="CatmullRomCurve3",this.points=e,this.closed=t,this.curveType=i,this.tension=r}getPoint(e,t=new iv){let i,r,s=this.points,a=s.length,o=(a-(this.closed?0:1))*e,l=Math.floor(o),h=o-l;this.closed?l+=l>0?0:(Math.floor(Math.abs(l)/a)+1)*a:0===h&&l===a-1&&(l=a-2,h=1),this.closed||l>0?i=s[(l-1)%a]:(nJ.subVectors(s[0],s[1]).add(s[0]),i=nJ);let c=s[l%a],d=s[(l+1)%a];if(this.closed||l+2<a?r=s[(l+2)%a]:(nJ.subVectors(s[a-1],s[a-2]).add(s[a-1]),r=nJ),"centripetal"===this.curveType||"chordal"===this.curveType){let e="chordal"===this.curveType?.5:.25,t=Math.pow(i.distanceToSquared(c),e),s=Math.pow(c.distanceToSquared(d),e),a=Math.pow(d.distanceToSquared(r),e);s<1e-4&&(s=1),t<1e-4&&(t=s),a<1e-4&&(a=s),n$.initNonuniformCatmullRom(i.x,c.x,d.x,r.x,t,s,a),n0.initNonuniformCatmullRom(i.y,c.y,d.y,r.y,t,s,a),n1.initNonuniformCatmullRom(i.z,c.z,d.z,r.z,t,s,a)}else"catmullrom"===this.curveType&&(n$.initCatmullRom(i.x,c.x,d.x,r.x,this.tension),n0.initCatmullRom(i.y,c.y,d.y,r.y,this.tension),n1.initCatmullRom(i.z,c.z,d.z,r.z,this.tension));return t.set(n$.calc(h),n0.calc(h),n1.calc(h)),t}copy(e){super.copy(e),this.points=[];for(let t=0,i=e.points.length;t<i;t++){let i=e.points[t];this.points.push(i.clone())}return this.closed=e.closed,this.curveType=e.curveType,this.tension=e.tension,this}toJSON(){let e=super.toJSON();e.points=[];for(let t=0,i=this.points.length;t<i;t++){let i=this.points[t];e.points.push(i.toArray())}return e.closed=this.closed,e.curveType=this.curveType,e.tension=this.tension,e}fromJSON(e){super.fromJSON(e),this.points=[];for(let t=0,i=e.points.length;t<i;t++){let i=e.points[t];this.points.push(new iv().fromArray(i))}return this.closed=e.closed,this.curveType=e.curveType,this.tension=e.tension,this}};function n3(e,t,i,r,s){let a=(r-t)*.5,o=(s-i)*.5,l=e*e;return e*l*(2*i-2*r+a+o)+(-3*i+3*r-2*a-o)*l+a*e+i}function n4(e,t,i,r){let s;return(s=1-e)*s*t+2*(1-e)*e*i+e*e*r}function n5(e,t,i,r,s){let a,o;return(a=1-e)*a*a*t+3*(o=1-e)*o*e*i+3*(1-e)*e*e*r+e*e*e*s}var n6=class extends nY{constructor(e=new tQ,t=new tQ,i=new tQ,r=new tQ){super(),this.isCubicBezierCurve=!0,this.type="CubicBezierCurve",this.v0=e,this.v1=t,this.v2=i,this.v3=r}getPoint(e,t=new tQ){let i=this.v0,r=this.v1,s=this.v2,a=this.v3;return t.set(n5(e,i.x,r.x,s.x,a.x),n5(e,i.y,r.y,s.y,a.y)),t}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this.v3.copy(e.v3),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e.v3=this.v3.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this.v3.fromArray(e.v3),this}},n8=class extends nY{constructor(e=new iv,t=new iv,i=new iv,r=new iv){super(),this.isCubicBezierCurve3=!0,this.type="CubicBezierCurve3",this.v0=e,this.v1=t,this.v2=i,this.v3=r}getPoint(e,t=new iv){let i=this.v0,r=this.v1,s=this.v2,a=this.v3;return t.set(n5(e,i.x,r.x,s.x,a.x),n5(e,i.y,r.y,s.y,a.y),n5(e,i.z,r.z,s.z,a.z)),t}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this.v3.copy(e.v3),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e.v3=this.v3.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this.v3.fromArray(e.v3),this}},n9=class extends nY{constructor(e=new tQ,t=new tQ){super(),this.isLineCurve=!0,this.type="LineCurve",this.v1=e,this.v2=t}getPoint(e,t=new tQ){return 1===e?t.copy(this.v2):(t.copy(this.v2).sub(this.v1),t.multiplyScalar(e).add(this.v1)),t}getPointAt(e,t){return this.getPoint(e,t)}getTangent(e,t){let i=t||new tQ;return i.copy(this.v2).sub(this.v1).normalize(),i}copy(e){return super.copy(e),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},n7=class extends nY{constructor(e=new iv,t=new iv){super(),this.isLineCurve3=!0,this.type="LineCurve3",this.v1=e,this.v2=t}getPoint(e,t=new iv){return 1===e?t.copy(this.v2):(t.copy(this.v2).sub(this.v1),t.multiplyScalar(e).add(this.v1)),t}getPointAt(e,t){return this.getPoint(e,t)}copy(e){return super.copy(e),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},oe=class extends nY{constructor(e=new tQ,t=new tQ,i=new tQ){super(),this.isQuadraticBezierCurve=!0,this.type="QuadraticBezierCurve",this.v0=e,this.v1=t,this.v2=i}
3139getPoint(e,t=new tQ){let i=this.v0,r=this.v1,s=this.v2;return t.set(n4(e,i.x,r.x,s.x),n4(e,i.y,r.y,s.y)),t}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},ot=class extends nY{constructor(e=new iv,t=new iv,i=new iv){super(),this.isQuadraticBezierCurve3=!0,this.type="QuadraticBezierCurve3",this.v0=e,this.v1=t,this.v2=i}getPoint(e,t=new iv){let i=this.v0,r=this.v1,s=this.v2;return t.set(n4(e,i.x,r.x,s.x),n4(e,i.y,r.y,s.y),n4(e,i.z,r.z,s.z)),t}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},oi=class extends nY{constructor(e=[]){super(),this.isSplineCurve=!0,this.type="SplineCurve",this.points=e}getPoint(e,t=new tQ){let i=this.points,r=(i.length-1)*e,s=Math.floor(r),a=r-s,o=i[0===s?s:s-1],l=i[s],h=i[s>i.length-2?i.length-1:s+1],c=i[s>i.length-3?i.length-1:s+2];return t.set(n3(a,o.x,l.x,h.x,c.x),n3(a,o.y,l.y,h.y,c.y)),t}copy(e){super.copy(e),this.points=[];for(let t=0,i=e.points.length;t<i;t++){let i=e.points[t];this.points.push(i.clone())}return this}toJSON(){let e=super.toJSON();e.points=[];for(let t=0,i=this.points.length;t<i;t++){let i=this.points[t];e.points.push(i.toArray())}return e}fromJSON(e){super.fromJSON(e),this.points=[];for(let t=0,i=e.points.length;t<i;t++){let i=e.points[t];this.points.push(new tQ().fromArray(i))}return this}},or=Object.freeze({__proto__:null,ArcCurve:nK,CatmullRomCurve3:n2,CubicBezierCurve:n6,CubicBezierCurve3:n8,EllipseCurve:nQ,LineCurve:n9,LineCurve3:n7,QuadraticBezierCurve:oe,QuadraticBezierCurve3:ot,SplineCurve:oi}),os=class extends nY{constructor(){super(),this.type="CurvePath",this.curves=[],this.autoClose=!1}add(e){this.curves.push(e)}closePath(){let e=this.curves[0].getPoint(0),t=this.curves[this.curves.length-1].getPoint(1);e.equals(t)||this.curves.push(new n9(t,e))}getPoint(e,t){let i=e*this.getLength(),r=this.getCurveLengths(),s=0;for(;s<r.length;){if(r[s]>=i){let e=r[s]-i,a=this.curves[s],o=a.getLength(),l=0===o?0:1-e/o;return a.getPointAt(l,t)}s++}return null}getLength(){let e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;let e=[],t=0;for(let i=0,r=this.curves.length;i<r;i++)e.push(t+=this.curves[i].getLength());return this.cacheLengths=e,e}getSpacedPoints(e=40){let t=[];for(let i=0;i<=e;i++)t.push(this.getPoint(i/e));return this.autoClose&&t.push(t[0]),t}getPoints(e=12){let t=[],i;for(let r=0,s=this.curves;r<s.length;r++){let a=s[r],o=a.isEllipseCurve?2*e:a.isLineCurve||a.isLineCurve3?1:a.isS
vendor: 7,898 bytes, line 3139
3139plineCurve?e*a.points.length:e,l=a.getPoints(o);for(let e=0;e<l.length;e++){let r=l[e];i&&i.equals(r)||(t.push(r),i=r)}}return this.autoClose&&t.length>1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}copy(e){super.copy(e),this.curves=[];for(let t=0,i=e.curves.length;t<i;t++){let i=e.curves[t];this.curves.push(i.clone())}return this.autoClose=e.autoClose,this}toJSON(){let e=super.toJSON();e.autoClose=this.autoClose,e.curves=[];for(let t=0,i=this.curves.length;t<i;t++){let i=this.curves[t];e.curves.push(i.toJSON())}return e}fromJSON(e){super.fromJSON(e),this.autoClose=e.autoClose,this.curves=[];for(let t=0,i=e.curves.length;t<i;t++){let i=e.curves[t];this.curves.push(new or[i.type]().fromJSON(i))}return this}},oa=class extends os{constructor(e){super(),this.type="Path",this.currentPoint=new tQ,e&&this.setFromPoints(e)}setFromPoints(e){this.moveTo(e[0].x,e[0].y);for(let t=1,i=e.length;t<i;t++)this.lineTo(e[t].x,e[t].y);return this}moveTo(e,t){return this.currentPoint.set(e,t),this}lineTo(e,t){let i=new n9(this.currentPoint.clone(),new tQ(e,t));return this.curves.push(i),this.currentPoint.set(e,t),this}quadraticCurveTo(e,t,i,r){let s=new oe(this.currentPoint.clone(),new tQ(e,t),new tQ(i,r));return this.curves.push(s),this.currentPoint.set(i,r),this}bezierCurveTo(e,t,i,r,s,a){let o=new n6(this.currentPoint.clone(),new tQ(e,t),new tQ(i,r),new tQ(s,a));return this.curves.push(o),this.currentPoint.set(s,a),this}splineThru(e){let t=new oi([this.currentPoint.clone()].concat(e));return this.curves.push(t),this.currentPoint.copy(e[e.length-1]),this}arc(e,t,i,r,s,a){let o=this.currentPoint.x,l=this.currentPoint.y;return this.absarc(e+o,t+l,i,r,s,a),this}absarc(e,t,i,r,s,a){return this.absellipse(e,t,i,i,r,s,a),this}ellipse(e,t,i,r,s,a,o,l){let h=this.currentPoint.x,c=this.currentPoint.y;return this.absellipse(e+h,t+c,i,r,s,a,o,l),this}absellipse(e,t,i,r,s,a,o,l){let h=new nQ(e,t,i,r,s,a,o,l);if(this.curves.length>0){let e=h.getPoint(0);e.equals(this.currentPoint)||this.lineTo(e.x,e.y)}this.curves.push(h);let c=h.getPoint(1);return this.currentPoint.copy(c),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){let e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}},on=class extends rz{constructor(e=[new tQ(0,-.5),new tQ(.5,0),new tQ(0,.5)],t=12,i=0,r=2*Math.PI){super(),this.type="LatheGeometry",this.parameters={points:e,segments:t,phiStart:i,phiLength:r},t=Math.floor(t),r=tU(r,0,2*Math.PI);let s=[],a=[],o=[],l=[],h=[],c=1/t,d=new iv,u=new tQ,p=new iv,f=new iv,m=new iv,g=0,v=0;for(let t=0;t<=e.length-1;t++)switch(t){case 0:g=e[t+1].x-e[t].x,v=e[t+1].y-e[t].y,p.x=1*v,p.y=-g,p.z=0*v,m.copy(p),p.normalize(),l.push(p.x,p.y,p.z);break;case e.length-1:l.push(m.x,m.y,m.z);break;default:g=e[t+1].x-e[t].x,v=e[t+1].y-e[t].y,p.x=1*v,p.y=-g,p.z=0*v,f.copy(p),p.x+=m.x,p.y+=m.y,p.z+=m.z,p.normalize(),l.push(p.x,p.y,p.z),m.copy(f)}for(let s=0;s<=t;s++){let p=i+s*c*r,f=Math.sin(p),m=Math.cos(p);for(let i=0;i<=e.length-1;i++){d.x=e[i].x*f,d.y=e[i].y,d.z=e[i].x*m,a.push(d.x,d.y,d.z),u.x=s/t,u.y=i/(e.length-1),o.push(u.x,u.y);let r=l[3*i+0]*f,c=l[3*i+1],p=l[3*i+0]*m;h.push(r,c,p)}}for(let i=0;i<t;i++)for(let t=0;t<e.length-1;t++){let r=t+i*e.length,a=r+e.length,o=r+e.length+1,l=r+1;s.push(r,a,l),s.push(o,l,a)}this.setIndex(s),this.setAttribute("position",new rT(a,3)),this.setAttribute("uv",new rT(o,2)),this.setAttribute("normal",new rT(h,3))}static fromJSON(e){return new on(e.points,e.segments,e.phiStart,e.phiLength)}},oo=class extends rz{constructor(e=1,t=1,i=1,r=32,s=1,a=!1,o=0,l=2*Math.PI){super(),this.type="CylinderGeometry",this.parameters={radiusTop:e,radiusBottom:t,height:i,radialSegments:r,heightSegments:s,openEnded:a,thetaStart:o,thetaLength:l};let h=this;r=Math.floor(r),s=Math.floor(s);let c=[],d=[],u=[],p=[],f=0,m=[],g=i/2,v=0;function y(i){let s=f,a=new tQ,m=new iv,y=0,x=!0===i?e:t,b=!0===i?1:-1;for(let e=1;e<=r;e++)d.push(0,g*b,0),u.push(0,b,0),p.push(.5,.5),f++;let w=f;for(let e=0;e<=r;e++){let t=e/r*l+o,i=Math.cos(t),s=Math.sin(t);m.x=x*s,m.y=g*b,m.z=x*i,d.push(m.x,m.y,m.z),u.push(0,b,0),a.x=.5*i+.5,a.y=.5*s*b+.5,p.push(a.x,a.y),f++}for(let e=0;e<r;e++){let t=s+e,r=w+e;!0===i?c.push(r,r+1,t):c.push(r+1,r,t),y+=3}h.addGroup(v,y,!0===i?1:2),v+=y}(function(){let a=new iv,y=new iv,x=0,b=(t-e)/i;for(let h=0;h<=s;h++){let c=[],v=h/s,x=v*(t-e)+e;for(let e=0;e<=r;e++){let t=e/r,s=t*l+o,h=Math.sin(s),m=Math.cos(s);y.x=x*h,y.y=-v*i+g,y.z=x*m,d.push(y.x,y.y,y.z),a.set(h,b,m).normalize(),u.push(a.x,a.y,a.z),p.push(t,1-v),c.push(f++)}m.push(c)}for(let e=0;e<r;e++)for(let t=0;t<s;t++){let i=m[t][e],r=m[t+1][e],s=m[t+1][e+1],a=m[t][e+1];c.push(i,r,a),c.push(r,s,a),x+=6}h.addGroup(v,x,0),v+=x})(),!1===a&&(e>0&&y(!0),t>0&&y(!1)),this.setIndex(c),this.setAttribute("position",new rT(d,3)),this.setAttribute("normal",new rT(u,3)),this.setAttribute("uv",new rT(p,2))}static fromJSON(e){return new oo(e.radiusTop,e.radiusBottom,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}},ol=class extends oo{constructor(e=1,t=1,i=32,r=1,s=!1,a=0,o=2*Math.PI){super(0,e,t,i,r,s,a,o),this.type="ConeGeometry",this.parameters={radius:e,height:t,radialSegments:i,heightSegments:r,openEnded:s,thetaStart:a,thetaLength:o}}static fromJSON(e){return new ol(e.radius,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}},oh=class extends rz{constructor(e=[],t=[],i=1,r=0){super(),this.type="PolyhedronGeometry",this.parameters={vertices:e,indices:t,radius:i,detail:r};let s=[],a=[];function o(e){s.push(e.x,e.y,e.z)}function l(t,i){let r=3*t;i.x=e[r+0],i.y=e[r+1],i.z=e[r+2]}function h(e,t,i,r){r<0&&1===e.x&&(a[t]=e.x-1),0===i.x&&0===i.z&&(a[t]=r/2/Math.PI+.5)}function c(e){return Math.atan2(e.z,-e.x)}(function(e){let i=new iv,r=new iv,s=new iv;for(let a=0;a<t.length;a+=3)l(t[a+0],i),l(t[a+1],r),l(t[a+2],s),function(e,t,i,r){let s=r+1,a=[];for(let r=0;r<=s;r++){a[r]=[];let o=e.clone().lerp(i,r/s),l=t.clone().lerp(i,r/s),h=s-r;for(let e=0;e<=h;e++)0===e&&r===s?a[r][e]=o:a[r][e]=o.clone().lerp(l,e/h)}for(let e=0;e<s;e++)for(let t=0;t<2*(s-e)-1;t++){let i=Math.floor(t/2);t%2==0?(o(a[e][i+1]),o(a[e+1][i]),o(a[e][i])):(o(a[e][i+1]),o(a[e+1][i+1]),o(a[e+1][i]))}}(i,r,s,e)})(r),function(e){let t=new iv;for(let i=0;i<s.length;i+=3)t.x=s[i+0],t.y=s[i+1],t.z=s[i+2],t.normalize().multiplyScalar(e),s[i+0]=t.x,s[i+1]=t.y,s[i+2]=t.z}(i),function(){let e=new iv;for(let t=0;t<s.length;t+=3){e.x=s[t+0],e.y=s[t+1],e.z=s[t+2];let i=c(e)/2/Math.PI+.5,r=Math.atan2(-e.y,Math.sqrt(e.x*e.x+e.z*e.z))/Math.PI+.5;a.push(i,1-r)}(function(){let e=new iv,t=new iv,i=new iv,r=new iv,o=new tQ,l=new tQ,d=new tQ;for(let u=0,p=0;u<s.length;u+=9,p+=6){e.set(s[u+0],s[u+1],s[u+2]),t.set(s[u+3],s[u+4],s[u+5]),i.set(s[u+6],s[u+7],s[u+8]),o.set(a[p+0],a[p+1]),l.set(a[p+2],a[p+3]),d.set(a[p+4],a[p+5]),r.copy(e).add(t).add(i).divideScalar(3);let f=c(r);h(o,p+0,e,f),h(l,p+2,t,f),h(d,p+4,i,f)}})(),function(){for(let e=0;e<a.length;e+=6){let t=a[e+0],i=a[e+2],r=a[e+4],s=Math.max(t,i,r),o=Math.min(t,i,r);s>.9&&o<.1&&(t<.2&&(a[e+0]+=1),i<.2&&(a[e+2]+=1),r<.2&&(a[e+4]+=1))}}()}(),this.setAttribute("position",new rT(s,3)),this.setAttribute("normal",new rT(s.slice(),3)),this.setAttribute("uv",new rT(a,2)),0===r?this.computeVertexNormals():this.normalizeNormals()}static fromJSON(e){return new oh(e.vertices,e.indices,e.radius,e.details)}},oc=class extends oh{constructor(e=1,t=0){let i=(1+Math.sqrt(5))/2,r=1/i;super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-r,-i,0,-r,i,0,r,-i,0,r,i,-r,-i,0,-r,i,0,r,-i,0,r,i,0,-i,0,-r,i,0,-r,-i,0,r,i,0,r],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,
313919,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],e,t),this.type="DodecahedronGeometry",this.parameters={radius:e,detail:t}}static fromJSON(e){return new oc(e.radius,e.detail)}},od=class extends oa{constructor(e){super(e),this.uuid=tk(),this.type="Shape",this.holes=[]}getPointsHoles(e){let t=[];for(let i=0,r=this.holes.length;i<r;i++)t[i]=this.holes[i].getPoints(e);return t}extractPoints(e){return{shape:this.getPoints(e),holes:this.getPointsHoles(e)}}copy(e){super.copy(e),this.holes=[];for(let t=0,i=e.holes.length;t<i;t++){let i=e.holes[t];this.holes.push(i.clone())}return this}toJSON(){let e=super.toJSON();e.uuid=this.uuid,e.holes=[];for(let t=0,i=this.holes.length;t<i;t++){let i=this.holes[t];e.holes.push(i.toJSON())}return e}fromJSON(e){super.fromJSON(e),this.uuid=e.uuid,this.holes=[];for(let t=0,i=e.holes.length;t<i;t++){let i=e.holes[t];this.holes.push(new oa().fromJSON(i))}return this}},ou=function(e,t,i=2){let r,s,a,o,l,h,c,d=t&&t.length,u=d?t[0]*i:e.length,p=op(e,0,u,i,!0),f=[];if(!p||p.next===p.prev)return f;if(d&&(p=function(e,t,i,r){let s=[],a,o,l,h,c;for(a=0,o=t.length;a<o;a++)l=t[a]*r,h=a<o-1?t[a+1]*r:e.length,(c=op(e,l,h,r,!1))===c.next&&(c.steiner=!0),s.push(function(e){let t=e,i=e;do(t.x<i.x||t.x===i.x&&t.y<i.y)&&(i=t),t=t.next;while(t!==e);return i}(c));for(s.sort(om),a=0;a<s.length;a++)i=function(e,t){let i=function(e,t){let i=t,r=-1/0,s,a=e.x,o=e.y;do{if(o<=i.y&&o>=i.next.y&&i.next.y!==i.y){let e=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(e<=a&&e>r&&(r=e,s=i.x<i.next.x?i:i.next,e===a))return s}i=i.next}while(i!==t);if(!s)return null;let l=s,h=s.x,c=s.y,d=1/0,u;i=s;do{var p,f;a>=i.x&&i.x>=h&&a!==i.x&&ov(o<c?a:r,o,h,c,o<c?r:a,o,i.x,i.y)&&(u=Math.abs(o-i.y)/(a-i.x),o_(i,e)&&(u<d||u===d&&(i.x>s.x||i.x===s.x&&(p=s,f=i,0>oy(p.prev,p,f.prev)&&0>oy(f.next,p,p.next))))&&(s=i,d=u)),i=i.next}while(i!==l);return s}(e,t);if(!i)return t;let r=oA(i,e);return of(r,r.next),of(i,i.next)}(s[a],i);return i}(e,t,p,i)),e.length>80*i){r=a=e[0],s=o=e[1];for(let t=i;t<u;t+=i)l=e[t],h=e[t+1],l<r&&(r=l),h<s&&(s=h),l>a&&(a=l),h>o&&(o=h);c=0!==(c=Math.max(a-r,o-s))?32767/c:0}return function e(t,i,r,s,a,o,l){if(!t)return;!l&&o&&function(e,t,i,r){let s=e;do 0===s.z&&(s.z=og(s.x,s.y,t,i,r)),s.prevZ=s.prev,s.nextZ=s.next,s=s.next;while(s!==e);s.prevZ.nextZ=null,s.prevZ=null,function(e){let t,i,r,s,a,o,l,h,c=1;do{for(i=e,e=null,a=null,o=0;i;){for(o++,r=i,l=0,t=0;t<c&&(l++,r=r.nextZ);t++);for(h=c;l>0||h>0&&r;)0!==l&&(0===h||!r||i.z<=r.z)?(s=i,i=i.nextZ,l--):(s=r,r=r.nextZ,h--),a?a.nextZ=s:e=s,s.prevZ=a,a=s;i=r}a.nextZ=null,c*=2}while(o>1)}(s)}(t,s,a,o);let h=t,c,d;for(;t.prev!==t.next;){if(c=t.prev,d=t.next,o?function(e,t,i,r){let s=e.prev,a=e.next;if(oy(s,e,a)>=0)return!1;let o=s.x,l=e.x,h=a.x,c=s.y,d=e.y,u=a.y,p=o<l?o<h?o:h:l<h?l:h,f=c<d?c<u?c:u:d<u?d:u,m=o>l?o>h?o:h:l>h?l:h,g=c>d?c>u?c:u:d>u?d:u,v=og(p,f,t,i,r),y=og(m,g,t,i,r),x=e.prevZ,b=e.nextZ;for(;x&&x.z>=v&&b&&b.z<=y;){if(x.x>=p&&x.x<=m&&x.y>=f&&x.y<=g&&x!==s&&x!==a&&ov(o,c,l,d,h,u,x.x,x.y)&&oy(x.prev,x,x.next)>=0||(x=x.prevZ,b.x>=p&&b.x<=m&&b.y>=f&&b.y<=g&&b!==s&&b!==a&&ov(o,c,l,d,h,u,b.x,b.y)&&oy(b.prev,b,b.next)>=0))return!1;b=b.nextZ}for(;x&&x.z>=v;){if(x.x>=p&&x.x<=m&&x.y>=f&&x.y<=g&&x!==s&&x!==a&&ov(o,c,l,d,h,u,x.x,x.y)&&oy(x.prev,x,x.next)>=0)return!1;x=x.prevZ}for(;b&&b.z<=y;){if(b.x>=p&&b.x<=m&&b.y>=f&&b.y<=g&&b!==s&&b!==a&&ov(o,c,l,d,h,u,b.x,b.y)&&oy(b.prev,b,b.next)>=0)return!1;b=b.nextZ}return!0}(t,s,a,o):function(e){let t=e.prev,i=e.next;if(oy(t,e,i)>=0)return!1;let r=t.x,s=e.x,a=i.x,o=t.y,l=e.y,h=i.y,c=r<s?r<a?r:a:s<a?s:a,d=o<l?o<h?o:h:l<h?l:h,u=r>s?r>a?r:a:s>a?s:a,p=o>l?o>h?o:h:l>h?l:h,f=i.next;for(;f!==t;){if(f.x>=c&&f.x<=u&&f.y>=d&&f.y<=p&&ov(r,o,s,l,a,h,f.x,f.y)&&oy(f.prev,f,f.next)>=0)return!1;f=f.next}return!0}(t)){i.push(c.i/r|0),i.push(t.i/r|0),i.push(d.i/r|0),oE(t),t=d.next,h=d.next;continue}if((t=d)===h){l?1===l?e(t=function(e,t,i){let r=e;do{let s=r.prev,a=r.next.next;!ox(s,a)&&ob(s,r,r.next,a)&&o_(s,a)&&o_(a,s)&&(t.push(s.i/i|0),t.push(r.i/i|0),t.push(a.i/i|0),oE(r),oE(r.next),r=e=a),r=r.next}while(r!==e);return of(r)}(of(t),i,r),i,r,s,a,o,2):2===l&&function(t,i,r,s,a,o){let l=t;do{let t=l.next.next;for(;t!==l.prev;){var h,c;
3139if(l.i!==t.i&&(h=l,c=t,h.next.i!==c.i&&h.prev.i!==c.i&&!function(e,t){let i=e;do{if(i.i!==e.i&&i.next.i!==e.i&&i.i!==t.i&&i.next.i!==t.i&&ob(i,i.next,e,t))return!0;i=i.next}while(i!==e);return!1}(h,c)&&(o_(h,c)&&o_(c,h)&&function(e,t){let i=e,r=!1,s=(e.x+t.x)/2,a=(e.y+t.y)/2;do i.y>a!=i.next.y>a&&i.next.y!==i.y&&s<(i.next.x-i.x)*(a-i.y)/(i.next.y-i.y)+i.x&&(r=!r),i=i.next;while(i!==e);return r}(h,c)&&(oy(h.prev,h,c.prev)||oy(h,c.prev,c))||ox(h,c)&&oy(h.prev,h,h.next)>0&&oy(c.prev,c,c.next)>0))){let h=oA(l,t);l=of(l,l.next),h=of(h,h.next),e(l,i,r,s,a,o,0),e(h,i,r,s,a,o,0);return}t=t.next}l=l.next}while(l!==t)}(t,i,r,s,a,o):e(of(t),i,r,s,a,o,1);break}}}(p,f,i,r,s,c,0),f};function op(e,t,i,r,s){let a,o;if(s===function(e,t,i,r){let s=0;for(let a=t,o=i-r;a<i;a+=r)s+=(e[o]-e[a])*(e[a+1]+e[o+1]),o=a;return s}(e,t,i,r)>0)for(a=t;a<i;a+=r)o=oM(a,e[a],e[a+1],o);else for(a=i-r;a>=t;a-=r)o=oM(a,e[a],e[a+1],o);return o&&ox(o,o.next)&&(oE(o),o=o.next),o}function of(e,t){if(!e)return e;t||(t=e);let i=e,r;do if(r=!1,!i.steiner&&(ox(i,i.next)||0===oy(i.prev,i,i.next))){if(oE(i),(i=t=i.prev)===i.next)break;r=!0}else i=i.next;while(r||i!==t);return t}function om(e,t){return e.x-t.x}function og(e,t,i,r,s){return(e=((e=((e=((e=((e=(e-i)*s|0)|e<<8)&16711935)|e<<4)&252645135)|e<<2)&858993459)|e<<1)&1431655765)|(t=((t=((t=((t=((t=(t-r)*s|0)|t<<8)&16711935)|t<<4)&252645135)|t<<2)&858993459)|t<<1)&1431655765)<<1}function ov(e,t,i,r,s,a,o,l){return(s-o)*(t-l)>=(e-o)*(a-l)&&(e-o)*(r-l)>=(i-o)*(t-l)&&(i-o)*(a-l)>=(s-o)*(r-l)}function oy(e,t,i){return(t.y-e.y)*(i.x-t.x)-(t.x-e.x)*(i.y-t.y)}function ox(e,t){return e.x===t.x&&e.y===t.y}function ob(e,t,i,r){let s=oS(oy(e,t,i)),a=oS(oy(e,t,r)),o=oS(oy(i,r,e)),l=oS(oy(i,r,t));return!!(s!==a&&o!==l||0===s&&ow(e,i,t)||0===a&&ow(e,r,t)||0===o&&ow(i,e,r)||0===l&&ow(i,t,r))}function ow(e,t,i){return t.x<=Math.max(e.x,i.x)&&t.x>=Math.min(e.x,i.x)&&t.y<=Math.max(e.y,i.y)&&t.y>=Math.min(e.y,i.y)}function oS(e){return e>0?1:e<0?-1:0}function o_(e,t){return 0>oy(e.prev,e,e.next)?oy(e,t,e.next)>=0&&oy(e,e.prev,t)>=0:0>oy(e,t,e.prev)||0>oy(e,e.next,t)}function oA(e,t){let i=new oC(e.i,e.x,e.y),r=new oC(t.i,t.x,t.y),s=e.next,a=t.prev;return e.next=t,t.prev=e,i.next=s,s.prev=i,r.next=i,i.prev=r,a.next=r,r.prev=a,r}function oM(e,t,i,r){let s=new oC(e,t,i);return r?(s.next=r.next,s.prev=r,r.next.prev=s,r.next=s):(s.prev=s,s.next=s),s}function oE(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function oC(e,t,i){this.i=e,this.x=t,this.y=i,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}var oT=class{static area(e){let t=e.length,i=0;for(let r=t-1,s=0;s<t;r=s++)i+=e[r].x*e[s].y-e[s].x*e[r].y;return .5*i}static isClockWise(e){return 0>oT.area(e)}static triangulateShape(e,t){let i=[],r=[],s=[];oP(e),oD(i,e);let a=e.length;t.forEach(oP);for(let e=0;e<t.length;e++)r.push(a),a+=t[e].length,oD(i,t[e]);let o=ou(i,r);for(let e=0;e<o.length;e+=3)s.push(o.slice(e,e+3));return s}};function oP(e){let t=e.length;t>2&&e[t-1].equals(e[0])&&e.pop()}function oD(e,t){for(let i=0;i<t.length;i++)e.push(t[i].x),e.push(t[i].y)}var oI=class extends oh{constructor(e=1,t=0){let i=(1+Math.sqrt(5))/2;super([-1,i,0,1,i,0,-1,-i,0,1,-i,0,0,-1,i,0,1,i,0,-1,-i,0,1,-i,i,0,-1,i,0,1,-i,0,-1,-i,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],e,t),this.type="IcosahedronGeometry",this.parameters={radius:e,detail:t}}static fromJSON(e){return new oI(e.radius,e.detail)}},oO=class extends rz{constructor(e=1,t=32,i=16,r=0,s=2*Math.PI,a=0,o=Math.PI){super(),this.type="SphereGeometry",this.parameters={radius:e,widthSegments:t,heightSegments:i,phiStart:r,phiLength:s,thetaStart:a,thetaLength:o},t=Math.max(3,Math.floor(t)),i=Math.max(2,Math.floor(i));let l=Math.min(a+o,Math.PI),h=0,c=[],d=new iv,u=new iv,p=[],f=[],m=[],g=[];for(let p=0;p<=i;p++){let v=[],y=p/i,x=0;0==p&&0==a?x=.5/t:p==i&&l==Math.PI&&(x=-.5/t);for(let i=0;i<=t;i++){let l=i/t;d.x=-e*Math.cos(r+l*s)*Math.sin(a+y*o),d.y=e*Math.cos(a+y*o),d.z=e*Math.sin(r+l*s)*Math.sin(a+y*o),f.pu
3139sh(d.x,d.y,d.z),u.copy(d).normalize(),m.push(u.x,u.y,u.z),g.push(l+x,1-y),v.push(h++)}c.push(v)}for(let e=0;e<i;e++)for(let r=0;r<t;r++){let t=c[e][r+1],s=c[e][r],o=c[e+1][r],h=c[e+1][r+1];(0!==e||a>0)&&p.push(t,s,h),(e!==i-1||l<Math.PI)&&p.push(s,o,h)}this.setIndex(p),this.setAttribute("position",new rT(f,3)),this.setAttribute("normal",new rT(m,3)),this.setAttribute("uv",new rT(g,2))}static fromJSON(e){return new oO(e.radius,e.widthSegments,e.heightSegments,e.phiStart,e.phiLength,e.thetaStart,e.thetaLength)}},oR=class extends rz{constructor(e=1,t=.4,i=12,r=48,s=2*Math.PI){super(),this.type="TorusGeometry",this.parameters={radius:e,tube:t,radialSegments:i,tubularSegments:r,arc:s},i=Math.floor(i),r=Math.floor(r);let a=[],o=[],l=[],h=[],c=new iv,d=new iv,u=new iv;for(let a=0;a<=i;a++)for(let p=0;p<=r;p++){let f=p/r*s,m=a/i*Math.PI*2;d.x=(e+t*Math.cos(m))*Math.cos(f),d.y=(e+t*Math.cos(m))*Math.sin(f),d.z=t*Math.sin(m),o.push(d.x,d.y,d.z),c.x=e*Math.cos(f),c.y=e*Math.sin(f),u.subVectors(d,c).normalize(),l.push(u.x,u.y,u.z),h.push(p/r),h.push(a/i)}for(let e=1;e<=i;e++)for(let t=1;t<=r;t++){let i=(r+1)*e+t-1,s=(r+1)*(e-1)+t-1,o=(r+1)*(e-1)+t,l=(r+1)*e+t;a.push(i,s,l),a.push(s,o,l)}this.setIndex(a),this.setAttribute("position",new rT(o,3)),this.setAttribute("normal",new rT(l,3)),this.setAttribute("uv",new rT(h,2))}static fromJSON(e){return new oR(e.radius,e.tube,e.radialSegments,e.tubularSegments,e.arc)}},oL=class extends rz{constructor(e=1,t=.4,i=64,r=8,s=2,a=3){super(),this.type="TorusKnotGeometry",this.parameters={radius:e,tube:t,tubularSegments:i,radialSegments:r,p:s,q:a},i=Math.floor(i),r=Math.floor(r);let o=[],l=[],h=[],c=[],d=new iv,u=new iv,p=new iv,f=new iv,m=new iv,g=new iv,v=new iv;for(let o=0;o<=i;++o){let x=o/i*s*Math.PI*2;y(x,s,a,e,p),y(x+.01,s,a,e,f),g.subVectors(f,p),v.addVectors(f,p),m.crossVectors(g,v),v.crossVectors(m,g),m.normalize(),v.normalize();for(let e=0;e<=r;++e){let s=e/r*Math.PI*2,a=-t*Math.cos(s),f=t*Math.sin(s);d.x=p.x+(a*v.x+f*m.x),d.y=p.y+(a*v.y+f*m.y),d.z=p.z+(a*v.z+f*m.z),l.push(d.x,d.y,d.z),u.subVectors(d,p).normalize(),h.push(u.x,u.y,u.z),c.push(o/i),c.push(e/r)}}for(let e=1;e<=i;e++)for(let t=1;t<=r;t++){let i=(r+1)*(e-1)+(t-1),s=(r+1)*e+(t-1),a=(r+1)*e+t,l=(r+1)*(e-1)+t;o.push(i,s,l),o.push(s,a,l)}function y(e,t,i,r,s){let a=Math.cos(e),o=Math.sin(e),l=i/t*e,h=Math.cos(l);s.x=r*(2+h)*.5*a,s.y=r*(2+h)*o*.5,s.z=r*Math.sin(l)*.5}this.setIndex(o),this.setAttribute("position",new rT(l,3)),this.setAttribute("normal",new rT(h,3)),this.setAttribute("uv",new rT(c,2))}static fromJSON(e){return new oL(e.radius,e.tube,e.tubularSegments,e.radialSegments,e.p,e.q)}},oB=class extends r5{constructor(e){super(e),this.isRawShaderMaterial=!0,this.type="RawShaderMaterial"}};function oz(e,t,i){return oN(e)?new e.constructor(e.subarray(t,void 0!==i?i:e.length)):e.slice(t,i)}function oF(e,t,i){return e&&(i||e.constructor!==t)?"number"==typeof t.BYTES_PER_ELEMENT?new t(e):Array.prototype.slice.call(e):e}function oN(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function ok(e,t,i){let r=e.length,s=new e.constructor(r);for(let a=0,o=0;o!==r;++a){let r=i[a]*t;for(let i=0;i!==t;++i)s[o++]=e[r+i]}return s}function oU(e,t,i,r){let s=1,a=e[0];for(;void 0!==a&&void 0===a[r];)a=e[s++];if(void 0===a)return;let o=a[r];if(void 0!==o){if(Array.isArray(o))do void 0!==(o=a[r])&&(t.push(a.time),i.push.apply(i,o)),a=e[s++];while(void 0!==a);else if(void 0!==o.toArray)do void 0!==(o=a[r])&&(t.push(a.time),o.toArray(i,i.length)),a=e[s++];while(void 0!==a);else do void 0!==(o=a[r])&&(t.push(a.time),i.push(o)),a=e[s++];while(void 0!==a)}}var oV=class{constructor(e,t,i,r){this.parameterPositions=e,this._cachedIndex=0,this.resultBuffer=void 0!==r?r:new t.constructor(i),this.sampleValues=t,this.valueSize=i,this.settings=null,this.DefaultSettings_={}}evaluate(e){let t=this.parameterPositions,i=this._cachedIndex,r=t[i],s=t[i-1];e:{t:{let a;i:{r:if(!(e<r)){for(let a=i+2;;){if(void 0===r){if(e<s)break r;return i=t.length,this._cachedIndex=i,this.copySampleValue_(i-1)}if(i===a)break;if(s=r,e<(r=t[++i]))break t}a=t.length;break i}if(!(e>=s)){let o=t[1];e<o&&(i=2,s=o);for(let a=i-2;;){if(void 0===s)return this._cachedIndex=0,this.copySampleValue_(0);if(i===a)break;if(r=s,e>=(s=t[--i-1]))break t}a=i,i=0;break i}break e}for(;i<a;){let r=i+a>>>1;e<t[r]?a=r:i=r+1}if(r=t[i],void 0===(s=t[i-1]))return this._cachedIndex=0,this.copySampleValue_(0);if(void 0===r)return i=t.length,this._cachedIndex=i,this.copySampleValue_(i-1)}this._cachedIndex=i,this.intervalChanged_(i,s,r)}return this.interpolate_(i,s,e,r)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(e){let t=this.resultBuffer,i=this.sampleValues,r=this.valueSize,s=e*r;for(let e=0;e!==r;++e)t[e]=i[s+e];return t}interpolate_(){throw Error("call to abstract method")}intervalChanged_(){}},oj=class extends oV{constructor(e,t,i,r){super(e,t,i,r),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:2400,endingEnd:2400}}intervalChanged_(e,t,i){let r=this.parameterPositions,s=e-2,a=e+1,o=r[s],l=r[a];if(void 0===o)switch(this.getSettings_().endingStart){case 2401:s=e,o=2*t-i;break;case 2402:s=r.length-2,o=t+r[s]-r[s+1];break;default:s=e,o=i}if(void 0===l)switch(this.getSettings_().endingEnd){case 2401:a=e,l=2*i-t;break;case 2402:a=1,l=i+r[1]-r[0];break;default:a=e-1,l=t}let h=(i-t)*.5,c=this.valueSize;this._weightPrev=h/(t-o),this._weightNext=h/(l-i),this._offsetPrev=s*c,this._offsetNext=a*c}interpolate_(e,t,i,r){let s=this.resultBuffer,a=this.sampleValues,o=this.valueSize,l=e*o,h=l-o,c=this._offsetPrev,d=this._offsetNext,u=this._weightPrev,p=this._weightNext,f=(i-t)/(r-t),m=f*f,g=m*f,v=-u*g+2*u*m-u*f,y=(1+u)*g+(-1.5-2*u)*m+(-.5+u)*f+1,x=(-1-p)*g+(1.5+p)*m+.5*f,b=p*g-p*m;for(let e=0;e!==o;++e)s[e]=v*a[c+e]+y*a[h+e]+x*a[l+e]+b*a[d+e];return s}},oG=class extends oV{constructor(e,t,i,r){super(e,t,i,r)}interpolate_(e,t,i,r){let s=this.resultBuffer,a=this.sampleValues,o=this.valueSize,l=e*o,h=l-o,c=(i-t)/(r-t),d=1-c;for(let e=0;e!==o;++e)s[e]=a[h+e]*d+a[l+e]*c;return s}},oH=class extends oV{constructor(e,t,i,r){super(e,t,i,r)}interpolate_(e){return this.copySampleValue_(e-1)}},oW=class{constructor(e,t,i,r){if(void 0===e)throw Error("THREE.KeyframeTrack: track name is undefined");if(void 0===t||0===t.length)throw Error("THREE.KeyframeTrack: no keyframes in track named "+e);this.name=e,this.times=oF(t,this.TimeBufferType),this.values=oF(i,this.ValueBufferType),this.setInterpolation(r||this.DefaultInterpolation)}static toJSON(e){let t=e.constructor,i;if(t.toJSON!==this.toJSON)i=t.toJSON(e);else{i={name:e.name,times:oF(e.times,Array),values:oF(e.values,Array)};let t=e.getInterpolation();t!==e.DefaultInterpolation&&(i.interpolation=t)}return i.type=e.ValueTypeName,i}InterpolantFactoryMethodDiscrete(e){return new oH(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodLinear(e){return new oG(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodSmooth(e){return new oj(this.times,this.values,this.getValueSize(),e)}setInterpolation(e){let t;switch(e){case 2300:t=this.InterpolantFactoryMethodDiscrete;break;case 2301:t=this.InterpolantFactoryMethodLinear;break;case 2302:t=this.InterpolantFactoryMethodSmooth}if(void 0===t){let t="unsupported interpolation for "+this.ValueTypeName+" keyframe track named "+this.name;if(void 0===this.createInterpolant){if(e!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw Error(t)}return console.warn("THREE.KeyframeTrack:",t),this}return this.createInterpolant=t,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return 2300;case this.InterpolantFactoryMethodLinear:return 2301;case this.InterpolantFactoryMethodSmooth:return 2302}}getValueSize(){return this.values.length/this.times.length}shift(e){if(0!==e){let t=this.times;for(let i=0,r=t.length;i!==r;++i)t[i]+=e}return this}scale(e){if(1!==e){let t=this.times;for(let i=0,r=t.length;i!==r;++i)t[i]*=e}return this}trim(e,t){let i=this.times,r=i.length,s=0,a=r-1;for(;s!==r&&i[s]<e;)++s;for(;-1!==a&&i[a]>t;)--a;if(++a,0!==s||a!==r){s>=a&&(s=(a=Math.max(a,1))-1);let e=this.getValueSize();this.times=oz(i,s,a),this.values=oz(this.values,s*e,a*e)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),e=!1);let i=this.times,r=this.values,s=i.length;0===s&&(console.error("THREE.KeyframeTrack: Track is empty.",this),e=!1);let a=null;for(let t=0;t!==s;t++){let r=i[t];if("number"==typeof r&&isNaN(r)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,t,r),e=!1;break}if(null!==a&&a>r){console.error("THREE.KeyframeTrack: Out of order keys.",this,t,r,a),e=!1;break}a=r}if(void 0!==r&&oN(r))for(let t=0,i=r.length;t!==i;++t){let i=r[t];if(isNaN(i)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,t,i),e=!1;break}}return e}optimize(){let e=oz(this.times),t=oz(this.values),i=this.getValueSize(),r=2302===this.getInterpolation(),s=e.length-1,a=1;for(let o=1;o<s;++o){let s=!1,l=e[o];if(l!==e[o+1]&&(1!==o||l!==e[0])){if(r)s=!0;else{let e=o*i,r=e-i,a=e+i;for(let o=0;o!==i;++o){let i=t[e+o];if(i!==t[r+o]||i!==t[a+o]){s=!0;break}}}}if(s){if(o!==a){e[a]=e[o];let r=o*i,s=a*i;for(let e=0;e!==i;++e)t[s+e]=t[r+e]}++a}}if(s>0){e[a]=e[s];for(let e=s*i,r=a*i,o=0;o!==i;++o)t[r+o]=t[e+o];++a}return a!==e.length?(this.times=oz(e,0,a),this.values=oz(t,0,a*i)):(this.times=e,this.values=t),this}clone(){let e=oz(this.times,0),t=oz(this.values,0),i=new this.constructor(this.name,e,t);return i.createInterpolant=this.createInterpolant,i}};oW.prototype.TimeBufferType=Float32Array,oW.prototype.ValueBufferType=Float32Array,oW.prototype.DefaultInterpolation=2301;var oq=class extends oW{};oq.prototype.ValueTypeName="bool",oq.prototype.ValueBufferType=Array,oq.prototype.DefaultInterpolation=2300,oq.prototype.InterpolantFactoryMethodLinear=void 0,oq.prototype.InterpolantFactoryMethodSmooth=void 0;var oX=class extends oW{};oX.prototype.ValueTypeName="color";var oY=class extends oW{};oY.prototype.ValueTypeName="number";var oQ=class extends oV{constructor(e,t,i,r){super(e,t,i,r)}interpolate_(e,t,i,r){let s=this.resultBuffer,a=this.sampleValues,o=this.valueSize,l=(i-t)/(r-t),h=e*o;for(let e=h+o;h!==e;h+=4)ig.slerpFlat(s,0,a,h-o,a,h,l);return s}},oK=class extends oW{InterpolantFactoryMethodLinear(e){return new oQ(this.times,this.values,this.getValueSize(),e)}};oK.prototype.ValueTypeName="quaternion",oK.prototype.DefaultInterpolation=2301,oK.prototype.InterpolantFactoryMethodSmooth=void 0;var oZ=class extends oW{};oZ.prototype.ValueTypeName="string",oZ.prototype.ValueBufferType=Array,oZ.prototype.DefaultInterpolation=2300,oZ.prototype.InterpolantFactoryMethodLinear=void 0,oZ.prototype.InterpolantFactoryMethodSmooth=void 0;var oJ=class extends oW{};oJ.prototype.ValueTypeName="vector";var o$=class{constructor(e,t=-1,i,r=2500){this.name=e,this.tracks=i,this.duration=t,this.blendMode=r,this.uuid=tk(),this.duration<0&&this.resetDuration()}static parse(e){let t=[],i=e.tracks,r=1/(e.fps||1);for(let e=0,s=i.length;e!==s;++e)t.push((function(e){if(void 0===e.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");let t=function(e){switch(e.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return oY;
3139case"vector":case"vector2":case"vector3":case"vector4":return oJ;case"color":return oX;case"quaternion":return oK;case"bool":case"boolean":return oq;case"string":return oZ}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+e)}(e.type);if(void 0===e.times){let t=[],i=[];oU(e.keys,t,i,"value"),e.times=t,e.values=i}return void 0!==t.parse?t.parse(e):new t(e.name,e.times,e.values,e.interpolation)})(i[e]).scale(r));let s=new this(e.name,e.duration,t,e.blendMode);return s.uuid=e.uuid,s}static toJSON(e){let t=[],i=e.tracks,r={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode};for(let e=0,r=i.length;e!==r;++e)t.push(oW.toJSON(i[e]));return r}static CreateFromMorphTargetSequence(e,t,i,r){let s=t.length,a=[];for(let e=0;e<s;e++){let o=[],l=[];o.push((e+s-1)%s,e,(e+1)%s),l.push(0,1,0);let h=function(e){let t=e.length,i=Array(t);for(let e=0;e!==t;++e)i[e]=e;return i.sort(function(t,i){return e[t]-e[i]}),i}(o);o=ok(o,1,h),l=ok(l,1,h),r||0!==o[0]||(o.push(s),l.push(l[0])),a.push(new oY(".morphTargetInfluences["+t[e].name+"]",o,l).scale(1/i))}return new this(e,-1,a)}static findByName(e,t){let i=e;Array.isArray(e)||(i=e.geometry&&e.geometry.animations||e.animations);for(let e=0;e<i.length;e++)if(i[e].name===t)return i[e];return null}static CreateClipsFromMorphTargetSequences(e,t,i){let r={},s=/^([\w-]*?)([\d]+)$/;for(let t=0,i=e.length;t<i;t++){let i=e[t],a=i.name.match(s);if(a&&a.length>1){let e=a[1],t=r[e];t||(r[e]=t=[]),t.push(i)}}let a=[];for(let e in r)a.push(this.CreateFromMorphTargetSequence(e,r[e],t,i));return a}static parseAnimation(e,t){if(!e)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;let i=function(e,t,i,r,s){if(0!==i.length){let a=[],o=[];oU(i,a,o,r),0!==a.length&&s.push(new e(t,a,o))}},r=[],s=e.name||"default",a=e.fps||30,o=e.blendMode,l=e.length||-1,h=e.hierarchy||[];for(let e=0;e<h.length;e++){let s=h[e].keys;if(!(!s||0===s.length)){if(s[0].morphTargets){let e={},t;for(t=0;t<s.length;t++)if(s[t].morphTargets)for(let i=0;i<s[t].morphTargets.length;i++)e[s[t].morphTargets[i]]=-1;for(let i in e){let e=[],a=[];for(let r=0;r!==s[t].morphTargets.length;++r){let r=s[t];e.push(r.time),a.push(r.morphTarget===i?1:0)}r.push(new oY(".morphTargetInfluence["+i+"]",e,a))}l=e.length*a}else{let a=".bones["+t[e].name+"]";i(oJ,a+".position",s,"pos",r),i(oK,a+".quaternion",s,"rot",r),i(oJ,a+".scale",s,"scl",r)}}}return 0===r.length?null:new this(s,l,r,o)}resetDuration(){let e=this.tracks,t=0;for(let i=0,r=e.length;i!==r;++i){let e=this.tracks[i];t=Math.max(t,e.times[e.times.length-1])}return this.duration=t,this}trim(){for(let e=0;e<this.tracks.length;e++)this.tracks[e].trim(0,this.duration);return this}validate(){let e=!0;for(let t=0;t<this.tracks.length;t++)e=e&&this.tracks[t].validate();return e}optimize(){for(let e=0;e<this.tracks.length;e++)this.tracks[e].optimize();return this}clone(){let e=[];for(let t=0;t<this.tracks.length;t++)e.push(this.tracks[t].clone());return new this.constructor(this.name,this.duration,e,this.blendMode)}toJSON(){return this.constructor.toJSON(this)}},o0={enabled:!1,files:{},add:function(e,t){!1!==this.enabled&&(this.files[e]=t)},get:function(e){if(!1!==this.enabled)return this.files[e]}},o1=class{constructor(e,t,i){let r=this,s=!1,a=0,o=0,l,h=[];this.onStart=void 0,this.onLoad=e,this.onProgress=t,this.onError=i,this.itemStart=function(e){o++,!1===s&&void 0!==r.onStart&&r.onStart(e,a,o),s=!0},this.itemEnd=function(e){a++,void 0!==r.onProgress&&r.onProgress(e,a,o),a===o&&(s=!1,void 0!==r.onLoad&&r.onLoad())},this.itemError=function(e){void 0!==r.onError&&r.onError(e)},this.resolveURL=function(e){return l?l(e):e},this.setURLModifier=function(e){return l=e,this},this.addHandler=function(e,t){return h.push(e,t),this},this.removeHandler=function(e){let t=h.indexOf(e);return -1!==t&&h.splice(t,2),this},this.getHandler=function(e){for(let t=0,i=h.length;t<i;t+=2){let i=h[t],r=h[t+1];if(i.global&&(i.lastIndex=0),i.test(e))return r}return null}}},o2=new o1,o3=class{constructor(e){this.manager=void 0!==e?e:o2,this.crossOrigin="anonymous",this.withCredentials=!1,this.path="",this.resourcePath="",this.requestHeader={}}load(){}loadAsync(e,t){let i=this;return new Promise(function(r,s){i.load(e,r,t,s)})}parse(){}setCrossOrigin(e){return this.crossOrigin=e,this}setWithCredentials(e){return this.withCredentials=e,this}setPath(e){return this.path=e,this}setResourcePath(e){return this.resourcePath=e,this}setRequestHeader(e){return this.requestHeader=e,this}},o4={}
3139,o5=class extends Error{constructor(e,t){super(e),this.response=t}},o6=class extends o3{constructor(e){super(e)}load(e,t,i,r){void 0===e&&(e=""),void 0!==this.path&&(e=this.path+e),e=this.manager.resolveURL(e);let s=o0.get(e);if(void 0!==s)return this.manager.itemStart(e),setTimeout(()=>{t&&t(s),this.manager.itemEnd(e)},0),s;if(void 0!==o4[e]){o4[e].push({onLoad:t,onProgress:i,onError:r});return}o4[e]=[],o4[e].push({onLoad:t,onProgress:i,onError:r});let a=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"}),o=this.mimeType,l=this.responseType;fetch(a).then(t=>{if(200===t.status||0===t.status){if(0===t.status&&console.warn("THREE.FileLoader: HTTP Status 0 received."),typeof ReadableStream>"u"||void 0===t.body||void 0===t.body.getReader)return t;let i=o4[e],r=t.body.getReader(),s=t.headers.get("Content-Length")||t.headers.get("X-File-Size"),a=s?parseInt(s):0,o=0!==a,l=0;return new Response(new ReadableStream({start(e){(function t(){r.read().then(({done:r,value:s})=>{if(r)e.close();else{let r=new ProgressEvent("progress",{lengthComputable:o,loaded:l+=s.byteLength,total:a});for(let e=0,t=i.length;e<t;e++){let t=i[e];t.onProgress&&t.onProgress(r)}e.enqueue(s),t()}})})()}}))}throw new o5(`fetch for "${t.url}" responded with ${t.status}: ${t.statusText}`,t)}).then(e=>{switch(l){case"arraybuffer":return e.arrayBuffer();case"blob":return e.blob();case"document":return e.text().then(e=>new DOMParser().parseFromString(e,o));case"json":return e.json();default:if(void 0===o)return e.text();{let t=/charset="?([^;"\s]*)"?/i.exec(o),i=new TextDecoder(t&&t[1]?t[1].toLowerCase():void 0);return e.arrayBuffer().then(e=>i.decode(e))}}}).then(t=>{o0.add(e,t);let i=o4[e];delete o4[e];for(let e=0,r=i.length;e<r;e++){let r=i[e];r.onLoad&&r.onLoad(t)}}).catch(t=>{let i=o4[e];if(void 0===i)throw this.manager.itemError(e),t;delete o4[e];for(let e=0,r=i.length;e<r;e++){let r=i[e];r.onError&&r.onError(t)}this.manager.itemError(e)}).finally(()=>{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}},o8=class extends o3{constructor(e){super(e)}load(e,t,i,r){void 0!==this.path&&(e=this.path+e),e=this.manager.resolveURL(e);let s=this,a=o0.get(e);if(void 0!==a)return s.manager.itemStart(e),setTimeout(function(){t&&t(a),s.manager.itemEnd(e)},0),a;let o=t1("img");function l(){c(),o0.add(e,this),t&&t(this),s.manager.itemEnd(e)}function h(t){c(),r&&r(t),s.manager.itemError(e),s.manager.itemEnd(e)}function c(){o.removeEventListener("load",l,!1),o.removeEventListener("error",h,!1)}return o.addEventListener("load",l,!1),o.addEventListener("error",h,!1),"data:"!==e.slice(0,5)&&void 0!==this.crossOrigin&&(o.crossOrigin=this.crossOrigin),s.manager.itemStart(e),o.src=e,o}},o9=class extends o3{constructor(e){super(e)}load(e,t,i,r){let s=new ih,a=new o8(this.manager);return a.setCrossOrigin(this.crossOrigin),a.setPath(this.path),a.load(e,function(e){s.image=e,s.needsUpdate=!0,void 0!==t&&t(s)},i,r),s}},o7=class extends rl{constructor(e,t=1){super(),this.isLight=!0,this.type="Light",this.color=new ii(e),this.intensity=t}dispose(){}copy(e,t){return super.copy(e,t),this.color.copy(e.color),this.intensity=e.intensity,this}toJSON(e){let t=super.toJSON(e);return t.object.color=this.color.getHex(),t.object.intensity=this.intensity,void 0!==this.groundColor&&(t.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(t.object.distance=this.distance),void 0!==this.angle&&(t.object.angle=this.angle),void 0!==this.decay&&(t.object.decay=this.decay),void 0!==this.penumbra&&(t.object.penumbra=this.penumbra),void 0!==this.shadow&&(t.object.shadow=this.shadow.toJSON()),t}},le=class extends o7{constructor(e,t,i){super(e,i),this.isHemisphereLight=!0,this.type="HemisphereLight",this.position.copy(rl.DEFAULT_UP),this.updateMatrix(),this.groundColor=new ii(t)}copy(e,t){return super.copy(e,t),this.groundColor.copy(e.groundColor),this}},lt=new iX,li=new iv,lr=new iv,ls=class{constructor(e){this.camera=e,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new tQ(512,512),this.map=null,this.mapPass=null,this.matrix=new iX,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new so,this._frameExtents=new tQ(1,1),this._viewportCount=1,this._viewports=[new ic(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(e){let t=this.camera,i=this.matrix;li.setFromMatrixPosition(e.matrixWorld),t.position.copy(li),lr.setFromMatrixPosition(e.target.matrixWorld),t.lookAt(lr),t.updateMatrixWorld(),lt.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),this._frustum.setFromProjectionMatrix(lt),i.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),i.multiply(lt)}getViewport(e){return this._viewports[e]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(e){return this.camera=e.camera.clone(),this.bias=e.bias,this.radius=e.radius,this.mapSize.copy(e.mapSize),this}clone(){return new this.constructor().copy(this)}toJSON(){let e={};return 0!==this.bias&&(e.bias=this.bias),0!==this.normalBias&&(e.normalBias=this.normalBias),1!==this.radius&&(e.radiu
3139s=this.radius),(512!==this.mapSize.x||512!==this.mapSize.y)&&(e.mapSize=this.mapSize.toArray()),e.camera=this.camera.toJSON(!1).object,delete e.camera.matrix,e}},la=class extends ls{constructor(){super(new r8(50,1,.5,500)),this.isSpotLightShadow=!0,this.focus=1}updateMatrices(e){let t=this.camera,i=2*tN*e.angle*this.focus,r=this.mapSize.width/this.mapSize.height,s=e.distance||t.far;(i!==t.fov||r!==t.aspect||s!==t.far)&&(t.fov=i,t.aspect=r,t.far=s,t.updateProjectionMatrix()),super.updateMatrices(e)}copy(e){return super.copy(e),this.focus=e.focus,this}},ln=class extends o7{constructor(e,t,i=0,r=Math.PI/3,s=0,a=2){super(e,t),this.isSpotLight=!0,this.type="SpotLight",this.position.copy(rl.DEFAULT_UP),this.updateMatrix(),this.target=new rl,this.distance=i,this.angle=r,this.penumbra=s,this.decay=a,this.map=null,this.shadow=new la}get power(){return this.intensity*Math.PI}set power(e){this.intensity=e/Math.PI}dispose(){this.shadow.dispose()}copy(e,t){return super.copy(e,t),this.distance=e.distance,this.angle=e.angle,this.penumbra=e.penumbra,this.decay=e.decay,this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}},lo=new iX,ll=new iv,lh=new iv,lc=class extends ls{constructor(){super(new r8(90,1,.5,500)),this.isPointLightShadow=!0,this._frameExtents=new tQ(4,2),this._viewportCount=6,this._viewports=[new ic(2,1,1,1),new ic(0,1,1,1),new ic(3,1,1,1),new ic(1,1,1,1),new ic(3,0,1,1),new ic(1,0,1,1)],this._cubeDirections=[new iv(1,0,0),new iv(-1,0,0),new iv(0,0,1),new iv(0,0,-1),new iv(0,1,0),new iv(0,-1,0)],this._cubeUps=[new iv(0,1,0),new iv(0,1,0),new iv(0,1,0),new iv(0,1,0),new iv(0,0,1),new iv(0,0,-1)]}updateMatrices(e,t=0){let i=this.camera,r=this.matrix,s=e.distance||i.far;s!==i.far&&(i.far=s,i.updateProjectionMatrix()),ll.setFromMatrixPosition(e.matrixWorld),i.position.copy(ll),lh.copy(i.position),lh.add(this._cubeDirections[t]),i.up.copy(this._cubeUps[t]),i.lookAt(lh),i.updateMatrixWorld(),r.makeTranslation(-ll.x,-ll.y,-ll.z),lo.multiplyMatrices(i.projectionMatrix,i.matrixWorldInverse),this._frustum.setFromProjectionMatrix(lo)}},ld=class extends o7{constructor(e,t,i=0,r=2){super(e,t),this.isPointLight=!0,this.type="PointLight",this.distance=i,this.decay=r,this.shadow=new lc}get power(){return 4*this.intensity*Math.PI}set power(e){this.intensity=e/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(e,t){return super.copy(e,t),this.distance=e.distance,this.decay=e.decay,this.shadow=e.shadow.clone(),this}},lu=class extends ls{constructor(){super(new sw(-5,5,5,-5,.5,500)),this.isDirectionalLightShadow=!0}},lp=class extends o7{constructor(e,t){super(e,t),this.isDirectionalLight=!0,this.type="DirectionalLight",this.position.copy(rl.DEFAULT_UP),this.updateMatrix(),this.target=new rl,this.shadow=new lu}dispose(){this.shadow.dispose()}copy(e){return super.copy(e),this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}},lf=class extends rz{constructor(){super(),this.isInstancedBufferGeometry=!0,this.type="InstancedBufferGeometry",this.instanceCount=1/0}copy(e){return super.copy(e),this.instanceCount=e.instanceCount,this}toJSON(){let e=super.toJSON();return e.instanceCount=this.instanceCount,e.isInstancedBufferGeometry=!0,e}},lm=class extends o3{constructor(e){super(e)}load(e,t,i,r){let s=this,a=new o6(s.manager);a.setPath(s.path),a.setRequestHeader(s.requestHeader),a.setWithCredentials(s.withCredentials),a.load(e,function(i){try{t(s.parse(JSON.parse(i)))}catch(t){r?r(t):console.error(t),s.manager.itemError(e)}},i,r)}parse(e){let t={},i={};function r(e,r){if(void 0!==t[r])return t[r];let s=e.interleavedBuffers[r],a=function(e,t){if(void 0!==i[t])return i[t];let r=new Uint32Array(e.arrayBuffers[t]).buffer;return i[t]=r,r}(e,s.buffer),o=new nw(t0(s.type,a),s.stride);return o.uuid=s.uuid,t[r]=o,o}let s=e.isInstancedBufferGeometry?new lf:new rz,a=e.data.index;if(void 0!==a){let e=t0(a.type,a.array);s.setIndex(new rM(e,1))}let o=e.data.attributes;for(let t in o){let i=o[t],a;if(i.isInterleavedBufferAttribute)a=new n_(r(e.data,i.data),i.itemSize,i.offset,i.normalized);else{let e=t0(i.type,i.array);a=new(i.isInstancedBufferAttribute?nP:rM)(e,i.itemSize,i.normalized)}void 0!==i.name&&(a.name=i.name),void 0!==i.usage&&a.setUsage(i.usage),void 0!==i.updateRange&&(a.updateRange.offset=i.updateRange.offset,a.updateRange.count=i.updateRange.count),s.setAttribute(t,a)}let l=e.data.morphAttributes;if(l)for(let t in l){let i=l[t],a=[];for(let t=0,s=i.length;t<s;t++){let s=i[t],o;o=s.isInterleavedBufferAttribute?new n_(r(e.data,s.data),s.itemSize,s.offset,s.normalized):new rM(t0(s.type,s.array),s.itemSize,s.normalized),void 0!==s.name&&(o.name=s.name),a.push(o)}s.morphAttributes[t]=a}e.data.morphTargetsRelative&&(s.morphTargetsRelative=!0);let h=e.data.groups||e.data.drawcalls||e.data.offsets;if(void 0!==h)for(let e=0,t=h.length;e!==t;++e){let t=h[e];s.addGroup(t.start,t.count,t.materialIndex)}let c=e.data.boundingSphere;if(void 0!==c){let e=new iv;void 0!==c.center&&e.fromArray(c.center),s.boundingSphere=new iN(e,c.radius)}return e.name&&(s.name=e.name),e.userData&&(s.userData=e.userData),s}},lg=class{constructor(e=!0){this.autoStart=e,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=lv(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let e=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){let t=lv();e=(t-this.oldTime)/1e3,this.oldTime=t,this.elapsedTime+=e}return e}};function lv(){return(typeof performance>"u"?Date:performance).now()}var ly=class{constructor(e,t,i){let r,s,a;switch(this.binding=e,this.valueSize=i,t){case"quaternion":r=this._slerp,s=this._slerpAdditive,a=this._setAdditiveIdentityQuaternion,this.buffer=new Float64Array(6*i),this._workIndex=5;break;case"string":case"bool":r=this._select,s=this._select,a=this._setAdditiveIdentityOther,this.buffer=Array(5*i);break;default:r=this._lerp,s=this._lerpAdditive,a=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(5*i)}this._mixBufferRegion=r,this._mixBufferRegionAdditive=s,this._setIdentity=a,this._origIndex=3,this._addIndex=4,this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,this.useCount=0,this.referenceCount=0}accumulate(e,t){let i=this.buffer,r=this.valueSize,s=e*r+r,a=this.cumulativeWeight;if(0===a){for(let e=0;e!==r;++e)i[s+e]=i[e];a=t}else{a+=t;let e=t/a;this._mixBufferRegion(i,s,0,e,r)}this.cumulativeWeight=a}accumulateAdditive(e){let t=this.buffer,i=this.valueSize,r=i*this._addIndex;0===this.cumulativeWeightAdditive&&this._setIdentity(),this._mixBufferRegionAdditive(t,r,0,e,i),this.cumulativeWeightAdditive+=e}apply(e){let t=this.valueSize,i=this.buffer,r=e*t+t,s=this.cumulativeWeight,a=this.cumulativeWeightAdditive,o=this.binding;if(this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,s<1){let e=t*this._origIndex;this._mixBufferRegion(i,r,e,1-s,t)}a>0&&this._mixBufferRegionAdditive(i,r,this._addIndex*t,1,t);for(let e=t,s=t+t;e!==s;++e)if(i[e]!==i[e+t]){o.setValue(i,r);break}}saveOriginalState(){let e=this.binding,t=this.buffer,i=this.valueSize,r=i*this._origIndex;e.getValue(t,r);for(let e=i;e!==r;++e)t[e]=t[r+e%i];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){let e=3*this.valueSize;this.binding.setValue(this.buffer,e)}_setAdditiveIdentityNumeric(){let e=this._addIndex*this.valueSize,t=e+this.valueSize;
3139for(let i=e;i<t;i++)this.buffer[i]=0}_setAdditiveIdentityQuaternion(){this._setAdditiveIdentityNumeric(),this.buffer[this._addIndex*this.valueSize+3]=1}_setAdditiveIdentityOther(){let e=this._origIndex*this.valueSize,t=this._addIndex*this.valueSize;for(let i=0;i<this.valueSize;i++)this.buffer[t+i]=this.buffer[e+i]}_select(e,t,i,r,s){if(r>=.5)for(let r=0;r!==s;++r)e[t+r]=e[i+r]}_slerp(e,t,i,r){ig.slerpFlat(e,t,e,t,e,i,r)}_slerpAdditive(e,t,i,r,s){let a=this._workIndex*s;ig.multiplyQuaternionsFlat(e,a,e,t,e,i),ig.slerpFlat(e,t,e,t,e,a,r)}_lerp(e,t,i,r,s){let a=1-r;for(let o=0;o!==s;++o){let s=t+o;e[s]=e[s]*a+e[i+o]*r}}_lerpAdditive(e,t,i,r,s){for(let a=0;a!==s;++a){let s=t+a;e[s]=e[s]+e[i+a]*r}}},lx="\\[\\]\\.:\\/",lb=RegExp("["+lx+"]","g"),lw="[^"+lx+"]",lS="[^"+lx.replace("\\.","")+"]",l_=RegExp("^"+/((?:WC+[\/:])*)/.source.replace("WC",lw)+/(WCOD+)?/.source.replace("WCOD",lS)+/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",lw)+/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",lw)+"$"),lA=["material","materials","bones","map"],lM=class{constructor(e,t,i){let r=i||lE.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,r)}getValue(e,t){this.bind();let i=this._targetGroup.nCachedObjects_,r=this._bindings[i];void 0!==r&&r.getValue(e,t)}setValue(e,t){let i=this._bindings;for(let r=this._targetGroup.nCachedObjects_,s=i.length;r!==s;++r)i[r].setValue(e,t)}bind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].bind()}unbind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].unbind()}},lE=class{constructor(e,t,i){this.path=t,this.parsedPath=i||lE.parseTrackName(t),this.node=lE.findNode(e,this.parsedPath.nodeName)||e,this.rootNode=e,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(e,t,i){return e&&e.isAnimationObjectGroup?new lE.Composite(e,t,i):new lE(e,t,i)}static sanitizeNodeName(e){return e.replace(/\s/g,"_").replace(lb,"")}static parseTrackName(e){let t=l_.exec(e);if(null===t)throw Error("PropertyBinding: Cannot parse trackName: "+e);let i={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},r=i.nodeName&&i.nodeName.lastIndexOf(".");if(void 0!==r&&-1!==r){let e=i.nodeName.substring(r+1);-1!==lA.indexOf(e)&&(i.nodeName=i.nodeName.substring(0,r),i.objectName=e)}if(null===i.propertyName||0===i.propertyName.length)throw Error("PropertyBinding: can not parse propertyName from trackName: "+e);return i}static findNode(e,t){if(void 0===t||""===t||"."===t||-1===t||t===e.name||t===e.uuid)return e;if(e.skeleton){let i=e.skeleton.getBoneByName(t);if(void 0!==i)return i}if(e.children){let i=function(e){for(let r=0;r<e.length;r++){let s=e[r];if(s.name===t||s.uuid===t)return s;let a=i(s.children);if(a)return a}return null},r=i(e.children);if(r)return r}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(e,t){e[t]=this.targetObject[this.propertyName]}_getValue_array(e,t){let i=this.resolvedProperty;for(let r=0,s=i.length;r!==s;++r)e[t++]=i[r]}_getValue_arrayElement(e,t){e[t]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(e,t){this.resolvedProperty.toArray(e,t)}_setValue_direct(e,t){this.targetObject[this.propertyName]=e[t]}_setValue_direct_setNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(e,t){let i=this.resolvedProperty;for(let r=0,s=i.length;r!==s;++r)i[r]=e[t++]}_setValue_array_setNeedsUpdate(e,t){let i=this.resolvedProperty;for(let r=0,s=i.length;r!==s;++r)i[r]=e[t++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(e,t){let i=this.resolvedProperty;for(let r=0,s=i.length;r!==s;++r)i[r]=e[t++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(e,t){this.resolvedProperty[this.propertyIndex]=e[t]}_setValue_arrayElement_setNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(e,t){this.resolvedProperty.fromArray(e,t)}_setValue_fromArray_setNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.needsUpdate=!0}
3139_setValue_fromArray_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(e,t){this.bind(),this.getValue(e,t)}_setValue_unbound(e,t){this.bind(),this.setValue(e,t)}bind(){let e=this.node,t=this.parsedPath,i=t.objectName,r=t.propertyName,s=t.propertyIndex;if(e||(e=lE.findNode(this.rootNode,t.nodeName)||this.rootNode,this.node=e),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!e){console.error("THREE.PropertyBinding: Trying to update node for track: "+this.path+" but it wasn't found.");return}if(i){let r=t.objectIndex;switch(i){case"materials":if(!e.material){console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!e.material.materials){console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.",this);return}e=e.material.materials;break;case"bones":if(!e.skeleton){console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.",this);return}e=e.skeleton.bones;for(let t=0;t<e.length;t++)if(e[t].name===r){r=t;break}break;case"map":if("map"in e){e=e.map;break}if(!e.material){console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!e.material.map){console.error("THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.",this);return}e=e.material.map;break;default:if(void 0===e[i]){console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.",this);return}e=e[i]}if(void 0!==r){if(void 0===e[r]){console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.",this,e);return}e=e[r]}}let a=e[r];if(void 0===a){console.error("THREE.PropertyBinding: Trying to update property for track: "+t.nodeName+"."+r+" but it wasn't found.",e);return}let o=this.Versioning.None;this.targetObject=e,void 0!==e.needsUpdate?o=this.Versioning.NeedsUpdate:void 0!==e.matrixWorldNeedsUpdate&&(o=this.Versioning.MatrixWorldNeedsUpdate);let l=this.BindingType.Direct;if(void 0!==s){if("morphTargetInfluences"===r){if(!e.geometry){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.",this);return}if(!e.geometry.morphAttributes){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.",this);return}void 0!==e.morphTargetDictionary[s]&&(s=e.morphTargetDictionary[s])}l=this.BindingType.ArrayElement,this.resolvedProperty=a,this.propertyIndex=s}else void 0!==a.fromArray&&void 0!==a.toArray?(l=this.BindingType.HasFromToArray,this.resolvedProperty=a):Array.isArray(a)?(l=this.BindingType.EntireArray,this.resolvedProperty=a):this.propertyName=r;this.getValue=this.GetterByBindingType[l],this.setValue=this.SetterByBindingTypeAndVersioning[l][o]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}};lE.Composite=lM,lE.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},lE.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},lE.prototype.GetterByBindingType=[lE.prototype._getValue_direct,lE.prototype._getValue_array,lE.prototype._getValue_arrayElement,lE.prototype._getValue_toArray],lE.prototype.SetterByBindingTypeAndVersioning=[[lE.prototype._setValue_direct,lE.prototype._setValue_direct_setNeedsUpdate,lE.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[lE.prototype._setValue_array,lE.prototype._setValue_array_setNeedsUpdate,lE.prototype._setValue_array_setMatrixWorldNeedsUpdate],[lE.prototype._setValue_arrayElement,lE.prototype._setValue_arrayElement_setNeedsUpdate,lE.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[lE.prototype._setValue_fromArray,lE.prototype._setValue_fromArray_setNeedsUpdate,lE.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]];var lC=class{constructor(e,t,i=null,r=t.blendMode){this._mixer=e,this._clip=t,this._localRoot=i,this.blendMode=r;let s=t.tracks,a=s.length,o=Array(a),l={endingStart:2400,endingEnd:2400};for(let e=0;e!==a;++e){let t=s[e].createInterpolant(null);o[e]=t,t.settings=l}this._interpolantSettings=l,this._interpolants=o,this._propertyBindings=Array(a),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(e){return this._startTime=e,this}setLoop(e,t){return this.loop=e,this.repetitions=t,this}setEffectiveWeight(e){return this.weight=e,this._effectiveWeight=this.enabled?e:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}
3139fadeIn(e){return this._scheduleFading(e,0,1)}fadeOut(e){return this._scheduleFading(e,1,0)}crossFadeFrom(e,t,i){if(e.fadeOut(t),this.fadeIn(t),i){let i=this._clip.duration,r=e._clip.duration;e.warp(1,r/i,t),this.warp(i/r,1,t)}return this}crossFadeTo(e,t,i){return e.crossFadeFrom(this,t,i)}stopFading(){let e=this._weightInterpolant;return null!==e&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}setEffectiveTimeScale(e){return this.timeScale=e,this._effectiveTimeScale=this.paused?0:e,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(e){return this.timeScale=this._clip.duration/e,this.stopWarping()}syncWith(e){return this.time=e.time,this.timeScale=e.timeScale,this.stopWarping()}halt(e){return this.warp(this._effectiveTimeScale,0,e)}warp(e,t,i){let r=this._mixer,s=r.time,a=this.timeScale,o=this._timeScaleInterpolant;null===o&&(o=r._lendControlInterpolant(),this._timeScaleInterpolant=o);let l=o.parameterPositions,h=o.sampleValues;return l[0]=s,l[1]=s+i,h[0]=e/a,h[1]=t/a,this}stopWarping(){let e=this._timeScaleInterpolant;return null!==e&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(e,t,i,r){if(!this.enabled){this._updateWeight(e);return}let s=this._startTime;if(null!==s){let r=(e-s)*i;r<0||0===i?t=0:(this._startTime=null,t=i*r)}t*=this._updateTimeScale(e);let a=this._updateTime(t),o=this._updateWeight(e);if(o>0){let e=this._interpolants,t=this._propertyBindings;if(2501===this.blendMode)for(let i=0,r=e.length;i!==r;++i)e[i].evaluate(a),t[i].accumulateAdditive(o);else for(let i=0,s=e.length;i!==s;++i)e[i].evaluate(a),t[i].accumulate(r,o)}}_updateWeight(e){let t=0;if(this.enabled){t=this.weight;let i=this._weightInterpolant;if(null!==i){let r=i.evaluate(e)[0];t*=r,e>i.parameterPositions[1]&&(this.stopFading(),0===r&&(this.enabled=!1))}}return this._effectiveWeight=t,t}_updateTimeScale(e){let t=0;if(!this.paused){t=this.timeScale;let i=this._timeScaleInterpolant;null!==i&&(t*=i.evaluate(e)[0],e>i.parameterPositions[1]&&(this.stopWarping(),0===t?this.paused=!0:this.timeScale=t))}return this._effectiveTimeScale=t,t}_updateTime(e){let t=this._clip.duration,i=this.loop,r=this.time+e,s=this._loopCount,a=2202===i;if(0===e)return -1===s?r:a&&(1&s)==1?t-r:r;if(2200===i){-1===s&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(r>=t)r=t;else if(r<0)r=0;else{this.time=r;break e}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=r,this._mixer.dispatchEvent({type:"finished",action:this,direction:e<0?-1:1})}}else{if(-1===s&&(e>=0?(s=0,this._setEndings(!0,0===this.repetitions,a)):this._setEndings(0===this.repetitions,!0,a)),r>=t||r<0){let i=Math.floor(r/t);r-=t*i,s+=Math.abs(i);let o=this.repetitions-s;if(o<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,r=e>0?t:0,this.time=r,this._mixer.dispatchEvent({type:"finished",action:this,direction:e>0?1:-1});else{if(1===o){let t=e<0;this._setEndings(t,!t,a)}else this._setEndings(!1,!1,a);this._loopCount=s,this.time=r,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:i})}}else this.time=r;if(a&&(1&s)==1)return t-r}return r}_setEndings(e,t,i){let r=this._interpolantSettings;i?(r.endingStart=2401,r.endingEnd=2401):(e?r.endingStart=this.zeroSlopeAtStart?2401:2400:r.endingStart=2402,t?r.endingEnd=this.zeroSlopeAtEnd?2401:2400:r.endingEnd=2402)}_scheduleFading(e,t,i){let r=this._mixer,s=r.time,a=this._weightInterpolant;null===a&&(a=r._lendControlInterpolant(),this._weightInterpolant=a);let o=a.parameterPositions,l=a.sampleValues;return o[0]=s,l[0]=t,o[1]=s+e,l[1]=i,this}},lT=new Float32Array(1),lP=class extends tL{constructor(e){super(),this._root=e,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(e,t){let i=e._localRoot||this._root,r=e._clip.tracks,s=r.length,a=e._propertyBindings,o=e._interpolants,l=i.uuid,h=this._bindingsByRootAndName,c=h[l];void 0===c&&(c={},h[l]=c);for(let e=0;e!==s;++e){let s=r[e],h=s.name,d=c[h];if(void 0!==d)++d.referenceCount,a[e]=d;else{if(void 0!==(d=a[e])){null===d._cacheIndex&&(++d.referenceCount,this._addInactiveBinding(d,l,h));continue}let r=t&&t._propertyBindings[e].binding.parsedPath;d=new ly(lE.create(i,h,r),s.ValueTypeName,s.getValueSize()),++d.referenceCount,this._addInactiveBinding(d,l,h),a[e]=d}o[e].resultBuffer=d.buffer}}_activateAction(e){if(!this._isActiveAction(e)){if(null===e._cacheIndex){let t=(e._localRoot||this._root).uuid,i=e._clip.uuid,r
vendor: 5,830 bytes, line 3139
3139=this._actionsByClip[i];this._bindAction(e,r&&r.knownActions[0]),this._addInactiveAction(e,i,t)}let t=e._propertyBindings;for(let e=0,i=t.length;e!==i;++e){let i=t[e];0==i.useCount++&&(this._lendBinding(i),i.saveOriginalState())}this._lendAction(e)}}_deactivateAction(e){if(this._isActiveAction(e)){let t=e._propertyBindings;for(let e=0,i=t.length;e!==i;++e){let i=t[e];0==--i.useCount&&(i.restoreOriginalState(),this._takeBackBinding(i))}this._takeBackAction(e)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;let e=this;this.stats={actions:{get total(){return e._actions.length},get inUse(){return e._nActiveActions}},bindings:{get total(){return e._bindings.length},get inUse(){return e._nActiveBindings}},controlInterpolants:{get total(){return e._controlInterpolants.length},get inUse(){return e._nActiveControlInterpolants}}}}_isActiveAction(e){let t=e._cacheIndex;return null!==t&&t<this._nActiveActions}_addInactiveAction(e,t,i){let r=this._actions,s=this._actionsByClip,a=s[t];if(void 0===a)a={knownActions:[e],actionByRoot:{}},e._byClipCacheIndex=0,s[t]=a;else{let t=a.knownActions;e._byClipCacheIndex=t.length,t.push(e)}e._cacheIndex=r.length,r.push(e),a.actionByRoot[i]=e}_removeInactiveAction(e){let t=this._actions,i=t[t.length-1],r=e._cacheIndex;i._cacheIndex=r,t[r]=i,t.pop(),e._cacheIndex=null;let s=e._clip.uuid,a=this._actionsByClip,o=a[s],l=o.knownActions,h=l[l.length-1],c=e._byClipCacheIndex;h._byClipCacheIndex=c,l[c]=h,l.pop(),e._byClipCacheIndex=null;let d=o.actionByRoot,u=(e._localRoot||this._root).uuid;delete d[u],0===l.length&&delete a[s],this._removeInactiveBindingsForAction(e)}_removeInactiveBindingsForAction(e){let t=e._propertyBindings;for(let e=0,i=t.length;e!==i;++e){let i=t[e];0==--i.referenceCount&&this._removeInactiveBinding(i)}}_lendAction(e){let t=this._actions,i=e._cacheIndex,r=this._nActiveActions++,s=t[r];e._cacheIndex=r,t[r]=e,s._cacheIndex=i,t[i]=s}_takeBackAction(e){let t=this._actions,i=e._cacheIndex,r=--this._nActiveActions,s=t[r];e._cacheIndex=r,t[r]=e,s._cacheIndex=i,t[i]=s}_addInactiveBinding(e,t,i){let r=this._bindingsByRootAndName,s=this._bindings,a=r[t];void 0===a&&(a={},r[t]=a),a[i]=e,e._cacheIndex=s.length,s.push(e)}_removeInactiveBinding(e){let t=this._bindings,i=e.binding,r=i.rootNode.uuid,s=i.path,a=this._bindingsByRootAndName,o=a[r],l=t[t.length-1],h=e._cacheIndex;l._cacheIndex=h,t[h]=l,t.pop(),delete o[s],0===Object.keys(o).length&&delete a[r]}_lendBinding(e){let t=this._bindings,i=e._cacheIndex,r=this._nActiveBindings++,s=t[r];e._cacheIndex=r,t[r]=e,s._cacheIndex=i,t[i]=s}_takeBackBinding(e){let t=this._bindings,i=e._cacheIndex,r=--this._nActiveBindings,s=t[r];e._cacheIndex=r,t[r]=e,s._cacheIndex=i,t[i]=s}_lendControlInterpolant(){let e=this._controlInterpolants,t=this._nActiveControlInterpolants++,i=e[t];return void 0===i&&((i=new oG(new Float32Array(2),new Float32Array(2),1,lT)).__cacheIndex=t,e[t]=i),i}_takeBackControlInterpolant(e){let t=this._controlInterpolants,i=e.__cacheIndex,r=--this._nActiveControlInterpolants,s=t[r];e.__cacheIndex=r,t[r]=e,s.__cacheIndex=i,t[i]=s}clipAction(e,t,i){let r=t||this._root,s=r.uuid,a="string"==typeof e?o$.findByName(r,e):e,o=null!==a?a.uuid:e,l=this._actionsByClip[o],h=null;if(void 0===i&&(i=null!==a?a.blendMode:2500),void 0!==l){let e=l.actionByRoot[s];if(void 0!==e&&e.blendMode===i)return e;h=l.knownActions[0],null===a&&(a=h._clip)}if(null===a)return null;let c=new lC(this,a,t,i);return this._bindAction(c,h),this._addInactiveAction(c,o,s),c}existingAction(e,t){let i=t||this._root,r=i.uuid,s="string"==typeof e?o$.findByName(i,e):e,a=s?s.uuid:e,o=this._actionsByClip[a];return void 0!==o&&o.actionByRoot[r]||null}stopAllAction(){let e=this._actions,t=this._nActiveActions;for(let i=t-1;i>=0;--i)e[i].stop();return this}update(e){e*=this.timeScale;let t=this._actions,i=this._nActiveActions,r=this.time+=e,s=Math.sign(e),a=this._accuIndex^=1;for(let o=0;o!==i;++o)t[o]._update(r,e,s,a);let o=this._bindings,l=this._nActiveBindings;for(let e=0;e!==l;++e)o[e].apply(a);return this}setTime(e){this.time=0;for(let e=0;e<this._actions.length;e++)this._actions[e].time=0;return this.update(e)}getRoot(){return this._root}uncacheClip(e){let t=this._actions,i=e.uuid,r=this._actionsByClip,s=r[i];if(void 0!==s){let e=s.knownActions;for(let i=0,r=e.length;i!==r;++i){let r=e[i];this._deactivateAction(r);let s=r._cacheIndex,a=t[t.length-1];r._cacheIndex=null,r._byClipCacheIndex=null,a._cacheIndex=s,t[s]=a,t.pop(),this._removeInactiveBindingsForAction(r)}delete r[i]}}uncacheRoot(e){let t=e.uuid,i=this._actionsByClip;for(let e in i){let r=i[e].actionByRoot[t];void 0!==r&&(this._deactivateAction(r),this._removeInactiveAction(r))}let r=this._bindingsByRootAndName[t];if(void 0!==r)for(let e in r){let t=r[e];t.restoreOriginalState(),this._removeInactiveBinding(t)}}uncacheAction(e,t){let i=this.existingAction(e,t);null!==i&&(this._deactivateAction(i),this._removeInactiveAction(i))}},lD=class{constructor(e){this.value=e}clone(){return new lD(void 0===this.value.clone?this.value:this.value.clone())}},lI=class{constructor(e,t,i=0,r=1/0){this.ray=new iq(e,t),this.near=i,this.far=r,this.camera=null,this.layers=new i4,this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}}}set(e,t){this.ray.set(e,t)}setFromCamera(e,t){t.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(t.matrixWorld),this.ray.direction.set(e.x,e.y,.5).unproject(t).sub(this.ray.origin).normalize(),this.camera=t):t.isOrthographicCamera?(this.ray.origin.set(e.x,e.y,(t.near+t.far)/(t.near-t.far)).unproject(t),this.ray.direction.set(0,0,-1).transformDirection(t.matrixWorld),this.camera=t):console.error("THREE.Raycaster:
3139Unsupported camera type: "+t.type)}intersectObject(e,t=!0,i=[]){return lR(e,this,i,t),i.sort(lO),i}intersectObjects(e,t=!0,i=[]){for(let r=0,s=e.length;r<s;r++)lR(e[r],this,i,t);return i.sort(lO),i}};function lO(e,t){return e.distance-t.distance}function lR(e,t,i,r){if(e.layers.test(t.layers)&&e.raycast(t,i),!0===r){let r=e.children;for(let e=0,s=r.length;e<s;e++)lR(r[e],t,i,!0)}}var lL=class{constructor(e=1,t=0,i=0){return this.radius=e,this.phi=t,this.theta=i,this}set(e,t,i){return this.radius=e,this.phi=t,this.theta=i,this}copy(e){return this.radius=e.radius,this.phi=e.phi,this.theta=e.theta,this}makeSafe(){return this.phi=Math.max(1e-6,Math.min(Math.PI-1e-6,this.phi)),this}setFromVector3(e){return this.setFromCartesianCoords(e.x,e.y,e.z)}setFromCartesianCoords(e,t,i){return this.radius=Math.sqrt(e*e+t*t+i*i),0===this.radius?(this.theta=0,this.phi=0):(this.theta=Math.atan2(e,i),this.phi=Math.acos(tU(t/this.radius,-1,1))),this}clone(){return new this.constructor().copy(this)}},lB=new tQ,lz=class{constructor(e=new tQ(1/0,1/0),t=new tQ(-1/0,-1/0)){this.isBox2=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromPoints(e){this.makeEmpty();for(let t=0,i=e.length;t<i;t++)this.expandByPoint(e[t]);return this}setFromCenterAndSize(e,t){let i=lB.copy(t).multiplyScalar(.5);return this.min.copy(e).sub(i),this.max.copy(e).add(i),this}clone(){return new this.constructor().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y}getCenter(e){return this.isEmpty()?e.set(0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0):e.subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}containsPoint(e){return!(e.x<this.min.x||e.x>this.max.x||e.y<this.min.y||e.y>this.max.y)}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(e){return!(e.max.x<this.min.x||e.min.x>this.max.x||e.max.y<this.min.y||e.min.y>this.max.y)}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return lB.copy(e).clamp(this.min,this.max).sub(e).length()}intersect(e){return this.min.max(e.min),this.max.min(e.max),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}},lF=new iv,lN=new iv,lk=class{constructor(e=new iv,t=new iv){this.start=e,this.end=t}set(e,t){return this.start.copy(e),this.end.copy(t),this}copy(e){return this.start.copy(e.start),this.end.copy(e.end),this}getCenter(e){return e.addVectors(this.start,this.end).multiplyScalar(.5)}delta(e){return e.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(e,t){return this.delta(t).multiplyScalar(e).add(this.start)}closestPointToPointParameter(e,t){lF.subVectors(e,this.start),lN.subVectors(this.end,this.start);let i=lN.dot(lN),r=lN.dot(lF)/i;return t&&(r=tU(r,0,1)),r}closestPointToPoint(e,t,i){let r=this.closestPointToPointParameter(e,t);return this.delta(i).multiplyScalar(r).add(this.start)}applyMatrix4(e){return this.start.applyMatrix4(e),this.end.applyMatrix4(e),this}equals(e){return e.start.equals(this.start)&&e.end.equals(this.end)}clone(){return new this.constructor().copy(this)}},lU=new iv,lV=class extends rl{constructor(e,t){super(),this.light=e,this.matrix=e.matrixWorld,this.matrixAutoUpdate=!1,this.color=t,this.type="SpotLightHelper";let i=new rz,r=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1];for(let e=0,t=1;e<32;e++,t++){let i=e/32*Math.PI*2,s=t/32*Math.PI*2;r.push(Math.cos(i),Math.sin(i),1,Math.cos(s),Math.sin(s),1)}i.setAttribute("position",new rT(r,3));let s=new nz({fog:!1,toneMapped:!1});this.cone=new nW(i,s),this.add(this.cone),this.update()}dispose(){this.cone.geometry.dispose(),this.cone.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),this.light.target.updateWorldMatrix(!0,!1);let e=this.light.distance?this.light.distance:1e3,t=e*Math.tan(this.light.angle);this.cone.scale.set(t,t,e),lU.setFromMatrixPosition(this.light.target.matrixWorld),this.cone.lookAt(lU),void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)}},lj=class extends rK{constructor(e,t,i){super(new oO(t,4,2),new rS({wireframe:!0,fog:!1,toneMapped:!1})),this.light=e,this.color=i,this.type="PointLightHelper",this.matrix=this.light.matrixWorld,this.matrixAutoUpdate=!1,this.update()}dispose(){this.geometry.dispose(),this.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),void 0!==this.color?this.material.color.set(this.color):this.material.color.copy(this.light.color)}},lG=new iv,lH=new iv,lW=new iv,lq=class extends rl{constructor(e,t,i){super(),this.light=e,this.matrix=e.matrixWorld,this.matrixAutoUpdate=!1,this.color=i,this.type="DirectionalLightHelper",void 0===t&&(t=1);let r=new rz;r.setAttribute("position",new rT([-t,t,0,t,t,0,t,-t,0,-t,-t,0,-t,t,0],3));let s=new nz({fog:!1,toneMapped:!1});this.lightPlane=new nj(r,s),this.add(this.lightPlane),(r=new rz).setAttribute("position",new rT([0,0,0,0,0,1],3)),this.targetLine=new nj(r,s),this.add(this.targetLine),this.update()}dispose(){this.lightPlane.geometry.dispose(),this.lightPlane.material.dispose(),this.targetLine.geometry.dispose(),this.targetLine.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),this.light.target.updateWorldMatrix(!0,!1),lG.setFromMatrixPosition(this.light.matrixWorld),lH.setFromMatrixPosition(this.light.target.matrixWorld),lW.subVectors(lH,lG),this.lightPlane.lookAt(lH),void 0!==this.color?(this.lightPlane.material.color.set(this.color),this.targetLine.material.color.set(this.color)):(this.lightPlane.material.color.copy(this.light.color),this.targetLine.material.color.copy(this.light.color)),this.targetLine.lookAt(lH),this.targetLine.scale.z
3139=lW.length()}},lX=new iv,lY=new r6,lQ=class extends nW{constructor(e){let t=new rz,i=new nz({color:16777215,vertexColors:!0,toneMapped:!1}),r=[],s=[],a={};function o(e,t){l(e),l(t)}function l(e){r.push(0,0,0),s.push(0,0,0),void 0===a[e]&&(a[e]=[]),a[e].push(r.length/3-1)}o("n1","n2"),o("n2","n4"),o("n4","n3"),o("n3","n1"),o("f1","f2"),o("f2","f4"),o("f4","f3"),o("f3","f1"),o("n1","f1"),o("n2","f2"),o("n3","f3"),o("n4","f4"),o("p","n1"),o("p","n2"),o("p","n3"),o("p","n4"),o("u1","u2"),o("u2","u3"),o("u3","u1"),o("c","t"),o("p","c"),o("cn1","cn2"),o("cn3","cn4"),o("cf1","cf2"),o("cf3","cf4"),t.setAttribute("position",new rT(r,3)),t.setAttribute("color",new rT(s,3)),super(t,i),this.type="CameraHelper",this.camera=e,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=e.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=a,this.update();let h=new ii(16755200),c=new ii(16711680),d=new ii(43775),u=new ii(16777215),p=new ii(3355443);this.setColors(h,c,d,u,p)}setColors(e,t,i,r,s){let a=this.geometry.getAttribute("color");a.setXYZ(0,e.r,e.g,e.b),a.setXYZ(1,e.r,e.g,e.b),a.setXYZ(2,e.r,e.g,e.b),a.setXYZ(3,e.r,e.g,e.b),a.setXYZ(4,e.r,e.g,e.b),a.setXYZ(5,e.r,e.g,e.b),a.setXYZ(6,e.r,e.g,e.b),a.setXYZ(7,e.r,e.g,e.b),a.setXYZ(8,e.r,e.g,e.b),a.setXYZ(9,e.r,e.g,e.b),a.setXYZ(10,e.r,e.g,e.b),a.setXYZ(11,e.r,e.g,e.b),a.setXYZ(12,e.r,e.g,e.b),a.setXYZ(13,e.r,e.g,e.b),a.setXYZ(14,e.r,e.g,e.b),a.setXYZ(15,e.r,e.g,e.b),a.setXYZ(16,e.r,e.g,e.b),a.setXYZ(17,e.r,e.g,e.b),a.setXYZ(18,e.r,e.g,e.b),a.setXYZ(19,e.r,e.g,e.b),a.setXYZ(20,e.r,e.g,e.b),a.setXYZ(21,e.r,e.g,e.b),a.setXYZ(22,e.r,e.g,e.b),a.setXYZ(23,e.r,e.g,e.b),a.setXYZ(24,t.r,t.g,t.b),a.setXYZ(25,t.r,t.g,t.b),a.setXYZ(26,t.r,t.g,t.b),a.setXYZ(27,t.r,t.g,t.b),a.setXYZ(28,t.r,t.g,t.b),a.setXYZ(29,t.r,t.g,t.b),a.setXYZ(30,t.r,t.g,t.b),a.setXYZ(31,t.r,t.g,t.b),a.setXYZ(32,i.r,i.g,i.b),a.setXYZ(33,i.r,i.g,i.b),a.setXYZ(34,i.r,i.g,i.b),a.setXYZ(35,i.r,i.g,i.b),a.setXYZ(36,i.r,i.g,i.b),a.setXYZ(37,i.r,i.g,i.b),a.setXYZ(38,r.r,r.g,r.b),a.setXYZ(39,r.r,r.g,r.b),a.setXYZ(40,s.r,s.g,s.b),a.setXYZ(41,s.r,s.g,s.b),a.setXYZ(42,s.r,s.g,s.b),a.setXYZ(43,s.r,s.g,s.b),a.setXYZ(44,s.r,s.g,s.b),a.setXYZ(45,s.r,s.g,s.b),a.setXYZ(46,s.r,s.g,s.b),a.setXYZ(47,s.r,s.g,s.b),a.setXYZ(48,s.r,s.g,s.b),a.setXYZ(49,s.r,s.g,s.b),a.needsUpdate=!0}update(){let e=this.geometry,t=this.pointMap;lY.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),lK("c",t,e,lY,0,0,-1),lK("t",t,e,lY,0,0,1),lK("n1",t,e,lY,-1,-1,-1),lK("n2",t,e,lY,1,-1,-1),lK("n3",t,e,lY,-1,1,-1),lK("n4",t,e,lY,1,1,-1),lK("f1",t,e,lY,-1,-1,1),lK("f2",t,e,lY,1,-1,1),lK("f3",t,e,lY,-1,1,1),lK("f4",t,e,lY,1,1,1),lK("u1",t,e,lY,.7,1.1,-1),lK("u2",t,e,lY,-.7,1.1,-1),lK("u3",t,e,lY,0,2,-1),lK("cf1",t,e,lY,-1,0,1),lK("cf2",t,e,lY,1,0,1),lK("cf3",t,e,lY,0,-1,1),lK("cf4",t,e,lY,0,1,1),lK("cn1",t,e,lY,-1,0,-1),lK("cn2",t,e,lY,1,0,-1),lK("cn3",t,e,lY,0,-1,-1),lK("cn4",t,e,lY,0,1,-1),e.getAttribute("position").needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}};function lK(e,t,i,r,s,a,o){lX.set(s,a,o).unproject(r);let l=t[e];if(void 0!==l){let e=i.getAttribute("position");for(let t=0,i=l.length;t<i;t++)e.setXYZ(l[t],lX.x,lX.y,lX.z)}}var lZ=class extends nW{constructor(e,t=16776960){let i=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),r=new rz;r.setIndex(new rM(i,1)),r.setAttribute("position",new rT([1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1],3)),super(r,new nz({color:t,toneMapped:!1})),this.box=e,this.type="Box3Helper",this.geometry.computeBoundingSphere()}updateMatrixWorld(e){let t=this.box;t.isEmpty()||(t.getCenter(this.position),t.getSize(this.scale),this.scale.multiplyScalar(.5),super.updateMatrixWorld(e))}dispose(){this.geometry.dispose(),this.material.dispose()}},lJ=class extends nW{constructor(e=1){let t=new rz;t.setAttribute("position",new rT([0,0,0,e,0,0,0,0,0,0,e,0,0,0,0,0,0,e],3)),t.setAttribute("color",new rT([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3)),super(t,new nz({vertexColors:!0,toneMapped:!1})),this.type="AxesHelper"}setColors(e,t,i){let r=new ii,s=this.geometry.attributes.color.array;return r.set(e),r.toArray(s,0),r.toArray(s,3),r.set(t),r.toArray(s,6),r.toArray(s,9),r.set(i),r.toArray(s,12),r.toArray(s,15),this.geometry.attributes.color.needsUpdate=!0,this}dispose(){this.geometry.dispose(),this.material.dispose()}},l$=function(){let e=new ArrayBuffer(4),t=new Float32Array(e),i=new Uint32Array(e),r=new Uint32Array(512),s=new Uint32Array(512);for(let e=0;e<256;++e){let t=e-127;t<-27?(r[e]=0,r[256|e]=32768,s[e]=24,s[256|e]=24):t<-14?(r[e]=1024>>-t-14,r[256|e]=1024>>-t-14|32768,s[e]=-t-1,s[256|e]=-t-1):t<=15?(r[e]=t+15<<10,r[256|e]=t+15<<10|32768,s[e]=13,s[256|e]=13):t<128?(r[e]=31744,r[256|e]=64512,s[e]=24,s[256|e]=24):(r[e]=31744,r[256|e]=64512,s[e]=13,s[256|e]=13)}let a=new Uint32Array(2048),o=new Uint32Array(64),l=new Uint32Array(64);for(let e=1;e<1024;++e){let t=e<<13,i=0;for(;(8388608&t)==0;)t<<=1,i-=8388608;t&=-8388609,i+=947912704,a[e]=t|i}for(let e=1024;e<2048;++e)a[e]=939524096+(e-1024<<13);for(let e=1;e<31;++e)o[e]=e<<23;o[31]=1199570944,o[32]=2147483648;for(let e=33;e<63;++e)o[e]=2147483648+(e-32<<23);o[63]=3347054592;for(let e=1;e<64;++e)32!==e&&(l[e]=1024);return{floatView:t,uint32View:i,baseTable:r,shiftTable:s,mantissaTable:a,exponentTable:o,offsetTable:l}}(),l0=Object.freeze({__proto__:null,fromHalfFloat:function(e){let t=e>>10;return l$.uint32View[0]=l$.mantissaTable[l$.offsetTable[t]+(1023&e)]+l$.exponentTable[t],l$.floatView[0]},toHalfFloat:function(e){Math.abs(e)>65504&&console.warn("THREE.DataUtils.toHalfFloat(): Value out of range."),e=tU(e,-65504,65504),l$.floatView[0]=e;let t=l$.uint32View[0],i=t>>23&511;return l$.baseTable[i]+((8388607&t)>>l$.shiftTable[i])}});"u">typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:"149"}})),"u">typeof window&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__="
3139149");var l1=Symbol("target"),l2=Symbol("unsubscribe");function l3(e){return e instanceof Date||e instanceof Set||e instanceof Map||e instanceof WeakSet||e instanceof WeakMap||ArrayBuffer.isView(e)}var l4=Array.isArray;function l5(e){return"symbol"==typeof e}var l6={after:(e,t)=>l4(e)?e.slice(t.length):""===t?e:e.slice(t.length+1),concat:(e,t)=>l4(e)?(e=[...e],t&&e.push(t),e):t&&void 0!==t.toString?(""!==e&&(e+="."),l5(t)?e+t.toString():e+t):e,initial:e=>{if(l4(e))return e.slice(0,-1);if(""===e)return e;let t=e.lastIndexOf(".");return -1===t?"":e.slice(0,t)},last:e=>{if(l4(e))return e[e.length-1]||"";if(""===e)return e;let t=e.lastIndexOf(".");return -1===t?e:e.slice(t+1)},walk:(e,t)=>{if(l4(e))for(let i of e)t(i);else if(""!==e){let i=0,r=e.indexOf(".");if(-1===r)t(e);else for(;i<e.length;)-1===r&&(r=e.length),t(e.slice(i,r)),i=r+1,r=e.indexOf(".",i)}},get(e,t){return this.walk(t,t=>{e&&(e=e[t])}),e}};function l8(e,t,i){return e.isUnsubscribed||t.ignoreSymbols&&l5(i)||t.ignoreUnderscores&&"_"===i.charAt(0)||"ignoreKeys"in t&&t.ignoreKeys.includes(i)}var l9=class{constructor(e){this._equals=e,this._proxyCache=new WeakMap,this._pathCache=new WeakMap,this.isUnsubscribed=!1}_getDescriptorCache(){return void 0===this._descriptorCache&&(this._descriptorCache=new WeakMap),this._descriptorCache}_getProperties(e){let t=this._getDescriptorCache(),i=t.get(e);return void 0===i&&(i={},t.set(e,i)),i}_getOwnPropertyDescriptor(e,t){if(this.isUnsubscribed)return Reflect.getOwnPropertyDescriptor(e,t);let i=this._getProperties(e),r=i[t];return void 0===r&&(r=Reflect.getOwnPropertyDescriptor(e,t),i[t]=r),r}getProxy(e,t,i,r){if(this.isUnsubscribed)return e;let s=e[r],a=s||e;this._pathCache.set(a,t);let o=this._proxyCache.get(a);return void 0===o&&(o=void 0===s?new Proxy(e,i):e,this._proxyCache.set(a,o)),o}getPath(e){return this.isUnsubscribed?void 0:this._pathCache.get(e)}isDetached(e,t){return!Object.is(e,l6.get(t,this.getPath(e)))}defineProperty(e,t,i){return!!Reflect.defineProperty(e,t,i)&&(this.isUnsubscribed||(this._getProperties(e)[t]=i),!0)}setProperty(e,t,i,r,s){if(!this._equals(s,i)||!(t in e)){let s=this._getOwnPropertyDescriptor(e,t);return void 0!==s&&"set"in s?Reflect.set(e,t,i,r):Reflect.set(e,t,i)}return!0}deleteProperty(e,t,i){if(Reflect.deleteProperty(e,t)){if(!this.isUnsubscribed){let r=this._getDescriptorCache().get(e);r&&(delete r[t],this._pathCache.delete(i))}return!0}return!1}isSameDescriptor(e,t,i){let r=this._getOwnPropertyDescriptor(t,i);return void 0!==e&&void 0!==r&&Object.is(e.value,r.value)&&(e.writable||!1)===(r.writable||!1)&&(e.enumerable||!1)===(r.enumerable||!1)&&(e.configurable||!1)===(r.configurable||!1)&&e.get===r.get&&e.set===r.set}isGetInvariant(e,t){let i=this._getOwnPropertyDescriptor(e,t);return void 0!==i&&!0!==i.configurable&&!0!==i.writable}unsubscribe(){this._descriptorCache=null,this._pathCache=null,this._proxyCache=null,this.isUnsubscribed=!0}};function l7(e){return"[object Object]"===toString.call(e)}function he(){return!0}function ht(e,t){return e.length!==t.length||e.some((e,i)=>t[i]!==e)}var hi=new Set(["hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]),hr=new Set(["concat","includes","indexOf","join","keys","lastIndexOf"]),hs={push:he,pop:he,shift:he,unshift:he,copyWithin:ht,reverse:ht,sort:ht,splice:ht,flat:ht,fill:ht},ha=new Set([...hi,...hr,...Object.keys(hs)]);function hn(e,t){if(e.size!==t.size)return!0;for(let i of e)if(!t.has(i))return!0;return!1}var ho=["keys","values","entries"],hl=new Set(["has","toString"]),hh={add:hn,clear:hn,delete:hn,forEach:hn},hc=new Set([...hl,...Object.keys(hh),...ho]);function hd(e,t){let i;if(e.size!==t.size)return!0;for(let[r,s]of e)if((i=t.get(r))!==s||void 0===i&&!t.has(r))return!0;return!1}var hu=new Set([...hl,"get"]),hp={set:hd,clear:hd,delete:hd,forEach:hd},hf=new Set([...hu,...Object.keys(hp),...ho]),hm=class{constructor(e,t,i,r){this._path=t,this._isChanged=!1,this._clonedCache=new Set,this._hasOnValidate=r,this._changes=r?[]:null,this.clone=void 0===t?e:this._shallowClone(e)}static isHandledMethod(e){return hi.has(e)}_shallowClone(e){let t=e;if(l7(e))t={...e};else if(l4(e))t=[...e];else if(e instanceof Date)t=new Date(e);else if(e instanceof Set)t=new Set([...e].map(e=>this._shallowClone(e)));else if(e instanceof Map)for(let[i,r]of(t=new Map,e.entries()))t.set(i,this._shallowClone(r));return this._clonedCache.add(t),t}preferredThisArg(e,t,i,r){return e?(l4(r)?this._onIsChanged=hs[t]:r instanceof Set?this._onIsChanged=hh[t]:r instanceof Map&&(this._onIsChanged=hp[t]),r):i}update(e,t,i){let r=l6.after(e,this._path);if("length"!==t){let e=this.clone;l6.walk(r,t=>{e&&e[t]&&(this._clonedCache.has(e[t])||(e[t]=this._shallowClone(e[t])),e=e[t])}),this._hasOnValidate&&this._changes.push({path:r,property:t,previous:i}),e&&e[t]&&(e[t]=i)}this._isChanged=!0}undo(e){let t;for(let i=this._changes.length-1;-1!==i;i--)t=this._changes[i],l6.get(e,t.path)[t.property]=t.previous}isChanged(e){return void 0===this._onIsChanged?this._isChanged:this._onIsChanged(this.clone,e)}},hg=class extends hm{static isHandledMethod(e){return ha.has(e)}},hv=class extends hm{undo(e){e.setTime(this.clone.getTime())}isChanged(e,t){return!t(this.clone.valueOf(),e.valueOf())}},hy=class extends hm{static isHandledMethod(e){return hc.has(e)}undo(e){for(let t of this.clone)e.add(t);for(let t of e)this.clone.has(t)||e.delete(t)}},hx=class extends hm{static isHandledMethod(e){return hf.has(e)}undo(e){for(let[t,i]of this.clone.entries())e.set(t,i);for(let t of e.keys())this.clone.has(t)||e.delete(t)}},hb=class extends hm{constructor(e,t,i,r){super(void 0,t,i,r),this._arg1=i[0],this._weakValue=e.has(this._arg1)}isChanged(e){return this._weakValue!==e.has(this._arg1)}undo(e){this._weakValue&&!e.has(this._arg1)?e.add(this._arg1):e.delete(this._arg1)}},hw=class extends hm{constructor(e,t,i,r){super(void 0,t,i,r),this._weakKey=i[0],this._weakHas=e.has(this._weakKey),this._weakValue=e.get(this._weakKey)}isChanged(e){return this._weakValue!==e.get(this._weakKey)}undo(e){let t=e.has(this._weakKey);this._weakHas&&!t?e.set(this._weakKey,this._weakValue):!this._weakHas&&t?e.delete(this._weakKey):this._weakValue!==e.get(this._weakKey)&&e.set(this._weakKey,this._weakValue)}},hS=class{constructor(e){this._stack=[],this._hasOnValidate=e}static isHandledType(e){return l7(e)||l4(e)||l3(e)}static isHandledMethod(e,t){return l7(e)?hm.isHandledMethod(t):l4(e)?hg.isHandledMethod(t):e instanceof Set?hy.isHandledMethod(t):e instanceof Map?hx.isH
3139andledMethod(t):l3(e)}get isCloning(){return this._stack.length>0}start(e,t,i){let r=hm;l4(e)?r=hg:e instanceof Date?r=hv:e instanceof Set?r=hy:e instanceof Map?r=hx:e instanceof WeakSet?r=hb:e instanceof WeakMap&&(r=hw),this._stack.push(new r(e,t,i,this._hasOnValidate))}update(e,t,i){this._stack[this._stack.length-1].update(e,t,i)}preferredThisArg(e,t,i){let{name:r}=e,s=hS.isHandledMethod(i,r);return this._stack[this._stack.length-1].preferredThisArg(s,r,t,i)}isChanged(e,t,i){return this._stack[this._stack.length-1].isChanged(e,t,i)}undo(e){void 0!==this._previousClone&&this._previousClone.undo(e)}stop(){return this._previousClone=this._stack.pop(),this._previousClone.clone}},h_={equals:Object.is,isShallow:!1,pathAsArray:!1,ignoreSymbols:!1,ignoreUnderscores:!1,ignoreDetached:!1,details:!1},hA=(e,t,i={})=>{i={...h_,...i};let r=Symbol("ProxyTarget"),{equals:s,isShallow:a,ignoreDetached:o,details:l}=i,h=new l9(s),c="function"==typeof i.onValidate,d=new hS(c),u=(e,t,r,s,a)=>!c||d.isCloning||!0===i.onValidate(l6.concat(h.getPath(e),t),r,s,a),p=(t,r,s,a)=>{l8(h,i,r)||o&&h.isDetached(t,e)||f(h.getPath(t),r,s,a)},f=(e,i,r,s,a)=>{d.isCloning?d.update(e,i,s):t(l6.concat(e,i),r,s,a)},m=e=>e&&(e[r]||e),g=(t,s,l,c)=>("object"==typeof t?null===t:"function"!=typeof t)||t instanceof RegExp||"constructor"===l||a&&!hS.isHandledMethod(s,l)||l8(h,i,l)||h.isGetInvariant(s,l)||o&&h.isDetached(s,e)?t:(void 0===c&&(c=h.getPath(s)),h.getProxy(t,l6.concat(c,l),v,r)),v={get(e,t,i){if(l5(t)){if(t===r||t===l1)return e;if(t===l2&&!h.isUnsubscribed&&0===h.getPath(e).length)return h.unsubscribe(),e}return g(l3(e)?Reflect.get(e,t):Reflect.get(e,t,i),e,t)},set(e,t,i,a){i=m(i);let o=e[r]||e,l=o[t];if(s(l,i)&&t in e)return!0;let c=u(e,t,i,l);return c&&h.setProperty(o,t,i,a,l)?(p(e,t,e[t],l),!0):!c},defineProperty(e,t,i){if(!h.isSameDescriptor(i,e,t)){let r=e[t];u(e,t,i.value,r)&&h.defineProperty(e,t,i,r)&&p(e,t,i.value,r)}return!0},deleteProperty(e,t){if(!Reflect.has(e,t))return!0;let i=Reflect.get(e,t),r=u(e,t,void 0,i);return r&&h.deleteProperty(e,t,i)?(p(e,t,void 0,i),!0):!r},apply(t,i,a){let o=i[r]||i;if(h.isUnsubscribed)return Reflect.apply(t,o,a);if((!1===l||!0!==l&&!l.includes(t.name))&&hS.isHandledType(o)){var c;let r=l6.initial(h.getPath(t)),l=hS.isHandledMethod(o,t.name);d.start(o,r,a);let p=Reflect.apply(t,d.preferredThisArg(t,i,o),l?a.map(e=>m(e)):a),y=d.isChanged(o,s),x=d.stop();if(hS.isHandledType(p)&&l&&(i instanceof Map&&"get"===t.name&&(r=l6.concat(r,a[0])),p=h.getProxy(p,r,v)),y){let i={name:t.name,args:a,result:p},s=d.isCloning?l6.initial(r):r,l=d.isCloning?l6.last(r):"";u(l6.get(e,s),l,o,x,i)?f(s,l,o,x,i):d.undo(o)}return(i instanceof Map||i instanceof Set)&&"object"==typeof(c=p)&&"function"==typeof c.next?function(e,t,i,r,s){let a=e.next;if("entries"===t.name)e.next=function(){let e=a.call(this);return!1===e.done&&(e.value[0]=s(e.value[0],t,e.value[0],r),e.value[1]=s(e.value[1],t,e.value[0],r)),e};else if("values"===t.name){let o=i[l1].keys();e.next=function(){let e=a.call(this);return!1===e.done&&(e.value=s(e.value,t,o.next().value,r)),e}}else e.next=function(){let e=a.call(this);return!1===e.done&&(e.value=s(e.value,t,e.value,r)),e};return e}(p,t,i,r,g):p}return Reflect.apply(t,i,a)}},y=h.getProxy(e,i.pathAsArray?[]:"",v);return t=t.bind(y),c&&(i.onValidate=i.onValidate.bind(y)),y};hA.target=e=>e&&e[l1]||e,hA.unsubscribe=e=>e[l2]||e;var hM="object"==typeof global&&global&&global.Object===Object&&global,hE="object"==typeof self&&self&&self.Object===Object&&self,hC=hM||hE||Function("return this")(),hT=hC.Symbol,hP=Object.prototype,hD=hP.hasOwnProperty,hI=hP.toString,hO=hT?hT.toStringTag:void 0,hR=function(e){var t=hD.call(e,hO),i=e[hO];try{e[hO]=void 0;var r=!0}catch{}var s=hI.call(e);return r&&(t?e[hO]=i:delete e[hO]),s},hL=Object.prototype.toString,hB=hT?hT.toStringTag:void 0,hz=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":hB&&hB in Object(e)?hR(e):hL.call(e)},hF=function(e){return null!=e&&"object"==typeof e},hN=function(e){return"symbol"==typeof e||hF(e)&&"[object Symbol]"==hz(e)},hk=function(e,t){for(var i=-1,r=null==e?0:e.length,s=Array(r);++i<r;)s[i]=t(e[i],i,e);return s},hU=Array.isArray,hV=1/0,hj=hT?hT.prototype:void 0,hG=hj?hj.toString:void 0,hH=function e(t){if("string"==typeof t)return t;if(hU(t))return hk(t,e)+"";if(hN(t))return hG?hG.call(t):"";var i=t+"";return"0"==i&&1/t==-hV?"-0":i},hW=/\s/,hq=function(e){for(var t=e.length;t--&&hW.test(e.charAt(t)););return t},hX=/^\s+/,hY=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)},hQ=0/0,hK=/^[-+]0x[0-9a-f]+$/i,hZ=/^0b[01]+$/i,hJ=/^0o[0-7]+$/i,h$=parseInt,h0=function(e){if("number"==typeof e)return e;if(hN(e))return hQ;if(hY(e)){var t,i="function"==typeof e.valueOf?e.valueOf():e;e=hY(i)?i+"":i}if("string"!=typeof e)return 0===e?e:+e;e=(t=e)&&t.slice(0,hq(t)+1).replace(hX,"");var r=hZ.test(e);return r||hJ.test(e)?h$(e.slice(2),r?2:8):hK.test(e)?hQ:+e},h1=function(e){return e},h2=function(e){if(!hY(e))return!1;var t=hz(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}
3139,h3=hC["__core-js_shared__"],h4=(pt=/[^.]+$/.exec(h3&&h3.keys&&h3.keys.IE_PROTO||""))?"Symbol(src)_1."+pt:"",h5=Function.prototype.toString,h6=function(e){if(null!=e){try{return h5.call(e)}catch{}try{return e+""}catch{}}return""},h8=/^\[object .+?Constructor\]$/,h9=Object.prototype,h7=Function.prototype.toString,ce=h9.hasOwnProperty,ct=RegExp("^"+h7.call(ce).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ci=function(e,t){var i,r=e?.[t];return hY(i=r)&&(!h4||!(h4 in i))&&(h2(i)?ct:h8).test(h6(i))?r:void 0},cr=ci(hC,"WeakMap"),cs=Object.create,ca=function(){function e(){}return function(t){if(!hY(t))return{};if(cs)return cs(t);e.prototype=t;var i=new e;return e.prototype=void 0,i}}(),cn=function(e,t,i){switch(i.length){case 0:return e.call(t);case 1:return e.call(t,i[0]);case 2:return e.call(t,i[0],i[1]);case 3:return e.call(t,i[0],i[1],i[2])}return e.apply(t,i)},co=function(e,t){var i=-1,r=e.length;for(t||(t=Array(r));++i<r;)t[i]=e[i];return t},cl=Date.now,ch=function(){try{var e=ci(Object,"defineProperty");return e({},"",{}),e}catch{}}(),cc=(pi=ch?function(e,t){return ch(e,"toString",{configurable:!0,enumerable:!1,value:function(){return t},writable:!0})}:h1,pr=0,ps=0,function(){var e=cl(),t=16-(e-ps);if(ps=e,t>0){if(++pr>=800)return arguments[0]}else pr=0;return pi.apply(void 0,arguments)}),cd=function(e,t){for(var i=-1,r=null==e?0:e.length;++i<r&&!1!==t(e[i],i,e););return e},cu=/^(?:0|[1-9]\d*)$/,cp=function(e,t){var i=typeof e;return!!(t=t??9007199254740991)&&("number"==i||"symbol"!=i&&cu.test(e))&&e>-1&&e%1==0&&e<t},cf=function(e,t,i){"__proto__"==t&&ch?ch(e,t,{configurable:!0,enumerable:!0,value:i,writable:!0}):e[t]=i},cm=function(e,t){return e===t||e!=e&&t!=t},cg=Object.prototype.hasOwnProperty,cv=function(e,t,i){var r=e[t];cg.call(e,t)&&cm(r,i)&&(void 0!==i||t in e)||cf(e,t,i)},cy=function(e,t,i,r){var s=!i;i||(i={});for(var a=-1,o=t.length;++a<o;){var l=t[a],h=r?r(i[l],e[l],l,i,e):void 0;void 0===h&&(h=e[l]),s?cf(i,l,h):cv(i,l,h)}return i},cx=Math.max,cb=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991},cw=function(e){return null!=e&&cb(e.length)&&!h2(e)},cS=Object.prototype,c_=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||cS)},cA=function(e,t){for(var i=-1,r=Array(e);++i<e;)r[i]=t(i);return r},cM=function(e){return hF(e)&&"[object Arguments]"==hz(e)},cE=Object.prototype,cC=cE.hasOwnProperty,cT=cE.propertyIsEnumerable,cP=cM(function(){return arguments}())?cM:function(e){return hF(e)&&cC.call(e,"callee")&&!cT.call(e,"callee")},cD="object"==typeof exports&&exports&&!exports.nodeType&&exports,cI=cD&&"object"==typeof module&&module&&!module.nodeType&&module,cO=cI&&cI.exports===cD?hC.Buffer:void 0,cR=(cO?cO.isBuffer:void 0)||function(){return!1},cL={};cL["[object Float32Array]"]=cL["[object Float64Array]"]=cL["[object Int8Array]"]=cL["[object Int16Array]"]=cL["[object Int32Array]"]=cL["[object Uint8Array]"]=cL["[object Uint8ClampedArray]"]=cL["[object Uint16Array]"]=cL["[object Uint32Array]"]=!0,cL["[object Arguments]"]=cL["[object Array]"]=cL["[object ArrayBuffer]"]=cL["[object Boolean]"]=cL["[object DataView]"]=cL["[object Date]"]=cL["[object Error]"]=cL["[object Function]"]=cL["[object Map]"]=cL["[object Number]"]=cL["[object Object]"]=cL["[object RegExp]"]=cL["[object Set]"]=cL["[object String]"]=cL["[object WeakMap]"]=!1;var cB=function(e){return function(t){return e(t)}},cz="object"==typeof exports&&exports&&!exports.nodeType&&exports,cF=cz&&"object"==typeof module&&module&&!module.nodeType&&module,cN=cF&&cF.exports===cz&&hM.process,ck=function(){try{return cF&&cF.require&&cF.require("util").types||cN&&cN.binding&&cN.binding("util")}catch{}}(),cU=ck&&ck.isTypedArray,cV=cU?cB(cU):function(e){return hF(e)&&cb(e.length)&&!!cL[hz(e)]},cj=Object.prototype.hasOwnProperty,cG=function(e,t){var i=hU(e),r=!i&&cP(e),s=!i&&!r&&cR(e),a=!i&&!r&&!s&&cV(e),o=i||r||s||a,l=o?cA(e.length,String):[],h=l.length;for(var c in e)(t||cj.call(e,c))&&!(o&&("length"==c||s&&("offset"==c||"parent"==c)||a&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||cp(c,h)))&&l.push(c);return l},cH=function(e,t){return function(i){return e(t(i))}},cW=cH(Object.keys,Object),cq=Object.prototype.hasOwnProperty,cX=function(e){if(!c_(e))return cW(e);var t=[];for(var i in Object(e))cq.call(e,i)&&"constructor"!=i&&t.push(i);return t},cY=function(e){return cw(e)?cG(e):cX(e)},cQ=function(e){var t=[];if(null!=e)for(var i in Object(e))t.push(i);return t},cK=Object.prototype.hasOwnProperty,cZ=function(e){if(!hY(e))return cQ(e);var t=c_(e),i=[];for(var r in e)"constructor"==r&&(t||!cK.call(e,r))||i.push(r);return i},cJ=function(e){return cw(e)?cG(e,!0):cZ(e)},c$=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,c0=/^\w*$/,c1=function(e,t){if(hU(e))return!1;var i=typeof e;return!!("number"==i||"symbol"==i||"boolean"==i||null==e||hN(e))||c0.test(e)||!c$.test(e)||null!=t&&e in Object(t)},c2=ci(Object,"create"),c3=Object.prototype.hasOwnProperty,c4=Object.prototype.hasOwnProperty;function c5(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t<i;){var r=e[t];this.set(r[0],r[1])}}c5.prototype.clear=function(){this.__data__=c2?c2(null):{},this.size=0},c5.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},c5.prototype.get=function(e){var t=this.__data__;if(c2){var i=t[e];return"__lodash_hash_undefined__"===i?void 0:i}return c3.call(t,e)?t[e]:void 0},c5.prototype.has=function(e){var t=this.__data__;return c2?void 0!==t[e]:c4.call(t,e)},c5.prototype.set=function(e,t){var i=this.__data__;return this.size+=this.has(e)?0:1,i[e]=c2&&void 0===t?"__lodash_hash_undefined__":t,this};var c6=function(e,t){for(var i=e.length;i--;)if(cm(e[i][0],t))return i;return -1},c8=Array.prototype.splice;function c9(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t<i;){var r=e[t];this.set(r[0],r[1])}}c9.prototype.clear=function(){this.__data__=[],this.size=0},c9.prototype.delete=function(e){var t=this.__data__,i=c6(t,e);return!(i<0)&&(i==t.length-1?t.pop():c8.call(t,i,1),--this.size,!0)},c9.prototype.get=function(e){var t=this.__data__,i=c6(t,e);return i<0?void 0:t[i][1]},c9.prototype.has=function(e){return c6(this.__data__,e)>-1},c9.prototype.set=function(e,t){var i=this.__data__,r=c6(i,e);return r<0?(++this.size,i.push([e,t])):i[r][1]=t,this};var c7=ci(hC,"Map"),de=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e},dt=function(e,t){var i=e.__data__;return de(t)?i["string"==typeof t?"string":"hash"]:i.map};function di(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t<i;){var r=e[t];this.set(r[0],r[1])}}function dr(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw TypeError("Expected a function");var i=function(){var r=arguments,s=t?t.apply(this,r):r[0],a=i.cache;if(a.has(s))return a.get(s);var o=e.apply(this,r);return i.cache=a.set(s,o)||a,o};return i.cache=new(dr.Cache||di),i}di.prototype.clear=function(){this.size=0,this.__data__={hash:new c5,map:new(c7||c9),string:new c5}},di.prototype.delete=function(e){var t=dt(this,e).delete(e);return this.size-=t?1:0,t},di.prototype.get=function(e){return dt(this,e).get(e)},di.prototype.has=function(e){return dt(this,e).has(e)},di.prototype.set=function(e,t){var i=dt(this,e),r=i.size;return i.set(e,t),this.size+=i.size==r?0:1,this},dr.Cache=di;var ds=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,da=/\\(\\)?/g,dn=(pn=(pa=dr(function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(ds,function(e,i,r,s){t.push(r?s.replace(da,"$1"):i||e)}),t},function(e){return 500===pn.size&&pn.clear(),e})).cache,pa),dl=function(e,t){return hU(e)?e:c1(e,t)?[e]:dn(null==e?"":hH(e))},dh=1/0,dc=function(e){if("string"==typeof e||hN(e))return e;var t=e+"";return"0"==t&&1/e==-dh?"-0":t},dd=function(e,t){t=dl(t,e);for(var i=0,r=t.length;null!=e&&i<r;)e=e[dc(t[i++])];return i&&i==r?e:void 0},du=function(e,t){for(var i=-1,r=t.length,s=e.length;++i<r;)e[s+i]=t[i];return e},dp=hT?hT.isConcatSpreadable:void 0,df=function(e){return hU(e)||cP(e)||!!(dp&&e&&e[dp])},dm=function e(t,i,r,s,a){var o=-1,l=t.length;for(r||(r=df),a||(a=[]);++o<l;){var h=t[o];i>0&&r(h)?i>1?e(h,i-1,r,s,a):du(a,h):s||(a[a.length]=h)}return a},dg=function(e){var t;return cc((t=cx((t=void 0,e.length-1),0),function(){for(var i,r=arguments,s=-1,a=cx(r.length-t,0),o=Array(a);++s<a;)o[s]=r[t+s];s=-1;for(var l=Array(t+1);++s<t;)l[s]=r[s];return l[t]=(null==(i=o)?0:i.length)?dm(i,1):[],cn(e,this,l)}),e+"")},dv=cH(Object.getPrototypeOf,Object),dy=Object.prototype,dx=Function.prototype.toString,db=dy.hasOwnProperty,dw=dx.call(Object),dS=function(e){if(!hF(e)||"[object Object]"!=hz(e))return!1;var t=dv(e);if(null===t)return!0;var i=db.call(t,"constructor")&&t.constructor;return"function"==typeof i&&i instanceof i&&dx.call(i)==dw},d_=function(e,t,i){var r=-1,s=e.length;t<0&&(t=-t>s?0:s+t),(i=i>s?s:i)<0&&(i+=s),s=t>i?0:i-t>>>0,t>>>=0;for(var a=Array(s);++r<s;)a[r]=e[r+t];return a};function dA(e){var t=this.__data__=new c9(e);this.size=t.size}dA.prototype.clear=function(){this.__data__=new c9,this.size=0},dA.prototype.delete=function(e){var t=this.__data__,i=t.delete(e);return this.size=t.size,i},dA.prototype.get=function(e){return this.__data__.get(e)},dA.prototype.has=function(e){return this.__data__.has(e)},dA.prototype.set=function(e,t){var i=this.__data__;if(i instanceof c9){var r=i.__data__;if(!c7||r.length<199)return r.push([e,t]),this.size=++i.size,this;i=this.__data__=new di(r)}return i.set(e,t),this.size=i.size,this};var dM="object"==typeof exports&&exports&&!exports.nodeType&&exports,dE=dM&&"object"==typeof module&&module&&!module.nodeType&&module,dC=dE&&dE.exports===dM?hC.Buffer:void 0,dT=dC?dC.allocUnsafe:void 0,dP=function(e,t){if(t)return e.slice();var i=e.length,r=dT?dT(i):new e.constructor(i);return e.copy(r),r},dD=function(e,t){for(var i=-1,r=null==e?0:e.length,s=0,a=[];++i<r;){var o=e[i];t(o,i,e)&&(a[s++]=o)}return a},dI=function(){return[]},dO=Object.prototype.propertyIsEnumerable,dR=Object.getOwnPropertySymbols,dL=dR?function(e){return null==e?[]:dD(dR(e=Object(e)),function(t){return dO.call(e,t)})}:dI,dB=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)du(t,dL(e)),e=dv(e);return t}:dI,dz=function(e,t,i){var r=t(e);return hU(e)?r:du(r,i(e))},dF=function(e){return dz(e,cY,dL)},dN=function(e){return dz(e,cJ,dB)},dk=ci(hC,"DataView"),dU=ci(hC,"Promise"),dV=ci(hC,"Set"),dj="[object Map]",dG="[object Promise]",dH="[object Set]",dW="[object WeakMap]",dq="[object DataView]",dX=h6(dk),dY=h6(c7),dQ=h6(dU),dK=h6(dV),dZ=h6(cr),dJ=hz;(dk&&dJ(new dk(new ArrayBuffer(1)))!=dq||c7&&dJ(new c7)!=dj||dU&&dJ(dU.resolve())!=dG||dV&&dJ(new dV)!=dH||cr&&dJ(new cr)!=dW)&&(dJ=function(e){var t=hz(e),i="[object Object]"==t?e.constructor:void 0,r=i?h6(i):"";if(r)switch(r){case dX:return dq;case dY:return dj;case dQ:return dG;
3139case dK:return dH;case dZ:return dW}return t});var d$=dJ,d0=Object.prototype.hasOwnProperty,d1=function(e){var t=e.length,i=new e.constructor(t);return t&&"string"==typeof e[0]&&d0.call(e,"index")&&(i.index=e.index,i.input=e.input),i},d2=hC.Uint8Array,d3=function(e){var t=new e.constructor(e.byteLength);return new d2(t).set(new d2(e)),t},d4=function(e,t){var i=t?d3(e.buffer):e.buffer;return new e.constructor(i,e.byteOffset,e.byteLength)},d5=/\w*$/,d6=function(e){var t=new e.constructor(e.source,d5.exec(e));return t.lastIndex=e.lastIndex,t},d8=hT?hT.prototype:void 0,d9=d8?d8.valueOf:void 0,d7=function(e,t){var i=t?d3(e.buffer):e.buffer;return new e.constructor(i,e.byteOffset,e.length)},ue=function(e,t,i){var r=e.constructor;switch(t){case"[object ArrayBuffer]":return d3(e);case"[object Boolean]":case"[object Date]":return new r(+e);case"[object DataView]":return d4(e,i);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return d7(e,i);case"[object Map]":case"[object Set]":return new r;case"[object Number]":case"[object String]":return new r(e);case"[object RegExp]":return d6(e);case"[object Symbol]":return d9?Object(d9.call(e)):{}}},ut=ck&&ck.isMap,ui=ut?cB(ut):function(e){return hF(e)&&"[object Map]"==d$(e)},ur=ck&&ck.isSet,us=ur?cB(ur):function(e){return hF(e)&&"[object Set]"==d$(e)},ua="[object Arguments]",un="[object Function]",uo="[object Object]",ul={};ul[ua]=ul["[object Array]"]=ul["[object ArrayBuffer]"]=ul["[object DataView]"]=ul["[object Boolean]"]=ul["[object Date]"]=ul["[object Float32Array]"]=ul["[object Float64Array]"]=ul["[object Int8Array]"]=ul["[object Int16Array]"]=ul["[object Int32Array]"]=ul["[object Map]"]=ul["[object Number]"]=ul[uo]=ul["[object RegExp]"]=ul["[object Set]"]=ul["[object String]"]=ul["[object Symbol]"]=ul["[object Uint8Array]"]=ul["[object Uint8ClampedArray]"]=ul["[object Uint16Array]"]=ul["[object Uint32Array]"]=!0,ul["[object Error]"]=ul[un]=ul["[object WeakMap]"]=!1;var uh=function e(t,i,r,s,a,o){var l,h=1&i,c=2&i,d=4&i;if(r&&(l=a?r(t,s,a,o):r(t)),void 0!==l)return l;if(!hY(t))return t;var u=hU(t);if(u){if(l=d1(t),!h)return co(t,l)}else{var p,f,m,g,v=d$(t),y=v==un||"[object GeneratorFunction]"==v;if(cR(t))return dP(t,h);if(v==uo||v==ua||y&&!a){if(l=c||y?{}:"function"!=typeof t.constructor||c_(t)?{}:ca(dv(t)),!h)return c?(f=(p=l)&&cy(t,cJ(t),p),cy(t,dB(t),f)):(g=(m=l)&&cy(t,cY(t),m),cy(t,dL(t),g))}else{if(!ul[v])return a?t:{};l=ue(t,v,h)}}o||(o=new dA);var x=o.get(t);if(x)return x;o.set(t,l),us(t)?t.forEach(function(s){l.add(e(s,i,r,s,t,o))}):ui(t)&&t.forEach(function(s,a){l.set(a,e(s,i,r,a,t,o))});var b=d?c?dN:dF:c?cJ:cY,w=u?void 0:b(t);return cd(w||t,function(s,a){w&&(s=t[a=s]),cv(l,a,e(s,i,r,a,t,o))}),l},uc=function(e){return uh(e,5)};function ud(e){var t=-1,i=null==e?0:e.length;for(this.__data__=new di;++t<i;)this.add(e[t])}ud.prototype.add=ud.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},ud.prototype.has=function(e){return this.__data__.has(e)};var uu=function(e,t){for(var i=-1,r=null==e?0:e.length;++i<r;)if(t(e[i],i,e))return!0;return!1},up=function(e,t,i,r,s,a){var o=1&i,l=e.length,h=t.length;if(l!=h&&!(o&&h>l))return!1;var c=a.get(e),d=a.get(t);if(c&&d)return c==t&&d==e;var u=-1,p=!0,f=2&i?new ud:void 0;for(a.set(e,t),a.set(t,e);++u<l;){var m=e[u],g=t[u];if(r)var v=o?r(g,m,u,t,e,a):r(m,g,u,e,t,a);if(void 0!==v){if(v)continue;p=!1;break}if(f){if(!uu(t,function(e,t){if(!f.has(t)&&(m===e||s(m,e,i,r,a)))return f.push(t)})){p=!1;break}}else if(!(m===g||s(m,g,i,r,a))){p=!1;break}}return a.delete(e),a.delete(t),p},uf=function(e){var t=-1,i=Array(e.size);return e.forEach(function(e,r){i[++t]=[r,e]}),i},um=function(e){var t=-1,i=Array(e.size);return e.forEach(function(e){i[++t]=e}),i},ug=hT?hT.prototype:void 0,uv=ug?ug.valueOf:void 0,uy=function(e,t,i,r,s,a,o){switch(i){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)break;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!a(new d2(e),new d2(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return cm(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var l=uf;case"[object Set]":var h=1&r;if(l||(l=um),e.size!=t.size&&!h)break;var c=o.get(e);if(c)return c==t;r|=2,o.set(e,t);var d=up(l(e),l(t),r,s,a,o);return o.delete(e),d;case"[object Symbol]":if(uv)return uv.call(e)==uv.call(t)}return!1},ux=Object.prototype.hasOwnProperty,ub=function(e,t,i,r,s,a){var o=1&i,l=dF(e),h=l.length;if(h!=dF(t).length&&!o)return!1;for(var c=h;c--;){var d=l[c];if(!(o?d in t:ux.call(t,d)))return!1}var u=a.get(e),p=a.get(t);if(u&&p)return u==t&&p==e;var f=!0;a.set(e,t),a.set(t,e);for(var m=o;++c<h;){var g=e[d=l[c]],v=t[d];if(r)var y=o?r(v,g,d,t,e,a):r(g,v,d,e,t,a);if(!(void 0===y?g===v||s(g,v,i,r,a):y)){f=!1;break}m||(m="constructor"==d)}if(f&&!m){var x=e.constructor,b=t.constructor;x!=b&&"constructor"in e&&"constructor"in t&&!("function"==typeof x&&x instanceof x&&"function"==typeof b&&b instanceof b)&&(f=!1)}return a.delete(e),a.delete(t),f},uw="[object Arguments]",uS="[object Array]",u_="[object Object]",uA=Object.prototype.hasOwnProperty,uM=function(e,t,i,r,s,a){var o=hU(e),l=hU(t),h=o?uS:d$(e),c=l?uS:d$(t);h=h==uw?u_:h,c=c==uw?u_:c;var d=h==u_,u=c==u_,p=h==c;if(p&&cR(e)){if(!cR(t))return!1;o=!0,d=!1}
3139if(p&&!d)return a||(a=new dA),o||cV(e)?up(e,t,i,r,s,a):uy(e,t,h,i,r,s,a);if(!(1&i)){var f=d&&uA.call(e,"__wrapped__"),m=u&&uA.call(t,"__wrapped__");if(f||m){var g=f?e.value():e,v=m?t.value():t;return a||(a=new dA),s(g,v,i,r,a)}}return!!p&&(a||(a=new dA),ub(e,t,i,r,s,a))},uE=function(e,t){return null!=e&&t in Object(e)},uC=function(e,t,i){t=dl(t,e);for(var r=-1,s=t.length,a=!1;++r<s;){var o=dc(t[r]);if(!(a=null!=e&&i(e,o)))break;e=e[o]}return a||++r!=s?a:!!(s=null==e?0:e.length)&&cb(s)&&cp(o,s)&&(hU(e)||cP(e))},uT=function(){return hC.Date.now()},uP=Math.max,uD=Math.min,uI=function(e,t,i){var r,s,a,o,l,h,c=0,d=!1,u=!1,p=!0;if("function"!=typeof e)throw TypeError("Expected a function");function f(t){var i=r,a=s;return r=s=void 0,c=t,o=e.apply(a,i)}function m(e){var i=e-h,r=e-c;return void 0===h||i>=t||i<0||u&&r>=a}function g(){var e,i,r,s=uT();if(m(s))return v(s);l=setTimeout(g,(e=s-h,i=s-c,r=t-e,u?uD(r,a-i):r))}function v(e){return l=void 0,p&&r?f(e):(r=s=void 0,o)}function y(){var e,i=uT(),a=m(i);if(r=arguments,s=this,h=i,a){if(void 0===l)return c=e=h,l=setTimeout(g,t),d?f(e):o;if(u)return clearTimeout(l),l=setTimeout(g,t),f(h)}return void 0===l&&(l=setTimeout(g,t)),o}return t=h0(t)||0,hY(i)&&(d=!!i.leading,a=(u="maxWait"in i)?uP(h0(i.maxWait)||0,t):a,p="trailing"in i?!!i.trailing:p),y.cancel=function(){void 0!==l&&clearTimeout(l),c=0,r=h=s=l=void 0},y.flush=function(){return void 0===l?o:v(uT())},y},uO=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0},uR=function(e,t){return e>t},uL=function(e,t){return function e(t,i,r,s,a){return t===i||(null!=t&&null!=i&&(hF(t)||hF(i))?uM(t,i,r,s,e,a):t!=t&&i!=i)}(e,t)},uB=function(e,t,i){for(var r=-1,s=e.length;++r<s;){var a=e[r],o=t(a);if(null!=o&&(void 0===l?o==o&&!hN(o):i(o,l)))var l=o,h=a}return h},uz=function(e,t){var i,r;return t=dl(t,e),i=e,null==(e=(r=t).length<2?i:dd(i,d_(r,0,-1)))||delete e[dc(uO(t))]},uF=function(e){return dS(e)?void 0:e},uN=dg(function(e,t){var i={};if(null==e)return i;var r=!1;t=hk(t,function(t){return t=dl(t,e),r||(r=t.length>1),t}),cy(e,dN(e),i),r&&(i=uh(i,7,uF));for(var s=t.length;s--;)uz(i,t[s]);return i}),uk=function(e,t,i,r){if(!hY(e))return e;t=dl(t,e);for(var s=-1,a=t.length,o=a-1,l=e;null!=l&&++s<a;){var h=dc(t[s]),c=i;if("__proto__"===h||"constructor"===h||"prototype"===h)break;if(s!=o){var d=l[h];void 0===(c=r?r(d,h,l):void 0)&&(c=hY(d)?d:cp(t[s+1])?[]:{})}cv(l,h,c),l=l[h]}return e},uU=function(e,t,i){for(var r=-1,s=t.length,a={};++r<s;){var o=t[r],l=dd(e,o);i(l,o)&&uk(a,dl(o,e),l)}return a},uV=dg(function(e,t){return null==e?{}:uU(e,t,function(t,i){return null!=e&&uC(e,i,uE)})}),uj=function(e,t,i){var r=!0,s=!0;if("function"!=typeof e)throw TypeError("Expected a function");return hY(i)&&(r="leading"in i?!!i.leading:r,s="trailing"in i?!!i.trailing:s),uI(e,t,{leading:r,maxWait:t,trailing:s})};function uG(e){for(let t of Object.keys(e))void 0===e[t]&&delete e[t];return e}function uH(e,t){return Object.setPrototypeOf(e,t),e}var uW=!(typeof window>"u")&&window.navigator.userAgent.toLowerCase().includes(" electron/"),uq=(uW&&(()=>{if(typeof window>"u")return;let e=new URLSearchParams(window.location.search).get("desktop-app-version");return e?(window.localStorage.setItem("desktop-app-version",e),e):window.localStorage.getItem("desktop-app-version")??"0.0.6"})(),!(typeof window>"u")&&window.navigator.platform.toUpperCase().includes("MAC")),uX=!(typeof window>"u")&&(/iPad|iPhone|iPod/.test(window.navigator.userAgent)||uq&&"ontouchend"in document),uY=!(typeof window>"u")&&window.navigator.userAgent.toLowerCase().indexOf("firefox")>-1,uQ=!(typeof window>"u")&&("ontouchstart"in window||navigator.maxTouchPoints>0),uK=(()=>{if(typeof window>"u")return!1;let e=navigator.userAgent,t=navigator.vendor;return/Safari/i.test(e)&&/Apple Computer/.test(t)})(),uZ=Number((()=>{if(typeof window>"u")return null;let e=navigator.userAgent.match(/Version\/(\d+\.\d)/);return e&&e[1]})());function uJ(e){return Array.isArray(e)?e:[e]}function u$(e,t){let i=0;for(;i<e.length&&i<t.length;){if(e[i]<t[i])return -1;if(e[i]>t[i])return 1;i+=1}return i!==t.length?-1:i!==e.length?1:0}function u0(e){return uq?e.metaKey:e.ctrlKey}var u1=[],u2={},u3={},u4={};function u5(e){u1.includes(e)||u1.push(e)}function u6(e){delete u2[e.pointerId];for(let t=0;t<u1.length;t++)if(u1[t].pointerId===e.pointerId){u1.splice(t,1);break}}function u8(e){if("touch"!==e.pointerType)return;let t=u2[e.pointerId];void 0===t&&(t={x:0,y:0},u2[e.pointerId]=t),t.x=e.pageX,t.y=e.pageY}function u9(e){return u2[(e.pointerId===u1[0].pointerId?u1[1]:u1[0]).pointerId]}function u7(e){u3[e.key]=!0,u4[e.key]=void 0===u4[e.key]?1:u4[e.key]+1}function pe(e){if(uq&&u3.Meta)for(let e in u3)u3[e]=!1;else u3[e.key]=!1;u4={}}var pt,pi,pr,ps,pa,pn,po,pl,ph,pc=new Promise(e=>{po=e}),pd=new Promise(e=>{ph=e}),pu=class{modifyById(e,t){if(void 0===this[e])throw Error("not expected");{let i={...this,[e]:t};return Object.setPrototypeOf(i,pu.prototype),i}}add(e,t){return this.runOp({type:1,id:e,data:t})?.data??this}runOp(e){if(1===e.type){let t=this[e.id],i;i=void 0===t?{type:2,id:e.id}:{type:1,id:e.id,data:t};let{id:r,data:s}=e,a={...this,[r]:s};return Object.setPrototypeOf(a,pu.prototype),{data:a,actual:e,reverse:i}
3139}if(2===e.type){let{id:t}=e,i=this[t];if(void 0===i)return null;{let r={...this};return Object.setPrototypeOf(r,pu.prototype),delete r[t],{data:r,actual:e,reverse:{type:1,id:t,data:i}}}}return null}};function pp(e){if(void 0!==e.deepFreeze){e.deepFreeze(e);return}for(let t of Object.getOwnPropertyNames(e)){let i=e[t];i&&"object"==typeof i&&pp(i)}return Object.freeze(e)}var pf=class extends Error{};function pm(e){let t={...e};return Object.setPrototypeOf(t,Object.getPrototypeOf(e)),t}function pg(e,t,i){if(void 0===e?void 0===t?(e=0,t=10):e=t-10:void 0===t&&(t=e+10),e>t){let i=e;e=t,t=i}let r=[],s=1/(i+1);for(let a=0;a<i;a++){let i=e+(t-e)*(a+.75+.5*Math.random())*s;r.push(i)}return r}function pv(e){return e instanceof Uint8Array||e instanceof Uint16Array||e instanceof Uint32Array||e instanceof Int8Array||e instanceof Int16Array||e instanceof Int32Array||e instanceof Float32Array||e instanceof Float64Array}var py=class extends Array{constructor(...e){super(...e),Object.setPrototypeOf(this,py.prototype)}deepFreeze(){let e=0;for(;e<this.length;)pp(this[e]),e++}fillCaches0(e,t){for(let i of(this.objCaches.set(e.id,e),this.parentCaches.set(e.id,t),e.children))this.fillCaches0(i,e.id)}fillCaches(){if(void 0===this.objCaches)for(let e of(this.objCaches=new Map,this.parentCaches=new Map,this))this.fillCaches0(e,null)}randomId(){this.fillCaches();let e=Array.from(this.objCaches.keys());if(0!==e.length)return e[Math.max(0,Math.floor(Math.random()*e.length)-1)]}nonExistOrDescendantOf(e,t){if(!this.has(e))return!0;for(;e;){let i=this.parent(e);if(i===t)return!0;e=i}return!1}rootAcestor(e){for(;e;){let t=this.parent(e);if(t)e=t;else break}return e}isDescendantOf(e,t){for(;e;){let i=this.parent(e);if(i===t)return!0;e=i}return!1}data(e){return this.get(e)?.data}has(e){return void 0!==this.childrenOf(e)}get(e){return this.fillCaches(),this.objCaches.get(e)}childrenOf(e){return null===e?this:this.get(e)?.children}traverseFrom(e,t){if(null===e)this.traverse(t);else{let i=this.get(e);i&&function e(t,i){if(!0!==i(t.id,t.data))for(let r of t.children)e(r,i)}(i,t)}}traverse(e){!function e(t,i){for(let r of t)!0!==i(r.id,r.data)&&e(r.children,i)}(this,e)}totalSize(){return this.fillCaches(),this.objCaches.size}parent(e){return this.fillCaches(),this.parentCaches.get(e)}childrenArray(e){return null===e?this:this.get(e).children}modifyById(e,t){if(void 0===this.get(e))throw Error("not expected");{let i=this.parent(e),r=this.childrenArray(i),s=r.findIndex(t=>t.id===e);if(s<0)throw Error("not expected");let a=r[s];return(r=[...r])[s]={...a,data:t},this.modifyArrayBy(i,r)}}modifyArrayBy(e,t){let i=e,r=t;for(;null!==i;){let e=r,t=i;if(void 0===(i=this.parent(i)))throw Error();let s=(r=this.childrenArray(i)).findIndex(e=>e.id===t);if(s<0)throw Error();(r=[...r])[s]={...r[s],children:e}}Object.setPrototypeOf(r,py.prototype);let s=r;return s.fillCaches(),s}runOp(e){switch(e.type){case 7:return this.addOp(e);case 8:return this.deleteOp(e);case 9:return this.moveOp(e)}return null}checkDuplicatedIdRec({id:e,children:t}){if(void 0!==this.get(e))return!0;for(let e of t)if(this.checkDuplicatedIdRec(e))return!0;return!1}addOp(e){let{parent:t,fi:i,id:r,data:s,children:a}=e;if(null!==t&&void 0===this.get(t)||this.checkDuplicatedIdRec(e))return null;{let o=this.childrenArray(t),l={fi:i,id:r,data:s,children:a};return(o=[...o,l]).sort((e,t)=>e.fi-t.fi),e.localIndex=o.indexOf(l),{data:this.modifyArrayBy(t,o),actual:e,reverse:{type:8,id:r}}}}deleteOp(e){let{id:t}=e;if(null===this.get(t))return null;{let i=this.parent(t);if(void 0===i)return null;let r=this.childrenArray(i),s=r.findIndex(e=>e.id===t);e.localIndex=s;let a=(r=[...r]).splice(s,1)[0];return{data:this.modifyArrayBy(i,r),actual:e,reverse:{type:7,...a,parent:i}}}}moveOp(e){let{parent:t,fi:i,id:r}=e;if(null!==t&&void 0===this.get(t))return this.deleteOp({type:8,id:r});if(null!==t){let e=t;for(;null!==e;){if(void 0===e)throw Error();if(e===r)throw new pf("cyclic tree");e=this.parent(e)}}let s=this.parent(r);if(void 0===s)return null;let a=s,o=this.childrenArray(s),l=o.findIndex(e=>e.id===r),h=(o=[...o]).splice(l,1)[0],c=this.modifyArrayBy(s,o);s=t,o=c.childrenArray(s);let d=h.fi;return(o=[...o,h={...h,fi:i}]).sort((e,t)=>
3139e.fi-t.fi),e.localIndex=o.indexOf(h),{data:c=c.modifyArrayBy(s,o),actual:e,reverse:{type:9,parent:a,fi:d,id:r}}}previous(e,t){if(null===t){let t=this.childrenArray(e);return 0===t.length?null:t[t.length-1].id}let i=null;for(let r of this.childrenArray(e)){if(r.id===t)return i;i=r.id}return null}traverseSortNext(e){let t=this.parent(e);if(void 0!==t){let i=this.childrenArray(t),r=i.findIndex(t=>t.id===e)+1;if(r<i.length)return i[r].id;if(t)return this.traverseSortNext(t)}}sortNext(e){let t=this.childrenArray(e);return t.length>0?t[0].id:this.traverseSortNext(e)}traverseSortPrevious(e){let t=this.childrenArray(e);return t.length>0?this.traverseSortPrevious(t[t.length-1].id):e}sortPrevious(e){let t=this.parent(e);if(void 0!==t){let i=this.childrenArray(t),r=i.findIndex(t=>t.id===e)-1;return r>=0?this.traverseSortPrevious(i[r].id):t}}getAllSorted(e){let t=[];for(let i of e){let e=this.getWithSortKey(i.id);void 0!==e&&t.push({...i,...e})}for(let e of(t.sort((e,t)=>(function(e,t){let i=0;for(;i<e.length&&i<t.length;){if(e[i]<t[i])return -1;if(e[i]>t[i])return 1;i+=1}return i!==t.length?-1:i!==e.length?1:0})(e.sortKey,t.sortKey)),t))delete e.sortKey;return t}getWithSortKey(e){var t=e;let i=[],r=this.get(t),s=r;if(void 0!==r){for(;t;)i.splice(0,0,r.fi),null!==(t=this.parent(t))&&(r=this.get(t));return{...s,sortKey:i}}}insertBeforeHelper(e,t,i){return this.insertAfterHelper(e,this.previous(e,t),i)}insertAfterHelper(e,t,i){let r=this.childrenArray(e);if(null===t){if(0===r.length)return pg(0,i,i);{let e=r[0].fi;return pg(e-i,e,i)}}{let s=this.get(t);if(void 0===s||this.parent(t)!==e)throw Error("illegal args");let a=r.find(e=>e.fi>s.fi);if(void 0!==a)return pg(s.fi,a.fi,i);{let e=r[r.length-1].fi;return pg(e,e+i,i)}}}};(pS||(pS={})).runOp=function(e,t){if(0!==t.type)return null;if(Array.isArray(e)){let i=t.props,r={},s=[...e],a=!1;if(i)for(let e of Object.keys(i)){let t=parseInt(e);if(isNaN(t))throw Error("wrong index");r[e]=s[t],s[t]=i[e],a=!0}return a?{data:s,actual:t,reverse:{type:0,props:r}}:null}{let i=t.props,r={},s={...e},a=!1;if(i)for(let e of Object.keys(i)){r[e]=s[e];let t=i[e];void 0===t?delete s[e]:s[e]=t,a=!0}return a?{data:s,actual:t,reverse:{type:0,props:r}}:null}};var px=class extends Array{constructor(...e){super(...e),Object.setPrototypeOf(this,px.prototype)}deepFreeze(){let e=0;for(;e<this.length;)pp(this[e]),e++}fillCaches0(e){this.objCaches.set(e.id,e)}fillCaches(){if(void 0===this.objCaches)for(let e of(this.objCaches=new Map,Object.getOwnPropertyDescriptor(this,"objCaches").enumerable=!1,this))this.fillCaches0(e)}randomId(){this.fillCaches();let e=Array.from(this.objCaches.keys());if(0!==e.length)return e[Math.max(0,Math.floor(Math.random()*e.length)-1)]}data(e){return this.get(e)?.data}get(e){return this.fillCaches(),this.objCaches.get(e)}modifyById(e,t){if(void 0===this.get(e))throw Error("not expected");{let i=this,r=i.findIndex(t=>t.id===e);if(r<0)throw Error("not expected");let s=i[r];return(i=[...i])[r]={...s,data:t},this.modifyArrayBy(i)}}modifyArrayBy(e){return Object.setPrototypeOf(e,px.prototype),"u">typeof tc||e.fillCaches(),e}runOp(e){switch(e.type){case 4:return this.addOp(e);case 5:return this.deleteOp(e);case 6:return this.moveOp(e)}return null}addOp(e){let{fi:t,id:i,data:r}=e,s=this,a={fi:t,id:i,data:r};return(s=[...s,a]).sort((e,t)=>e.fi-t.fi),e.localIndex=s.indexOf(a),{data:this.modifyArrayBy(s),actual:e,reverse:{type:5,id:i}}}deleteOp(e){let{id:t}=e,i=this,r=i.findIndex(e=>e.id===t);if(-1===r)return null;e.localIndex=r;let s=(i=[...i]).splice(r,1)[0];return{data:this.modifyArrayBy(i),actual:e,reverse:{type:4,...s}}}moveOp(e){let{fi:t,id:i}=e,r=this,s=(r=[...r]).findIndex(e=>e.id===i);if(-1===s)return null;let a=r[s].fi,o={...r[s],fi:t};return r[s]=o,r.sort((e,t)=>e.fi-t.fi),e.localIndex=r.indexOf(o),{data:this.modifyArrayBy(r),actual:e,reverse:{type:6,fi:a,id:i}}}previous(e){if(null===e)return 0===this.length?null:this[this.length-1].id;let t=null;for(let i of this){if(i.id===e)return t;t=i.id}return null}insertBeforeHelper(e,t){return this.insertAfterHelper(this.previous(e),t)}insertAfterHelper(e,t){if(null===e){if(0===this.length)return pg(0,t,t);{let e=this[0].fi;return pg(e-t,e,t)}}{let i=this.get(e);if(void 0===i)throw Error("illegal args");let r=this.find(e=>e.fi>i.fi);if(void 0!==r)return pg(i.fi,r.fi,t);{let e=this[this.length-1].fi;return pg(e,e+t,t)}}}};function pb(e){return e&&"object"==typeof e&&e instanceof pA}var pw,pS,p_,pA=class{unusedFunOverridesTable(e){}runOp(e){let t=[],i=this,r=0,s={};for(;r<e.path.length;){if(t.push(i),void 0!==(i=void 0===i?void 0:i[e.path[r]])&&!pb(i))return null;r+=1}for(let[t,r]of(i=i?pm(i):new pA,Object.entries(e.props))){let e=i[t];s[t]=e,void 0===r?delete i[t]:i[t]=r}for(;r>0;){if(0===Object.keys(i).length){let s=t[r-1];s&&(i=pm(s),delete i[e.path[r-1]])}else{let s=t[r-1];if(s){let t=pm(s);t[e.path[r-1]]=i,i=t}else{let t=new pA;t[e.path[r-1]]=i,i=t}}r-=1}
3139let a=Object.setPrototypeOf(i,pA.prototype),o={...e,props:s};return{data:a,actual:e,reverse:o}}};function pM(e,t){if(void 0===t)return;let i=!1,r=e.map(e=>{let r=e.id,s=pE(e.data,t[r]);if(i=i||void 0!==s,void 0===s&&(s=e.data),!e.children)return{...e,id:r,data:s};{let a=pM(e.children,t);return void 0!==a?i=!0:a=e.children,{...e,id:r,data:s,children:a}}});if(i)return r}function pE(e,t){if(!pb(t))return t;if(e instanceof py){let i=pM(e,t);return void 0!==i&&Object.setPrototypeOf(i,Object.getPrototypeOf(e)),i}if(e instanceof px)return function(e,t){if(void 0===t)return;let i=!1,r=e.map(e=>{let r=e.id,s=pE(e.data,t[r]);return i=i||void 0!==s,void 0===s&&(s=e.data),{...e,id:r,data:s}});if(i)return Object.setPrototypeOf(r,Object.getPrototypeOf(e)),r}(e,t);if(Array.isArray(e)){let i=!1,r=e.map((e,r)=>{let s=pE(e,t[r]);return i=i||void 0!==s,void 0===s&&(s=e),s});return i?(Object.setPrototypeOf(r,Object.getPrototypeOf(e)),r):void 0}if(e instanceof pA)return pC(e,t);if(e&&"object"==typeof e){let i={},r=!1;for(let[s,a]of Object.entries(e)){let e=pE(a,t[s]);r=r||void 0!==e,void 0===e&&(e=a),i[s]=e}return r?(Object.setPrototypeOf(i,Object.getPrototypeOf(e)),i):void 0}}function pC(e,t){if(void 0===e)return t;if(void 0===t)return e;if(!pb(t))return t;if(!pb(e))return p_.apply(e,t);let i=new Set;for(let t of Object.keys(e))i.add(t);for(let e of Object.keys(t))i.add(e);let r=new pA;for(let s of i){let i=pC(void 0===e?void 0:e[s],void 0===t?void 0:t[s]);r[s]=i}return r}function pT(e,t){return null===e?null:(e.cur[e.len]=t,e.len+=1,e)}function pP(e){e&&(e.len-=1)}(pZ=p_||(p_={})).apply=function(e,t){return pE(e,t)??e},pZ.merge=function(e,t){return pC(e,t)},pZ.filterOp=function(e,t){let i=0,r=t.path,s=e;for(;i<r.length&&void 0!==s;){if(void 0===(s=p1.zoomOnce(s,r[i])))return t;if(!pb(s))return;i+=1}if(void 0===s)return t;if(pb(s)){if(0===t.type){let e={...t.props};for(let t of Object.keys(s))delete e[t];return{...t,props:e}}{if(1!==t.type&&4!==t.type&&7!==t.type)return t;let e=pM([t],s);return e?(console.log(e),e):t}}},(pJ||(pJ={})).replaceProps=function(e,t){let i=p1.zoom(t,e.path);if("object"!=typeof i)return{...e,props:{}};{let t={};for(let r of Object.keys(e.props))t[r]=i[r];return{...e,props:t}}},(e=>{function t(e,t){let i=t.path;for(var r=[];;){let s;if(e instanceof pA&&0===t.type&&null===(s=e.runOp({...t,path:i.slice(r.length)}))&&(s=void 0),void 0===s&&r.length===i.length&&(s=e instanceof py||e instanceof px||e instanceof pu?e.runOp(t):pS.runOp(e,t)),void 0!==s){if(null===s)return null;{let e=s.data;for(let t=r.length-1;t>=0;t--){let s=i[t],a=r[t];if(a instanceof py){if("number"==typeof s)throw Error("illegal arg");e=a.modifyById(s,e)}else if(a instanceof px){if("number"==typeof s)throw Error("illegal arg");e=a.modifyById(s,e)}else if(a instanceof pu){if("number"==typeof s)throw Error("illegal arg");e=a.modifyById(s,e)}else if(a instanceof pA)e=Object.setPrototypeOf({...a,[s]:e},pA.prototype);else if("object"!=typeof a)return null;else if(Array.isArray(a)){if("string"==typeof s&&isNaN(s=parseInt(s)))throw Error("Invalid path");let t=e;(e=[...a])[s]=t}else e={...a,[s]:e}}return{data:e,actual:{...s.actual,path:i},reverse:{...s.reverse,path:i}}}}let a=i[r.length],o;if(e instanceof py){if("number"==typeof a)throw Error("");o=e.get(a)?.data}else if(e instanceof px){if("number"==typeof a)throw Error("");o=e.get(a)?.data}else null!==e&&(o=e[a]);if(void 0===o)return null;r.push(e),e=o}}function i(e,t){for(let i=0;i<e.length&&i<t.length;i++)if(e[i]!==t[i])return!0;return!1}function r(e,t){if(e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(e[i]!==t[i])return!1;return!0}e.drop=function(e,t){return{...e,path:e.path.slice(t)}},e.applySimple=function(e,i){return t(e,i)?.data??e},e.apply=t,e.pathDisjoint=i,e.pathEq=r,e.commutative=function(e,t){return i(e.path,t.path)},e.subsumed=function(e,t){return!!(0===e.type&&0===t.type&&r(e.path,t.path))&&Object.keys(e.props).every(e=>void 0!==t.props[e])}})(p$||(p$={})),(e=>{function t(e,t){var i=e;let r=[],s=[];for(let e of t)try{if(3===e.type||5===e.type&&"variables"===e.path[e.path.length-1]){let t,a,o;if(3===e.type?(t=p1.zoom(i,[...e.path,e.id]),o=p$.apply(i,{...e,type:2})):(t=p1.zoom(i,[...e.path,e.id,"value"]),o=p$.apply(i,e)),null!==o){i=o.data;let[l,h]=function(e,t){let i={cur:[],result:[],len:0};return[e=function e(t,i,r){if(t instanceof py){let s=function t(i,r,s){let a=!1,o=i.map(i=>{let o=i.id,l=r[o];if(void 0!==l&&"string"==typeof l&&(a=!0,o=l,null!==s))throw Error("not supported");let h=e(i.data,r,pT(s,o));pP(s),a=a||void 0!==h,void 0===h&&(h=i.data);let c=t(i.children,r,s);return void 0!==c?a=!0:c=i.children,{...i,id:o,data:h,children:c}});if(a)return o}(t,i,r);return void 0!==s&&Object.setPrototypeOf(s,Object.getPrototypeOf(t)),s}if(t instanceof px)return function(t,i,r){let s=!1,a=t.map(t=>{let a=t.id,o=i[a];if(void 0!==o&&"string"==typeof o&&(s=!0,a=o,null!==r))throw Error("not supported");let l=e(t.data,i,pT(r,a));return pP(r),s=s||void 0!==l,void 0===l&&(l=t.data),{...t,id:a,data:l}});if(s)return Object.setPrototypeOf(a,Object.getPrototypeOf(t)),a}(t,i,r);if(Array.isArray(t)){let s=!1,a=t.map((t,a)=>{let o=e(t,i,pT(r,a));return pP(r),s=s||void 0!==o,void 0===o&&(o=t),o});return s?(Object.setPrototypeOf(a,Object.getPrototypeOf(t)),a):void 0}if(t&&"object"==typeof t&&!pv(t)){let s={},a=!1;for(let[o,l]of Object.entries(t))if("name"!==o&&"variableId"!==o){let t=i[o];if("string"==typeof t){if(null!==r)throw Error("not supported");a=!0,o=t}let h=e(l,i,pT(r,o));pP(r),a=a||void 0!==h,void 0===h&&(h=l),s[o]=h}else s[o]=l;return a?(Object.setPrototypeOf(s,Object.getPrototypeOf(t)),s):void 0}{var s;if("string"!=typeof t)return;let e=i[t];return void 0!==e&&(s=r,null!==s&&s.result.push(s.cur.slice(0,s.len))),e}}(e,t,i)??e,i.result]}(i,{[e.id]:t});i=l;for(let o=0;o<h.length;o++){let l=h[o],c=l.pop();if("number"==typeof c){let r=[c];for(let e=o+1;e<h.length;e++){let t=h[e],i=t[t.length-1];if("number"==typeof i&&p1.equal(l,t.slice(0,t.length-1)))r.push(i),h.splice(e,1);else break}let s=p1.zoom(i,l);a=s.map((t,i)=>r.includes(i)?e.id:t),t=s,c=l.pop()}else{if("alphaOverride"===c||"alpha"===c){let e=t/=100,r=p1.zoom(i,l.slice(0,l.length-2)),s=r.layers.map(t=>
3139t.id===l[l.length-1]?{...t,data:{...t.data,[c]:e}}:t);Object.setPrototypeOf(s,Object.getPrototypeOf(r.layers)),r.layers=s}a=e.id}r.push({type:0,path:l,props:{[c]:t}}),s.push({type:0,path:l,props:{[c]:a}})}s.push(o.reverse),r.push(o.actual)}}else{let t=p$.apply(i,e);null!==t&&(r.push(t.actual),i=t.data,s.push(t.reverse))}}catch(e){if(e instanceof pf)return null;throw e}return{data:i,actual:r,reverse:s.reverse()}}e.empty=function(){return[]},e.removePrefix=function(e,t){let i=[];for(let r of e){let[e,...s]=r.path;e===t&&i.push({...r,path:s})}return i},e.addPrefix=function(e,t){return e.map(e=>({...e,path:[t,...e.path]}))},e.concat=function(e,t){return[...e,...t]},e.compress=function(e,t){return[...e.filter(e=>!t.some(t=>p$.subsumed(e,t))),...t]},e.commutative=function(e,t){return e.every(e=>t.every(t=>p$.commutative(e,t)))},e.applyAll=function(e,i){for(let r of i){let i=t(e,r);null!==i&&(e=i.data)}return e},e.apply=t})(p0||(p0={}));var pD=Symbol(),pI=Symbol(),pO=Symbol(),pR=class{reportOp(e,t,i=[]){let r=this;if(null!==t){for(r._current=t.data;!(r instanceof pj);){let e=r._path,t=r._current;if(""!==e&&i.splice(0,0,e),null===(r=r._parent))return;r.update(e,t)}r.push(i,e,t.actual,t.reverse)}}deleteChildren(e){if(this._children){let t=this._children[e];if(t){let i=t[pO];i&&i(),delete this._children[e]}}}},pL=class extends pR{constructor(e,t,i){super(),this._parent=e,this._path=t,this._current=i}update(e,t){if(Array.isArray(this._current)){if("string"==typeof e&&isNaN(e=parseInt(e)))throw Error("Invalid path");this._current=[...this._current],this._current[e]=t}else this._current={...this._current,[e]:t}}runOp(e){this.reportOp(e,pS.runOp(this._current,e),e.path)}},pB=class extends pR{constructor(e,t,i){super(),this._parent=e,this._path=t,this._current=i}update(e,t){this._current={...this._current,[e]:t},Object.setPrototypeOf(this._current,pu.prototype)}runOp(e){this.reportOp(e,this._current.runOp(e))}},pz={get(e,t){if(t===pO)return()=>{e._parent=null};if(t===pD)return e._current;if(t===pI)return e;let{_current:i,_children:r}=e;if("push"===t&&Array.isArray(i))throw Error("not supported to expand array");let s=void 0===r?void 0:r[t];if(void 0!==s)return s;let a=i[t],o=pG(e,t,a);return o!==a?(void 0===r&&(r={},e._children=r),r[t]=o,o):a},has:(e,t)=>t in e._current,ownKeys:e=>Reflect.ownKeys(e._current),defineProperty(){throw Error("not supported")},getPrototypeOf:e=>Object.getPrototypeOf(e._current),setPrototypeOf(){throw Error("not supported")},getOwnPropertyDescriptor(e,t){let i=e._current,r=Reflect.getOwnPropertyDescriptor(i,t);return r&&{writable:!0,configurable:!0,enumerable:r.enumerable,value:i[t]}}},pF={...pz,set(e,t,i){let r={type:0,props:{[t]:pq(i)??i}};return e.deleteChildren(t),e.runOp(r),!0},deleteProperty:(e,t)=>(e.deleteChildren(t),e.runOp({type:0,props:{[t]:void 0}}),!0)},pN={...pz,set(e,t,i){return void 0===i?this.deleteProperty(e,t):(e.deleteChildren(t),e.runOp({type:1,id:t,data:i})),!0},deleteProperty:(e,t)=>(e.runOp({type:2,id:t}),!0)},pk=class extends pR{constructor(e,t,i){super(),this._children={},this._parent=e,this._path=t,this._current=i,this[pO]=()=>{this._parent=null}}unproxy(){return this._current}update(e,t){this._current=this._current.modifyById(e,t)}runOp(e){this.reportOp(e,this._current.runOp(e))}randomId(){return this._current.randomId()}isDescendantOf(e,t){return this._current.isDescendantOf(e,t)}childrenOf(e){return this._current.childrenOf(e)}traverse(e){return this._current.traverse(e)}get(e){return this._current.get(e)}parent(e){return this._current.parent(e)}traverse(e){this._current.traverse((t,i)=>{e(t,this.data(t))})}data(e){let{_current:t,_children:i}=this,r=void 0===i?void 0:i[e];if(void 0!==r)return r;let s=t.get(e)?.data,a=pG(this,e,s);return a!==s?(void 0===i&&(i={},this._children=i),i[e]=a,a):s}add(e,t,i,r,s){this.runOp({type:7,parent:e,fi:t,id:i,data:r,children:s})}move(e,t,i){this.runOp({type:9,parent:e,fi:t,id:i})}insertAfter(e,t,i){let r=this._current.insertAfterHelper(e,t,i.length);for(let t=0;t<i.length;t++){let s=i[t];this.add(e,r[t],s.id,s.data,s.children)}}insertBefore(e,t,i){let r=this._current.insertBeforeHelper(e,t,i.length);for(let t=0;t<i.length;t++){let s=i[t];this.add(e,r[t],s.id,s.data,s.children)}}moveAfter(e,t,i){let r=this._current.insertAfterHelper(e,t,i.length);for(let t=0;t<i.length;t++){let s=i[t];this.move(e,r[t],s)}}moveBefore(e,t,i){let r=this._current.insertBeforeHelper(e,t,i.length);for(let t=0;t<i.length;t++){let s=i[t];this.move(e,r[t],s)}}delete(e){this.deleteChildren(e),this.runOp({type:8,id:e})}sortNext(e){return this._current.sortNext(e)}sortPrevious(e){return this._current.sortPrevious(e)}getAllSorted(e){return this._current.getAllSorted(e)}},pU=class extends pR{constructor(e,t,i){super(),this._children={},this._parent=e,this._path=t,this._current=i,this[pO]=()=>{this._parent=null}}unproxy(){return this._current}get length(){return this._current.length}forEach(e){let t=this.length;for(let i=0;i<t;i++){let t=this._current[i].id,r=this._current[i].fi;e(this.data(this._current[i].id),t,r)}}find(e){let t=this.length;for(let i=0;i<t;i++){let t=this._current[i].id;if(e(this.data(t),t))return this.get(t)}}update(e,t){this._current=this._current.modifyById(e,t)}randomId(){return this._current.randomId()}get(e){return{...this._current.get(e),data:this.data(e)}}data(e){let{_current:t,_children:i}=this,r=void 0===i?void 0:i[e];if(void 0!==r)return r;let s=t.get(e)?.data,a=pG(this,e,s);return a!==s?(void 0===i&&(i={},this._children=i),i[e]=a,a):s}runOp(e){this.reportOp(e,this._current.runOp(e))}add(e,t,i){this.runOp({type:4,fi:e,id:t,data:i})}move(e,t){this.runOp({type:6,fi:e,id:t})}insertAfter(e,t){let i=this._current.insertAfterHelper(e,t.length);for(let e=0;e<t.length;e++){let r=t[e];this.add(i[e],r.id,r.data)}}insertBefore(e,t){let i=this._current.insertBeforeHelper(e,t.length);for(let e=0;e<t.length;e++){let r=t[e];this.add(i[e],r.id,r.data)}}moveAfter(e,t){let i=this._current.insertAfterHelper(e,t.length);for(let e=0;e<t.length;e++){let r=t[e];this.move(i[e],r)}}moveBefore(e,t){let i=this._current.insertBeforeHelper(e,t.length);for(let e=0;e<t.length;e++){let r=t[e];this.move(i[e],r)}}delete(e){this.deleteChildren(e),this.runOp({type:5,id:e})}};function pV(e,t,i){if(e.length>0){let r=e[e.length-1];if(0===r.type&&0===t.type&&p1.equal(r.path,i)){Object.assign(r.props,t.props);return}}e.push({...t,path:i})}var pj=class extends pR{constructor(e){super(),this.ts=[],this.actual=[],this.reverse=[],this._current=e}update(e,t){if(""!==e)throw Error("");this._current=t}push(e,t,i,r){pV(this.ts,t,e),pV(this.actual,i,e),pV(this.reverse,r,e)}result(){return{data:this._current,ts:this.ts,actual:this.actual,reverse:this.reverse.reverse()}}};function pG(e,t,i){return i instanceof py?new pk(e,t,i):i instanceof px?new pU(e,t,i):i instanceof pu?new Proxy(new pB(e,t,i),pN):null!==i&&"object"==typeof i?pv(i)?i:new Proxy(new pL(e,t,i),pF):i}function pH(e){let t=new pj(e);return[pG(t,"",e),t]}function pW(e,t){let[i,r]=pH(e);return t(i),r.result()}function pq(e){return e instanceof pk||e instanceof pU?e._current:null!==e&&"object"==typeof e?e[pD]:e}function pX(e,t){let i=[];if(!(t.length<=e.length))return null;for(var r=0;r<t.length;){if("*"===t[r])i.push(e[r]);else if(e[r]!==t[r])return null;r+=1}return i}(e=>{function t(e,t){return(e instanceof py||e instanceof pk)&&"string"==typeof t||(e instanceof px||e instanceof pU)&&"string"==typeof t?e.data(t):"number"==typeof t&&Array.isArray(e)||"string"==typeof t&&"object"==typeof e&&null!==e?e[t]:void 0}function i(e,i,r=0){for(;r<i.length&&void 0!==e;)e=t(e,i[r]),r+=1;return e}e.equal=function(e,t){if(t.length!==e.length)return!1;for(var i=0;i<e.length;){if(e[i]!==t[i])return!1;i+=1}return!0},e.removeOverridden=function(e,t,r){let s=i(r,e);if(void 0===s||"object"!=typeof s||null===s)return t;{let e={...t};
3139return Object.keys(s).forEach(t=>{delete e[t]}),e}},e.zoomOnce=t,e.zoom=i})(p1||(p1={}));var pY=class{},pQ=class extends pY{constructor(e){super(),this.id=e}},pK=class extends pY{constructor(e){super(),this.data=e}};try{p2=new TextDecoder}catch{}var pZ,pJ,p$,p0,p1,p2,p3,p4,p5,p6,p8,p9,p7,fe=0,ft=[],fi=ft,fr=0,fs={},fa=0,fn=0,fo=[],fl={useRecords:!1,mapsAsObjects:!0},fh=class{},fc=new fh;fc.name="MessagePack 0xC1";var fd=!1,fu=class{constructor(e){e&&(!1===e.useRecords&&void 0===e.mapsAsObjects&&(e.mapsAsObjects=!0),e.structures?e.structures.sharedLength=e.structures.length:e.getStructures&&((e.structures=[]).uninitialized=!0,e.structures.sharedLength=0)),Object.assign(this,e)}unpack(e,t){if(p3)return fF(()=>(fN(),this?this.unpack(e,t):fu.prototype.unpack.call(fl,e,t)));p4=t>-1?t:e.length,fe=0,fr=0,fn=0,p6=null,fi=ft,p8=null,p3=e;try{p7=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))}catch(t){throw p3=null,e instanceof Uint8Array?t:Error("Source must be a Uint8Array or Buffer but was a "+(e&&"object"==typeof e?e.constructor.name:typeof e))}if(this instanceof fu){if(fs=this,this.structures)return p5=this.structures,fp();(!p5||p5.length>0)&&(p5=[])}else fs=fl,(!p5||p5.length>0)&&(p5=[]);return fp()}unpackMultiple(e,t){let i,r=0;try{fd=!0;let s=e.length,a=this?this.unpack(e,s):fU.unpack(e,s);if(t){for(t(a);fe<s;)if(r=fe,!1===t(fp()))return}else{for(i=[a];fe<s;)r=fe,i.push(fp());return i}}catch(e){throw e.lastPosition=r,e.values=i,e}finally{fd=!1,fN()}}_mergeStructures(e,t){e=e||[];for(let t=0,i=e.length;t<i;t++){let i=e[t];i&&(i.isShared=!0,t>=32&&(i.highByte=t-32>>5))}for(let i in e.sharedLength=e.length,t||[])if(i>=0){let r=e[i],s=t[i];s&&(r&&((e.restoreStructures||(e.restoreStructures=[]))[i]=r),e[i]=s)}return this.structures=e}decode(e,t){return this.unpack(e,t)}};function fp(){try{if(!fs.trusted&&!fd){let e=p5.sharedLength||0;e<p5.length&&(p5.length=e)}let e=fm();if(fe==p4)p5.restoreStructures&&ff(),p5=null,p3=null,p9&&(p9=null);else if(fe>p4){let e=Error("Unexpected end of MessagePack data");throw e.incomplete=!0,e}else if(!fd)throw Error("Data read, but end of buffer not reached");return e}catch(e){throw p5.restoreStructures&&ff(),fN(),(e instanceof RangeError||e.message.startsWith("Unexpected end of buffer"))&&(e.incomplete=!0),e}}function ff(){for(let e in p5.restoreStructures)p5[e]=p5.restoreStructures[e];p5.restoreStructures=null}function fm(){let e=p3[fe++];if(e<160){if(e<128){if(e<64)return e;{let t=p5[63&e]||fs.getStructures&&fx()[63&e];return t?(t.read||(t.read=fv(t,63&e)),t.read()):e}}if(e<144){if(e-=128,fs.mapsAsObjects){let t={};for(let i=0;i<e;i++)t[fR()]=fm();return t}{let t=new Map;for(let i=0;i<e;i++)t.set(fm(),fm());return t}}{let t=Array(e-=144);for(let i=0;i<e;i++)t[i]=fm();return t}}if(e<192){let t=e-160;if(fn>=fe)return p6.slice(fe-fa,(fe+=t)-fa);if(0==fn&&p4<140){let e=t<16?fP(t):fT(t);if(null!=e)return e}return fb(t)}{let t;switch(e){case 192:return null;case 193:return p8?(t=fm())>0?p8[1].slice(p8.position1,p8.position1+=t):p8[0].slice(p8.position0,p8.position0-=t):fc;case 194:return!1;case 195:return!0;case 196:return fD(p3[fe++]);case 197:return t=p7.getUint16(fe),fe+=2,fD(t);case 198:return t=p7.getUint32(fe),fe+=4,fD(t);case 199:return fI(p3[fe++]);case 200:return t=p7.getUint16(fe),fe+=2,fI(t);case 201:return t=p7.getUint32(fe),fe+=4,fI(t);case 202:if(t=p7.getFloat32(fe),fs.useFloat32>2){let e=fk[(127&p3[fe])<<1|p3[fe+1]>>7];return fe+=4,(e*t+(t>0?.5:-.5)>>0)/e}return fe+=4,t;case 203:return t=p7.getFloat64(fe),fe+=8,t;case 204:return p3[fe++];case 205:return t=p7.getUint16(fe),fe+=2,t;case 206:return t=p7.getUint32(fe),fe+=4,t;case 207:return t=fs.int64AsNumber?4294967296*p7.getUint32(fe)+p7.getUint32(fe+4):p7.getBigUint64(fe),fe+=8,t;case 208:return p7.getInt8(fe++);case 209:return t=p7.getInt16(fe),fe+=2,t;case 210:return t=p7.getInt32(fe),fe+=4,t;case 211:return t=fs.int64AsNumber?4294967296*p7.getInt32(fe)+p7.getUint32(fe+4):p7.getBigInt64(fe),fe+=8,t;case 212:if(114==(t=p3[fe++]))return fL(63&p3[fe++]);{let e=fo[t];if(e)return e.read?(fe++,e.read(fm())):e.noBuffer?(fe++,e()):e(p3.subarray(fe,++fe));throw Error("Unknown extension "+t)}case 213:return 114==(t=p3[fe])?(fe++,fL(63&p3[fe++],p3[fe++])):fI(2);case 214:return fI(4);case 215:return fI(8);case 216:return fI(16);case 217:return t=p3[fe++],fn>=fe?p6.slice(fe-fa,(fe+=t)-fa):fw(t);case 218:return t=p7.getUint16(fe),fe+=2,fn>=fe?p6.slice(fe-fa,(fe+=t)-fa):fS(t);case 219:return t=p7.getUint32(fe),fe+=4,fn>=fe?p6.slice(fe-fa,(fe+=t)-fa):f_(t);case 220:return t=p7.getUint16(fe),fe+=2,fM(t);case 221:return t=p7.getUint32(fe),fe+=4,fM(t);case 222:return t=p7.getUint16(fe),fe+=2,fE(t);case 223:return t=p7.getUint32(fe),fe+=4,fE(t);default:if(e>=224)return e-256;if(void 0===e){let e=Error("Unexpected end of MessagePack data");throw e.incomplete=!0,e}throw Error("Unknown MessagePack token "+e)}}}var fg=/^[a-zA-Z_$][a-zA-Z\d_$]*$/;function fv(e,t){function i(){if(i.count++>2){let i=e.read=Function("r","return function(){return {"+e.map(e=>fg.test(e)?e+":r()":"["+JSON.stringify(e)+"]:r()").join(",")+"}}")(fm);return 0===e.highByte&&(e.read=fy(t,e.read)),i()}let r={};for(let t=0,i=e.length;t<i;t++)r[e[t]]=fm();return r}return i.count=0,0===e.highByte?fy(t,i):i}var fy=(e,t)=>function(){let i=p3[fe++];if(0===i)return t();let r=e<32?-(e+(i<<5)):e+(i<<5),s=p5[r]||fx()[r];if(!s)throw Error("Record id is not defined for "+r);return s.read||(s.read=fv(s,e)),s.read()};function fx(){let e=fF(()=>(p3=null,fs.getStructures()));return p5=fs._mergeStructures(e,p5)}var fb=fA,fw=fA,fS=fA,f_=fA;function fA(e){let t;if(e<16&&(t=fP(e)))return t;if(e>64&&p2)return p2.decode(p3.subarray(fe,fe+=e));let i=fe+e,r=[];for(t="";fe<i;){let e=p3[fe++];if((128&e)==0)r.push(e);else if((224&e)==192){let t=63&p3[fe++];r.push((31&e)<<6|t)}else if((240&e)==224){let t=63&p3[fe++],i=63&p3[fe++];r.push((31&e)<<12|t<<6|i)}else if((248&e)==240){let t=(7&e)<<18|(63&p3[fe++])<<12|(63&p3[fe++])<<6|63&p3[fe++];t>65535&&(t-=65536,r.push(t>>>10&1023|55296),t=56320|1023&t),r.push(t)}else r.push(e);r.length>=4096&&(t+=fC.apply(String,r),r.length=0)}return r.length>0&&(t+=fC.apply(String,r)),t}function fM(e){let t=Array(e);for(let i=0;i<e;i++)t[i]=fm();return t}function fE(e){if(fs.mapsAsObjects){let t={};for(let i=0;i<e;i++)t[fR()]=fm();return t}{let t=new Map;for(let i=0;i<e;i++)t.set(fm(),fm());return t}}var fC=String.fromCharCode;function fT(e){let t=fe,i=Array(e);for(let r=0;r<e;r++){let e=p3[fe++];if((128&e)>0){fe=t;return}i[r]=e}return fC.apply(String,i)}function fP(e){if(e<4){if(e<2){if(0===e)return"";{let e=p3[fe++];if((128&e)>1){fe-=1;return}return fC(e)}}{let t=p3[fe++],i=p3[fe++];if((128&t)>0||(128&i)>0){fe-=2;return}if(e<3)return fC(t,i);let r=p3[fe++];if((128&r)>0){fe-=3;return}return fC(t,i,r)}}{let t=p3[fe++],i=p3[fe++],r=p3[fe++],s=p3[fe++];if((128&t)>0||(128&i)>0||(128&r)>0||(128&s)>0){fe-=4;return}if(e<6){if(4===e)return fC(t,i,r,s);{let e=p3[fe++];if((128&e)>0){fe-=5;return}return fC(t,i,r,s,e)}}if(e<8){let a=p3[fe++],o=p3[fe++];if((128&a)>0||(128&o)>0){fe-=6;return}if(e<7)return fC(t,i,r,s,a,o);let l=p3[fe++];if((128&l)>0){fe-=7;return}return fC(t,i,r,s,a,o,l)}{let a=p3[fe++],o=p3[fe++],l=p3[fe++],h=p3[fe++];if((128&a)>0||(128&o)>0||(128&l)>0||(128&h)>0){fe-=8;return}if(e<10){if(8===e)return fC(t,i,r,s,a,o,l,h);{let e=p3[fe++];if((128&e)>0){fe-=9;return}return fC(t,i,r,s,a,o,l,h,e)}}if(e<12){let c=p3[fe++],d=p3[fe++];if((128&c)>0||(128&d)>0){fe-=10;return}if(e<11)return fC(t,i,r,s,a,o,l,h,c,d);let u=p3[fe++];if((128&u)>0){fe-=11;return}return fC(t,i,r,s,a,o,l,h,c,d,u)}{let c=p3[fe++],d=p3[fe++],u=p3[fe++],p=p3[fe++];if((128&c)>0||(128&d)>0||(128&u)>0||(128&p)>0){fe-=12;return}if(e<14){if(12===e)return fC(t,i,r,s,a,o,l,h,c,d,u,p);{let e=p3[fe++];if((128&e)>0){fe-=13;return}return fC(t,i,r,s,a,o,l,h,c,d,u,p,e)}}{let f=p3[fe++],m=p3[fe++];if((128&f)>0||(128&m)>0){fe-=14;return}if(e<15)return fC(t,i,r,s,a,o,l,h,c,d,u,p,f,m);let g=p3[fe++];if((128&g)>0){fe-=15;return}return fC(t,i,r,s,a,o,l,h,c,d,u,p,f,m,g)}}}}}function fD(e){return fs.copyBuffers?Uint8Array.prototype.slice.call(p3,fe,fe+=e):p3.subarray(fe,fe+=e)}function fI(e){let t=p3[fe++];if(fo[t])return fo[t](p3.subarray(fe,fe+=e));throw Error("Unknown extension type "+t)}var fO=Array(4096);function fR(){let e=p3[fe++];if(!(e>=160)||!(e<192))return fe--,fm();if(e-=160,fn>=fe)return p6.slice(fe-fa,(fe+=e)-fa);if(!(0==fn&&p4<180))return fb(e);let t=(e<<5^(e>1?p7.getUint16(fe):e>0?p3[fe]:0))&4095,i=fO[t],r=fe,s=fe+e-3,a,o=0;if(i&&i.bytes==e){for(;r<s;){if((a=p7.getUint32(r))!=i[o++]){r=1879048192;break}r+=4}for(s+=3;r<s;)if((a=p3[r++])!=i[o++]){r=1879048192;break}if(r===s)return fe=r,i.string;s-=3,r=fe}for(i=[],fO[t]=i,i.bytes=e;r<s;)a=p7.getUint32(r),i.push(a),r+=4;for(s+=3;r<s;)a=p3[r++],i.push(a);let l=e<16?fP(e):fT(e);return null!=l?i.string=l:i.string=fb(e)}var fL=(e,t)=>{var i=fm();let r=e;void 0!==t&&(e=e<32?-((t<<5)+e):(t<<5)+e,i.highByte=t);let s=p5[e];return s&&s.isShared&&((p5.restoreStructures||(p5.restoreStructures=[]))[e]=s),p5[e]=i,i.read=fv(i,r),i.read()},fB="object"==typeof self?self:global;fo[0]=()=>{},fo[0].noBuffer=!0,fo[101]=()=>{let e=fm();return(fB[e[0]]||Error)(e[1])},fo[105]=e=>{let t=p7.getUint32(fe-4);p9||(p9=new Map);let i=p3[fe],r,s={target:r=i>=144&&i<160||220==i||221==i?[]:{}};p9.set(t,s);let a=fm();return s.used?Object.assign(r,a):(s.target=a,a)}
3139,fo[112]=e=>{let t=p7.getUint32(fe-4),i=p9.get(t);return i.used=!0,i.target},fo[115]=()=>new Set(fm());var fz=["Int8","Uint8","Uint8Clamped","Int16","Uint16","Int32","Uint32","Float32","Float64","BigInt64","BigUint64"].map(e=>e+"Array");function fF(e){let t=p4,i=fe,r=fr,s=fa,a=fn,o=p6,l=fi,h=p9,c=p8,d=new Uint8Array(p3.slice(0,p4)),u=p5,p=p5.slice(0,p5.length),f=fs,m=fd,g=e();return p4=t,fe=i,fr=r,fa=s,fn=a,p6=o,fi=l,p9=h,p8=c,p3=d,fd=m,(p5=u).splice(0,p5.length,...p),fs=f,p7=new DataView(p3.buffer,p3.byteOffset,p3.byteLength),g}function fN(){p3=null,p9=null,p5=null}fo[116]=e=>{let t=e[0],i=fz[t];if(!i)throw Error("Could not find typed array for code "+t);return new fB[i](Uint8Array.prototype.slice.call(e,1).buffer)},fo[120]=()=>{let e=fm();return new RegExp(e[0],e[1])},fo[98]=e=>{let t=(e[0]<<24)+(e[1]<<16)+(e[2]<<8)+e[3],i=fe;fe+=t-4,(p8=[fm(),fm()]).position0=0,p8.position1=0;let r=fe;fe=i;try{return fm()}finally{fe=r}},fo[255]=e=>new Date(4==e.length?(16777216*e[0]+(e[1]<<16)+(e[2]<<8)+e[3])*1e3:8==e.length?((e[0]<<22)+(e[1]<<14)+(e[2]<<6)+(e[3]>>2))/1e6+((3&e[3])*4294967296+16777216*e[4]+(e[5]<<16)+(e[6]<<8)+e[7])*1e3:12==e.length?((e[0]<<24)+(e[1]<<16)+(e[2]<<8)+e[3])/1e6+((128&e[4]?-281474976710656:0)+1099511627776*e[6]+4294967296*e[7]+16777216*e[8]+(e[9]<<16)+(e[10]<<8)+e[11])*1e3:"invalid");var fk=Array(147);for(let e=0;e<256;e++)fk[e]=+("1e"+Math.floor(45.15-.30103*e));var fU=new fu({useRecords:!1});new Uint8Array((fU.unpack,fU.unpackMultiple,fU.unpack,new Float32Array(1)).buffer,0,4);try{fV=new TextEncoder}catch{}var fV,fj,fG,fH,fW,fq,fX="u">typeof td,fY=fX?td.allocUnsafeSlow:Uint8Array,fQ=fX?td:Uint8Array,fK=fX?4294967296:2144337920,fZ=0,fJ=null,f$=/[\u0080-\uFFFF]/,f0=Symbol("record-id"),f1=class extends fu{constructor(e){super(e),this.offset=0;let t,i,r,s,a,o=0,l=fQ.prototype.utf8Write?function(e,t,i){return fH.utf8Write(e,t,i)}:!!fV&&!!fV.encodeInto&&function(e,t){return fV.encodeInto(e,fH.subarray(t)).written},h=this;e||(e={});let c=e&&e.sequential,d=e.structures||e.saveStructures,u=e.maxSharedStructures;if(null==u&&(u=d?32:0),u>8160)throw Error("Maximum maxSharedStructure is 8160");let p=e.maxOwnStructures;null==p&&(p=d?32:64),c&&!e.saveStructures&&(this.structures=[]);let f=u>32||p+u>64,m=u+64,g=u+p+64;if(g>8256)throw Error("Maximum maxSharedStructure + maxOwnStructure is 8192");let v=[],y=0,x=0;this.pack=this.encode=function(e,l){if(fH||(fW=new DataView((fH=new fY(8192)).buffer,0,8192),fZ=0),(fq=fH.length-10)-fZ<2048?(fW=new DataView((fH=new fY(fH.length)).buffer,0,fH.length),fq=fH.length-10,fZ=0):fZ=fZ+7&2147483640,t=fZ,a=h.structuredClone?new Map:null,h.bundleStrings?(fJ=["",""],fH[fZ++]=214,fH[fZ++]=98,fJ.position=fZ-t,fZ+=4):fJ=null,i=h.structures){i.uninitialized&&(i=h._mergeStructures(h.getStructures()));let e=i.sharedLength||0;if(e>u)throw Error("Shared structures is larger than maximum shared structures, try increasing maxSharedStructures to "+i.sharedLength);if(!i.transitions){i.transitions=Object.create(null);for(let t=0;t<e;t++){let e=i[t];if(!e)continue;let r,s=i.transitions;for(let t=0,i=e.length;t<i;t++){let i=e[t];(r=s[i])||(r=s[i]=Object.create(null)),s=r}s[f0]=t+64}o=e}c||(i.nextId=e+64)}r&&(r=!1),s=i||[];try{if(b(e),fJ){fW.setUint32(fJ.position+t,fZ-fJ.position-t);let e=fJ;fJ=null,b(e[0]),b(e[1])}if(h.offset=fZ,a&&a.idsToInsert){(fZ+=6*a.idsToInsert.length)>fq&&S(fZ),h.offset=fZ;let e=function(e,t){let i,r=6*t.length,s=e.length-r;for(t.sort((e,t)=>e.offset>t.offset?1:-1);i=t.pop();){let t=i.offset,a=i.id;e.copyWithin(t+r,t,s);let o=t+(r-=6);e[o++]=214,e[o++]=105,e[o++]=a>>24,e[o++]=a>>16&255,e[o++]=a>>8&255,e[o++]=255&a,s=t}return e}(fH.subarray(t,fZ),a.idsToInsert);return a=null,e}return l&me?(fH.start=t,fH.end=fZ,fH):fH.subarray(t,fZ)}finally{if(i){if(x<10&&x++,y>1e4)i.transitions=null,x=0,y=0,v.length>0&&(v=[]);else if(v.length>0&&!c){for(let e=0,t=v.length;e<t;e++)v[e][f0]=0;v=[]}if(r&&h.saveStructures){let r=i.sharedLength||u;i.length>r&&(i=i.slice(0,r));let s=fH.subarray(t,fZ);return!1===h.saveStructures(i,o)?(h._mergeStructures(h.getStructures()),h.pack(e)):(o=r,s)}}l&mt&&(fZ=t)}};let b=e=>{fZ>fq&&(fH=S(fZ));var i,r=typeof e;if("string"===r){let t,r=e.length;if(fJ&&r>=8&&r<4096){let t=f$.test(e);fJ[t?0:1]+=e,fH[fZ++]=193,b(t?-r:r);return}t=r<32?1:r<256?2:r<65536?3:5;let s=3*r;if(fZ+s>fq&&(fH=S(fZ+s)),r<64||!l){let s,a,o,l=fZ+t;
3139for(s=0;s<r;s++)(a=e.charCodeAt(s))<128?fH[l++]=a:(a<2048?fH[l++]=a>>6|192:((64512&a)==55296&&(64512&(o=e.charCodeAt(s+1)))==56320?(a=65536+((1023&a)<<10)+(1023&o),s++,fH[l++]=a>>18|240,fH[l++]=a>>12&63|128):fH[l++]=a>>12|224,fH[l++]=a>>6&63|128),fH[l++]=63&a|128);i=l-fZ-t}else i=l(e,fZ+t,s);i<32?fH[fZ++]=160|i:i<256?(t<2&&fH.copyWithin(fZ+2,fZ+1,fZ+1+i),fH[fZ++]=217,fH[fZ++]=i):i<65536?(t<3&&fH.copyWithin(fZ+3,fZ+2,fZ+2+i),fH[fZ++]=218,fH[fZ++]=i>>8,fH[fZ++]=255&i):(t<5&&fH.copyWithin(fZ+5,fZ+3,fZ+3+i),fH[fZ++]=219,fW.setUint32(fZ,i),fZ+=4),fZ+=i}else if("number"===r){if(e>>>0===e)e<64?fH[fZ++]=e:e<256?(fH[fZ++]=204,fH[fZ++]=e):e<65536?(fH[fZ++]=205,fH[fZ++]=e>>8,fH[fZ++]=255&e):(fH[fZ++]=206,fW.setUint32(fZ,e),fZ+=4);else if(e>>0===e)e>=-32?fH[fZ++]=256+e:e>=-128?(fH[fZ++]=208,fH[fZ++]=e+256):e>=-32768?(fH[fZ++]=209,fW.setInt16(fZ,e),fZ+=2):(fH[fZ++]=210,fW.setInt32(fZ,e),fZ+=4);else{let t;if((t=this.useFloat32)>0&&e<4294967296&&e>=-2147483648){let i;if(fH[fZ++]=202,fW.setFloat32(fZ,e),t<4||(i=e*fk[(127&fH[fZ])<<1|fH[fZ+1]>>7])>>0===i){fZ+=4;return}fZ--}fH[fZ++]=203,fW.setFloat64(fZ,e),fZ+=8}}else if("object"===r){if(e){if(a){let i=a.get(e);if(i){if(!i.id){let e=a.idsToInsert||(a.idsToInsert=[]);i.id=e.push(i)}fH[fZ++]=214,fH[fZ++]=112,fW.setUint32(fZ,i.id),fZ+=4;return}a.set(e,{offset:fZ-t})}let r=e.constructor;if(r===Object)w(e,!0);else if(r===Array){(i=e.length)<16?fH[fZ++]=144|i:i<65536?(fH[fZ++]=220,fH[fZ++]=i>>8,fH[fZ++]=255&i):(fH[fZ++]=221,fW.setUint32(fZ,i),fZ+=4);for(let t=0;t<i;t++)b(e[t])}else if(r===Map)for(let[t,r]of((i=e.size)<16?fH[fZ++]=128|i:i<65536?(fH[fZ++]=222,fH[fZ++]=i>>8,fH[fZ++]=255&i):(fH[fZ++]=223,fW.setUint32(fZ,i),fZ+=4),e))b(t),b(r);else{for(let t=0,i=fj.length;t<i;t++)if(e instanceof fG[t]){let i,r=fj[t];if(r.write){r.type&&(fH[fZ++]=212,fH[fZ++]=r.type,fH[fZ++]=0),b(r.write.call(this,e));return}let s=fH,a=fW,o=fZ;fH=null;try{i=r.pack.call(this,e,e=>(fH=s,s=null,(fZ+=e)>fq&&S(fZ),{target:fH,targetView:fW,position:fZ-e}),b)}finally{s&&(fH=s,fW=a,fZ=o,fq=fH.length-10)}i&&(i.length+fZ>fq&&S(i.length+fZ),fZ=function(e,t,i,r){let s=e.length;switch(s){case 1:t[i++]=212;break;case 2:t[i++]=213;break;case 4:t[i++]=214;break;case 8:t[i++]=215;break;case 16:t[i++]=216;break;default:s<256?(t[i++]=199,t[i++]=s):(s<65536?(t[i++]=200,t[i++]=s>>8):(t[i++]=201,t[i++]=s>>24,t[i++]=s>>16&255,t[i++]=s>>8&255),t[i++]=255&s)}return t[i++]=r,t.set(e,i),i+=s}(i,fH,fZ,r.type));return}w(e,!e.hasOwnProperty)}}else fH[fZ++]=192}else if("boolean"===r)fH[fZ++]=e?195:194;else if("bigint"===r){if(e<BigInt(1)<<BigInt(63)&&e>=-(BigInt(1)<<BigInt(63)))fH[fZ++]=211,fW.setBigInt64(fZ,e);else if(e<BigInt(1)<<BigInt(64)&&e>0)fH[fZ++]=207,fW.setBigUint64(fZ,e);else if(this.largeBigIntToFloat)fH[fZ++]=203,fW.setFloat64(fZ,Number(e));else throw RangeError(e+" was too large to fit in MessagePack 64-bit integer format, set largeBigIntToFloat to convert to float-64");fZ+=8}else if("undefined"===r)this.encodeUndefinedAsNil?fH[fZ++]=192:(fH[fZ++]=212,fH[fZ++]=0,fH[fZ++]=0);else if("function"===r)b(this.writeFunction&&this.writeFunction());else throw Error("Unknown type: "+r)},w=!1===this.useRecords?this.variableMapSize?e=>{let t,i=Object.keys(e),r=i.length;r<16?fH[fZ++]=128|r:r<65536?(fH[fZ++]=222,fH[fZ++]=r>>8,fH[fZ++]=255&r):(fH[fZ++]=223,fW.setUint32(fZ,r),fZ+=4);for(let s=0;s<r;s++)b(t=i[s]),b(e[t])}:(e,i)=>{fH[fZ++]=222;let r=fZ-t;fZ+=2;let s=0;for(let t in e)(i||e.hasOwnProperty(t))&&(b(t),b(e[t]),s++);fH[r+++t]=s>>8,fH[r+t]=255&s}:e=>{let t=Object.keys(e),i,a=s.transitions||(s.transitions=Object.create(null)),o=0;for(let e=0,r=t.length;e<r;e++){let r=t[e];(i=a[r])||(i=a[r]=Object.create(null),o++),a=i}let l=a[f0];if(l)l>=96&&f?(fH[fZ++]=(31&(l-=96))+96,fH[fZ++]=l>>5):fH[fZ++]=l;else{(l=s.nextId)||(l=64),l<m&&this.shouldShareStructure&&!this.shouldShareStructure(t)?((l=s.nextOwnId)<g||(l=m),s.nextOwnId=l+1):(l>=g&&(l=m),s.nextId=l+1);let e=t.highByte=l>=96&&f?l-96>>5:-1;a[f0]=l,s[l-64]=t,l<m?(t.isShared=!0,s.sharedLength=l-63,r=!0,e>=0?(fH[fZ++]=(31&l)+96,fH[fZ++]=e):fH[fZ++]=l):(e>=0?(fH[fZ++]=213,fH[fZ++]=114,fH[fZ++]=(31&l)+96,fH[fZ++]=e):(fH[fZ++]=212,fH[fZ++]=114,fH[fZ++]=l),o&&(y+=x*o),v.length>=p&&(v.shift()[f0]=0),v.push(a),b(t))}for(let i=0,r=t.length;i<r;i++)b(e[t[i]])},S=e=>{let i;if(e>
313916777216){if(e-t>fK)throw Error("Packed buffer would be larger than maximum buffer size");i=Math.min(fK,4096*Math.round(Math.max((e-t)*(e>67108864?1.25:2),4194304)/4096))}else i=(Math.max(e-t<<2,fH.length-1)>>12)+1<<12;let r=new fY(i);return fW=new DataView(r.buffer,0,i),fH.copy?fH.copy(r,0,t,e):r.set(fH.slice(t,e)),fZ-=t,t=0,fq=r.length-10,fH=r}}useBuffer(e){fW=new DataView((fH=e).buffer,fH.byteOffset,fH.byteLength),fZ=0}};function f2(e,t,i,r){let s=e.byteLength;if(s+1<256){var{target:a,position:o}=i(4+s);a[o++]=199,a[o++]=s+1}else if(s+1<65536){var{target:a,position:o}=i(5+s);a[o++]=200,a[o++]=s+1>>8,a[o++]=s+1&255}else{var{target:a,position:o,targetView:l}=i(7+s);a[o++]=201,l.setUint32(o,s+1),o+=4}a[o++]=116,a[o++]=t,a.set(new Uint8Array(e.buffer,e.byteOffset,e.byteLength),o)}function f3(e,t){let i=e.byteLength;if(i<256){var r,s,{target:r,position:s}=t(i+2);r[s++]=196,r[s++]=i}else if(i<65536){var{target:r,position:s}=t(i+3);r[s++]=197,r[s++]=i>>8,r[s++]=255&i}else{var{target:r,position:s,targetView:a}=t(i+5);r[s++]=198,a.setUint32(s,i),s+=4}r.set(e,s)}function f4(e){if(e.Class){if(!e.pack&&!e.write)throw Error("Extension has no pack or write function");if(e.pack&&!e.type)throw Error("Extension has no type (numeric code to identify the extension)");fG.unshift(e.Class),fj.unshift(e)}e.unpack?fo[e.type]=e.unpack:fo[e.type]=e}fG=[Date,Set,Error,RegExp,ArrayBuffer,Object.getPrototypeOf(Uint8Array.prototype).constructor,fh],fj=[{pack(e,t,i){let r=e.getTime()/1e3;if((this.useTimestamp32||0===e.getMilliseconds())&&r>=0&&r<4294967296){let{target:e,targetView:i,position:s}=t(6);e[s++]=214,e[s++]=255,i.setUint32(s,r)}else if(r>0&&r<17179869184){let{target:i,targetView:s,position:a}=t(10);i[a++]=215,i[a++]=255,s.setUint32(a,4e6*e.getMilliseconds()+(r/1e3/4294967296>>0)),s.setUint32(a+4,r)}else if(isNaN(r)){if(this.onInvalidDate)return t(0),i(this.onInvalidDate());let{target:e,targetView:r,position:s}=t(3);e[s++]=212,e[s++]=255,e[s++]=255}else{let{target:i,targetView:s,position:a}=t(15);i[a++]=199,i[a++]=12,i[a++]=255,s.setUint32(a,1e6*e.getMilliseconds()),s.setBigInt64(a+4,BigInt(Math.floor(r)))}}},{pack(e,t,i){let r=Array.from(e),{target:s,position:a}=t(this.structuredClone?3:0);this.structuredClone&&(s[a++]=212,s[a++]=115,s[a++]=0),i(r)}},{pack(e,t,i){let{target:r,position:s}=t(this.structuredClone?3:0);this.structuredClone&&(r[s++]=212,r[s++]=101,r[s++]=0),i([e.name,e.message])}},{pack(e,t,i){let{target:r,position:s}=t(this.structuredClone?3:0);this.structuredClone&&(r[s++]=212,r[s++]=120,r[s++]=0),i([e.source,e.flags])}},{pack(e,t){this.structuredClone?f2(e,16,t):f3(fX?td.from(e):new Uint8Array(e),t)}},{pack(e,t){let i=e.constructor;i!==fQ&&this.structuredClone?f2(e,fz.indexOf(i.name),t):f3(e,t)}},{pack(e,t){let{target:i,position:r}=t(1);i[r]=193}}];var f5=new f1({useRecords:!1});f5.pack,f5.pack;var{NEVER:f6,ALWAYS:f8,DECIMAL_ROUND:f9,DECIMAL_FIT:f7}={NEVER:0,ALWAYS:1,DECIMAL_ROUND:3,DECIMAL_FIT:4},me=512,mt=1024,mi=new f1({structuredClone:!0});function mr(e){return"MouseDown"===e||"MouseUp"===e||"KeyDown"===e||"KeyUp"===e||"Collision"===e||"Trigger"===e}f4({Class:pu.prototype.constructor,type:1,write:e=>({...e}),read:e=>(Object.setPrototypeOf(e,pu.prototype),e)}),f4({Class:px.prototype.constructor,type:2,write:e=>[...e],read:e=>(Object.setPrototypeOf(e,px.prototype),e)}),f4({Class:py.prototype.constructor,type:3,write:e=>[...e],read:e=>(Object.setPrototypeOf(e,py.prototype),e)}),f4({Class:pQ.prototype.constructor,type:4,write:e=>e.id,read:e=>new pQ(e)}),f4({Class:pK.prototype.constructor,type:5,write:e=>e.data,read:e=>new pK(e)}),f4({Class:pA.prototype.constructor,type:6,write:e=>({...e}),read:e=>(Object.setPrototypeOf(e,pA.prototype),e)}),(e=>{function t(e){return mi.pack(e)}e.serialize=t,e.deserialize=function(e){return mi.unpack(e)},e.checksum=function(e){return(function(e){var t=0;if(0===e.length)return t;for(let i=0;i<e.length;i++)t=(t<<5)-t+e[i],t&=t;return t})(t(function e(t){if(pv(t))return t;if(Array.isArray(t))return t.map(e);if("object"!=typeof t||null===t)return t;{let i={};for(let r of Object.keys(t).sort())i[r]=e(t[r]);return Object.setPrototypeOf(i,Object.getPrototypeOf(t)),i}}(e))).toString()}})(ma||(ma={})),(ms=mn||(mn={})).toEventUIType=function(e){return"Conditional"===e.type?"Distance"===e.condition.type?"Distance":"StateChange":e.type},ms.fromEventUIType=function(e){return"Distance"===e||"StateChange"===e?"Conditional":e};var ms,ma,mn,mo,ml={LookAt:[],Follow:["Create"],DragDrop:["Transition","Animation","Audio","Particles","Create","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],MouseHover:["Transition","Animation","Particles","Create","Destroy","SwitchCamera","SceneTransition","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],Scroll:["Transition","Animation","Create","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],Start:["Transition","Animation","Audio","Particles","Video","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],Conditional:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],MouseDown:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],MouseUp:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],MousePress:["Transition","Animation","Audio","Particles","Video","Link","Create","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],KeyDown:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],KeyUp:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],KeyPress:["Transition","Animation","Audio","Particles","Video","Link","Create","SwitchCamera","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],GameControl:["Transition","Animation","Audio","Particles","Create","Conditional"],Collision:["Transition","Animation","Audio","Particles","Video","Create","Destroy","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],Trigger:["Transition","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],Resize:["Transition","Animation","Audio","Particles","Video","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],VariableChange:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],API:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],WEBHOOK:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],AIAssistantListener:["SetVariable"],AIAssistantTrigger:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"]};(my=mo||(mo={})).is=function(e){return"MouseDown"===e.type||"MouseUp"===e.type||"MousePress"===e.type||"KeyDown"===e.type||"KeyUp"===e.type||"KeyPress"===e.type},my.defaultData=function(e){return"MouseDown"===e||"MouseUp"===e||"MousePress"===e?{type:e,mode:"Object",disabled:!1,actions:new px}:{type:e,disabled:!1,key:void 0,actions:new px}},(mx=mW||(mW={})).propertyDefaultData=function(e){return{type:"Property",value:[e??null,"position","x"]}},mx.valueDefaultData={type:"Literal",value:0},(mb=mq||(mq={})).comparisonDefaultData=function(e){return{type:"Comparison",operator:"==",lOperand:mW.propertyDefaultData(e),rOperand:{...mW.valueDefaultData}}},mb.distanceDefaultData=function(e){return{type:"Distance",toObject:e??null,fromObject:e??null,distance:200}},mb.stateDefaultData=function(e,t){return{type:"State",object:e??null,state:t??null}},(mX||(mX={})).isConditionalSubActions=function(e){return void 0!==e.find(e=>"ifActions"===e||"elseActions"===e)},(mw=mY||(mY={})).is=function(e){return"Conditional"===e.type},mw.defaultData=function(e){return{type:"Conditional",disabled:!1,inActions:new px,outActions:new px,condition:mq.distanceDefaultData(e)}},(mQ||(mQ={})).defaultData={type:"DragDrop",cursor:"hand",disabled:!1,dampingFactor:1,objects:[],snapTo:"center",snapSurfaceMode:"bbox",snapSurfaceOffset:0,dropOn:"all",autoOrient:!0,dropDestinations:[],plane:"adaptive",planeMode:"locked",referenceFrame:"global",limits:[-1/0,1/0,-1/0,1/0,-1/0,1/0],drop:!1,resetOnSnapFail:!1,snapSpeed:20,resetSpeed:20,dragDropActions:{drag:new px,drop:new px}},(mK||(mK={})).defaultData={type:"Follow",disabled:!1,maxDelta:0,dampingFactor:1,target:"cursor",plane:"custom",resetOnPointerLeave:!0,resetAfterDistanceLimit:!0,enabledTranslation:[!0,!0,!0],limitDistanceEnabled:!1,limitDistance:1e3,snapDelay:0,resetSpeed:5,actions:new px},(mZ||(mZ={})).defaultData={type:"LookAt",disabled:!1,distance:1e3,dampingFactor:1,target:"cursor",tilt:"up",axis:"z",plane:"custom",resetOnPointerLeave:!0,resetAfterDistanceLimit:!0,enabledRotation:[!0,!0,!0],limitDistanceEnabled:!1,limitDistance:1e3,snapDelay:0,resetSpeed:5},(mS=mJ||(mJ={})).is=function(e){return"MouseHover"===e.type},mS.defaultData=function(){return{type:"MouseHover",disabled:!1,actions:new px}},(m_=m$||(m$={})).is=function(e){return"Scroll"===e.type},m_.defaultData=function(){return{type:"Scroll",disabled:!1,steps:100,trigger:"load",startFrom:"enter",enterAnchor:"top",startOffset:0,endAfter:400,actions:new px}},(mA=m0||(m0={})).is=function(e){return"Start"===e.type},mA.defaultData=function(){return{type:"Start",disabled:!1,actions:new px}},(mM=m1||(m1={})).is=function(e){return"Collision"===e.type},mM.defaultData=function(){return{type:"Collision",disabled:!1,target:"character",actions:new px}},(mE=m2||(m2={})).is=function(e){return"Trigger"===e.type},mE.defaultData=function(e,t){return{type:"Trigger",disabled:!1,target:"all",triggeringObjects:[],actions:new px,triggerZone:"box",position:t.toArray(),rotation:[0,0,0],size:e.toArray(),radius:e.length()/2,helperVisible:!0}},(mC=m3||(m3={}
vendor: 6,755 bytes, line 3139
3139)).defaultSizes={mobile:[480,480],tablet:[768,768],desktop:[1200,1200],custom:[769,1200]},mC.is=function(e){return"Resize"===e.type},mC.sizeToDevice=function(e){return"string"==typeof e?e:"custom"},mC.deviceToSize=function(e){return"string"==typeof e?[...mC.defaultSizes[e]]:[...e]},mC.defaultData=function(){let e={size:"mobile",operator:"<",actions:new px},t={size:"tablet",operator:"<",actions:new px},i={size:[...mC.defaultSizes.custom],operator:"<>",actions:new px},r=new px;return r.push({id:tY.generateUUID(),fi:0,data:e},{id:tY.generateUUID(),fi:1,data:t},{id:tY.generateUUID(),fi:2,data:i}),{type:"Resize",disabled:!1,orientation:"horizontal",breakpoints:r}},mC.defaultBreakpointData=function(){return{size:[...mC.defaultSizes.custom],operator:"<>",actions:new px}},(mT=m4||(m4={})).propertyPaths={Position:["position"],"Position X":["position","x"],"Position Y":["position","y"],"Position Z":["position","z"],Rotation:["rotation"],"Rotation X":["rotation","x"],"Rotation Y":["rotation","y"],"Rotation Z":["rotation","z"],Scale:["scale"],"Scale X":["scale","x"],"Scale Y":["scale","y"],"Scale Z":["scale","z"],Width:["width"],Height:["height"],Depth:["depth"],"Mouse Position X":["mouse","x"],"Mouse Position Y":["mouse","y"],"Mouse Pressed":["mouse","pressed"],"Screen Width":["mouse","width"],"Screen Height":["mouse","height"],"Hit Position X":["raycast","x"],"Hit Position Y":["raycast","y"],"Hit Position Z":["raycast","z"],"Hit Object Position X":["raycast","objX"],"Hit Object Position Y":["raycast","objY"],"Hit Object Position Z":["raycast","objZ"]},mT.is=function(e){return"VariableChange"===e.type},mT.defaultData=function(){return{disabled:!1,type:"VariableChange",actions:new px,variableId:"",objectId:null,property:"Position X"}},(mP=m5||(m5={})).is=function(e){return"API"===e.type},mP.defaultData=function(){return{disabled:!1,type:"API",successActions:new px,errorActions:new px,userAPIId:""}},(mD=m6||(m6={})).is=function(e){return"WEBHOOK"===e.type},mD.defaultData=function(){return{disabled:!1,type:"WEBHOOK",actions:new px,userWebhookId:""}},(mI=m8||(m8={})).is=function(e){return"AIAssistantListener"===e.type},mI.defaultData=function(){return{disabled:!1,type:"AIAssistantListener",actions:new px,analysis:"average",analysisRange:[0,71],analysisSingle:0}},(mO=m9||(m9={})).is=function(e){return"AIAssistantTrigger"===e.type},mO.defaultData=function(){return{disabled:!1,description:"",type:"AIAssistantTrigger",actions:new px}};var mh="personal camera",mc="a218fcc3-276b-49b9-b485-49037fd14f5f";function md(e){return"string"==typeof e&&36===e.length&&/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)}(e=>{function t(e,t){return Math.pow(t[0]-e[0],2)+Math.pow(t[1]-e[1],2)}function i(e,i){return Math.sqrt(t(e,i))}function r(t,i,r){let s=e.sub(i,t),a=e.sub(r,t),o=e.dot(s,a)/e.dot(s,s),l=e.scalarMultiply(s,o);return e.add(t,l)}e.isEqual=function(e,t){return e[0]===t[0]&&e[1]===t[1]},e.lerp=function(e,t,i){return[e[0]+(t[0]-e[0])*i,e[1]+(t[1]-e[1])*i]},e.add=function(e,t){return[e[0]+t[0],e[1]+t[1]]},e.sub=function(e,t){return[e[0]-t[0],e[1]-t[1]]},e.multiply=function(e,t){return[e[0]*t[0],e[1]*t[1]]},e.divide=function(e,t){return[e[0]/t[0],e[1]/t[1]]},e.distanceSquared=t,e.distance=i,e.dot=function(e,t){return e[0]*t[0]+e[1]*t[1]},e.scalarMultiply=function(e,t){return[e[0]*t,e[1]*t]},e.projectionOnto=r,e.projectionOntoDistance=function(e,t,s){return i(e,r(e,t,s))},e.center=function(e,t){return[(e[0]+t[0])*.5,(e[1]+t[1])*.5]}})(m7||(m7={})),(mR=ge||(ge={})).isEqual=function(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]},mR.add=function(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]},mR.sub=function(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]},mR.div=function(e,t){return[e[0]/t[0],e[1]/t[1],e[2]/t[2]]},mR.mul=function(e,t){return[e[0]*t[0],e[1]*t[1],e[2]*t[2]]},mR.dist=function(e,t){return Math.hypot(e[0]-t[0],e[1]-t[1],e[2]-t[2])},mR.lerp=function(e,t,i){return[e[0]+(t[0]-e[0])*i,e[1]+(t[1]-e[1])*i,e[2]+(t[2]-e[2])*i]},(mL=gt||(gt={})).isEqual=function(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]},mL.lerp=function(e,t,i){return[e[0]+(t[0]-e[0])*i,e[1]+(t[1]-e[1])*i,e[2]+(t[2]-e[2])*i,e[3]+(t[3]-e[3])*i]},(e=>{let t=180/Math.PI,i=Math.PI/180;function r(e){return"number"==typeof e?e*t:e}function s(e){return"number"==typeof e?e*i:e}e.radToDeg=function(e){return[r(e[0]),r(e[1]),r(e[2])]},e.degToRad=function(e){return[s(e[0]),s(e[1]),s(e[2])]}})(gi||(gi={})),(mB=gr||(gr={})).identity=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],mB.isEqual=function(e,t){for(let i=0;i<16;i++)if(e[i]!==t[i])return!1;return!0},mB.simplify=function(e){return e??mB.identity},mB.applyMatrix4=function(e,t){let i=t.slice(0);for(var r=0,s=t.length;r<s;r+=3){let s=e[3]*t[r]+e[7]*t[r+1]+e[11]*t[r+2]+e[15];i[r]=(e[0]*t[r]+e[4]*t[r+1]+e[8]*t[r+2]+e[12])/s,i[r+1]=(e[1]*t[r]+e[5]*t[r+1]+e[9]*t[r+2]+e[13])/s,i[r+2]=(e[2]*t[r]+e[6]*t[r+1]+e[10]*t[r+2]+e[14])/s}return i},(mz=gs||(gs={})).isRGB=function(e){return"object"==typeof e&&"number"==typeof e.r&&"number"==typeof e.g&&"number"==typeof e.b},mz.white={r:1,g:1,b:1},mz.red={r:1,g:0,b:0},mz.black={r:0,g:0,b:0},mz.toRgb255a1=function(e){return{r:Math.round(255*e.r),g:Math.round(255*e.g),b:Math.round(255*e.b),a:1}},mz.clone=function(e){return{r:e.r,g:e.g,b:e.b}},mz.fromHex=function(e){return{r:((e=Math.floor(e))>>16&255)/255,g:(e>>8&255)/255,b:(255&e)/255}},mz.toHex=function(e){return 65536*Math.round(255*e.r)+256*Math.round(255*e.g)+Math.round(255*e.b)},mz.equals=function(e,t){return e.r===t.r&&e.g===t.g&&e.b===t.b},mz.equalsFixed=function(e,t){return e.r.toFixed(2)===t.r.toFixed(2)&&e.g.toFixed(2)===t.g.toFixed(2)&&e.b.toFixed(2)===t.b.toFixed(2)},mz.lerp=function(e,t,i){return{r:e.r+(t.r-e.r)*i,g:e.g+(t.g-e.g)*i,b:e.b+(t.b-e.b)*i}},(mF=ga||(ga={})).white={...gs.white,a:1},mF.transparent={...gs.white,a:0},mF.from0to1=function(e){return{r:e[0],g:e[1],b:e[2],a:e[3]}},mF.fromHexAndA=function(e,t){return{...gs.fromHex(e),a:t}},mF.toRgb255a1=function(e){return{r:Math.round(255*e.r),g:Math.round(255*e.g),b:Math.round(255*e.b),a:e.a}},mF.equals=function(e,t){return gs.equals(e,t)&&e.a===t.a},mF.equalsFixed=function(e,t){return gs.equalsFixed(e,t)&&e.a.toFixed(2)===t.a.toFixed(2)},mF.lerp=function(e,t,i){return{r:e.r+(t.r-e.r)*i,g:e.g+(t.g-e.g)*i,b:e.b+(t.b-e.b)*i,a:e.a+(t.a-e.a)*i}},mF.toStyle=function({r:e,g:t,b:i,a:r}=mF.white){return`rgba(${255*e}, ${255*t}, ${255*i}, ${r})`},(gn||(gn={})).identity={position:[0,0,0],rotation:[0,0,0],scale:[1,1,1]},(go||(go={})).defaultData={mass:1,stiffness:80,damping:10,velocity:0},(gl||(gl={})).defaultData={control1:[.5,0],control2:[.5,1]},(r=gh||(gh={})).linear=[0,0,1,1],r.ease=[.25,.1,.25,1],r.easeIn=[.42,0,1,1],r.easeOut=[0,0,.58,1],r.easeInOut=[.42,0,.58,1],(mN=gc||(gc={}
3139)).all=["PerspectiveCamera","OrthographicCamera"],mN.is=function(e){return mN.all.includes(e)},(mk=gd||(gd={})).DefaultUp=[0,1,0],mk.DefaultTargetOffset=1e3,mk.defaultData={far:1e5,type:"OrthographicCamera",perspective:{near:70,fov:45,zoom:1},orthographic:{near:-1e5,zoom:1},up:mk.DefaultUp,isUpVectorFlipped:!1,targetOffset:mk.DefaultTargetOffset},mk.getZoom=function(e){return"PerspectiveCamera"===e.type?e.perspective?.zoom??1:e.orthographic?.zoom??1},(mU=gu||(gu={})).defaultData=function(e,t=.1){return{disabled:!1,type:"linear",hideBase:!1,count:3,radial:{radius:2*Math.max(e[0],e[1]),start:0,end:360,alignment:!1,axis:"y",scale:[1,1,1],rotation:[0,0,0],position:[0,0,0]},toObject:{object:"",spreadType:"random",scale:[0,0,0],rotation:[0,0,0],position:[0,0,0],axis:"x",seed:0,count:99,align:"normal"},linear:{scale:[1,1,1],rotation:[0,0,0],position:[e[0]+e[0]*t,0,0]},grid:{count:[2,2,2],size:e.map(e=>e*(1+t)),useCenter:!0},randomness:!1,randomnessObject:{strength:100,scale:[0,0,0],rotation:[0,0,0],position:[0,0,0],movement:1,seed:0,freqScale:10,noiseType:"perlin"}}},mU.merge=function(e,t){let i={...e};if(mu.forEach(r=>{Object.assign(i,{[r]:t[r]??e[r]})}),i.radial={...e.radial},t.radial){let r=e.radial,s=t.radial;mp.forEach(e=>{Object.assign(i.radial,{[e]:s[e]??r[e]})})}if(i.linear={...e.linear},t.linear){let r=e.linear,s=t.linear;mf.forEach(e=>{Object.assign(i.linear,{[e]:s[e]??r[e]})})}if(i.grid={...e.grid},t.grid){let r=e.grid,s=t.grid;mm.forEach(e=>{Object.assign(i.grid,{[e]:s[e]??r[e]})})}if(i.toObject={...e.toObject},t.toObject){let r=e.toObject,s=t.toObject;mg.forEach(e=>{Object.assign(i.toObject,{[e]:s[e]??r[e]})})}if(i.randomnessObject={...e.randomnessObject},t.randomnessObject){let r=e.randomnessObject,s=t.randomnessObject;mv.forEach(e=>{Object.assign(i.randomnessObject,{[e]:s[e]??r[e]})})}return i},(mV=gp||(gp={})).defaultData={radial:{},linear:{},grid:{},toObject:{},randomnessObject:{}},s=["radial","linear","grid","toObject","randomnessObject"],mV.toOps=function(e,t){let i=[];for(let r of(void 0!==e.count&&i.push({type:0,path:t,props:{count:e.count}}),s)){let s=e[r];s&&Object.keys(s).length>0&&i.push({type:0,path:[...t,r],props:s})}return i};var mu=["count"],mp=["radius","start","end","position","scale","rotation"],mf=["position","scale","rotation"],mm=["count","size"],mg=["count","position","scale","rotation"],mv=["strength","scale","rotation","position","movement","seed","freqScale"];(mj=gf||(gf={})).all=["PointLight","SpotLight","DirectionalLight","HemisphereLight"],mj.is=function(e){return mj.all.includes(e)},(gm||(gm={})).defaultData=function(e){return function(e){if("PointLight"===e)return{type:e,color:ga.white,intensity:1,distance:2e3,decay:1,shadows:!0,shadowResolution:1024,shadowRadius:1,penumbraSize:.5,depth:1e5};if("SpotLight"===e)return{type:e,color:ga.white,intensity:1,distance:2e3,decay:1,shadows:!0,penumbra:0,angle:30/180*Math.PI,depth:1e5,penumbraSize:.5,shadowResolution:1024,shadowRadius:1};if("DirectionalLight"===e)return{type:e,color:ga.white,intensity:1,shadows:!0,size:2e3,depth:1e5,penumbraSize:.5,shadowResolution:1024,shadowRadius:1};throw Error("not implemented")}(e)},(a=gg||(gg={})).defaultShapeData={type:"PlaneEmitterShape",size:[100,100,100]},a.defaultCollisionData={colliderEntityId:null,collisionBounce:.75},a.defaultData={renderMaterial:{type:"particleMaterial",color:{r:1,g:.2,b:.545,a:1},color2:{r:.945,g:.714,b:.184,a:1},coloring:"gradient",ease:"linearFadeOut",easeSize:"linearFadeOut",transparent:!0,size:[40,40],texture:"pt_default_particle",spriteRotation:[0,0]},birthRatePerSec:50,gravity:1,noiseStrength:0,noiseScale:0,noiseSeed:1,noiseType:"curl",randomRotation:0,randomScale:.2,randomMass:.5,rootObjectType:"instancedMesh",life:1,direction:[0,0,0],directionMode:"axis",speed:10,shape:a.defaultShapeData,autoPlay:!0,emitTimeDelay:0,emitTimeCycle:"infinity",emitTimeDuration:1,...a.defaultCollisionData},(gv||(gv={})).defaultData={enabled:"visibility",fusedBody:!0,rigidBody:"positioned",density:1,pointMass:0,gravityScale:1,friction:.5,damping:0,restitution:.2,colliderType:"convex",enabledRotation:[!0,!0,!0],enabledTranslation:[!0,!0,!0]},(mG=gy||(gy={})).defaultData={castShadow:!0,receiveShadow:!0}
vendor: 13,983 bytes, line 3139
3139,mG.equals=function(e,t){return e.castShadow===t.castShadow&&e.receiveShadow===t.receiveShadow},(mH=gx||(gx={})).defaultData={flatShading:!1,wireframe:!1,side:0},mH.equals=function(e,t){return e.flatShading===t.flatShading&&e.side===t.side&&e.wireframe===t.wireframe},(gb||(gb={})).defaultData={...gx.defaultData,...gy.defaultData},(gw||(gw={})).getMaterialData=function(e,t){let i=[];if("material"in e){let r="string"==typeof e.material?t.materials[e.material]??t.lib.materials[e.material]?.asset:e.material;r&&i.push(r)}else if("materials"in e)for(let r of e.materials){let e="string"==typeof r?t.materials[r]??t.lib.materials[r]?.asset:r;e&&i.push(e)}return i},(o=gS||(gS={})).defaultVideo={data:"",thumb:"/_assets/_videos/catThumb.png",type:"video",name:"Cat video"},o.maxSize=3e7,(g_||(g_={})).is=function(e){return"texture"===e||"video"===e||"color"===e||"depth"===e||"normal"===e||"gradient"===e||"noise"===e||"fresnel"===e||"rainbow"===e||"toon"===e||"outline"===e||"particle"===e||"transmission"===e||"matcap"===e||"displace"===e||"pattern"===e||"light"===e},(gA||(gA={})).is=function(e){return"phong"===e||"toon"===e||"lambert"===e||"physical"===e};var my,mx,mb,mw,mS,m_,mA,mM,mE,mC,mT,mP,mD,mI,mO,mR,mL,mB,mz,mF,mN,mk,mU,mV,mj,mG,mH,mW,mq,mX,mY,mQ,mK,mZ,mJ,m$,m0,m1,m2,m3,m4,m5,m6,m8,m9,m7,ge,gt,gi,gr,gs,ga,gn,go,gl,gh,gc,gd,gu,gp,gf,gm,gg,gv,gy,gx,gb,gw,gS,g_,gA,gM,gE=["mode","gradientType","noiseType","displacementType","projection","cnormal","crop","axis","side"],gC=["wrapping","image","video","name","minFilter","magFilter"];(vM=gM||(gM={})).patch=function(e,t){let{texture:i,...r}=t;if(Object.assign(e,r),i){let t=e.texture;t&&Object.assign(t,i)}},vM.defaultData=function(e,t){return"light"===e&&t?function(e){let t={mode:0,isMask:!1,visible:!0,bumpMap:void 0,bumpMapIntensity:5,roughnessMap:void 0,alphaOverride:1};switch(e){case"phong":return{...t,category:"phong",specular:{r:.2,g:.2,b:.2},shininess:5,type:"light",visible:!0,mode:0,occlusion:!0,alpha:.6};case"toon":return{...t,category:"toon",specular:{r:.2,g:.2,b:.2},shininess:10,type:"light",alpha:1};case"lambert":return{...t,category:"lambert",emissive:{r:0,g:0,b:0},type:"light",alpha:1,visible:!0,mode:0,occlusion:!0};case"physical":return{...t,category:"physical",roughness:.2,metalness:.2,reflectivity:.2,type:"light",alpha:1,visible:!0,mode:0,occlusion:!0}}}(t):function(e){let t={alpha:1,mode:0,isMask:!1,visible:!0};switch(e){case"texture":return{...t,type:"texture",size:[128,128],blending:0,axis:"x",side:2,projection:0,texture:{image:"image_0",wrapping:1e3,repeat:[1,1],offset:[0,0],rotation:0,minFilter:1008,magFilter:1006},crop:!1};case"video":return{...t,type:"video",size:[128,128],blending:0,axis:"x",side:2,projection:0,texture:{video:gS.defaultVideo,wrapping:1001,repeat:[1,1],offset:[0,0],rotation:0,minFilter:1008,magFilter:1006},crop:!1};case"color":return{...t,type:"color",color:gs.fromHex(5526619)};case"depth":return{...t,type:"depth",gradientType:1,smooth:!1,isVector:!0,isWorldSpace:!1,origin:[0,0,0],direction:[1,0,0],colors:[[1,1,1,1],[0,0,0,1]],steps:[0,1],near:50,far:200};case"normal":return{...t,type:"normal",cnormal:[1,1,1]};case"gradient":return{...t,type:"gradient",gradientType:0,smooth:!1,colors:[[0,0,0,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1]],steps:[0,1,1,1,1,1,1,1,1,1],num:2,angle:0,offset:[0,0],morph:[0,0]};case"noise":return{...t,type:"noise",size:[100,100,100],noiseType:0,scale:1,move:1,colorA:{...gs.fromHex(6710886),a:1},colorB:{...gs.fromHex(6710886),a:1},colorC:{...gs.fromHex(16777215),a:1},colorD:{...gs.fromHex(16777215),a:1},distortion:[1,1],fA:[1.7,9.2],fB:[8.3,2.8],voronoiStyle:0,highCut:1,lowCut:0,smoothness:.3,seed:0,quality:1};case"fresnel":return{...t,type:"fresnel",color:ga.fromHexAndA(16777215,1),bias:.1,scale:1,intensity:2,factor:1};case"rainbow":return{...t,type:"rainbow",filmThickness:30,movement:0,wavelengths:[0,0,0],noiseStrength:0,noiseScale:1,offset:[0,0,0]};case"toon":return{...t,type:"toon",positioning:2,colors:[[0,0,0,1],[.5,.5,.5,1],[.5,.5,.5,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1]],steps:[0,.475,.525,1,1,1,1,1,1,1],num:4,source:[0,1e3,0],isWorldSpace:!0,noiseStrength:0,noiseScale:1,shadowColor:ga.fromHexAndA(0,0),offset:[0,0,0]};case"outline":return{...t,type:"outline",outlineColor:ga.fromHexAndA(0,1),contourColor:ga.fromHexAndA(0,1),outlineWidth:2,contourWidth:5,outlineThreshold:.4,contourThreshold:0,outlineSmoothing:0,contourFrequency:10,contourDirection:[0,1,0],positionalLines:!1,compensation:!0};case"matcap":return{...t,type:"matcap",texture:{image:"matcap_0",wrapping:1001,repeat:[1,1],offset:[0,0],rotation:0,minFilter:1008,magFilter:1006}};case"transmission":return{...t,type:"transmission",thickness:10,ior:1.5,roughness:1};case"displace":return{visible:!0,type:"displace",displacementType:"noise",noiseType:0,scale:10,movement:1,offset:[0,0,0],intensity:8,voronoiStyle:0,smoothness:.3,seed:0,highCut:1,lowCut:0,quality:1};case"pattern":return{...t,type:"pattern",style:0,projection:0,axis:"y",blending:0,offset:[0,0],colorA:{...gs.fromHex(0),a:1},colorB:{...gs.fromHex(16777215),a:1},frequency:[10,10],size:.5,variation:0,smoothness:.5,zigzag:0,rotation:0,vertical:[0,1],horizontal:[0,1],sides:6}}}(e)},(e=>{function t(e,t="layer1",i="layer2"){let r=new px;return r.push({fi:0,data:gM.defaultData("light",e),id:t}),r.push({fi:1,data:gM.defaultData("color"),id:i}),{layers:r}}e.isMergable=function(e){return!e.layers.some(e=>"texture"===e.data.type&&0!==e.data.projection||"depth"===e.data.type&&!e.data.isWorldSpace||"noise"===e.data.type||"displace"===e.data.type)},e.getHash=function(e){let t="";return e.layers.forEach(e=>{Object.entries(e.data).forEach(([e,i])=>{t+=`${e}${i}`,Array.isArray(i)?i.forEach(e=>t+=`${e}`):"object"==typeof i?Object.values(i).forEach(e=>{"number"==typeof e?t+=`${e.toFixed(4)}`:t+=`${e}`}):t+=`${i}`})}),t},e.defaultEmptyData=function(){return{layers:new px}},e.defaultData=function(e="layer1",i="layer2"){return t("phong",e,i)},e.withName=function(e,t){return{...e,name:t}},e.defaultTwoLayerData=t,e.defaultUIObjectMaterial=function(e){let t=gM.defaultData("texture");e&&Object.assign(t.texture,{image:e});let i=new px;return i.push({fi:0,data:t,id:"layer1"}),i.push({fi:1,data:{...gM.defaultData("transmission"),alpha:1},id:"layer2"}),i.push({fi:2,data:{...gM.defaultData("light","lambert"),alpha:0},id:"layer3"}),{layers:i}},e.defaultTwoLayerTextureData=function(e,t="phong",i="layer1",r="layer2"){let s=gM.defaultData("texture");Object.assign(s.texture,{image:e});let a=new px;return a.push({fi:0,data:s,id:i}),a.push({fi:1,data:gM.defaultData("light",t),id:r}),{layers:a}},e.defaultTwoLayerVideoTextureData=function(e,t="phong",i="layer1",r="layer2"){let s=gM.defaultData("video");Object.assign(s.texture,{video:e});let a=new px;return a.push({fi:0,data:s,id:i}),a.push({fi:1,data:gM.defaultData("light",t),id:r}),{layers:a}}})(vk||(vk={})),(vU||(vU={})).defaultData=function(){return{points:new px,roundness:0,shapeHoles:[],isClosed:!1}},(vV||(vV={})).defaultData=function(){return{points:new px,lastInsertionPlane:null,subdivisions:12,isClosed:!1}};var gT={type:"Ellipse",width:50,height:50,spikes:16,angle:360,innerRadius:0};(vj||(vj={})).merge=function(e,t){let i={...e};return gD.forEach(r=>{Object.assign(i,{[r]:t[r]??e[r]})}),i};var gP={shape:gT,depth:1,offset:0,bevel:50,bevelSides:6,angle:0,twist:0,startScale:1,endScale:1,capType:"flat"},gD=["depth","offset","angle","twist","startScale","endScale"];(vE=vG||(vG={})).is2DParametricMesh=function(e){return"PolygonGeometry"===e||"RectangleGeometry"===e||"StarGeometry"===e||"TriangleGeometry"===e||"EllipseGeometry"===e||"UIGeometry"===e},vE.isParametricMesh=function(e){return"PolygonGeometry"===e||"PolygonGeometry"===e||"RectangleGeometry"===e||"StarGeometry"===e||"TriangleGeometry"===e||"EllipseGeometry"===e||"PathGeometry"===e||"VectorGeometry"===e||"ConeGeometry"===e||"CubeGeometry"===e||"CylinderGeometry"===e||"DodecahedronGeometry"===e||"HelixGeometry"===e||"IcosahedronGeometry"===e||"LatheGeometry"===e||"PyramidGeometry"===e||"SphereGeometry"===e||"PlaneGeometry"===e||"BackdropGeometry"===e||"TorusGeometry"===e||"TorusKnotGeometry"===e||"BooleanGeometry"===e||"TextGeometry"===e||"InputGeometry"===e},(vH||(vH={})).merge=function(e,t){let i={...e};return Object.assign(i,t),"PathGeometry"===i.type&&"extrusion"in t&&t.extrusion&&(i.extrusion={...e.extrusion},Object.assign(i.extrusion,vj.merge(i.extrusion,t.extrusion))),i},(vC=vW||(vW={})).defaultData=function(e){if("RectangleGeometry"===e)return{width:320,height:320,type:e,cornerRadius:[0,0,0,0],cornerType:0,depth:0,extrudeBevelSize:0,extrudeBevelSegments:1};if("UIGeometry"===e)return{type:e,frame:"",cornerRadius:[0,0,0,0],cornerType:0,width:1,height:1};if("PathGeometry"===e)return{type:e,width:1,height:1,depth:1,path:vV.defaultData(),extrusion:gP};if("VectorGeometry"===e)return{width:1,height:1,type:e,subdivisions:12,shape:vU.defaultData(),depth:0,extrudeBevelSize:0,extrudeBevelSegments:1};if("BooleanGeometry"===e)return{type:e,operation:2,width:0,height:0,depth:0,phongAngle:35};if("ShapeBlendGeometry"===e)return{type:e,width:0,height:0,depth:0,resolutionLevel:6,blendRange:100,useChildrenColors:!1};if("TextGeometry"===e)return{type:e,width:100,height:100,depth:0,horizontalAlign:1,verticalAlign:1,fontSize:16,lineHeight:1.2,letterSpacing:0,text:{textValue:""},textTransform:1,font:"Roboto_regular",editable:!1,extrudeBevelSize:0,extrudeBevelSegments:1};if("InputGeometry"===e)return{...vC.defaultData("TextGeometry"),type:e,editable:!0};if("SphereGeometry"===e)return{type:"SphereGeometry",width:100,height:100,depth:100,widthSegments:64,heightSegments:64,phiStart:0,phiLength:2*Math.PI,thetaStart:0,thetaLength:180};throw Error("not implemented")};var gI=["width","height","depth"];function gO(e){e.layers.forEach(e=>{if("depth"===e.type&&void 0!==e.colorA){let t=e.colorA,i=e.colorB,r=[[t.r,t.g,t.b,t.a],[i.r,i.g,i.b,i.a]],s=[0,1];for(let e=2;e<10;e++)r.push(r[1]),s.push(1);let a={...uV(pq(e),"type","visible","isVector","isWorldSpace","origin","alpha","mode"),near:Math.max(0,e.near),far:Math.max(0,e.far),colors:r,steps:s,num:2,direction:[1,0,0],smooth:!1,gradientType:1};Object.assign(e,a)}else if("depth"===e.type&&1===e.gradientType&&(e.near<0||e.far<0)){let t={...pq(e),near:Math.max(e.near,0),far:Math.max(e.far,0)};Object.assign(e,t)}})}function gR(e,t){Object.values(e.shared.materials).forEach(e=>t(e))}function gL(e,t){e.scene.objects.traverse((e,i)=>{"materials"in i?i.materials.forEach((e,r)=>{void 0===e&&(i.materials[r]=vk.defaultData(),e=i.materials[r]),"string"!=typeof e&&t(e)}):"material"in i?"string"!=typeof i.material&&(void 0===i.material&&(i.material=vk.defaultData()),t(i.material)):"Mesh"===i.type&&(void 0===i.material&&(i.material=vk.defaultData()),t(i.material)),"overrides"in i&&Object.values(i.overrides).forEach(e=>{e.material&&"string"!=typeof e.material&&Object.getPrototypeOf(e.material)!==pA.prototype&&t(e.material)})})}function gB(e){void 0===e.layers&&Object.assign(e,vk.defaultTwoLayerData("lambert"))}function gz(e){e.layers&&e.layers.forEach(e=>{if("depth"===e.type&&10===e.colors.length){let t=[...e.colors];t.push(e.colors[9]);let i=[...e.steps];i.push(e.steps[9]);let r={...pq(e),colors:t,steps:i};Object.assign(e,r)}})}function gF(e){e.scene.objects.traverse((e,t)=>{"materials"in t?t.materials.forEach(e=>{"string"!=typeof e&&gz(e)}):"material"in t&&"string"!=typeof t.material&&gz(t.material)}),Object.values(e.shared.materials).forEach(e=>gz(e))}function gN(e){e.layers&&e.layers.forEach(e=>{"depth"===e.type&&void 0!==e.num&&(e.colors=e.colors.slice(0,e.num),e.steps=e.steps.slice(0,e.num),delete e.num)})}function gk(e){e.layers&&e.layers.forEach(e=>{"displace"!==e.type&&void 0===e.isMask&&(e.isMask=!1),("texture"===e.type||"video"===e.type)&&void 0===e.blending&&(e.blending=0),("noise"===e.type||"displace"===e.type&&"noise"===e.displacementType)&&(void 0===e.voronoiStyle&&(e.voronoiStyle=0),void 0===e.highCut&&(e.highCut=1),void 0===e.lowCut&&(e.lowCut=0),void 0===e.smoothness&&(e.smoothness=.3),void 0===e.seed&&(e.seed=0),void 0===e.quality&&(e.quality=1))})}function gU(e){let t=e.layers.find(e=>"light"===e.type)?.data;t?.category==="basic"&&(Object.assign(t,gM.defaultData("light","phong")),t.visible=!1)}function gV(e){gR(e,gU),gL(e,gU)}function gj(e){e.layers.forEach(e=>{"light"===e.type&&"toon"!==e.category&&void 0===e.occlusion&&(e.occlusion=!0)})}function gG(e){e.layers&&e.layers.forEach(e=>{"light"===e.type&&void 0===e.bumpMapIntensity&&(e.bumpMapIntensity=5)})}function gH(e){e.layers&&e.layers.forEach(e=>{"light"===e.type&&void 0===e.alphaOverride&&(e.alphaOverride=1)})}(vq||(vq={})).defaultData={enabled:!1,useBackgroundColor:!1,color:gs.white,near:.1,far:2e3},l={opacity:1,blendFunction:13,enabled:!1},(vX||(vX={})).defaultData={enabled:!1,pixelation:{...l,blendFunction:16,granularity:15},bloom:{...l,blendFunction:16,intensity:1,blurScale:1,luminanceThreshold:.25,luminanceSmoothing:.025,kernelSize:3},chromaticAberration:{...l,offset:[2,2]},vignette:{...l,darkness:1,offset:0},hueSaturation:{...l,hue:3,saturation:0},brightnessContrast:{...l,brightness:.25,contrast:0},depthOfField:{...l,focusDistance:100,focalLength:20,bokehScale:5},noise:{...l,blendFunction:16}},(vY||(vY={})).defaultData={softShadowQuality:"low"},(vQ||(vQ={})).defaultData={enabled:!0,color:{r:.8274509803921568,g:.8274509803921568,b:.8274509803921568},intensity:.75},(vK||(vK={})).defaultData={occlusion:!1,aoFullRes:!1,radius:256,bias:.5,aoColor:{r:.19607843137254902,g:.19607843137254902,b:.19607843137254902}},(vZ||(vZ={})).defaultData={usePhysics:!1,gravity:-10},(vJ||(vJ={})).defaultData={playCamera:mh,gameControlObject:null},(v$||(v$={})).defaultData={backgroundColor:ga.fromHexAndA(2960946,1),postprocessing:vX.defaultData,fog:vq.defaultData,globalPhysics:vZ.defaultData,ambient:vQ.defaultData,ao:vK.defaultData,shadow:vY.defaultData,publish:vJ.defaultData},(v0||(v0={}
vendor: 4,304 bytes, line 3139
3139)).defaultData={colliderType:"box",size:[100,100,100],colliderHelperVisible:!0,forceType:"collider",forceRange:"global",forceIntensity:.5,forceDambing:.95},(vT=v1||(v1={})).isComponentRelated=function(e){return"Component"===e||"Instance"===e},vT.isEmptyOrComponent=function(e){return"Empty"===e||"Instance"===e},(vP=v2||(v2={})).identity={...gn.identity,hiddenMatrix:gr.identity},vP.fromObject=function(e){return{position:e.position,rotation:e.rotation,scale:e.scale,hiddenMatrix:e.hiddenMatrix}},vP.merge=function(e,t){return{position:t?.position||e.position,rotation:t?.rotation||e.rotation,scale:t?.scale||e.scale,hiddenMatrix:t?.hiddenMatrix||e.hiddenMatrix}},vP.diff=function(e,t){return uG({position:ge.isEqual(e.position,t.position)?void 0:t.position,rotation:ge.isEqual(e.rotation,t.rotation)?void 0:t.rotation,scale:ge.isEqual(e.scale,t.scale)?null:t.scale,hiddenMatrix:gr.isEqual(e.hiddenMatrix,t.hiddenMatrix)?void 0:t.hiddenMatrix})},(v3||(v3={})).defaultData={states:new px,events:new px,visible:!0,raycastLock:!1,physics:gv.defaultData,pathSnapping:{pathId:null,slide:0,offset:0,orientation:"tangential"},...v2.identity,cloner:null},(v4||(v4={})).defaultData={type:"Empty",...v3.defaultData},(v5||(v5={})).defaultData={type:"ParticleCollider",...v0.defaultData,...v3.defaultData},(v6||(v6={})).defaultData={type:"Component",...v3.defaultData},(v8||(v8={})).defaultData={type:"Particle",...v3.defaultData,...gg.defaultData},(v9||(v9={})).defaultData={type:"Mesh",...v3.defaultData,...gb.defaultData},(v7||(v7={})).defaultData={...v3.defaultData,...v2.identity,position:[0,0,gd.DefaultTargetOffset],...gd.defaultData},(vD=ye||(ye={})).defaultData=function(e){return{...v3.defaultData,...gm.defaultData(e)}},vD.defaultDirectionalLightData={...vD.defaultData("DirectionalLight"),position:[200,300,300],name:"Directional Light",intensity:.7},(e=>{function t(e,t,i=0){for(;i<t.length;){let r=e?e[t[i]]:void 0;if(t.length===i+1)return r;if(!r)return;e=r.descendants,i+=1}}e.resolveWithDes=t,e.resolve=function(e,i,r=0){let s=t(e,i,r);if(s){let e=Object.keys(s);if(1===e.length&&"descendants"===e[0])return}return s}})(yt||(yt={})),(e=>{function t(e,t){return{...v3.defaultData,...t,component:e,overrides:new pA,physics:void 0,events:void 0,type:"Instance"}}e.rootOverrideProps=["physics","events"],e.compositeNonOptionalOverrideProps=["geometry"],e.compositeEntireOverrideOverrideProps=["material"],e.ofComponent=t,e.fromComponentData=function(e){let i=v2.fromObject(e.data);return t(e.id,i)}})(yi||(yi={})),(vI=yr||(yr={})).defaultData={type:"Page",...v3.defaultData,physics:{...gv.defaultData,fusedBody:!1},...v$.defaultData,camera:v7.defaultData},vI.isUIPage=function(e){return void 0!==e.uiScene},(h=ys||(ys={})).defaultCamera={position:[0,0,1e3],scale:[1,1,1],rotation:[0,0,0],hiddenMatrix:gr.identity,name:"Play Camera",visible:!0,raycastLock:!1,physics:gv.defaultData,states:new px,events:new px,cloner:null,pathSnapping:{pathId:null,orientation:"tangential",slide:0,offset:0},...gd.defaultData},h.KeysByResetCategory={States:["states"],Events:["events"],Material:["material","materials"],Geometry:["geometry"],Position:["position"],Rotation:["rotation"],Scale:["scale"],Transform:["position","scale","rotation","hiddenMatrix"],Name:["name"],Visibility:["visible","raycastLock","flatShading","wireframe","side"],Shadows:["castShadow","receiveShadow"],Cloner:["cloner"],Physics:["physics"]},h.defaultMeshObject={name:"Rectangle",...v3.defaultData,...v9.defaultData,geometry:vW.defaultData("RectangleGeometry"),material:vk.defaultTwoLayerData("phong","layer1","layer2")},h.defaultBooleanObject={name:"Boolean",...v3.defaultData,...v9.defaultData,geometry:vW.defaultData("BooleanGeometry"),material:vk.defaultTwoLayerData("phong","layer1","layer2")},h.defaultShapeBlendObject={name:"Shape Blend",...v3.defaultData,...v9.defaultData,geometry:vW.defaultData("ShapeBlendGeometry"),material:vk.defaultTwoLayerData("phong","layer1","layer2")},h.defaultTextObject={name:"Text",...v3.defaultData,...v9.defaultData,geometry:vW.defaultData("TextGeometry"),material:vk.defaultTwoLayerData("phong","layer1","layer2")},h.defaultInputObject={name:"Input",...v3.defaultData,...v9.defaultData,geometry:vW.defaultData("InputGeometry"),material:vk.defaultTwoLayerData("phong","layer1","layer2")},(vO=ya||(ya={}
3139)).newEmpty=function(e,t){let i={name:t};return"Mesh"===e.type?(i.geometry={},"material"in e&&(i.material={layers:new pA}),"materials"in e&&(i.materials=e.materials.map(e=>({layers:new pA})))):gc.is(e.type)&&(i.perspective={},i.orthographic={}),i},vO.toOps=function(e,t){let i,r=[],s={orthographic:0,perspective:0,geometry:0};function a(e,t){for(let[i,s]of Object.entries(t.layers)){let{texture:t,...a}=s;if(void 0!==t&&Object.keys(t).length>0){let s={path:[...e,"layers",i,"texture"],props:t,type:0};r.push(s)}if(Object.keys(a).length>0){let t={path:[...e,"layers",i],props:a,type:0};r.push(t)}}}for(let[e,o]of Object.entries(t))if("name"!==e){if("cloner"===e)r.push(...gp.toOps(o,["cloner"]));else if("pathSnapping"===e)r.push({path:[e],props:{slide:o.slide,offset:o.offset},type:0});else if("material"===e)a(["material"],o);else if("materials"===e)for(let[e,t]of Object.entries(o))a(["materials",e],t);else if(0===s[e]){if("geometry"===e&&void 0!==o.extrusion){let t={path:[e,"extrusion"],props:o.extrusion,type:0};r.push(t),o={...o},delete o.extrusion}if(Object.keys(o).length>0){let t={path:[e],props:o,type:0};r.push(t)}}else void 0===i&&(i={path:[],props:{},type:0},r.push(i)),i.props[e]=o}return r},vO.patch=function(e,t){if(void 0===t)return e;let i={...e};return(Object.assign(i,v2.merge(i,t)),Object.assign(i,{pathSnapping:Object.assign({},i.pathSnapping,{slide:t.pathSnapping?.slide??i.pathSnapping?.slide??0,offset:t.pathSnapping?.offset??i.pathSnapping?.offset??0})}),gc.is(e.type))?(i.orthographic={...i.orthographic},i.perspective={...i.perspective},t.orthographic?.zoom!==void 0&&(i.orthographic.zoom=t.orthographic.zoom),t.perspective?.zoom!==void 0&&(i.perspective.zoom=t.perspective.zoom),void 0!==t.isUpVectorFlipped&&(i.isUpVectorFlipped=t.isUpVectorFlipped),void 0!==t.targetOffset&&(i.targetOffset=t.targetOffset)):"Mesh"===e.type?("geometry"in t&&Object.assign(i,{geometry:vH.merge(i.geometry,t.geometry)}),(t.material||t.materials)&&(i=function(e,t){if(void 0===t)return e;let i={...e};return"material"in i&&"material"in t&&t.material&&(i.material=pW(i.material,e=>{if("string"!=typeof e)for(let[i,r]of Object.entries(t.material.layers)){let t=e.layers.data(i);t&&gM.patch(t,r)}}).data),i.materials&&t.materials&&(i.materials=pW(i.materials,e=>{for(let r=0;r<i.materials.length;r++){let i=t.materials[r];if("string"!=typeof i)for(let[t,s]of Object.entries(i.layers)){let i=e[r]?.layers?.data(t);i&&gM.patch(i,s)}}}).data),i}(i,t)),i.cloner&&"cloner"in t&&Object.assign(i,{cloner:gu.merge(i.cloner,t.cloner)})):"Empty"===e.type?i.cloner&&"cloner"in t&&Object.assign(i,{cloner:gu.merge(i.cloner,t.cloner)}):gf.is(e.type)&&(void 0!==t.intensity&&(i.intensity=t.intensity),void 0!==t.color&&("string"==typeof t.color?i.color=t.color:i.color=gs.clone(t.color))),i},(yn||(yn={})).defaultData={enablePan:!0,enableZoom:!0,enableRotate:!0,enableDamping:!0,rotationLimitsMode:0,rotationVerticalOffset:{min:Math.PI/4,max:Math.PI/4},rotationHorizontalOffset:{min:Math.PI/4,max:Math.PI/4},rotationSoftLimit:2,panLimitsMode:0,panVerticalOffset:{min:250,max:250},panHorizontalOffset:{min:250,max:250},panSoftLimit:2,zoomLimitsEnabled:!1,zoomLimits:{min:.1,max:2},autoRotate:!1,autoRotateSpeed:2,autoRotateClockwise:!0,hoverRotatePanMode:0,hoverRotatePanStrength:20,hoverRotateDamping:.125,isTouchZoom:!0,orbitTouches:2,panTouches:3,resetHoverEffectOnPointerLeave:!0},(yo||(yo={})).defaultData={orbitControls:yn.defaultData,playPage:mc,withBackground:!0,preventScroll:!1,preventTouchScroll:!1,hideCursor:!1,mouseEventTarget:"canvas",joystickSizeAndXYOffset:Array(12).fill(0).map((e,t)=>{let i=0,r=0;return t<5?r=-30:t<10&&(r=30),0===t||10===t||5===t?i=30:(4===t||11===t||9===t)&&(i=-30),[120,[i,r],"show"]}),settings:{image:{format:"jpg",ratio:1},video:{format:"mp4",imageFormat:"jpg",fps:30,mbps:80,ratio:Math.max(1,"u">typeof window?Math.floor(window.devicePixelRatio):1),stopMode:"manual",duration:5e3},web:{logo:!0,compress:!0,preset:1,preload:!0,hint:!1,imageQuality:70}},stopRaycast:!0,hdTransmission:!1},(yl||(yl={})).defaultData={id:"basic",label:"Basic",style:"None",prompt:""}
vendor: 4,804 bytes, line 3139
3139,(yh||(yh={})).defaultData={weather:0,shadows:0,lightOrigin:0,temperature:0,sun:0,camera:0,environment:0,particles:0,nature:0,floor:0},(c=yc||(yc={})).defaultData=()=>({mode:"line-art-both",prompt:"",negativePrompt:"",style:{...yl.defaultData},isRandomSeed:!0,seed:c.generateSeed(),guessMode:!1,advanced:!1,steps:20,guidanceScale:7.5,controlNetScale:1,modifiers:yh.defaultData}),c.generateSeed=()=>Math.round(1e5*Math.random()),(vR=yd||(yd={})).physicsEnabled=function(e){return void 0!==e.find(e=>"Page"===e.data.type&&e.data.globalPhysics.usePhysics)},vR.traverseModuleInstances=function(e,t,i){e.scene.objects.traverseFrom(t,(t,r)=>{if("Instance"===r.type){let s=yA.getComponentData(e,r.component)?.data;s&&i(t,r,s.events)}else i(t,r,r.events)})},(e=>{function t(t=!0,i=[]){let r=[],s=ys.defaultMeshObject;t&&(r.push({...e.defaultLight}),r.push({fi:1,id:"7ba78968-2a55-48f2-b14c-5191da3e075e",data:s,children:[]})),r.push(...i);let a=new py;return a.push({fi:1,id:mc,data:{...yr.defaultData,name:"Scene 1"},children:r}),a}function i(t){return{...e.defaultData,objects:uH(t,py.prototype)}}e.TRASH_CAN_ID="830a2708-8ed9-49cf-a68e-085299892222",e.defaultLight={fi:-1,data:ye.defaultDirectionalLightData,id:"830a2708-8ed9-49cf-a68e-085299899103",children:[]},e.createDefaultObjectTreeWithPage=t,e.defaultData={objects:t(),publish:yo.defaultData,styles:yc.defaultData()},e.emptyDataWithoutPage=function(){return{objects:new py,publish:yo.defaultData,styles:yc.defaultData()}},e.emptyDataWithPage=function(e=!0){return{objects:t(e),publish:yo.defaultData,styles:yc.defaultData()}},e.emptyData=function(){return{objects:new py,publish:{...yo.defaultData},styles:yc.defaultData()}},e.withObjs=i,e.withObj=function(e,t){return i([{id:e,data:t,children:[],fi:0}])}})(yu||(yu={})),(yp||(yp={})).defaultData={preset:"fullscreen",allowResponsive:!1,size:[512,512],coords:[0,0],sceneScale:1,color:{r:0,g:0,b:0,a:.5}},(d=yf||(yf={})).defaultData=e=>({url:e,name:"New Webhook",parametersSchemas:new px}),d.defaultParameterValueByType=e=>"number"===e?0:"boolean"!==e&&"",(ym||(ym={})).defaultData=(e,t="GET")=>({url:e,method:t,name:"New API",headers:new px,queries:new px,autoStart:!0}),(e=>{function t(e){return void 0!==e.textValue}function i(e){return"boolean"==typeof e}e.isTextValue=t,e.isNumber=function(e){return"number"==typeof e},e.isBoolean=i,e.typeOfVariable=function(e){return t(e)?"string":i(e)?"boolean":"number"},e.getDisplayedValue=function(t){return e.isTextValue(t)?Array.isArray(t.textValue)?t.textValue.map(e=>e.toString().padStart(t.padding??2,"0")).join(t.deliminator??":")+(void 0!==t.suffix?" "+t.suffix:""):t.textValue.toString():e.isBoolean(t)?t?"True":"False":e.isNumber(t)?parseFloat(t.toFixed(3)).toString():t.toString()}})(yg||(yg={})),(yv||(yv={})).all=["images","videos","colors","audios","particles","fonts","materials","variables"],(yy||(yy={})).all=[...yv.all,"components"],(yx||(yx={})).defaultData=function(){return{images:new pu,videos:new pu,colors:new pu,audios:new pu,particles:new pu,fonts:new pu,materials:new pu,components:new pu,variables:new pu,userAPIs:new pu,userWebhooks:new pu}},(yb||(yb={})).defaultData=function(){return{images:new pu,videos:new pu,colors:new pu,audios:new pu,particles:new pu,fonts:new pu,materials:new pu,components:new pu,variables:new pu,userAPIs:new pu,userWebhooks:new pu}},(vL=yw||(yw={})).defaultColors=function(){let e={};return e["89b10010-844c-11ec-a8a3-0242ac120002"]={r:.5,g:.5,b:.5,a:1,name:"Default Color"},uH(e,pu.prototype)},vL.defaultImages=function(){return uH({},pu.prototype)},vL.emptyData=function(){return{catelogs:new pu,materials:new pu,images:new pu,videos:new pu,colors:new pu,audios:new pu,particles:new pu,fonts:new pu,variables:new px,userAPIs:new pu,userWebhooks:new pu,lib:yb.defaultData()}},vL.defaultVariables=function(e){switch(e){case"number":return{value:0,name:"Number"};case"boolean":return{value:!1,name:"Boolean"};case"string":return{value:{textValue:"String value"},name:"String"};case"time":let t=[0,0,0];return{name:"Time",value:{textValue:t,deliminator:":",padding:2,suffix:"AM"},dynamicVariableType:"time",format:"HH:mm:ss",format12h24h:"12ampm",timeZone:null,hasEnd:!1,endValue:{textValue:t,deliminator:":",padding:2,suffix:"AM"},autoStart:!0,repeat:!1};case"counter":return{name:"Counter",value:0,dynamicVariableType:"counter",updateInterval:1e3,increment:1,autoStart:!0,hasEnd:!0,endValue:60,repeat:!0,randomStart:!1,range:[0,100],decimals:0};case"random":return{name:"Random",value:0,dynamicVariableType:"random",updateInterval:1e3,increment:1,autoStart:!0,isStatic:!1,hasEnd:!0,endValue:60,repeat:!0,min:0,max:100,decimals:0};default:console.error("Unknown variable type",e)}},vL.getFormattedTimerTime=function(e,t){if("HH:mm:ss"===t.format){let t=Math.floor(e/3600),i=Math.floor((e-3600*t)/60),r=M
3139ath.round(e-3600*t-60*i);return{textValue:[t,i,r]}}if("mm:ss"!==t.format)return e="number"===t.format?Math.round(e):Math.round(1e3*e)/1e3;{let t=Math.floor(e/60),i=Math.round(e-60*t);return{textValue:[t,i]}}},(yS||(yS={})).list=["idle","move","jump","run"],(u=y_||(y_={})).defaultColliderData={type:"capsule",height:200,radius:50,position:[0,0,0],rotation:[0,0,0]},u.defaultDataThirdPerson={moveMode:"walk",forwardDirection:"+z",speedTranslate:1e3,speedRotate:100,runMultiplier:2,rotationMode:"normal",rotBy:"keys",rotByTouch:"drag",delayPos:[.3,.3],delayRot:[.3,.3],keyAssignments:[["moveNegZ","W"],["moveNegX","A"],["movePosZ","S"],["movePosX","D"],["rotPosX","▲"],["rotPosY","◀"],["rotNegX","▼"],["rotNegY","▶"],["jump","Space"],["run","⇧"],["none","Ctrl"]],touchControl:!0,joystickPosLoc:5,joystickRotLoc:11,jumpTouchButtonLoc:9,collider:u.defaultColliderData,colliderHelperVisible:!0,collisionEnabled:!0,jumpPower:100,resetYPosition:3e3,alignToGround:!1,autoOrientMove:!0,orientWith:"camera",orientMode:"radial",delayPosCamera:.3,delayRotCamera:.3,camera:"",cameraXAxis:"Limit",cameraYAxis:"Free",cameraRotXLimits:[0,Math.PI/2],cameraRotYLimits:[-Math.PI/2,Math.PI/2],gameActions:{idle:new px,move:new px,jump:new px,run:new px},navmesh:{enabled:!1,ch:6,cs:6,walkableClimb:5,walkableHeight:1,walkableRadius:0,zones:"all",objects:[],helperVisible:!0,destinationHelperRadius:0,destinationHelperColor:ga.fromHexAndA(3728051,1)}};var gW=180/Math.PI;function gq(e){e.rotation=e.rotation.slice(0,3).map(e=>e*gW)}function gX(e){gq(e),"Page"===e.type&&gq(e.camera),e.states?.forEach(e=>{void 0===e.rotation||null===e.rotation||(e.rotation=e.rotation.slice(0,3).map(e=>e*gW))});let t=e.geometry;t&&"SphereGeometry"===t.type&&(t.thetaLength=(t.thetaLength??180)*gW),t&&"TorusGeometry"===t.type&&(t.arc=t.arc*gW),t&&"PathGeometry"===t.type&&(t.extrusion.angle*=gW,t.extrusion.twist*=gW),"Mesh"===e.type&&"TextGeometry"===e.geometry.type&&(e.geometry.text={textValue:e.geometry.text}),Array.isArray(pq(e.events))&&e.events?.forEach(e=>{("MouseDown"===e.type||"MouseUp"===e.type||"MousePress"===e.type||"KeyDown"===e.type||"KeyUp"===e.type||"KeyPress"===e.type||"Collision"===e.type||"Trigger"===e.type)&&(e.runMode=e.toggle?"Toggle":"Repeat")})}function gY(e){let t=e.schema??0;if(115!==t){let i;for(let i of(console.warn("updating from ",t,"to ",115),function(e,t){let i,r;if(t<1&&(gL(e,gO),gR(e,gO),e.schema=1),t<2&&(Object.assign(e.scene.publish,{orbitControls:{...yn.defaultData,...pq(e.scene.publish.orbitControls)}}),e.schema=2),t<3&&(function(e){function t(e){if(e.layers){for(let t of Object.values(e.layers))if(t){for(let[e,i]of Object.entries(t))if((gE.includes(e)||"boolean"==typeof i)&&delete t[e],"texture"===e)for(let[e,t]of Object.entries(i))(gC.includes(e)||"boolean"==typeof t)&&delete i[e]}}}e.scene.objects.traverse((e,i)=>{i.states.forEach(e=>{e.material?t(e.material):e.materials&&e.materials.forEach(e=>{t(e)})})})}(e),e.schema=3),t<4&&(e.scene.publish.withBackground=!0,e.schema=4),t<5&&(e.scene.publish.settings.web={compress:!0,preload:!0,preset:1,logo:!0,hint:!1},e.schema=5),t<6&&(function(e){e.scene.objects.traverse((e,t)=>{let i=t.cloner;i&&(i.radial.scale=i.radial.scale.map(e=>e+1),i.linear.scale=i.linear.scale.map(e=>e+1))})}(e),e.schema=6),t<7&&(function(e){e.scene.objects.traverse((e,t)=>{let i=t.geometry;i&&("DodecahedronGeometry"===i.type||"IcosahedronGeometry"===i.type)&&(i.detail=Math.round(i.detail))})}(e),e.schema=7),t<8&&(e.schema=8),t<9&&(gF(e),e.schema=9),t<10&&(function(e){e.scene.objects.traverse((e,t)=>{"Mesh"===t.type&&("BooleanGeometry"===t.geometry.type||"SubdivGeometry"===t.geometry.type)&&(t.geometry.phongAngle=35)})}(e),e.schema=10),t<11&&(e.scene.environment.ambientLight.softShadows=!1,e.scene.environment.ambientLight.softShadowQuality="low",e.scene.objects.traverse((e,t)=>{("DirectionalLight"===t.type||"SpotLight"===t.type)&&(t.shadowResolution=1024,t.shadowRadius=1,t.depth=1e5)}),e.shared.penumbraSize=[,,,,,].fill(.5),e.schema=11),t<12&&(gF(e),e.schema=12),t<13&&(e.shared.audios=uH({},pu.prototype),e.schema=13),t<14&&(Object.entries(i=e.shared.materials).forEac
3139h(([e,t])=>{t.layers||Object.assign(i,{[e]:{name:"Untitled Material",layers:[{fi:0,data:{type:"light",category:"phong",alpha:.6,visible:!0,mode:0,specular:{r:.2,g:.2,b:.2},shininess:5},id:"layer1"},{fi:1,data:{type:"color",alpha:1,visible:!0,mode:0,color:{r:.2823529411764706,g:.2823529411764706,b:.30196078431372547}},id:"layer2"}]}})}),e.schema=14),t<15&&(Object.entries(pq(e.shared.images)).filter(e=>!1===e[1].asset).map(e=>e[0]).forEach(t=>{delete e.shared.images[t]}),Object.entries(pq(e.shared.audios)).filter(e=>!1===e[1].asset).map(e=>e[0]).forEach(t=>{delete e.shared.audios[t]}),e.schema=15),t<16&&(e.scene.publish.settings.web.preload=!1,e.schema=16),t<17&&(gL(e,gN),gR(e,gN),e.schema=17),t<18&&(gL(e,gB),gR(e,gB),e.schema=18),t<19&&(Object.assign(e.scene.publish.settings,{video:{...yo.defaultData.settings.video,...pq(e.scene.publish.settings.video)}}),e.schema=19),t<20&&(e.shared.fonts=uH({},pu.prototype),r=[],e.scene.objects.traverse((t,i)=>{if("TextFrame"===i.type){let s=vk.defaultTwoLayerData("phong"),a="string"==typeof i.color?e.shared.colors[i.color]:i.color;s.layers[1].data.color={r:a.r,g:a.g,b:a.b},s.layers[1].data.alpha=i.alpha;let o=i.font.replace(".typeface","").replace(/optimer/gi,"open sans").replace("space_mono","space mono").replace(/alma_mono/gi,"varela round").replace(/droid_sans_mono/gi,"noto sans mono").replace(/droid_sans|gentilis|gnomon_(simple|foreground)|helvetiker/gi,"roboto").replace(/droid_serif/gi,"roboto slab").replace("_sans"," sans").replace("crimson_text","crimson text").replace("medium_medium","medium").replace("fatface_fatface","fatface").replace("100hairline","thin").replace("200thin","extralight").replace("300light","light").replace("500medium","medium").replace("600semi","semibold").replace("800heavy","extrabold").replace("900black","black").replace(/bodoni_(11|16|24|36|48|72|96)([^_])/gi,"bodoni_$1_$2").replace(/bodoni_(11|16|24|36|48|72|96)/gi,"bodoni moda").replace(/(thin|hairline)(_regular)?/gi,"100").replace(/(extra|ultra)light(_regular)?/gi,"200").replace(/light(_regular)?/gi,"300").replace(/_book|_normal|_roman/gi,"_regular").replace(/medium(_regular)?/gi,"500").replace(/(semi|demi)bold(_regular)?/gi,"600").replace(/(extra|ultra)bold(_regular)?/gi,"800").replace(/bold(_regular)?/gi,"700").replace(/(black|heavy|fatface)(_regular)?/gi,"900").replace(/([1-9]00)_italic/gi,"$1italic").replace(/regularitalic/gi,"italic").replace(/regularitalic/gi,"italic").split(" ").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ");void 0===e.shared.fonts[o]&&(e.shared.fonts[o]={name:o});let l={name:i.name,...v3.defaultData,...v9.defaultData,flatShading:!1,wireframe:!1,geometry:{...vW.defaultData("TextGeometry"),width:i.width,height:i.height,font:o,depth:0,horizontalAlign:i.horizontalAlign,verticalAlign:i.verticalAlign,fontSize:1.40625*i.fontSize,lineHeight:i.lineHeight/1.40625,letterSpacing:i.letterSpacing-1,text:i.text,textTransform:i.textTransform,extrudeBevelSize:0,extrudeBevelSegments:1},material:s,states:pq(i.states),events:pq(i.events),visible:i.visible,raycastLock:i.raycastLock,position:i.position,rotation:i.rotation,scale:i.scale,hiddenMatrix:i.hiddenMatrix},h=pq(e.scene.objects).parent(t);e.scene.objects.insertAfter(h??null,t,[{id:t+"new",data:l,children:[]}]),r.push(t)}}),r.forEach(t=>{e.scene.objects.delete(t)}),e.schema=20),t<21&&(function(e){let t={0:"MouseDown",1:"MouseUp",2:"MouseHover",5:"KeyDown",6:"KeyUp",7:"Start",9:"LookAt",10:"Follow",11:"Scroll",12:"Audio",13:"GameControl"};e.scene.objects.traverse((e,i)=>{i.events.forEach(e=>{if(t[Number(e.type)]){if(Object.assign(e,{type:t[Number(e.type)]}),"Audio"===e.type&&"audioEvent"in e&&(Object.assign(e,{playAudio:e.audioEvent}),delete e.audioEvent),"GameControl"===e.type)Object.assign(e,{gameActions:{idle:new px,move:new px,jump:new px}});else{let t=new px;Object.assign(e,{actions:t}),("MouseDown"===e.type||"MouseUp"===e.type||"KeyDown"===e.type||"KeyUp"===e.type)&&"url"in e&&t.push({fi:0,id:tY.generateUUID(),data:{type:"Link",url:e.url,delay:0}}),"targets"in e&&(e.targets.forEach((e,i,r)=>{let s={easing:e.easing,duration:e.duration};6===e.easing?Object.assign(s,uV(e,"mass","stiffness","damping","velocity")):5===e.easing&&Object.assign(s,{control1:{...e.control1},control2:{...e.control2}});let a={repeat:e.repeat?-1:0,delay:e.delay,delayDirection:e.delayDirection,direction:e.cycle&&e.rewind?"pingpong-rewind":e.cycle?"pingpong":"normal"},o={state:e.state,...a,...s},l={allowSlerp:!0,type:"Transition",object:e.object,repeat:0,delay:0,delayDirection:void 0,direction:"normal",tweens:new px({fi:0,id:tY.generateUUID(),data:{state:void 0,repeat:0,delay:0,delayDirection:void 0,direction:"normal",duration:0,easing:4}},{fi:1,id:tY.generateUUID(),data:o})};t.push({fi:r,id:i,data:l})}),delete e.targets)}}})})}(e),function(e){e.scene.objects.traverse((e,t)=>
3139{function i(e,i){let r=new px,s=[];if(t.events.forEach((e,t,a)=>{if("Audio"===e.type&&e.trigger===i){let i;s.push(t),"play"===e.interaction?i={...uV(e,"interaction","audio","delay","volume","loop"),triggerAfter:"after"in e?e.after:void 0,toggle:"after"in e?e.toggle:void 0,type:"Audio"}:("pause"===e.interaction||"stop"===e.interaction)&&(i={...uV(e,"interaction","delay","object","playAudio"),type:"Audio"}),i&&r.push({fi:a,id:t,data:i})}}),s.forEach(e=>t.events.delete(e)),r.length){let i=t.events.find(t=>t.type===e)?.data;i?"actions"in i&&i.actions.insertBefore(null,r):t.events.insertBefore(null,[{id:tY.generateUUID(),data:{type:e,actions:r}}])}}i("Start","start"),i("MouseDown","mouseDown"),i("MouseUp","mouseUp"),i("KeyDown","keyDown"),i("KeyUp","keyUp")})}(e),e.schema=21),t<22&&(gV(e),e.schema=22),t<23&&(function(e){e.scene.objects.traverse((e,t)=>{"Mesh"===t.type&&"SubdivGeometry"===t.geometry.type&&(t.geometry.scaleBaked||(t.geometry.scaleBaked=[1,1,1]))})}(e),e.schema=23),t<24&&(function(e){e.scene.objects.traverse((e,t)=>{"Empty"!==t.type&&"Mesh"!==t.type||!t.cloner||t.cloner.randomnessObject||t.cloner.toObject||t.cloner.randomness||(t.cloner={...t.cloner,toObject:{object:"",spreadType:"random",scale:[0,0,0],rotation:[0,0,0],position:[0,0,0],axis:"x",seed:0,count:99,align:"normal"},randomness:!1,randomnessObject:{strength:100,scale:[0,0,0],rotation:[0,0,0],position:[0,0,0],movement:1,seed:0,freqScale:10,noiseType:"perlin"}})})}(e),e.schema=24),(t<25||void 0===e.shared.videos)&&(e.shared.videos=uH({},pu.prototype),t<25&&(e.schema=25)),t<26&&(function(e){e.scene.objects.traverse((t,i)=>{let r=e.scene.objects.unproxy().parent(t);if(r){let t=pq(e.scene.objects.data(r));t&&"Mesh"===t.type&&"BooleanGeometry"===t.geometry.type&&"Mesh"===i.type&&(i.visible=!0!==pq(i).booleanExclude)}})}(e),e.schema=26),t<27&&(function(e){e.scene.objects.traverse((e,t)=>{"Mesh"===t.type&&("NonParametricGeometry"===t.geometry.type?void 0!==t.material&&delete t.material:void 0!==t.materials&&delete t.materials)})}(e),e.schema=27),t<28&&(gV(e),e.schema=28),t<29&&(function(e){function t(e){for(let i in Object.setPrototypeOf(e,pA.prototype),e){var t;Object.setPrototypeOf(t=e[i],pA.prototype),t.texture&&Object.setPrototypeOf(t.texture,pA.prototype)}}e.scene.objects.traverse((e,i)=>{i.states.forEach(e=>{if(e.material){let i=pq(e.material).layers;t(i),e.material.layers=i}if(e.materials)for(let i=0;i<e.materials.length;i++){let r=e.materials[i],s=pq(r).layers;t(s),r.layers=s}})})}(e),e.schema=29),t<30&&(function(e){e.scene.objects.traverse((e,t)=>{"Mesh"!==t.type||"NonParametricGeometry"!==t.geometry.type||"material"in t||"materials"in t||(t.material=vk.defaultTwoLayerData("phong"))})}(e),e.schema=30),t<31&&(void 0===e.scene.publish.orbitControls.autoZoom&&(e.scene.publish.orbitControls.autoZoom=!1),e.scene.objects.traverse((e,t)=>{("OrthographicCamera"===t.type||"PerspectiveCamera"===t.type)&&(void 0===t.orthographic.autoZoom&&(t.orthographic.autoZoom=!1),void 0===t.orthographic.autoZoomFrustumSize&&(t.orthographic.autoZoomFrustumSize=790))}),e.schema=31),t<33&&(function(e){e.scene.objects.traverse((e,t)=>{void 0===t.pathSnapping&&(t.pathSnapping={pathId:null,slide:0,offset:0,orientation:"tangential"}),void 0===t.pathSnapping.offset&&(t.pathSnapping.offset=0)})}(e),e.schema=33),t<34&&(void 0===e.scene.publish.mouseEventTarget&&(e.scene.publish.mouseEventTarget="canvas"),void 0===e.scene.publish.settings.web.hint&&(e.scene.publish.settings.web.hint=!1),e.schema=34),t<35&&(function(e){let{video:t}=e.scene.publish.settings;"gif"===t.format&&t.fps>48&&(t.fps=15)}(e),e.schema=35),t<36&&(function(e){e.scene.objects.traverse((e,t)=>{t.events.forEach(e=>{"GameControl"===e.type&&(e.resetYPosition=Math.abs(e.resetYPosition-t.position[1]))})})}(e),e.schema=36),t<37&&(function(e){let t=e.scene.environment.usePhysics;e.scene.objects.traverse((e,i)=>{t&&null===i.physics?i.collision=!1:i.collision="visibility"})}(e),e.schema=37),t<38&&(gL(e,gk),gR(e,gk),e.schema=38),t<39&&(function(e){e.scene.objects.traverse((e,t)=>{t.events.forEach(e=>{"GameControl"===e.type&&(e.navmesh=y_.defaultDataThirdPerson.navmesh)})})}(e),e.schema=39),t<40&&(e.scene.styles||(e.scene.styles=yc.defaultData()),e.schema=40),t<41&&(void 0===e.scene.environment.ambientLight.occlusion&&(e.scene.environment.ambientLight.occlusion=!1),void 0===e.scene.environment.ambientLight.aoFullRes&&
3139(e.scene.environment.ambientLight.aoFullRes=!1),void 0===e.scene.environment.ambientLight.radius&&(e.scene.environment.ambientLight.radius=256),void 0===e.scene.environment.ambientLight.bias&&(e.scene.environment.ambientLight.bias=.5),void 0===e.scene.environment.ambientLight.aoColor&&(e.scene.environment.ambientLight.aoColor={r:.19607843137254902,g:.19607843137254902,b:.19607843137254902}),gL(e,gj),gR(e,gj),e.schema=41),t<42&&(function(e){e.scene.objects.traverse((e,t)=>{t.events.forEach(e=>{"GameControl"===e.type&&Object.assign(e.gameActions,{run:new px})})})}(e),e.schema=42),t<43&&(function(e){e.scene.objects.traverse((e,t)=>{t.events.forEach(e=>{"GameControl"===e.type&&(e.keyAssignments=[...e.keyAssignments,["run","⇧"],["none","Ctrl"]])})})}(e),e.schema=43),t<99){gL(e,gG),gR(e,gG),null===e.scene.publish.playCamera&&(e.scene.publish.playCamera=mh);let t=pq(e.scene.objects),i=e.scene.objects;for(let r of(e.scene.publish.playPage=mc,i.insertBefore(null,null,[{id:mc,data:{...yr.defaultData,backgroundColor:e.scene.backgroundColor,fog:e.scene.fog,postprocessing:e.scene.postprocessing,ao:uV(e.scene.environment.ambientLight,"occlusion","aoFullRes","radius","bias","aoColor"),publish:{playCamera:e.scene.publish.playCamera,gameControlObject:e.scene.publish.gameControlObject},shadow:uV(e.scene.environment.ambientLight,"softShadowQuality"),globalPhysics:{...vZ.defaultData,...uV(e.scene.environment,"usePhysics","gravity")},camera:pq(e.scene.ownerCamera)??yr.defaultData.camera,name:"Scene"},children:[]}]),t))r.id!==yu.TRASH_CAN_ID&&i.move(mc,r.fi,r.id);let r=0,s=0;e.shared.penumbraSize&&e.scene.objects.traverse((t,i)=>{"DirectionalLight"===i.type?(i.penumbraSize=e.shared.penumbraSize[Math.min(r,2)],r+=1):"SpotLight"===i.type&&(i.penumbraSize=e.shared.penumbraSize[3+Math.min(s,1)],s+=1),(void 0===i.physics||null===i.physics)&&"Instance"!==i.type&&(i.physics={},Object.assign(i.physics,gv.defaultData)),void 0!==i.physics&&null!==i.physics&&(i.physics.enabled=i.collision??"visibility",delete i.collision)}),e.schema=99}}(e,t),t<100&&(void 0===e.scene.publish.joystickSizeAndXYOffset&&(e.scene.publish.joystickSizeAndXYOffset=yo.defaultData.joystickSizeAndXYOffset),e.schema=100),t<101&&(gL(e,gH),gR(e,gH),e.schema=101),t<102&&(function(e){e.scene.objects.traverse((e,t)=>{let i=t.geometry;i&&"PathGeometry"===i.type&&(i.extrusion.capType="flat",i.extrusion.bevel=50,i.extrusion.bevelSides=6,"Custom"===i.extrusion.shape.type&&(i.extrusion.shape.shapeQuality="low"))})}(e),e.schema=102),t<104&&(e.shared.catelogs=new pu,e.shared.lib=yb.defaultData(),e.schema=104),t<105&&(e.shared.variables=uH({},pu.prototype),e.scene.objects.traverse((e,t)=>{gX(t)}),e.schema=105),Object.values(e.shared.lib.components)))!function(e){let t=e.schema??104;115!==t&&t<105&&(function e(t,i){for(let r of(i(t.data),t.children))e(r,i)}(e.asset,gX),e.schema=105)}(i);t<106&&(i=pq(e.shared.variables),e.shared.variables=uH(Object.entries(i??{}).map(([e,t],i)=>({fi:i,id:e,data:t})),px.prototype),e.schema=106),t<107&&(e.shared.lib.variables=yb.defaultData().variables,e.schema=107),t<109&&(e.shared.particles=uH({},pu.prototype),e.shared.lib&&(e.shared.lib.particles=yb.defaultData().particles),e.schema=109),t<110&&(function(e){e.scene.objects.traverse((e,t)=>{"Particle"===t.type&&"number"==typeof t.renderMaterial.size&&Object.assign(t.renderMaterial,{size:[t.renderMaterial.size,t.renderMaterial.size]})})}(e),e.schema=110),t<111&&(e.scene.objects.traverse((e,t)=>{Array.isArray(pq(t.events))&&t.events?.forEach(e=>{"disabled"in e||(e.disabled=!1),("MouseDown"===e.type||"MouseUp"===e.type||"MousePress"===e.type)&&(e.mode=e.mode||"Object")})}),e.schema=111),t<112&&(function(e){e.scene.objects.traverse((e,t)=>{"Page"===t.type&&(t.postprocessing.depthOfField.focusDistance=100,t.postprocessing.depthOfField.focalLength=20,t.postprocessing.depthOfField.bokehScale=5)})}(e),e.schema=112),t<113&&(function(e){e.scene.objects.traverse((e,t)=>{!1!==Array.isArray(pq(t.events))&&t.events?.forEach(e=>{let t=e.runMode;"MouseDown"===e.type||"MouseUp"===e.type||"KeyDown"===e.type||"KeyUp"===e.type||"Collision"===e.type||"Trigger"===e.type?e.actions?.forEach(e
vendor: 4,220 bytes, line 3139
3139=>{"Transition"===e.type&&(e.runMode=t??"Repeat"),("Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Toggle"===t?"Toggle":"Normal")}):"MouseHover"===e.type||"MousePress"===e.type||"KeyPress"===e.type?e.actions?.forEach(e=>{("Transition"===e.type||"Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Toggle")}):"GameControl"===e.type?(delete e.actions,Object.keys(e.gameActions).forEach(t=>{e.gameActions[t]?.forEach(e=>{"Transition"===e.type&&(e.runMode="Repeat"),"Animation"===e.type&&(e.runMode="Normal")})})):"DragDrop"===e.type?(delete e.actions,e.dragDropActions?.drag?.forEach(e=>{("Transition"===e.type||"Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Toggle")}),e.dragDropActions?.drop?.forEach(e=>{("Transition"===e.type||"Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Toggle")})):"Resize"===e.type?(delete e.actions,e.breakpoints?.forEach(e=>{e.actions?.forEach(e=>{("Transition"===e.type||"Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Toggle")})})):"Start"===e.type?e.actions?.forEach(e=>{"Transition"===e.type&&(e.runMode="Once"),("Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Normal")}):"VariableChange"===e.type||"Scroll"===e.type?e.actions?.forEach(e=>{"Transition"===e.type&&(e.runMode="Repeat"),("Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Normal")}):"Conditional"===e.type&&(delete e.actions,e.inActions?.forEach(e=>{"Transition"===e.type&&(e.runMode="Repeat"),("Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Normal")}),e.outActions?.forEach(e=>{"Transition"===e.type&&(e.runMode="Repeat"),("Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Normal")}))})})}(e),e.schema=113),t<114&&(void 0===e.scene.publish.settings.web.imageQuality&&(e.scene.publish.settings.web.imageQuality=70),e.schema=114),t<115&&(e.shared.userAPIs=uH({},pu.prototype),e.shared.userWebhooks=uH({},pu.prototype),e.shared.lib&&(e.shared.lib.userAPIs=yb.defaultData().userAPIs,e.shared.lib.userWebhooks=yb.defaultData().userWebhooks),e.schema=115)}}function gQ(e,t=!1){let i=null!==e[0].index,r=new Set(Object.keys(e[0].attributes)),s=new Set(Object.keys(e[0].morphAttributes)),a={},o={},l=e[0].morphTargetsRelative,h=new rz,c=0;for(let d=0;d<e.length;++d){let u=e[d],p=0;if(i!==(null!==u.index))return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+d+". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."),null;for(let e in u.attributes){if(!r.has(e))return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+d+'. All geometries must have compatible attributes; make sure "'+e+'" attribute exists among all geometries, or in none of them.'),null;void 0===a[e]&&(a[e]=[]),a[e].push(u.attributes[e]),p++}if(p!==r.size)return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+d+". Make sure all geometries have the same number of attributes."),null;if(l!==u.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+d+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(let e in u.morphAttributes){if(!s.has(e))return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+d+". .morphAttributes must be consistent throughout all geometries."),null;void 0===o[e]&&(o[e]=[]),o[e].push(u.morphAttributes[e])}if(t){let e;if(i)e=u.index.count;else{if(void 0===u.attributes.position)return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+d+". The geometry must have either an index or a position attribute"),null;e=u.attributes.position.count}h.addGroup(c,e,d),c+=e}}if(i){let t=0,i=[];for(let r=0;r<e.length;++r){let s=e[r].index;for(let e=0;e<s.count;++e)i.push(s.getX(e)+t);t+=e[r].attributes.position.count}h.setIndex(i)}for(let e in a){let t=gK(a[e]);if(!t)return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the "+e+" attribute."),null;h.setAttribute(e,t)}
3139for(let e in o){let t=o[e][0].length;if(0===t)break;h.morphAttributes=h.morphAttributes||{},h.morphAttributes[e]=[];for(let i=0;i<t;++i){let t=[];for(let r=0;r<o[e].length;++r)t.push(o[e][r][i]);let r=gK(t);if(!r)return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the "+e+" morphAttribute."),null;h.morphAttributes[e].push(r)}}return h}function gK(e){let t,i,r,s=0;for(let a=0;a<e.length;++a){let o=e[a];if(o.isInterleavedBufferAttribute)return console.error("THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. InterleavedBufferAttributes are not supported."),null;if(void 0===t&&(t=o.array.constructor),t!==o.array.constructor)return console.error("THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."),null;if(void 0===i&&(i=o.itemSize),i!==o.itemSize)return console.error("THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."),null;if(void 0===r&&(r=o.normalized),r!==o.normalized)return console.error("THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."),null;s+=o.array.length}let a=new t(s),o=0;for(let t=0;t<e.length;++t)a.set(e[t].array,o),o+=e[t].array.length;return new rM(a,i,r)}(vB=yA||(yA={})).defaultData={schema:115,scene:yu.defaultData,frames:new pu().add("72fc2993-2da3-4b6b-96ac-2879db3a28bd",yp.defaultData),shared:{...yw.emptyData(),colors:yw.defaultColors()}},vB.emptyDataForImports=function(){return{schema:115,scene:yu.emptyDataWithPage(),frames:new pu().add("72fc2993-2da3-4b6b-96ac-2879db3a28bd",yp.defaultData),shared:{...yw.emptyData(),colors:yw.defaultColors(),images:yw.defaultImages()}}},vB.emptyData=function(){return{schema:115,scene:yu.emptyDataWithPage(),frames:new pu().add("72fc2993-2da3-4b6b-96ac-2879db3a28bd",yp.defaultData),shared:yw.emptyData()}},vB.clipboard2dData=function(){return{schema:115,scene:yu.emptyData(),frames:new pu,shared:yw.emptyData()}},vB.collabHelper={...p0,updateSchema:e=>(e.schema??0)<115?pW(e,gY):(e.schema??0)-115},vB.updateSchemaDirectly=function(e){let t=vB.collabHelper.updateSchema(e);return"number"==typeof t?0===t?e:null:t.data},vB.withoutLib=function(e){return{...e,shared:{...e.shared,lib:yb.defaultData()}}},vB.getComponentData=function(e,t){let i=e.scene.objects.get(t);if(i&&"Component"===i.data.type)return i;{let i=e.shared.lib.components[t];if(i)return i.asset}},vB.hasSensitiveData=function(e){for(let t of Object.values(e.shared.userAPIs))for(let e of t.headers)if("authorization"===e.data.key.toLowerCase()&&""!==e.data.value)return!0;return!1},(yM||(yM={})).emptyImage={data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVQYV2NgYAAAAAMAAWgmWQ0AAAAASUVORK5CYII=",name:"empty"},(yE||(yE={})).is=function(e){return!0},(vz=yC||(yC={})).defaultData={position:[0,0],scale:[1,1],rotation:0,shear:[0,0]},vz.merge=function(e,t){return{position:t?.position??e.position,rotation:t?.rotation??e.rotation,scale:t?.scale??e.scale,shear:t?.shear??e.shear}},vz.diff=function(e,t){return uG({position:m7.isEqual(e.position,t.position)?void 0:t.position,rotation:e.rotation===t.rotation?void 0:t.rotation,scale:m7.isEqual(e.scale,t.scale)?void 0:t.scale,shear:e.shear&&t.shear&&m7.isEqual(e.shear,t.shear)?void 0:t.shear})},(yT||(yT={})).defaultData={horizontalConstraint:0,verticalConstraint:0},(yP||(yP={})).defaultData={direction:"row",wrap:"unwrap",align:"top-left",gap:10,rowGap:10,autoGap:!1,autoRowGap:!1,leftPadding:8,rightPadding:8,topPadding:8,bottomPadding:8},(yD||(yD={})).defaultData={opacity:1,fill:{color:ga.fromHexAndA(5526619,1),enabled:!0},stroke:{color:ga.from0to1([0,0,0,1]),thickness:1,enabled:!1,mode:"inside"},layerBlur:{radius:2,enabled:!1},backgroundBlur:{radius:2,enabled:!1},dropShadow:{offset:[10,10],blurRadius:10,color:ga.from0to1([0,0,0,1]),enabled:!1,spread:0},innerShadow:{offset:[10,10],blurRadius:10,color:ga.from0to1([0,0,0,1]),enabled:!1,spread:0}},(vF=yI||(yI={})).newEmpty=function(e,t){return{name:t}},vF.patch=function(e,t){if(void 0===t)return e;let i={...e};
3139return Object.assign(i,yC.merge(i,t)),i=function(e,t){if(void 0===t)return e;let i={...e};return"fill"in i&&"fill"in t&&void 0!==t.fill&&Object.assign(i,{fill:{...i.fill,...t.fill}}),"stroke"in i&&"stroke"in t&&void 0!==t.stroke&&Object.assign(i,{stroke:{...i.stroke,...t.stroke}}),"layerBlur"in i&&"layerBlur"in t&&void 0!==t.layerBlur&&Object.assign(i,{layerBlur:{...i.layerBlur,...t.layerBlur}}),"backgroundBlur"in i&&"backgroundBlur"in t&&void 0!==t.backgroundBlur&&Object.assign(i,{backgroundBlur:{...i.backgroundBlur,...t.backgroundBlur}}),"dropShadow"in i&&"dropShadow"in t&&void 0!==t.dropShadow&&Object.assign(i,{dropShadow:{...i.dropShadow,...t.dropShadow}}),"innerShadow"in i&&"innerShadow"in t&&void 0!==t.innerShadow&&Object.assign(i,{innerShadow:{...i.innerShadow,...t.innerShadow}}),i}(i=function(e,t){if(void 0===t)return e;let i={...e};for(let e of["width","height","cornerRadius"])e in i&&e in t&&void 0!==t[e]&&Object.assign(i,{[e]:t[e]});return i}(i,t),t)},vF.toOps=function(e,t){let i,r=[];for(let[e,s]of Object.entries(t))"name"!==e&&(void 0===i&&(i={path:[],props:{},type:0},r.push(i)),i.props[e]=s);return r},(yO||(yO={})).defaultData={...yC.defaultData,...yT.defaultData,states:new px,events:new px,visible:!0,raycastLock:!1},(yR||(yR={})).defaultData={...yO.defaultData,...yD.defaultData},(yL||(yL={})).defaultData={cornerRadius:[0,0,0,0]},(yB||(yB={})).defaultData={...yR.defaultData,type:"ellipse2d",width:100,height:100,name:"Ellipse"},(yz||(yz={})).defaultData={...yR.defaultData,...yL.defaultData,type:"rectangle2d",width:100,height:100,name:"Rectangle"},(yF||(yF={})).defaultData={...yR.defaultData,type:"text2d",width:100,height:100,fontSize:12,lineHeight:1.2,letterSpacing:0,text:{textValue:"Hello world"},horizontalAlign:1,verticalAlign:1,textTransform:1,font:"Roboto_regular",name:"Text"},(yN||(yN={})).defaultData={...yR.defaultData,type:"path2d",path:"",name:"Path"},(yk||(yk={})).is=function(e){return"ellipse2d"===e.type||"rectangle2d"===e.type||"text2d"===e.type||"vector2d"===e.type||"path2d"===e.type},(yU||(yU={})).defaultData={...yO.defaultData,name:"Group",type:"group2d"},(yV||(yV={})).defaultData=()=>({...yO.defaultData,...yL.defaultData,...yD.defaultData,name:"Frame",type:"frame2d",clipped:!0,width:200,height:200,fill:{color:ga.fromHexAndA(4737101,1),enabled:!0},stroke:{color:ga.fromHexAndA(0,1),thickness:1,enabled:!1,mode:"inside"},backgroundBlur:{radius:2,enabled:!1},layerBlur:{radius:2,enabled:!1}}),(vN=yj||(yj={})).defaultData=function(e){switch(e){case"rectangle2d":case"vector2d":return{...yz.defaultData};case"ellipse2d":return{...yB.defaultData};case"text2d":return{...yF.defaultData};case"path2d":return{...yN.defaultData};case"frame2d":return{...yV.defaultData()};case"group2d":return{...yU.defaultData}}},vN.getPivot=function(e){return"width"in e&&"height"in e?["number"==typeof e.width?.5*e.width:0,"number"==typeof e.height?.5*e.height:0]:[0,0]},vN.isResizeable=function(e){return"rectangle2d"===e.type||"ellipse2d"===e.type||"text2d"===e.type||"frame2d"===e.type},vN.isAutoLayoutable=function(e){return"frame2d"===e.type&&void 0!==e.autoLayout},vN.hasCorners=function(e){return"rectangle2d"===e.type||"frame2d"===e.type},(p=yG||(yG={})).defaultData={name:"UI",type:"scene2d",objects:new py},p.emptyData=function(){return{type:"scene2d",objects:new py}};var gZ=class{constructor(){}};function gJ(e,t,i){return i.min.x=t[e],i.min.y=t[e+1],i.min.z=t[e+2],i.max.x=t[e+3],i.max.y=t[e+4],i.max.z=t[e+5],i}function g$(e){let t=-1,i=-1/0;for(let r=0;r<3;r++){let s=e[r+3]-e[r];s>i&&(i=s,t=r)}return t}function g0(e,t,i){let r,s;for(let a=0;a<3;a++){let o=a+3;r=e[a],s=t[a],i[a]=r<s?r:s,r=e[o],s=t[o],i[o]=r>s?r:s}}function g1(e,t,i){for(let r=0;r<3;r++){let s=t[e+2*r],a=t[e+2*r+1],o=s-a,l=s+a;o<i[r]&&(i[r]=o),l>i[r+3]&&(i[r+3]=l)}}function g2(e){let t=e[3]-e[0],i=e[4]-e[1],r=e[5]-e[2];return 2*(t*i+i*r+r*t)}function g3(e,t,i,r,s=null){let a=1/0,o=1/0,l=1/0,h=-1/0,c=-1/0,d=-1/0,u=1/0,p=1/0,f=1/0,m=-1/0,g=-1/0,v=-1/0,y=null!==s;for(let r=6*t,s=(t+i)*6;r<s;r+=6){let t=e[r+0],i=e[r+1],s=t-i,x=t+i;s<a&&(a=s),x>h&&(h=x),y&&t<u&&(u=t),y&&t>m&&(m=t);let b=e[r+2],w=e[r+3],S=b-w,_=b+w;S<o&&(o=S),_>c&&(c=_),y&&b<p&&(p=b),y&&b>g&&(g=b);let A=e[r+4],M=e[r+5],E=A-M,C=A+M;E<l&&(l=E),C>d&&(d=C),y&&A<f&&(f=A),y&&A>v&&(v=A)}
3139r[0]=a,r[1]=o,r[2]=l,r[3]=h,r[4]=c,r[5]=d,y&&(s[0]=u,s[1]=p,s[2]=f,s[3]=m,s[4]=g,s[5]=v)}var g4=(e,t)=>e.candidate-t.candidate,g5=Array(32).fill().map(()=>({count:0,bounds:new Float32Array(6),rightCacheBounds:new Float32Array(6),leftCacheBounds:new Float32Array(6),candidate:0})),g6=new Float32Array(6),g8=class{constructor(){this.min=1/0,this.max=-1/0}setFromPointsField(e,t){let i=1/0,r=-1/0;for(let s=0,a=e.length;s<a;s++){let a=e[s][t];i=a<i?a:i,r=a>r?a:r}this.min=i,this.max=r}setFromPoints(e,t){let i=1/0,r=-1/0;for(let s=0,a=t.length;s<a;s++){let a=t[s],o=e.dot(a);i=o<i?o:i,r=o>r?o:r}this.min=i,this.max=r}isSeparated(e){return this.min>e.max||e.min>this.max}};g8.prototype.setFromBox=(f=new iv,function(e,t){let i=t.min,r=t.max,s=1/0,a=-1/0;for(let t=0;t<=1;t++)for(let o=0;o<=1;o++)for(let l=0;l<=1;l++){f.x=i.x*t+r.x*(1-t),f.y=i.y*o+r.y*(1-o),f.z=i.z*l+r.z*(1-l);let h=e.dot(f);s=Math.min(h,s),a=Math.max(h,a)}this.min=s,this.max=a}),new g8;var g9=(m=new iv,g=new iv,v=new iv,function(e,t,i){let r=e.start,s=t.start;v.subVectors(r,s),m.subVectors(e.end,e.start),g.subVectors(t.end,t.start);let a=v.dot(g),o=g.dot(m),l=g.dot(g),h=v.dot(m),c=m.dot(m)*l-o*o,d,u;d=0!==c?(a*o-h*l)/c:0,u=(a+d*o)/l,i.x=d,i.y=u}),g7=(y=new tQ,x=new iv,b=new iv,function(e,t,i,r){g9(e,t,y);let s=y.x,a=y.y;if(s>=0&&s<=1&&a>=0&&a<=1){e.at(s,i),t.at(a,r);return}if(s>=0&&s<=1){a<0?t.at(0,r):t.at(1,r),e.closestPointToPoint(r,!0,i);return}if(a>=0&&a<=1){s<0?e.at(0,i):e.at(1,i),t.closestPointToPoint(i,!0,r);return}{let o,l;if(o=s<0?e.start:e.end,l=a<0?t.start:t.end,e.closestPointToPoint(l,!0,x),t.closestPointToPoint(o,!0,b),x.distanceToSquared(l)<=b.distanceToSquared(o)){i.copy(x),r.copy(l);return}i.copy(o),r.copy(b);return}}),ve=(w=new iv,S=new iv,_=new ss,A=new lk,function(e,t){let{radius:i,center:r}=e,{a:s,b:a,c:o}=t;if(A.start=s,A.end=a,A.closestPointToPoint(r,!0,w).distanceTo(r)<=i||(A.start=s,A.end=o,A.closestPointToPoint(r,!0,w).distanceTo(r)<=i)||(A.start=a,A.end=o,A.closestPointToPoint(r,!0,w).distanceTo(r)<=i))return!0;let l=t.getPlane(_);if(Math.abs(l.distanceToPoint(r))<=i){let e=l.projectPoint(r,S);if(t.containsPoint(e))return!0}return!1});function vt(e){return 1e-15>Math.abs(e)}var vi=class extends rx{constructor(...e){super(...e),this.isExtendedTriangle=!0,this.satAxes=[,,,,].fill().map(()=>new iv),this.satBounds=[,,,,].fill().map(()=>new g8),this.points=[this.a,this.b,this.c],this.sphere=new iN,this.plane=new ss,this.needsUpdate=!0}intersectsSphere(e){return ve(e,this)}update(){let e=this.a,t=this.b,i=this.c,r=this.points,s=this.satAxes,a=this.satBounds,o=s[0],l=a[0];this.getNormal(o),l.setFromPoints(o,r);let h=s[1],c=a[1];h.subVectors(e,t),c.setFromPoints(h,r);let d=s[2],u=a[2];d.subVectors(t,i),u.setFromPoints(d,r);let p=s[3],f=a[3];p.subVectors(i,e),f.setFromPoints(p,r),this.sphere.setFromPoints(this.points),this.plane.setFromNormalAndCoplanarPoint(o,e),this.needsUpdate=!1}};vi.prototype.closestPointToSegment=(M=new iv,E=new iv,C=new lk,function(e,t=null,i=null){let{start:r,end:s}=e,a=this.points,o,l=1/0;for(let r=0;r<3;r++){let s=(r+1)%3;C.start.copy(a[r]),C.end.copy(a[s]),g7(C,e,M,E),(o=M.distanceToSquared(E))<l&&(l=o,t&&t.copy(M),i&&i.copy(E))}return this.closestPointToPoint(r,M),(o=r.distanceToSquared(M))<l&&(l=o,t&&t.copy(M),i&&i.copy(r)),this.closestPointToPoint(s,M),(o=s.distanceToSquared(M))<l&&(l=o,t&&t.copy(M),i&&i.copy(s)),Math.sqrt(l)}),vi.prototype.intersectsTriangle=(T=new vi,P=[,,,],D=[,,,],I=new g8,O=new g8,R=new iv,L=new iv,B=new iv,z=new iv,F=new lk,N=new lk,k=new lk,function(e,t=null,i=!1){this.needsUpdate&&this.update(),e.isExtendedTriangle?e.needsUpdate&&e.update():(T.copy(e),T.update(),e=T);let r=this.plane,s=e.plane;if(Math.abs(r.normal.dot(s.normal))>1-1e-10){let r=this.satBounds,s=this.satAxes;D[0]=e.a,D[1]=e.b,D[2]=e.c;for(let e=0;e<4;e++){let t=r[e],i=s[e];if(I.setFromPoints(i,D),t.isSeparated(I))return!1}let a=e.satBounds,o=e.satAxes;P[0]=this.a,P[1]=this.b,P[2]=this.c;for(let e=0;e<4;e++){let t=a[e],i=o[e];if(I.setFromPoints(i,P),t.isSeparated(I))return!1}for(let e=0;e<4;e++){let t=s[e];for(let e=0;e<4;e++){let i=o[e];if(R.crossVectors(t,i),I.setFromPoints(R,P),O.setFromPoints(R,D),I.isSeparated(O))return!1}}return t&&(i||console.warn("ExtendedTriangle.intersectsTriangle: Triangles are coplanar which does not support an output edge. Setting edge to 0, 0, 0."),t.start.set(0,0,0),t.end.set(0,0,0)),!0}{let i=this.points,a=!1,o=0;for(let e=0;e<3;e++){let t=i[e],r=i[(e+1)%3];F.start.copy(t),F.end.copy(r),F.delta(L);let l=a?N.start:N.end,h=vt(s.distanceToPoint(t));
3139if(vt(s.normal.dot(L))&&h){N.copy(F),o=2;break}if((s.intersectLine(F,l)||h)&&!vt(l.distanceTo(r))){if(o++,a)break;a=!0}}if(1===o&&e.containsPoint(N.end))return t&&(t.start.copy(N.end),t.end.copy(N.end)),!0;if(2!==o)return!1;let l=e.points,h=!1,c=0;for(let e=0;e<3;e++){let t=l[e],i=l[(e+1)%3];F.start.copy(t),F.end.copy(i),F.delta(B);let s=h?k.start:k.end,a=vt(r.distanceToPoint(t));if(vt(r.normal.dot(B))&&a){k.copy(F),c=2;break}if((r.intersectLine(F,s)||a)&&!vt(s.distanceTo(i))){if(c++,h)break;h=!0}}if(1===c&&this.containsPoint(k.end))return t&&(t.start.copy(k.end),t.end.copy(k.end)),!0;if(2!==c)return!1;if(N.delta(L),k.delta(B),0>L.dot(B)){let e=k.start;k.start=k.end,k.end=e}let d=N.start.dot(L),u=N.end.dot(L),p=k.start.dot(L),f=k.end.dot(L);return(d===f||p===u||u<p!=d<f)&&(t&&(z.subVectors(N.start,k.start),z.dot(L)>0?t.start.copy(N.start):t.start.copy(k.start),z.subVectors(N.end,k.end),0>z.dot(L)?t.end.copy(N.end):t.end.copy(k.end)),!0)}}),vi.prototype.distanceToPoint=(U=new iv,function(e){return this.closestPointToPoint(e,U),e.distanceTo(U)}),vi.prototype.distanceToTriangle=(V=new iv,j=new iv,G=["a","b","c"],H=new lk,W=new lk,function(e,t=null,i=null){let r=t||i?H:null;if(this.intersectsTriangle(e,r))return(t||i)&&(t&&r.getCenter(t),i&&r.getCenter(i)),0;let s=1/0;for(let r=0;r<3;r++){let a,o=G[r],l=e[o];this.closestPointToPoint(l,V),(a=l.distanceToSquared(V))<s&&(s=a,t&&t.copy(V),i&&i.copy(l));let h=this[o];e.closestPointToPoint(h,V),(a=h.distanceToSquared(V))<s&&(s=a,t&&t.copy(h),i&&i.copy(V))}for(let r=0;r<3;r++){let a=G[r],o=G[(r+1)%3];H.set(this[a],this[o]);for(let r=0;r<3;r++){let a=G[r],o=G[(r+1)%3];W.set(e[a],e[o]),g7(H,W,V,j);let l=V.distanceToSquared(j);l<s&&(s=l,t&&t.copy(V),i&&i.copy(j))}}return Math.sqrt(s)});var vr=class{constructor(e,t,i){this.isOrientedBox=!0,this.min=new iv,this.max=new iv,this.matrix=new iX,this.invMatrix=new iX,this.points=Array(8).fill().map(()=>new iv),this.satAxes=[,,,].fill().map(()=>new iv),this.satBounds=[,,,].fill().map(()=>new g8),this.alignedSatBounds=[,,,].fill().map(()=>new g8),this.needsUpdate=!1,e&&this.min.copy(e),t&&this.max.copy(t),i&&this.matrix.copy(i)}set(e,t,i){this.min.copy(e),this.max.copy(t),this.matrix.copy(i),this.needsUpdate=!0}copy(e){this.min.copy(e.min),this.max.copy(e.max),this.matrix.copy(e.matrix),this.needsUpdate=!0}};vr.prototype.update=function(){let e=this.matrix,t=this.min,i=this.max,r=this.points;for(let s=0;s<=1;s++)for(let a=0;a<=1;a++)for(let o=0;o<=1;o++){let l=r[1*s|2*a|4*o];l.x=s?i.x:t.x,l.y=a?i.y:t.y,l.z=o?i.z:t.z,l.applyMatrix4(e)}let s=this.satBounds,a=this.satAxes,o=r[0];for(let e=0;e<3;e++){let t=a[e],i=s[e],l=r[1<<e];t.subVectors(o,l),i.setFromPoints(t,r)}let l=this.alignedSatBounds;l[0].setFromPointsField(r,"x"),l[1].setFromPointsField(r,"y"),l[2].setFromPointsField(r,"z"),this.invMatrix.copy(this.matrix).invert(),this.needsUpdate=!1},vr.prototype.intersectsBox=(q=new g8,function(e){this.needsUpdate&&this.update();let t=e.min,i=e.max,r=this.satBounds,s=this.satAxes,a=this.alignedSatBounds;if(q.min=t.x,q.max=i.x,a[0].isSeparated(q)||(q.min=t.y,q.max=i.y,a[1].isSeparated(q))||(q.min=t.z,q.max=i.z,a[2].isSeparated(q)))return!1;for(let t=0;t<3;t++){let i=s[t],a=r[t];if(q.setFromBox(i,e),a.isSeparated(q))return!1}return!0}),vr.prototype.intersectsTriangle=(X=new vi,Y=[,,,],Q=new g8,K=new g8,Z=new iv,function(e){this.needsUpdate&&this.update(),e.isExtendedTriangle?e.needsUpdate&&e.update():(X.copy(e),X.update(),e=X);let t=this.satBounds,i=this.satAxes;Y[0]=e.a,Y[1]=e.b,Y[2]=e.c;for(let e=0;e<3;e++){let r=t[e],s=i[e];if(Q.setFromPoints(s,Y),r.isSeparated(Q))return!1}let r=e.satBounds,s=e.satAxes,a=this.points;for(let e=0;e<3;e++){let t=r[e],i=s[e];if(Q.setFromPoints(i,a),t.isSeparated(Q))return!1}for(let e=0;e<3;e++){let t=i[e];for(let e=0;e<4;e++){let i=s[e];if(Z.crossVectors(t,i),Q.setFromPoints(Z,Y),K.setFromPoints(Z,a),Q.isSeparated(K))return!1}}return!0}),vr.prototype.closestPointToPoint=function(e,t){return this.needsUpdate&&this.update(),t.copy(e).applyMatrix4(this.invMatrix).clamp(this.min,this.max).applyMatrix4(this.matrix),t},vr.prototype.distanceToPoint=(J=new iv,function(e){return this.closestPointToPoint(e,J),e.distanceTo(J)}),vr.prototype.distanceToBox=($=["x","y","z"],ee=Array(12).fill().map(()=>new lk),et=Array(12).fill().map(()=>new lk),ei=new iv,er=new iv,function(e,t=0,i=null,r=null){if(this.needsUpdate&&this.update(),this.intersectsBox(e))return(i||r)&&(e.getCenter(er),this.closestPointToPoint(er,ei),e.closestPointToPoint(ei,er),i&&i.copy(ei),r&&r.copy(er)),0;let s=t*t,a=e.min,o=e.max,l=this.points,h=1/0;for(let e=0;e<8;e++){let t=l[e];er.copy(t).clamp(a,o);let c=t.distanceToSquared(er);
3139if(c<h&&(h=c,i&&i.copy(t),r&&r.copy(er),c<s))return Math.sqrt(c)}let c=0;for(let e=0;e<3;e++)for(let t=0;t<=1;t++)for(let i=0;i<=1;i++){let r=(e+1)%3,s=(e+2)%3,h=t<<r|i<<s,d=1<<e|t<<r|i<<s,u=l[h],p=l[d];ee[c].set(u,p);let f=$[e],m=$[r],g=$[s],v=et[c],y=v.start,x=v.end;y[f]=a[f],y[m]=t?a[m]:o[m],y[g]=i?a[g]:o[m],x[f]=o[f],x[m]=t?a[m]:o[m],x[g]=i?a[g]:o[m],c++}for(let e=0;e<=1;e++)for(let t=0;t<=1;t++)for(let l=0;l<=1;l++){er.x=e?o.x:a.x,er.y=t?o.y:a.y,er.z=l?o.z:a.z,this.closestPointToPoint(er,ei);let c=er.distanceToSquared(ei);if(c<h&&(h=c,i&&i.copy(ei),r&&r.copy(er),c<s))return Math.sqrt(c)}for(let e=0;e<12;e++){let t=ee[e];for(let e=0;e<12;e++){g7(t,et[e],ei,er);let a=ei.distanceToSquared(er);if(a<h&&(h=a,i&&i.copy(ei),r&&r.copy(er),a<s))return Math.sqrt(a)}}return Math.sqrt(h)});var vs=new iv,va=new iv,vn=new iv,vo=new tQ,vl=new tQ,vh=new tQ,vc=new iv,vd=new iv,vu=new iv,vp=new iv;function vf(e,t,i,r,s){let a=3*r,o=e.index.getX(a),l=e.index.getX(a+1),h=e.index.getX(a+2),{position:c,normal:d,uv:u,uv1:p}=e.attributes,f=function(e,t,i,r,s,a,o,l,h){vs.fromBufferAttribute(t,a),va.fromBufferAttribute(t,o),vn.fromBufferAttribute(t,l);let c=null===(1===h?e.intersectTriangle(vn,va,vs,!0,vp):e.intersectTriangle(vs,va,vn,2!==h,vp))?null:{distance:e.origin.distanceTo(vp),point:vp.clone()};if(c){r&&(vo.fromBufferAttribute(r,a),vl.fromBufferAttribute(r,o),vh.fromBufferAttribute(r,l),c.uv=rx.getInterpolation(vp,vs,va,vn,vo,vl,vh,new tQ)),s&&(vo.fromBufferAttribute(s,a),vl.fromBufferAttribute(s,o),vh.fromBufferAttribute(s,l),c.uv1=rx.getInterpolation(vp,vs,va,vn,vo,vl,vh,new tQ)),i&&(vc.fromBufferAttribute(i,a),vd.fromBufferAttribute(i,o),vu.fromBufferAttribute(i,l),c.normal=rx.getInterpolation(vp,vs,va,vn,vc,vd,vu,new iv),c.normal.dot(e.direction)>0&&c.normal.multiplyScalar(-1));let t={a:a,b:o,c:l,normal:new iv,materialIndex:0};rx.getNormal(vs,va,vn,t.normal),c.face=t,c.faceIndex=a}return c}(i,c,d,u,p,o,l,h,t);return f?(f.faceIndex=r,s&&s.push(f),f):null}function vm(e,t,i,r){let s=e.a,a=e.b,o=e.c,l=t,h=t+1,c=t+2;i&&(l=i.getX(t),h=i.getX(t+1),c=i.getX(t+2)),s.x=r.getX(l),s.y=r.getY(l),s.z=r.getZ(l),a.x=r.getX(h),a.y=r.getY(h),a.z=r.getZ(h),o.x=r.getX(c),o.y=r.getY(c),o.z=r.getZ(c)}function vg(e,t,i,r,s,a,o){let l=i.index,h=i.attributes.position;for(let i=e,c=t+e;i<c;i++)if(vm(o,3*i,l,h),o.needsUpdate=!0,r(o,i,s,a))return!0;return!1}var vv=class{constructor(e){this._getNewPrimitive=e,this._primitives=[]}getPrimitive(){let e=this._primitives;return 0===e.length?this._getNewPrimitive():e.pop()}releasePrimitive(e){this._primitives.push(e)}};function vy(e,t){return 65535===t[e+15]}var vx=new ib,vb=new iv,vw=["x","y","z"],vS=(en=[],eo=new vv(()=>new ib),function(...e){es=eo.getPrimitive(),ea=eo.getPrimitive(),en.push(es,ea);let t=function e(t,i,r,s,a=null,o=0,l=0){function h(e){let t=2*e,i=yq,r=yX;for(;!vy(t,i);)e+=8,t=2*e;return r[e+6]}function c(e){let t=2*e,i=yq,r=yX;for(;!vy(t,i);)t=2*(e=r[e+6]);return r[e+6]+i[t+14]}let d=2*t,u=yW,p=yq,f=yX;if(vy(d,p)){let e=f[t+6],i=p[d+14];return gJ(t,u,es),s(e,i,!1,l,o+t,es)}{let d=t+8,m=f[t+6],g=d,v=m,y,x,b,w;if(a&&(b=es,w=ea,gJ(g,u,b),gJ(v,u,w),y=a(b),(x=a(w))<y)){g=m,v=d;let e=y;y=x,x=e,b=w}b||gJ(g,u,b=es);let S=r(b,vy(2*g,p),y,l+1,o+g),_;if(2===S){let e=h(g),t=c(g)-e;_=s(e,t,!0,l+1,o+g,b)}else _=S&&e(g,i,r,s,a,o,l+1);if(_)return!0;gJ(v,u,w=ea);let A=r(w,vy(2*v,p),x,l+1,o+v),M;if(2===A){let e=h(v),t=c(v)-e;M=s(e,t,!0,l+1,o+v,w)}else M=A&&e(v,i,r,s,a,o,l+1);return!!M}}(...e);eo.releasePrimitive(es),eo.releasePrimitive(ea),en.pop(),en.pop();let i=en.length;return i>0&&(ea=en[i-1],es=en[i-2]),t}),v_=(el=new vi,eh=new vi,ec=new iX,ed=new vr,eu=new vr,function e(t,i,r,s,a=null){let o=2*t,l=yW,h=yq,c=yX;if(null===a&&(r.boundingBox||r.computeBoundingBox(),ed.set(r.boundingBox.min,r.boundingBox.max,s),a=ed),vy(o,h)){let e=i.index,a=i.attributes.position,d=r.index,u=r.attributes.position,p=c[t+6],f=h[o+14];if(ec.copy(s).invert(),r.boundsTree)return gJ(t,l,eu),eu.matrix.copy(ec),eu.needsUpdate=!0,r.boundsTree.shapecast({intersectsBounds:e=>eu.intersectsBox(e),intersectsTriangle:t=>
3139{t.a.applyMatrix4(s),t.b.applyMatrix4(s),t.c.applyMatrix4(s),t.needsUpdate=!0;for(let i=3*p,r=(f+p)*3;i<r;i+=3)if(vm(eh,i,e,a),eh.needsUpdate=!0,t.intersectsTriangle(eh))return!0;return!1}});for(let t=3*p,i=f+3*p;t<i;t+=3){vm(el,t,e,a),el.a.applyMatrix4(ec),el.b.applyMatrix4(ec),el.c.applyMatrix4(ec),el.needsUpdate=!0;for(let e=0,t=d.count;e<t;e+=3)if(vm(eh,e,d,u),eh.needsUpdate=!0,el.intersectsTriangle(eh))return!0}}else{let o=t+8,h=c[t+6];return gJ(o,l,vx),!!(a.intersectsBox(vx)&&e(o,i,r,s,a)||(gJ(h,l,vx),a.intersectsBox(vx)&&e(h,i,r,s,a)))}});function vA(e,t,i,r){return gJ(e,t,vx),i.intersectBox(vx,r)}var vM,vE,vC,vT,vP,vD,vI,vO,vR,vL,vB,vz,vF,vN,vk,vU,vV,vj,vG,vH,vW,vq,vX,vY,vQ,vK,vZ,vJ,v$,v0,v1,v2,v3,v4,v5,v6,v8,v9,v7,ye,yt,yi,yr,ys,ya,yn,yo,yl,yh,yc,yd,yu,yp,yf,ym,yg,yv,yy,yx,yb,yw,yS,y_,yA,yM,yE,yC,yT,yP,yD,yI,yO,yR,yL,yB,yz,yF,yN,yk,yU,yV,yj,yG,yH,yW,yq,yX,yY=[];function yQ(e){yH&&yY.push(yH),yH=e,yW=new Float32Array(e),yq=new Uint16Array(e),yX=new Uint32Array(e)}function yK(){yH=null,yW=null,yq=null,yX=null,yY.length&&yQ(yY.pop())}var yZ=Symbol("skip tree generation"),yJ=new ib,y$=new ib,y0=new iX,y1=new vr,y2=new vr,y3=new iv,y4=new iv,y5=new iv,y6=new iv,y8=new iv,y9=new ib,y7=new vv(()=>new vi),xe=class{static serialize(e,t={}){if(t.isBufferGeometry)return console.warn("MeshBVH.serialize: The arguments for the function have changed. See documentation for new signature."),xe.serialize(arguments[0],{cloneBuffers:void 0===arguments[2]||arguments[2]});t={cloneBuffers:!0,...t};let i=e.geometry,r=e._roots,s=i.getIndex();return t.cloneBuffers?{roots:r.map(e=>e.slice()),index:s.array.slice()}:{roots:r,index:s.array}}static deserialize(e,t,i={}){if("boolean"==typeof i)return console.warn("MeshBVH.deserialize: The arguments for the function have changed. See documentation for new signature."),xe.deserialize(arguments[0],arguments[1],{setIndex:void 0===arguments[2]||arguments[2]});i={setIndex:!0,...i};let{index:r,roots:s}=e,a=new xe(t,{...i,[yZ]:!0});if(a._roots=s,i.setIndex){let i=t.getIndex();if(null===i){let i=new rM(e.index,1,!1);t.setIndex(i)}else i.array!==r&&(i.array.set(r),i.needsUpdate=!0)}return a}constructor(e,t={}){if(e.isBufferGeometry){if(e.index&&e.index.isInterleavedBufferAttribute)throw Error("MeshBVH: InterleavedBufferAttribute is not supported for the index attribute.")}else throw Error("MeshBVH: Only BufferGeometries are supported.");if((t=Object.assign({strategy:0,maxDepth:40,maxLeafTris:10,verbose:!0,useSharedArrayBuffer:!1,setBoundingBox:!0,onProgress:null,[yZ]:!1},t)).useSharedArrayBuffer&&typeof SharedArrayBuffer>"u")throw Error("MeshBVH: SharedArrayBuffer is not available.");this._roots=null,t[yZ]||(this._roots=function(e,t){let i=function(e,t){function i(e){p&&p(e/f)}function r(t,s,p,f=null,g=0){if(!m&&g>=h&&(m=!0,c&&(console.warn(`MeshBVH: Max depth of ${h} reached when generating BVH. Consider increasing maxDepth.`),console.warn(e))),p<=d||g>=h)return i(s+p),t.offset=s,t.count=p,t;let v=function(e,t,i,r,s,a){let o=-1,l=0;if(0===a)-1!==(o=g$(t))&&(l=(t[o]+t[o+3])/2);else if(1===a)-1!==(o=g$(e))&&(l=function(e,t,i,r){let s=0;for(let a=t,o=t+i;a<o;a++)s+=e[6*a+2*r];return s/i}(i,r,s,o));else if(2===a){let a=g2(e),h=1.25*s,c=6*r,d=(r+s)*6;for(let e=0;e<3;e++){let r=t[e],u=(t[e+3]-r)/32;if(s<8){let t=[...g5];t.length=s;let r=0;for(let s=c;s<d;s+=6,r++){let a=t[r];a.candidate=i[s+2*e],a.count=0;let{bounds:o,leftCacheBounds:l,rightCacheBounds:h}=a;for(let e=0;e<3;e++)h[e]=1/0,h[e+3]=-1/0,l[e]=1/0,l[e+3]=-1/0,o[e]=1/0,o[e+3]=-1/0;g1(s,i,o)}t.sort(g4);let u=s;for(let e=0;e<u;e++){let i=t[e];for(;e+1<u&&t[e+1].candidate===i.candidate;)t.splice(e+1,1),u--}for(let r=c;r<d;r+=6){let s=i[r+2*e];for(let e=0;e<u;e++){let a=t[e];s>=a.candidate?g1(r,i,a.rightCacheBounds):(g1(r,i,a.leftCacheBounds),a.count++)}}for(let i=0;i<u;i++){let r=t[i],c=r.count,d=s-r.count,u=r.leftCacheBounds,p=r.rightCacheBounds,f=0;0!==c&&(f=g2(u)/a);let m=0;0!==d&&(m=g2(p)/a);let g=1+1.25*(f*c+m*d);g<h&&(o=e,h=g,l=r.candidate)}}else{for(let e=0;e<32;e++){let t=g5[e];t.count=0,t.candidate=r+u+e*u;let i=t.bounds;for(let e=0;e<3;e++)i[e]=1/0,i[e+3]=-1/0}for(let t=c;t<d;t+=6){let s=~~((i[t+2*e]-r)/u);s>=32&&(s=31);let a=g5[s];a.count++,g1(t,i,a.bounds)}let t=g5[31];!function(e,t){t.set(e)}(t.bounds,t.rightCacheBounds);for(let e=30;e>=0;e--){let t=g5[e],i=g5[e+1];g0(t.bounds,i.rightCacheBounds,t.rightCacheBounds)}let p=0;for(let t=0;t<31;t++){let i=g5[t],r=i.count,c=i.bounds,d=g5[t+1].rightCacheBounds;0!==r&&(0===p?function(e,t){t.set(e)}(c,g6):g0(c,g6,g6));let u=0,f=0;0!==(p+=r)&&(u=g2(g6)/a);let m=s-p;0!==m&&(f=g2(d)/a);let g=1+1.25*(u*p+f*m);g<h&&(o=e,h=g,l=i.candidate)}}}}else console.warn(`MeshBVH: Invalid build strategy value ${a} used.`);return{axis:o,pos:l}}(t.boundingData,f,o,s,p,u);if(-1===v.axis)return i(s+p),t.offset=s,t.count=p,t;let y=function(e,t,i,r,s){let a=i,o=i+r-1,l=s.pos,h=2*s.axis;for(;;){for(;a<=o&&t[6*a+h]<l;)a++;for(;a<=o&&t[6*o+h]>=l;)o--;if(!(a<o))return a;for(let i=0;i<3;i++){let r=e[3*a+i];e[3*a+i]=e[3*o+i],e[3*o+i]=r;let s=t[6*a+2*i+0];t[6*a+2*i+0]=t[6*o+2*i+0],t[6*o+2*i+0]=s;let l=t[6*a+2*i+1];t[6*a+2*i+1]=t[6*o+2*i+1],t[6*o+2*i+1]=l}a++,o--}}(l,o,s,p,v);if(y===s||y===s+p)i(s+p),t.offset=s,t.count=p;else{t.splitAxis=v.axis;let e=new gZ,i=y-s;
3139t.left=e,e.boundingData=new Float32Array(6),g3(o,s,i,e.boundingData,a),r(e,s,i,a,g+1);let l=new gZ,h=p-i;t.right=l,l.boundingData=new Float32Array(6),g3(o,y,h,l.boundingData,a),r(l,y,h,a,g+1)}return t}!function(e,t){if(!e.index){let i=e.attributes.position.count,r=t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,s;s=i>65535?new Uint32Array(new r(4*i)):new Uint16Array(new r(2*i)),e.setIndex(new rM(s,1));for(let e=0;e<i;e++)s[e]=e}}(e,t);let s=new Float32Array(6),a=new Float32Array(6),o=function(e,t){let i=e.attributes.position,r=e.index.array,s=r.length/3,a=new Float32Array(6*s),o=i.normalized,l=i.array,h=i.offset||0,c=3;i.isInterleavedBufferAttribute&&(c=i.data.stride);let d=["getX","getY","getZ"];for(let e=0;e<s;e++){let s=3*e,u=6*e,p,f,m;o?(p=r[s+0],f=r[s+1],m=r[s+2]):(p=r[s+0]*c+h,f=r[s+1]*c+h,m=r[s+2]*c+h);for(let e=0;e<3;e++){let r,s,h;o?(r=i[d[e]](p),s=i[d[e]](f),h=i[d[e]](m)):(r=l[p+e],s=l[f+e],h=l[m+e]);let c=r;s<c&&(c=s),h<c&&(c=h);let g=r;s>g&&(g=s),h>g&&(g=h);let v=(g-c)/2,y=2*e;a[u+y+0]=c+v,a[u+y+1]=v+(Math.abs(c)+v)*5960464477539063e-23,c<t[e]&&(t[e]=c),g>t[e+3]&&(t[e+3]=g)}}return a}(e,s),l=e.index.array,h=t.maxDepth,c=t.verbose,d=t.maxLeafTris,u=t.strategy,p=t.onProgress,f=e.index.count/3,m=!1,g=[],v=function(e){if(!e.groups||!e.groups.length)return[{offset:0,count:e.index.count/3}];let t=[],i=new Set;for(let t of e.groups)i.add(t.start),i.add(t.start+t.count);let r=Array.from(i.values()).sort((e,t)=>e-t);for(let e=0;e<r.length-1;e++){let i=r[e],s=r[e+1];t.push({offset:i/3,count:(s-i)/3})}return t}(e);if(1===v.length){let e=v[0],t=new gZ;t.boundingData=s,function(e,t,i,r){let s=1/0,a=1/0,o=1/0,l=-1/0,h=-1/0,c=-1/0;for(let r=6*t,d=(t+i)*6;r<d;r+=6){let t=e[r+0];t<s&&(s=t),t>l&&(l=t);let i=e[r+2];i<a&&(a=i),i>h&&(h=i);let d=e[r+4];d<o&&(o=d),d>c&&(c=d)}r[0]=s,r[1]=a,r[2]=o,r[3]=l,r[4]=h,r[5]=c}(o,e.offset,e.count,a),r(t,e.offset,e.count,a),g.push(t)}else for(let e of v){let t=new gZ;t.boundingData=new Float32Array(6),g3(o,e.offset,e.count,t.boundingData,a),r(t,e.offset,e.count,a),g.push(t)}return g}(e,t),r,s,a,o=[],l=t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer;for(let e=0;e<i.length;e++){let t=i[e],h=new l(32*function e(t){return t.count?1:1+e(t.left)+e(t.right)}(t));r=new Float32Array(h),s=new Uint32Array(h),a=new Uint16Array(h),function e(t,i){let o=t/4,l=t/2,h=!!i.count,c=i.boundingData;for(let e=0;e<6;e++)r[o+e]=c[e];if(h){let e=i.offset,r=i.count;return s[o+6]=e,a[l+14]=r,a[l+15]=65535,t+32}{let r=i.left,a=i.right,l=i.splitAxis,h;if((h=e(t+32,r))/4>4294967296)throw Error("MeshBVH: Cannot store child pointer greater than 32 bits.");return s[o+6]=h/4,h=e(h,a),s[o+7]=l,h}}(0,t),o.push(h)}return o}(e,t),!e.boundingBox&&t.setBoundingBox&&(e.boundingBox=this.getBoundingBox(new ib))),this.geometry=e}refit(e=null){e&&Array.isArray(e)&&(e=new Set(e));let t=this.geometry,i=t.index.array,r=t.attributes.position,s,a,o,l,h=0,c=this._roots;for(let t=0,d=c.length;t<d;t++)a=new Uint32Array(s=c[t]),o=new Uint16Array(s),l=new Float32Array(s),function t(s,h,c=!1){let d=2*s;if(65535===o[d+15]){let e=a[s+6],t=o[d+14],h=1/0,c=1/0,u=1/0,p=-1/0,f=-1/0,m=-1/0;for(let s=3*e,a=3*(e+t);s<a;s++){let e=i[s],t=r.getX(e),a=r.getY(e),o=r.getZ(e);t<h&&(h=t),t>p&&(p=t),a<c&&(c=a),a>f&&(f=a),o<u&&(u=o),o>m&&(m=o)}return(l[s+0]!==h||l[s+1]!==c||l[s+2]!==u||l[s+3]!==p||l[s+4]!==f||l[s+5]!==m)&&(l[s+0]=h,l[s+1]=c,l[s+2]=u,l[s+3]=p,l[s+4]=f,l[s+5]=m,!0)}{let i=s+8,r=a[s+6],o=i+h,d=r+h,u=c,p=!1,f=!1;e?u||(p=e.has(o),f=e.has(d),u=!p&&!f):(p=!0,f=!0);let m=u||p,g=u||f,v=!1;m&&(v=t(i,h,u));let y=!1;g&&(y=t(r,h,u));let x=v||y;if(x)for(let e=0;e<3;e++){let t=i+e,a=r+e,o=l[t],h=l[t+3],c=l[a],d=l[a+3];l[s+e]=o<c?o:c,l[s+e+3]=h>d?h:d}return x}}(0,h),h+=s.byteLength}traverse(e,t=0){let i=this._roots[t],r=new Uint32Array(i),s=new Uint16Array(i);!function t(a,o=0){let l=2*a,h=65535===s[l+15];if(h){let t=r[a+6],c=s[l+14];e(o,h,new Float32Array(i,4*a,6),t,c)}else{let s=r[a+6],l=r[a+7];e(o,h,new Float32Array(i,4*a,6),l)||(t(a+8,o+1),t(s,o+1))}}(0)}raycast(e,t=0){let i=this._roots,r=this.geometry,s=[],a=t.isMaterial,o=Array.isArray(t),l=r.groups,h=a?t.side:t;for(let a=0,c=i.length;a<c;a++){let c=o?t[l[a].materialIndex].side:h,d=s.length;if(yQ(i[a]),function e(t,i,r,s,a){let o=2*t,l=yW,h=yq,c=yX;if(vy(o,h))!function(e,t,i,r,s,a){for(let o=r,l=r+s;o<l;o++)vf(e,t,i,o,a)}(i,r,s,c[t+6],h[o+14],a);else{let o=t+8;vA(o,l,s,vb)&&e(o,i,r,s,a);let h=c[t+6];vA(h,l,s,vb)&&e(h,i,r,s,a)}}(0,r,c,e,s),yK(),o){let e=l[a].materialIndex;for(let t=d,i=s.length;t<i;t++)s[t].face.materialIndex=e}}return s}raycastFirst(e,t=0){let i=this._roots,r=this.geometry,s=t.isMaterial,a=Array.isArray(t),o=null,l=r.groups,h=s?t.side:t;for(let s=0,c=i.length;s<c;s++){let c=a?t[l[s].materialIndex].side:h;yQ(i[s]);let d=function e(t,i,r,s){let a=2*t,o=yW,l=yq,h=yX;if(vy(a,l))return function(e,t,i,r,s){let a=1/0,o=null;for(let l=r,h=r+s;l<h;l++){let r=vf(e,t,i,l);r&&r.distance<a&&(o=r,a=r.distance)}return o}
3139(i,r,s,h[t+6],l[a+14]);{let a=h[t+7],l=vw[a],c=s.direction[l]>=0,d,u;c?(d=t+8,u=h[t+6]):(d=h[t+6],u=t+8);let p=vA(d,o,s,vb)?e(d,i,r,s):null;if(p){let e=p.point[l];if(c?e<=o[u+a]:e>=o[u+a+3])return p}let f=vA(u,o,s,vb)?e(u,i,r,s):null;return p&&f?p.distance<=f.distance?p:f:p||f||null}}(0,r,c,e);yK(),null!=d&&(null==o||d.distance<o.distance)&&(o=d,a&&(d.face.materialIndex=l[s].materialIndex))}return o}intersectsGeometry(e,t){let i=this.geometry,r=!1;for(let s of this._roots)if(yQ(s),r=v_(0,i,e,t),yK(),r)break;return r}shapecast(e,t,i){let r=this.geometry;if(e instanceof Function){if(t){let e=t;t=(t,i,r,s)=>{let a=3*i;return e(t,a,a+1,a+2,r,s)}}e={boundsTraverseOrder:i,intersectsBounds:e,intersectsTriangle:t,intersectsRange:null},console.warn("MeshBVH: Shapecast function signature has changed and now takes an object of callbacks as a second argument. See docs for new signature.")}let s=y7.getPrimitive(),{boundsTraverseOrder:a,intersectsBounds:o,intersectsRange:l,intersectsTriangle:h}=e;if(l&&h){let e=l;l=(t,i,a,o,l)=>!!e(t,i,a,o,l)||vg(t,i,r,h,a,o,s)}else l||(l=h?(e,t,i,a)=>vg(e,t,r,h,i,a,s):(e,t,i)=>i);let c=!1,d=0;for(let e of this._roots){if(yQ(e),c=vS(0,r,o,l,a,d),yK(),c)break;d+=e.byteLength}return y7.releasePrimitive(s),c}bvhcast(e,t,i){let{intersectsRanges:r,intersectsTriangles:s}=i,a=this.geometry.index,o=this.geometry.attributes.position,l=e.geometry.index,h=e.geometry.attributes.position;y0.copy(t).invert();let c=y7.getPrimitive(),d=y7.getPrimitive();if(s){let e=function(e,i,r,u,p,f,m,g){for(let v=r,y=r+u;v<y;v++){vm(d,3*v,l,h),d.a.applyMatrix4(t),d.b.applyMatrix4(t),d.c.applyMatrix4(t),d.needsUpdate=!0;for(let t=e,r=e+i;t<r;t++)if(vm(c,3*t,a,o),c.needsUpdate=!0,s(c,d,t,v,p,f,m,g))return!0}return!1};if(r){let t=r;r=function(i,r,s,a,o,l,h,c){return!!t(i,r,s,a,o,l,h,c)||e(i,r,s,a,o,l,h,c)}}else r=e}e.getBoundingBox(y$),y$.applyMatrix4(t);let u=this.shapecast({intersectsBounds:e=>y$.intersectsBox(e),intersectsRange:(t,i,s,a,o,l)=>(yJ.copy(l),yJ.applyMatrix4(y0),e.shapecast({intersectsBounds:e=>yJ.intersectsBox(e),intersectsRange:(e,s,l,h,c)=>r(t,i,e,s,a,o,h,c)}))});return y7.releasePrimitive(c),y7.releasePrimitive(d),u}intersectsBox(e,t){return y1.set(e.min,e.max,t),y1.needsUpdate=!0,this.shapecast({intersectsBounds:e=>y1.intersectsBox(e),intersectsTriangle:e=>y1.intersectsTriangle(e)})}intersectsSphere(e){return this.shapecast({intersectsBounds:t=>e.intersectsBox(t),intersectsTriangle:t=>t.intersectsSphere(e)})}closestPointToGeometry(e,t,i={},r={},s=0,a=1/0){e.boundingBox||e.computeBoundingBox(),y1.set(e.boundingBox.min,e.boundingBox.max,t),y1.needsUpdate=!0;let o=this.geometry,l=o.attributes.position,h=o.index,c=e.attributes.position,d=e.index,u=y7.getPrimitive(),p=y7.getPrimitive(),f=null,m=null;r&&(f=y6,m=y8);let g=1/0,v=null,y=null;return y0.copy(t).invert(),y2.matrix.copy(y0),this.shapecast({boundsTraverseOrder:e=>y1.distanceToBox(e),intersectsBounds:(e,t,i)=>i<g&&i<a&&(t&&(y2.min.copy(e.min),y2.max.copy(e.max),y2.needsUpdate=!0),!0),intersectsRange:(i,r)=>{if(e.boundsTree)return e.boundsTree.shapecast({boundsTraverseOrder:e=>y2.distanceToBox(e),intersectsBounds:(e,t,i)=>i<g&&i<a,intersectsRange:(e,a)=>{for(let o=3*e,x=(e+a)*3;o<x;o+=3){vm(p,o,d,c),p.a.applyMatrix4(t),p.b.applyMatrix4(t),p.c.applyMatrix4(t),p.needsUpdate=!0;for(let e=3*i,t=(i+r)*3;e<t;e+=3){vm(u,e,h,l),u.needsUpdate=!0;let t=u.distanceToTriangle(p,y4,f);if(t<g&&(y5.copy(y4),m&&m.copy(f),g=t,v=e/3,y=o/3),t<s)return!0}}}});{let e=d?d.count:c.count;for(let a=0;a<e;a+=3){vm(p,a,d,c),p.a.applyMatrix4(t),p.b.applyMatrix4(t),p.c.applyMatrix4(t),p.needsUpdate=!0;for(let e=3*i,t=(i+r)*3;e<t;e+=3){vm(u,e,h,l),u.needsUpdate=!0;let t=u.distanceToTriangle(p,y4,f);if(t<g&&(y5.copy(y4),m&&m.copy(f),g=t,v=e/3,y=a/3),t<s)return!0}}}}}),y7.releasePrimitive(u),y7.releasePrimitive(p),g===1/0?null:(i.point?i.point.copy(y5):i.point=y5.clone(),i.distance=g,i.faceIndex=v,r&&(r.point?r.point.copy(m):r.point=m.clone(),r.point.applyMatrix4(y0),y5.applyMatrix4(y0),r.distance=y5.sub(r.point).length(),r.faceIndex=y),i)}closestPointToPoint(e,t={},i=0,r=1/0){let s=i*i,a=r*r,o=1/0,l=null;
3139if(this.shapecast({boundsTraverseOrder:t=>(y3.copy(e).clamp(t.min,t.max),y3.distanceToSquared(e)),intersectsBounds:(e,t,i)=>i<o&&i<a,intersectsTriangle:(t,i)=>{t.closestPointToPoint(e,y3);let r=e.distanceToSquared(y3);return r<o&&(y4.copy(y3),o=r,l=i),r<s}}),o===1/0)return null;let h=Math.sqrt(o);return t.point?t.point.copy(y4):t.point=y4.clone(),t.distance=h,t.faceIndex=l,t}getBoundingBox(e){return e.makeEmpty(),this._roots.forEach(t=>{gJ(0,new Float32Array(t),y9),e.union(y9)}),e}},xt=tw(t_()),xi=.5*(Math.sqrt(3)-1),xr=(3-Math.sqrt(3))/6,xs=1/3,xa=1/6,xn=e=>0|Math.floor(e),xo=new Float64Array([1,1,-1,1,1,-1,-1,-1,1,0,-1,0,1,0,-1,0,0,1,0,-1,0,1,0,-1]),xl=new Float64Array([1,1,0,-1,1,0,1,-1,0,-1,-1,0,1,0,1,-1,0,1,1,0,-1,-1,0,-1,0,1,1,0,-1,1,0,1,-1,0,-1,-1]);function xh(e){let t=new Uint8Array(512);for(let e=0;e<256;e++)t[e]=e;for(let i=0;i<255;i++){let r=i+~~(e()*(256-i)),s=t[i];t[i]=t[r],t[r]=s}for(let e=256;e<512;e++)t[e]=t[e-256];return t}var xc,xd=new rx,xu=class{constructor(e){this.weightAttribute=null;let t=e.geometry;if(!t.isBufferGeometry||3!==t.attributes.position.itemSize)throw Error("THREE.MeshSurfaceSampler: Requires BufferGeometry triangle mesh.");t.index&&(t=t.toNonIndexed()),this.geometry=t,this.randomFunction=Math.random,this.positionAttribute=this.geometry.getAttribute("position"),this.distribution=null}build(){let e=this.positionAttribute,t=new Float32Array(e.count/3);for(let i=0;i<e.count;i+=3){let r=1;xd.a.fromBufferAttribute(e,i),xd.b.fromBufferAttribute(e,i+1),xd.c.fromBufferAttribute(e,i+2),r*=xd.getArea(),t[i/3]=r}this.distribution=new Float32Array(e.count/3);let i=0;for(let e=0;e<t.length;e++)i+=t[e],this.distribution[e]=i;return this}setRandomGenerator(e){return this.randomFunction=e,this}sample(e,t){if(this.distribution){let i=this.distribution[this.distribution.length-1],r=this.binarySearch(this.randomFunction()*i);return this.sampleFace(r,e,t)}}binarySearch(e){if(!this.distribution)return 0;let t=this.distribution,i=0,r=t.length-1,s=-1;for(;i<=r;){let a=Math.ceil((i+r)/2);if(0===a||t[a-1]<=e&&t[a]>e){s=a;break}e<t[a]?r=a-1:i=a+1}return s}sampleFace(e,t,i){let r=this.randomFunction(),s=this.randomFunction();return r+s>1&&(r=1-r,s=1-s),xd.a.fromBufferAttribute(this.positionAttribute,3*e),xd.b.fromBufferAttribute(this.positionAttribute,3*e+1),xd.c.fromBufferAttribute(this.positionAttribute,3*e+2),t.set(0,0,0).addScaledVector(xd.a,r).addScaledVector(xd.b,s).addScaledVector(xd.c,1-(r+s)),xd.getNormal(i),this}},xp=tw(tA()),xf=new iX,xm=new iX,xg=new iX;(xc||(xc={})).is=function(e){return e&&e.__isSPEObject};var xv=e=>class extends e{constructor(){super(...arguments),this.previousModelViewMatrix=new iX,this.copyPreviousMatrix=!0,this.hiddenMatrix=new iX,this.matrixWorldRigid=new iX,this.shearScale=new iX,this.shearScaleInv=new iX}get __isSPEObject(){return!0}isDescendantOf(e){e instanceof rl&&(e=e.uuid);let t=this;for(;t.parent;){if(t.parent.uuid===e)return!0;t=t.parent}return!1}updateMatrixWorld(e){for(let t of(this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||e)&&(null===this.parent?this.matrixWorld.multiplyMatrices(this.hiddenMatrix,this.matrix):(this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.hiddenMatrix),this.matrixWorld.multiplyMatrices(this.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,e=!0),this.children))t.updateMatrixWorld(e)}updateWorldMatrix(e,t){let i=this.parent;if(e&&null!==i&&i.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),null===this.parent?this.matrixWorld.multiplyMatrices(this.hiddenMatrix,this.matrix):(this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.hiddenMatrix),this.matrixWorld.multiplyMatrices(this.matrixWorld,this.matrix)),t)for(let e of this.children)e.updateWorldMatrix(!1,!0)}traverseChildren(e,t=0){for(let i of this.children)xc.is(i)&&i.traverseObject(e,t+1)}traverseObject(e,t=0){if(!0!==e(this,t))for(let i of this.children)xc.is(i)&&i.traverseObject(e,t+1)}updateMatrixWorldSVD(){let e=this.matrixWorld.elements,t=[[e[0],e[4],e[8]],[e[1],e[5],e[9]],[e[2],e[6],e[10]]],{u:i,v:r,q:s}=(0,xp.SVD)(t),a=xf.set(i[0][0],i[0][1],i[0][2],0,i[1][0],i[1][1],i[1][2],0,i[2][0],i[2][1],i[2][2],0,0,0,0,1),o=xm.set(r[0][0],r[0][1],r[0][2],0,r[1][0],r[1][1],r[1][2],0,r[2][0],r[2][1],r[2][2],0,0,0,0,1),l=xg.copy(o).transpose();this.shearScale.makeScale(s[0],s[1],s[2]).multiply(l).premultiply(o),this.shearScaleInv.copy(this.shearScale).invert(),this.matrixWorldRigid.multiplyMatrices(a,l).copyPosition(this.matrixWorld),s.every(e=>.01>Math.abs(s[0]-e))?this.hasNonUniformScale=!1:this.hasNonUniformScale=!0}attach(e,t){this.updateWorldMatrix(!0,!1);let i=new iX().copy(this.matrixWorld).invert();return null!==e.parent&&(e.parent.updateWorldMatrix(!0,!1),i.multiply(e.parent.matrixWorld)),"hiddenMatrix"in e&&e.hiddenMatrix instanceof iX?e.hiddenMatrix.premultiply(i):e.applyM
3139atrix4(i),e.updateWorldMatrix(!1,!1),this.add(e),void 0!==t&&(this.children.pop(),this.children.splice(t,0,e)),this}copy(e,t=!1){return super.copy(e,t),this.hasNonUniformScale=e.hasNonUniformScale,this}onAfterRender(e,t,i,r,s,a){this.copyPreviousMatrix&&this.previousModelViewMatrix.copy(this.modelViewMatrix)}},xy=class extends xv(rl){},xx=e=>"Mesh"===e.type,xb=class extends xy{constructor(e){super(),this.object=e,this.matrixAutoUpdate=!1,this.hasNonUniformScale=e.hasNonUniformScale}raycast(e,t){}expand(){let e=0,t=this.object.entityChildren(e);for(;t;){let i=this.children[e];i?.object!==t&&(i&&this.remove(i),i=new xb(t),this.add(i),this.children.splice(e,0,this.children.pop()),i.matrixWorldNeedsUpdate=!0,i.matrixAutoUpdate=!1,i.matrix=t.matrix,i.hiddenMatrix=t.hiddenMatrix),i.expand(),e+=1,t=this.object.entityChildren(e)}for(;this.children.length>e;)this.remove(this.children[e])}get visible(){return void 0!==this.playModeVisible?this.playModeVisible:this.object.visible||this.object.dataPatched.visible&&this.object.dataPatched.cloner?.hideBase===!0}set visible(e){}get castShadow(){return this.object.castShadow}set castShadow(e){}get receiveShadow(){return this.object.receiveShadow}set receiveShadow(e){}get isMesh(){return xx(this.object)}get isLight(){return this.object.isLight}get layers(){return this.object.layers}set layers(e){}get isCamera(){return!1}get geometry(){if(this.object.geometry)return this.object.geometry}get material(){if(this.object.material)return this.object.material}},xw=new iv,xS=new iv,x_=new iX,xA=[new iv(-1,1,1),new iv(-1,-1,1),new iv(1,-1,1),new iv(1,1,1),new iv(-1,1,-1),new iv(-1,-1,-1),new iv(1,-1,-1),new iv(1,1,-1)],xM=[[0,3],[1,2],[5,6],[4,7],[0,1],[3,2],[7,6],[4,5],[0,4],[1,5],[2,6],[3,7]],xE=[[0,2],[7,5],[4,1],[3,6],[4,3],[1,6]],xC=(e,t,i)=>{e.updateEntityBoxSize(xw,xS),x_.copy(t).multiply(e.matrixWorld),0===xS.x&&0===xS.y&&0===xS.z?i.push(new iv(xw.x,xw.y,xw.z).applyMatrix4(x_)):xA.forEach(e=>{i.push(e.clone().multiply(xS).add(xw).applyMatrix4(x_))})},xT=class extends ib{constructor(){super(...arguments),this.matrix=new iX,this.vertices=[],this.faces=[],this.edges=[],this.centerEdges=[]}copy(e){return super.copy(e),this.matrix.copy(e.matrix),this.vertices=e.vertices.map(e=>e.clone()),this.faces=e.faces.map(e=>e.clone()),this.edges=e.edges.map(e=>e.clone()),this.centerEdges=e.centerEdges.map(e=>e.clone()),this}setFromObjectSize(e,t=!1){e.updateWorldMatrix(!1,t),this.makeEmpty(),this.matrix.copy(e.matrixWorld);let i=new iX().copy(e.matrixWorld).invert();return this.expandByObjectSize(e,i,t)}expandByObjectSize(e,t,i=!1){let r=[];return!0===i?e.traverseEntity(e=>{if(e.visible||e.cloner&&e.data.visible){if(!("geometry"in e)){r.push(new iv);return}xC(e,t,r)}}):xC(e,t,r),this.setFromPoints(r)}getCenter(e){return(e=super.getCenter(e)).applyMatrix4(this.matrix),e}getPositionToCenter(e){return(e=super.getCenter(e)).applyMatrix4(x_.copy(this.matrix).setPosition(0,0,0)),e}computeVertices(){this.getSize(xS).multiplyScalar(.5),this.getCenter(xw),x_.copy(this.matrix).setPosition(xw),this.vertices=xA.map(e=>e.clone().multiply(xS).applyMatrix4(x_))}computeEdges(){this.vertices.length>0&&this.computeVertices(),this.edges=xM.map(([e,t])=>new lk(this.vertices[e],this.vertices[t])),this.centerEdges=this.edges.map(e=>e.getCenter(new iv))}computeFaces(){this.vertices.length>0&&this.computeVertices(),this.faces=xE.map(([e,t])=>this.vertices[e].clone().add(this.vertices[t]).multiplyScalar(.5))}},xP={Cloner:()=>{},changeEntityProptotype:()=>{},createEntity:()=>{}},xD=class extends os{constructor(){super()}getPoints(e=12){let t=[],i,r=this.getCurveLengths(),s=r[r.length-1]/r.length;for(let a=0,o=this.curves;a<o.length;a++){let l=o[a],h=Math.ceil(e*(0===a?r[a]:r[a]-r[a-1])/s),c=l.getPoints(h);for(let e=0;e<c.length;e++){let r=c[e];i&&i.equals(r)||(t.push(r),i=r)}}return this.autoClose&&t.length>1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}};function xI(e,t,i){return .001>=t.clone().sub(e).cross(t.clone().sub(i)).length()}function xO(e,t){let i=new iv(...e.position),r=new iv(...e.controlNext.position),s=new iv(...t.controlPrevious.position),a=new iv(...t.position);return xI(i,r,a)&&xI(i,s,a)}function xR(e){let t=e.points.map(e=>new iv(...e.data.position)),i=[e.points[0]],r=new iv(...i[0].data.position);for(let s=0;s<e.points.length-1;s++)xI(r,t[s],t[s+1])||(i.push(e.points[s]),r=t[s]);i.push(e.points[e.points.length-1]);let s=e.isClosed,a=i.length-(s?0:1),o=i.length,l=[];for(let t=0;t<o;t++){let r=i[t].data,a=new iv(...r.position),h=new iv(...r.controlPrevious.position),c=new iv(...r.controlNext.position),d={position:a,baseRoundness:r.roundness,controlPrevious:h,controlNext:c};if(0===r.roundness||!e.isClosed&&(0===t||t===o-1)){l[t]={...d,removedLength:0};continue}let u=s&&0==t?o-1:t-1,p=s&&t==o-1?0:t+1,f=i[u].data,m=i[p].data,g=new iv(...f.position),v=new iv(...m.position),y=g.clone().sub(a).normalize(),x=v.clone().sub(a).normalize();Object.assign(d,{prevDir:y,nextDir:x});let b=xO(f,r),w=xO(r,m);if(b&&w){let e=y.clone().add(x).normalize(),i=e.clone().cross(y).length()/y.dot(e);l[t]={...d,tan:i,removedLength:r.roundness/i}}else l[t]={...d,removedLength:0}}for(let e=0;e<a;e++){let t=e,i=s&&e===o-1?0:e+1,r=l[t],a=l[i];if(0!==r.removedLength||0!==a.removedLength){let e=r.position.distanceTo(a.position);r.removedLength=Math.min(r.removedLength,e/2),a.removedLength=Math.min(a.removedLength,e/2)}}let h=[];for(let e=0;e<a;e++){let t=e,r=s&&e===o-1?0:e+1,a=l[t],c=l[r],d=null;if(xO(i[t].data,i[r].data)){let e=a.position.clone(),t=c.position.clone();(0!==a.removedLength||0!==c.removedLength)&&(a.nextDir&&e.add(a.nextDir.clone().setLength(a.removedLength)),c.prevDir&&t.add(c.prevDir.clone().setLength(c.removedLength))),e.distanceTo(t)>.001&&(d=new n8(e,e.clone().lerp(t,.3),t.clone().lerp(e,.3),t))}else a.position.distanceTo(c.position)>.001&&(d=new n8(a.position,a.controlNext,c.controlPrevious,c.position));h[2*e+1]=d}for(let e=0;e<o;e++){let t=l[e];if(0===t.removedLength){h[2*e]=null;continue}let i=t.position,r=t.prevDir.clone().multiplyScalar(t.removedLength).add(i),s=t.nextDir.clone().multiplyScalar(t.removedLength).add(i),a=t.tan*t.removedLength,o=t.prevDir.clone().add(t.nextDir).normalize(),c=r.clone().lerp(s,.5),d=r.distanceTo(s)/2,u=o.clone().multiplyScalar(Math.sqrt(Math.pow(a,2)-Math.pow(d,2))).add(c),p=o.clone().multiplyScalar(-a).add(u),f=i.distanceTo(p)/i.distanceTo(c),m=t.prevDir.clone().multiplyScalar(f*i.distanceTo(r)).add(i),g=m.clone().lerp(p,2),v=r.clone().lerp(m,4/3),y=s.clone().lerp(g,4/3);h[2*e]=new n8(r,v,y,s)}let c=new xD;
3139return h.forEach(e=>{e&&c.add(e)}),c}(wQ||(wQ={})).is=function(e){return e&&e.__isEntity};var xL=e=>wQ.is(e),xB={type:"completeState",isfromEntity:!0},xz=["x","y","z"],xF=new iv,xN=new iv().set(0,1,0),xk=e=>class extends xv(e){constructor(){super(...arguments),this.raycastLock=!1,this.scaleLock=!1,this.disposed=!1,this.stateSelection=null,this.destroyedInAction=!1,this.instances=[],this.prevState=null,this.currentState=null,this.reversibleToState=null,this.currentTransitionEvent=null,this.previousAction=null,this._singleBBox=new xT,this._recursiveBBox=new xT,this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0,this._needApplyPathSnapping=!0,this.attachedPaths=new Set}get __isEntity(){return!0}entityChildren(e){let t=this.children[e];if(wQ.is(t))return t}entityChildrenCount(){let e=this.children.length;for(;e--;)if(wQ.is(this.children[e]))return e+1;return 0}get isConcreteEntity(){return"string"==typeof this.identity}get isVirtualEntity(){return"string"!=typeof this.identity}get isInstanceRoot(){return this.isConcreteEntity&&"Instance"===this.data.type}nearestInstanceSelfOrParent(){let e=this;for(;"Instance"!==e.data.type;){let t=e.parent;if(!wQ.is(t))return;e=t}return e}forInstancesRec(e){this.instances.forEach(t=>{t.disposed||e(t),t.forInstancesRec(e)})}super_Entity(e,t){"string"==typeof e&&(this.uuid=e),this.identity=e,this.data=t,this.matrixAutoUpdate=!1,this.dataPatched=this.data}changeSelectedState(e,t,i=!1){if(!(0===this.data.states.length&&!i)){for(let e of this.data.states)ya.toOps(this.data,e.data).forEach(e=>{let i=pJ.replaceProps(e,this.data);this.dataPatched=this.data,this.updateByPatchedOp(i,this.data,t)});if(null!==e){let i=this.data.states.data(e);i&&(this.dataPatched=ya.patch(this.data,i),ya.toOps(this.data,i).forEach(e=>{this.updateByPatchedOp(e,this.dataPatched,t)}))}i&&this.updateTransformState(this.dataPatched,t),this.stateSelection=e,this.updatePathSnapping(this.dataPatched.pathSnapping)}}get singleBBox(){return this.singleBBoxNeedsUpdate&&(this.singleBBoxNeedsUpdate=!1,this._singleBBox.setFromObjectSize(this,!1),this._singleBBox.computeVertices(),this._singleBBox.computeEdges(),this._singleBBox.computeFaces()),this._singleBBox}get recursiveBBox(){return this.recursiveBBoxNeedsUpdate&&(this.recursiveBBoxNeedsUpdate=!1,this._recursiveBBox.setFromObjectSize(this,!0),this._recursiveBBox.computeVertices(),this._recursiveBBox.computeEdges(),this._recursiveBBox.computeFaces()),this._recursiveBBox}updateEntityBoxSize(e,t){e.setScalar(0),t.setScalar(0)}resetBBoxNeedsUpdateSelf(){this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0}resetBBoxNeedsUpdate(){this.resetBBoxNeedsUpdateSelf(),this.traverseAncestors(e=>{xL(e)&&e.resetBBoxNeedsUpdateSelf()}),this.traverseEntity(e=>{e.resetBBoxNeedsUpdateSelf()})}find(e){let t;return this.traverseEntity(i=>{i.uuid===e&&(t=i)}),t}traverseSortNextHelper(){let e=this.parent;if(e){let t=e.children,i=t.indexOf(this)+1;if(wQ.is(t[i]))return t[i];if(wQ.is(e))return e.traverseSortNextHelper()}}sortNext(){let e=this.children;return this.children.length>0&&wQ.is(this.children[0])?e[0]:this.traverseSortNextHelper()}goUp(e){let t=this;for(;e>0&&null!==t;)t=t.parent,e-=1;return t}hasAnccestorOrSelf(e){return this===e||this.hasAnccestor(e)}hasAnccestor(e){let t=this.parent;for(;t;){if(e===t)return!0;t=t.parent}return!1}countToAccestor(e){let t=0,i=this;for(;i!==e;){if(null===i)return -1;i=i.parent,t+=1}return t}forEachEntity(e){for(let t of this.children)xL(t)&&e(t)}traverseEntityAncestors(e){this.traverseAncestors(t=>{wQ.is(t)&&e(t)})}traverseConcreteEntity(e,t=0){if(!0!==e(this,t))for(let i of this.children)xL(i)&&i.isConcreteEntity&&i.traverseEntity(e,t+1)}traverseEntity(e,t=0){if(!0!==e(this,t))for(let i of this.children)xL(i)&&i.traverseEntity(e,t+1)}traverseVisibleEntity(e){for(let t of(e(this),this.children))xL(t)&&t.visible&&t.traverseVisibleEntity(e)}updateMatrix(){super.updateMatrix(),this.cloner&&this.cloner.onObjUpdateMatrix(),this.dispatchEvent({type:"updateMatrix"})}updateMatrixWorld(e){super.updateMatrixWorld(e),this.dispatchEvent({type:"updateMatrixWorld"})}copy(e,t=!1){return super.copy(e,t),this.dataPatched=e.dataPatched,this.raycastLock=e.raycastLock,this.scaleLock=e.scaleLock,this.hiddenMatrix.copy(e.hiddenMatrix),this}hasEntityChild(){return this.children.some(e=>xL(e))}isAncestorOf(e){if(this.uuid===e)return!1;let t=!1;return this.traverseEntity(i=>{i.uuid===e&&(t=!0)}),t}toObjectTransformState(e=[]){return this.updateWorldMatrix(!0,!1),uN({position:this.position.toArray(),rotation:[this.rotation.x*tY.RAD2DEG,this.rotation.y*tY.RAD2DEG,this.rotation.z*tY.RAD2DEG],scale:this.scale.toArray(),hiddenMatrix:this.hiddenMatrix.toArray()},e)}getTransformValues(e,t,i){return t[e].map((t,r)=>i?.shared.getVariable(t,[this.uuid,e,xz[r]])??t)}updateTransformState(e,t){let i=!1;return e.position&&(this.position.fromArray(this.getTransformValues("position",e,t)),i=!0),e.rotation&&(xF.fromArray(this.getTransformValues("rotation",e,t)).multiplyScalar(tY.DEG2RAD),this.rotation.setFromVector3(xF),i=!0),e.scale&&(this.scale.fromArray(this.getTransformValues("scale",e,t)),i=!0),void 0!==e.hiddenMatrix&&(i=!0,this.hiddenMatrix.fromArray(e.hiddenMatrix??gr.identity)),i&&(this.updateMatrix(),this.resetBBoxNeedsUpdate(),this.invalidateClonerTransform(this),this.traverseEntityAncestors(e=>
3139{e.invalidateClonerTransform(this)})),e.position&&e.rotation&&e.scale&&void 0!==e.hiddenMatrix&&this.updateWorldMatrix(!1,!0),i}onVariableUpdate(e=!1){if(e){this.resetBBoxNeedsUpdate();return}this.updateMatrix(),this.resetBBoxNeedsUpdate(),this.invalidateClonerTransform(this),this.traverseEntityAncestors(e=>{e.invalidateClonerTransform(this)})}dispose(){this.disposed=!0,this.cloner&&(this.cloner.removeFromParent(),this.cloner=void 0)}disposeChildrenRecursively(){for(let e of this.children)wQ.is(e)&&e.disposeRecursively()}disposeRecursively(){this.dispose(),this.children.forEach(e=>{wQ.is(e)&&e.disposeRecursively()})}toState(e=[]){return uN({name:this.name,visible:this.visible,raycastLock:this.raycastLock,...this.toObjectTransformState(e)},e)}updateByObjUpdateOp(e,t){void 0!==e&&this.updateByOp({type:0,props:e,path:[]},{...this.data,...e},t,!1)}updateByOp(e,t,i,r){let s=this.data;this.data=t;let a=e,o=pX(e.path,["states","*"]);if(null!==o){if(0===e.type){let[t]=o;if(this?.stateSelection===t){let t={...e.props};if(delete t.name,Object.values(e.props).some(e=>void 0===e)){let i=this.data;if(void 0!==i){let r=p1.zoom(i,e.path.slice(2));if(r)for(let i in e.props)void 0===e.props[i]&&i in r&&(t[i]=r[i])}}a={...e,props:t,path:e.path.slice(2)}}}}else if(0===e.type){let t=this.stateSelection?this.data.states.data(this.stateSelection):void 0;if(void 0!==t){if(void 0!==e.props.name&&t.name){let{name:e,...i}=t;t=i}if(void 0!==e.props.material&&"material"in t){let{material:e,...i}=t;t=i}let i=p1.removeOverridden(e.path,e.props,t);a={...e,props:i}}}if(this.updateByPatchedOpBase(a,ya.patch(this.data,this.stateSelection?this.data.states.data(this.stateSelection):void 0),i),pX(e.path,["overrides"])){let r=[],s=[...e.path];for(r.push(s[1]),s.splice(0,2);s.length>0&&"descendants"===s[0];)r.push(s[1]),s.splice(0,2);if(void 0===r[r.length-1]){if(0===e.type)for(let t of Object.keys(e.props)){r[r.length-1]=t;let s=i.scene.findInstance([this.uuid,...r]);s&&(s.overrideData=e.props[t],s.updateState(p_.apply(s.component.data,s.overrideData),i))}}else{let a=i.scene.findInstance([this.uuid,...r]);if(a){let o=p1.zoom(a.component.data,s);if(0===(e={...e,path:s}).type){let t=e.props;if(o)for(let[i,r]of Object.entries(e.props))void 0===r&&(t===e.props&&(t={...e.props}),t[i]=o[i]);e={...e,props:t}}a.overrideData=yt.resolve(t.overrides,r),a.updateByOp(e,p$.applySimple(a.data,e),i,!1)}}}else if(this.instances.length>0){let r;if(0===e.path.length&&0===e.type){let t;for(let i of yi.rootOverrideProps)i in e.props&&(void 0===t&&(t={}),t[i]=e.props[i]);t&&(r={...e,props:t})}else for(let t of yi.rootOverrideProps)if(pX(e.path,[t])){r=e;break}void 0!==r&&this.instances.forEach(e=>{if(e.isInstanceRoot){let t=p_.filterOp(e.overrideData,r);t&&e.updateByOp(t,p$.applySimple(e.data,t),i,!0)}}),this.instances.forEach(r=>{if(!r.isInstanceRoot){let a=p_.filterOp(r.overrideData,e);if(a){let o;o=s===r.data&&e===a?t:p$.applySimple(r.data,a),r.updateByOp(a,o,i,!0)}}})}}updateByPatchedOpBase(e,t,i){if(this.dataPatched=t,0===e.path.length&&0===e.type)void 0===e.props.type||gc.is(e.props.type)||xP.changeEntityProptotype(this,t,i);else if(1===e.path.length&&"geometry"===e.path[0]&&0===e.type&&"type"in e.props)for(let e of(xP.changeEntityProptotype(this,t,i),this.children))wQ.is(e)&&e.updateVisible(i.scene);this.updateByPatchedOp(e,t,i)}updateByPatchedOp(e,t,i){if(0===e.path.length&&0===e.type?this.updateState(e.props,i):0===e.type&&("resolutionLevel"in e.props||"useChildrenColors"in e.props)&&this.updateState(t,i),"morphTargetInfluences"===e.path[0]&&0===e.type){let r=t.morphTargetInfluences.get(e.path[1])?.data.name;r&&this.updateMorphInfluences(r,i.shared.getVariable(e.props.value,[this.uuid,"morphTargetInfluences",r]))}if(null!==pX(e.path,["pathSnapping"])&&this.updatePathSnapping(t.pathSnapping),null!==pX(e.path,["cloner"])){let r=p$.drop(e,1);0===r.path.length&&0===r.type&&!0===r.props.disabled?this.setFromClonerState(null,i):this.cloner?this.cloner.updateState(t.cloner,i.scene):(this.setFromClonerState(t.cloner,i),this.expandCloner(i.scene)),this.updateVisible(i.scene)}}updatePathSnapping(e=this.dataPatched.pathSnapping){this._updatedPathSnapping=e,this._needApplyPathSnapping=!0}get updatedPathSnapping(){return this._updatedPathSnapping}applyPathSnapping(e){let t=this._updatedPathSnapping?.pathId??this.dataPatched.pathSnapping.pathId,i=this._updatedPathSnapping?.slide??this.dataPatched.pathSnapping.slide??0,r=this._updatedPathSnapping?.offset??this.dataPatched.pathSnapping.offset??0,s=this._updatedPathSnapping?.orientation??this.dataPatched.pathSnapping.orientation;if(null===t)return;let a=e.find(t);if(!a||!1===this._needApplyPathSnapping)return;this._needApplyPathSnapping=!1;let o=a.data;if(o.geometry.path.points.length<=1)return;let l=xR(o.geometry.path),h=(i+r)%1;i+r===1&&0===h&&(h=1);let c=null;try{c=l.curves.length?l.getPointAt(h):null}catch(e){}if(null===c)return;let d=this.parent?this.parent?.matrixWorld:new iX;a.updateMatrixWorld();let u=new iX().multiplyMatrices(d.clone().invert(),a.matrixWorld);c.applyMatrix4(u);let p={position:c.toArray(),rotation:o.rotation};if("tangential"===s){let e=new iX().extractRotation(a.matrixWorld),t=l.getTangentAt(h).applyMatrix4(e).add(c),i=new iX().lookAt(c,t,xN),r=xF.setFromEuler(new i3().setFromRotationMatrix(i)).multiplyScalar(tY.RAD2DEG);p={...p,rotation:r.toArray()}}this.updateTransformState(p),this.traverseEntity(e=>{e._cameraType&&e.dispatchEvent(xB)})}updateVisible(e){if(this.visible=this.dataPatched.visible&&(!this.dataPatched.cloner||(this.dataPatched.cloner.disabled??!1)||this.dataPatched.cloner?.hideBase!==!0),!e)return;let t=!1;this.traverseEntity(e=>{if("Splat"===e.data.type)return t=!0,!0}),t&&e.reloadSplats()}updateState_Entity(e,t){void 0!==e.name&&(this.name=e.name),void 0!==e.raycastLock&&(this.raycastLock=e.raycastLock),void 0!==e.visible&&(this.updateVisible(t?.scene),this.resetBBoxNeedsUpdate()),t&&"cloner"in e&&void 0!==e.cloner&&(this.setFromClonerState(e.cloner,t),this.updateVisible(t.scene)),this.updateTransformState(e,t)}get attachedSurfaceCloners(){return this.children.filter(e=>e instanceof xP.Cloner&&"toObject"===e.parameters.type)}setFromClonerState(e,t){this.disposed||(null===e||e.disabled?(this.cloner&&this.cloner.removeFromParent(),this.cloner=void 0):void 0===this.cloner?(this.cloner=new xP.Cloner(this,e),t.scene.addPendingExpandCloner(this)):this.cloner.updateState(e,t.scene))}expandCloner(e){!this.disposed&&this.cloner&&this.cloner.expandClones(e)}invalidateClonerTransform(e){this.cloner&&this.cloner.invalidateTransform(e)}requestRender(){this.dispatchEvent({type:"requestRender"})}},xU=class{static create(e){return this.build(this.normalizeInputs(e))}
3139static normalizeInputs(e,t){let i=e.parameters?.radiusTop,r=e.parameters?.radiusBottom,s=Object.assign({},t?.parameters??{width:100,radialSegments:64,heightSegments:1,openEnded:!1,thetaStart:0,thetaLength:360,cornerRadius:8,cornerSegments:8,hollow:0},e.parameters);s.thetaLength=tY.clamp(s.thetaLength,0,360);let a=s.width/2,o=s.radiusTop??a,l=s.radiusBottom??a;if(o===l?(o=a,l=a):o>l?(o=a,l=l*a/o):(o=o*a/l,l=a),s.shapeBlendNode){let e=2*Math.max(o=i??a,l=r??a);s.width=e,s.depth=e}return{parameters:Object.assign(s,{width:Math.abs(s.width),height:Math.abs(s.height??s.width),depth:Math.abs(s.depth??s.width),radiusTop:o,radiusBottom:l})}}static build(e){let{width:t,depth:i,height:r,radialSegments:s,heightSegments:a,openEnded:o,thetaStart:l,thetaLength:h,radiusTop:c,radiusBottom:d,cornerRadius:u,cornerSegments:p,hollow:f}=e.parameters,m;return 0===h?(m=new rz).setAttribute("position",new rT([],3)):m=u||f?new xG(c,d,r,s,a,o,l,h*Math.PI/180,u,u,p,f):new oo(c,d,r,s,a,o,l,h*Math.PI/180),m.scale(1,1,i/t),Object.assign(m,{userData:{...e,type:"CylinderGeometry"}})}};function xV(e,t,i){i.x=e.x*t.x,i.y=e.y,i.z=e.x*t.y}function xj(e){return new tQ(e.y,-e.x)}var xG=class extends rz{constructor(e,t,i,r,s,a,o,l,h,c,d,u,p=!1){super(),this.type="RoundedCylinderBufferGeometry",e=void 0!==e?e:1,t=void 0!==t?t:1,i=i||1,r=Math.floor(r)||8,s=Math.floor(s)||1,a=void 0!==a&&a,o=void 0!==o?o:0,l=void 0!==l?l:2*Math.PI,a&&(h=0,c=0);let f=[],m=[],g=[],v=[],y=0,x=i/2,b=new iv,w=new iv;p&&0==e&&(e=h),p&&0==t&&(t=c);let S=new tQ(e,x),_=new tQ(t,-x),A=null,M=null,E=null,C=null,T=S.clone().sub(_),P=0,D=0,I=0;u>0&&(P=Math.min(e,t)*(1-u),D=e-P,I=t-P);let O=S.clone();O.x-=P;let R=Math.PI-T.angle(),L=T.angle(),B=Math.tan(L/2),z=Math.tan(R/2),F=B+z;if(h=Math.min(h,(e-D)/(u?F:z),T.length()/F),c=Math.min(c,(t-I)/(u?F:B),T.length()/F),h>0){let e=h/B;A=S.clone().sub(new tQ(e,h)),u&&(E=A.clone(),E.x-=P-F*h),S.sub(T.clone().setLength(e))}if(c>0){let e=c/z;M=_.clone().sub(new tQ(e,-c)),_.add(T.clone().setLength(e)),u&&(C=M.clone(),C.x-=P-F*c,O.sub(T.clone().setLength(e)))}let N=.5>(T=S.clone().sub(_)).length(),k=[];for(let d=0;d<=r;d++){let p=[],f=d/r,x=f*l+o,S=new tQ(Math.sin(x),Math.cos(x));if(C&&M?(U(p,f,S,R,c,C,-1,!0),U(p,f,S,L,c,M,-1,!1)):M?(V(p,S,M.x,0,-1),U(p,f,S,L,c,M,-1,!1)):a||V(p,S,t,I,-1),xV(xj(T).normalize(),S,b),!N)for(let e=0;e<=s;e++){let t=e/s;xV(T.clone().multiplyScalar(t).add(_),S,w),m.push(w.x,w.y,w.z),g.push(b.x,b.y,b.z),v.push(f,.5+w.y/i),p.push(y++)}if(E&&A?(U(p,f,S,R,h,A,1,!1),U(p,f,S,L,h,E,1,!0)):A?(U(p,f,S,R,h,A,1,!1),V(p,S,A.x,0,1)):a||V(p,S,e,D,1),u&&!N){xV(xj(T).multiplyScalar(-1).normalize(),S,b);for(let e=0;e<=s;e++){let t=e/s;xV(T.clone().multiplyScalar(-t).add(O),S,w),m.push(w.x,w.y,w.z),g.push(b.x,b.y,b.z),v.push(f,.5+w.y/i),p.push(y++)}}u&&!a&&p.push(p[0]),k.push(p)}for(let e=0;e<k.length-1;e++)for(let t=0;t<k[0].length-1;t++){if(a&&u&&t==s)continue;let i=k[e][t],r=k[e+1][t],o=k[e+1][t+1],l=k[e][t+1],h=m[3*o+0],c=m[3*o+2];f.push(i,r,l),(0!=h||0!=c)&&f.push(r,o,l)}function U(e,t,r,s,a,o,l,h){for(let c=0;c<d+1;c++){let u=c/d,p=l<0?u:1-u;h&&(p-=1);let f=new tQ(Math.sin(p*=s),Math.cos(p)*l);xV(f.clone().multiplyScalar(a).add(o),r,w),m.push(w.x,w.y,w.z),xV(f,r,b),g.push(b.x,b.y,b.z),v.push(t,.5+w.y/i),e.push(y++)}}function V(e,t,i,r,s){let a=new iv,o=new tQ,l=[i,r];for(let i of(s<0&&l.reverse(),l))o.set(i,x*s),xV(o,t,a),m.push(a.x,a.y,a.z),g.push(0,s,0),v.push(.5,.5),e.push(y++)}function j(i,r,s){let a=new tQ(Math.sin(s),Math.cos(s)),o=new tQ(-Math.cos(s),Math.sin(s)),l=new iv,h=i<0?(e,t,i)=>f.push(e,t,i):(e,t,i)=>f.push(e,i,t);xV(new tQ((e+t+D+I)/4,0),a,l),m.push(l.x,l.y,l.z),g.push(o.x,0,o.y),v.push(.5,.5);let c=y++;for(let e of r){let t=m.slice(3*e,3*e+3);m.push(...t),g.push(o.x,0,o.y);let i=v.slice(2*e,2*e+2);v.push(...i),y++}for(let e=c+1;e<y-1;e++)h(c,e,e+1);h(c,y-1,c+1)}l<2*Math.PI&&(j(-1,k[0],o),j(1,k[k.length-1],o+l)),this.setIndex(f),this.setAttribute("position",new rT(m,3)),this.setAttribute("normal",new rT(g,3)),this.setAttribute("uv",new rT(v,2))}},xH=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,radialSegments:32,heightSegments:8,openEnded:!1,thetaStart:0,thetaLength:360,cornerRadiusTop:8,cornerRadiusBottom:8,cornerSegments:8},e.parameters);return i.thetaLength=tY.clamp(i.thetaLength,0,360),{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t,depth:i,height:r,radialSegments:s,heightSegments:a,openEnded:o,thetaStart:l,thetaLength:h,cornerRadiusTop:c,cornerRadiusBottom:d,cornerSegments:u}=e.parameters,p;return 0===h?(p=new rz).setAttribute("position",new rT([],3)):p=c>0||d>0||h<360?new xG(0,t/2,r,s,a,o,l,h*Math.PI/180,c,d,u,0,!0):new ol(t/2,r,s,a,o),p.scale(1,1,i/t),Object.assign(p,{userData:{...e,type:"ConeGeometry"}})}},xW=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,widthSegments:1,heightSegments:1,depthSegments:1,cornerRadius:8,cornerSegments:8},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t,height:i,depth:r,widthSegments:s,heightSegments:a,depthSegments:o,cornerRadius:l,cornerSegments:h}=e.parameters;return Object.assign(0===l?new rJ(t,i,r,s,a,o):new xX(t,i,r,s,a,o,l,h),{userData:{...e,type:"CubeGeometry"}})}},xq=Math.PI/2,xX=class extends rz{constructor(e=1,t=1,i=1,r=1,s=1,a=1,o=0,l=4){super(),this.type="BoxGeometry",r=Math.floor(r),s=Math.floor(s),a=Math.floor(a),l=Math.floor(l),o=Math.min(o,e/2,t/2,i/2);let h=[],c=[],d=[],u=[],p=0;function f(e,t,i,r,s,a,l,f,m,g){let v=(a-2*o)/m,y=(l-2*o)/g,x=a/2-o,b=l/2-o,w=f/2,S=m+1,_=g+1,A=0,M=new iv;for(let a=0;a<_;a++){let o=a*y-b;for(let l=0;l<S;l++){let h=l*v-x;
3139M[e]=h*r,M[t]=o*s,M[i]=w,c.push(M.x,M.y,M.z),M[e]=0,M[t]=0,M[i]=f>0?1:-1,d.push(M.x,M.y,M.z),u.push(l/m),u.push(1-a/g),A+=1}}for(let e=0;e<g;e++)for(let t=0;t<m;t++){let i=p+t+S*e,r=p+t+S*(e+1),s=p+(t+1)+S*(e+1),a=p+(t+1)+S*e;h.push(i,r,a),h.push(r,s,a)}p+=A}function m(e,t,i,r,s,a,f,m,g,v){let y=(f-2*o)/v,x=f/2-o,b=m/2-o,w=g/2,S=v+1,_=0,A=new iv,M=new iv;for(let h=0;h<l+1;h++){let p=h/l*xq,f=Math.sin(p)*o,m=(1-Math.cos(p))*o,g=Math.sin(p),E=Math.cos(p);A[t]=(b+f)*s,A[i]=(w-m)*a,M[e]=0,M[t]=g*Math.sign(A[t]),M[i]=E*Math.sign(A[i]);for(let t=0;t<S;t++){let i=t*y-x;A[e]=i*r,c.push(A.x,A.y,A.z),d.push(M.x,M.y,M.z),u.push(t/v),u.push(0),_+=1}}for(let e=0;e<l;e++)for(let t=0;t<v;t++){let i=p+t+S*e,r=p+t+S*(e+1),s=p+(t+1)+S*(e+1),a=p+(t+1)+S*e;h.push(i,r,a),h.push(r,s,a)}p+=_}function g(r,s,a){let f=new iv,m=new iv(e/2,t/2,i/2);m.subScalar(o);let g=[],v=r*s*a>0?(e,t,i)=>h.push(e,t,i):(e,t,i)=>h.push(e,i,t);for(let e=0;e<=l;e++){let t=[],i=xq*(1-e/l),h=Math.cos(i),v=Math.sin(i),y=0;for(let i=0;i<=e;i++){let i=Math.cos(y),l=Math.sin(y);f.x=h*i,f.y=v,f.z=h*l;let g=m.clone().addScaledVector(f,o);c.push(r*g.x,s*g.y,a*g.z),d.push(r*f.x,s*f.y,a*f.z),u.push(0,0),t.push(p++),y+=xq/e}g.push(t)}let y=g.length-1;for(let e=0;e<y;e++){let t=g[e],i=g[e+1],r=t.length-1;v(t[0],i[1],i[0]);for(let e=1;e<=r;e++)v(t[e-1],t[e],i[e]),v(t[e],i[e+1],i[e])}}f("z","y","x",-1,-1,i,t,e,a,s),f("z","y","x",1,-1,i,t,-e,a,s),f("x","z","y",1,1,e,i,t,r,a),f("x","z","y",1,-1,e,i,-t,r,a),f("x","y","z",1,-1,e,t,i,r,s),f("x","y","z",-1,-1,e,t,-i,r,s),o>0&&(m("z","y","x",-1,-1,1,i,t,e,a),m("z","y","x",1,-1,-1,i,t,e,a),m("z","y","x",-1,1,-1,i,t,e,a),m("z","y","x",1,1,1,i,t,e,a),m("x","y","z",-1,-1,-1,e,t,i,r),m("x","y","z",1,-1,1,e,t,i,r),m("x","y","z",-1,1,1,e,t,i,r),m("x","y","z",1,1,-1,e,t,i,r),m("y","x","z",-1,-1,1,t,e,i,s),m("y","x","z",1,-1,-1,t,e,i,s),m("y","x","z",1,1,1,t,e,i,s),m("y","x","z",-1,1,-1,t,e,i,s),g(1,1,1),g(-1,1,1),g(1,-1,1),g(-1,-1,1),g(1,1,-1),g(-1,1,-1),g(1,-1,-1),g(-1,-1,-1)),this.setIndex(h),this.setAttribute("position",new rT(c,3)),this.setAttribute("normal",new rT(d,3)),this.setAttribute("uv",new rT(u,2))}},xY=class extends rz{constructor(e=[],t=[],i="",r=1,s=.2,a=4){super(),this.type="PolyhedronGeometryRound";let o=[],l=[],h=[];(function(){0==(s=Math.min(1-1e-5,s))&&(a=0);let l={IcosahedronGeometry:5,DodecahedronGeometry:3,HexahedronGeometry:3,OctahedronGeometry:4,TetrahedronGeometry:3}[i],c=new iv,d=c.clone(),u=new rx,p=s*r,f=r-p,m=a+1,g=new iv,v=(e,t)=>g.subVectors(e,t).normalize(),y=(e,t)=>Array(e).fill(void 0).map(t),x=y(e.length/3,(t,i)=>new iv().fromArray(e,3*i).setLength(r)),b=[];for(let e=0;e<x.length;e++){let i=x[e],r=[],s,a,o,l=1e10,h=-1;for(;-1!=(h=t.indexOf(e,h+1));){let e=h-h%3;s=t[e+(h+1)%3],a=t[e+(h+2)%3],l=Math.min(l,o=i.distanceToSquared(x[s])),r.push([s,a,o])}l+=1e-6;let c=[],d=0,u=r.length;for(let t=0;t<u;t++){[s,a,o]=r[d];let t=b[s]?.includes(e)==!0;o<=l&&c.push(s+1e6*+t),d=r.findIndex(e=>e[0]==a)}b.push(c)}let w=[];{let e=0,t=0,i,r,s=3==l;for(let o=0;o<=a;o++){i=o*(o+1)/2,r=(o+1)*(o+2)/2;for(let l=0;l<a-o;l++)[e,t]=[i+l+o+2,r+l+o+3],w.push(i,r,...s?[t,i]:[e,r],t,e),[i,r]=[e,t];w.push(i,r,i+a+2)}}let S=c.clone(),_=c.clone(),A=c.clone(),M=c.clone(),E=c.clone(),C=[],T=y(x.length,()=>y(l,()=>c.clone()));for(let e=0;e<x.length;e++){c.copy(x[e]).normalize(),S.copy(c).multiplyScalar(f);let t=b[e];for(let i=0;i<t.length;i++){let r=t[i],s=t[(i+1)%l];u.setFromPointsAndIndices(x,e,r%1e6,s%1e6),u.b.sub(u.a).setLength(1e10).add(u.a),u.c.sub(u.a).setLength(1e10).add(u.a),u.closestPointToPoint(S,T[e][i])}let i=[],r=[],s=[],y=new iv;0==a&&[...T[e]].reduce((e,t)=>e.add(t),y).multiplyScalar(1/l);for(let t=0;t<l;t++){let o=[],h=(t-1+l)%l,u=T[e][h],x=T[e][t];c.copy(u).sub(S),d.copy(x).sub(S);let b=S.angleTo(c),w=c.angleTo(d),C=Math.cos(b)*p;0==a?_.copy(y):_.copy(S).setLength(f+C),r.push(C);let P=[_,u,x];for(let e=0;e<2;e++){let t=P[e],r=P[e+1];M.subVectors(t,S),E.subVectors(r,S),A.crossVectors(M,E).normalize();for(let r=0;r<m;r++){let s=[b,w][e]*r/m;c.copy(M).applyAxisAngle(A,s).add(S),i.push(c.clone()),e&&(v(c,S),o.push([0==r?t:c.clone(),g.clone()]))}e&&(v(r,S),o.push([r,g.clone()]))}s.push(o)}C.push(s);let P=2*m;for(let e=0;e<l;e++){let t=P*e,s=(e+1)%l*P,a=[i[t]];for(let o=1;o<m;o++){M=i[t+o],E=i[s+o],a.push(M);for(let t=1,i=o-2+1;t<=i;t++)c.lerpVectors(M,E,t/(i+1)),c.sub(S).setLength(r[e]).add(S),a.push(c.clone());a.push(E)}for(let e=0;e<m;e++)a.push(i[e+m+t]);a.push(i[s+m]);let d=w.map(e=>a[e]);o.push(...d.map(e=>[e.x,e.y,e.z]).flat()),h.push(...d.map(e=>(v(e,S),[g.x,g.y,g.z])).flat())}}let P=[];for(let e=0;e<b.length;e++)for(let t=0;t<l;t++){let i=b[e][t];if(i<1e6){let r=b[i].findIndex(t=>t%1e6==e),s=C[e][t],a=C[i][r];for(let e=0;e<m;e++){let t=s[e],i=a[m-e],r=s[e+1];
3139[t,i,r,r,i,a[m-(e+1)]].forEach(e=>{o.push(e[0].x,e[0].y,e[0].z),h.push(e[1].x,e[1].y,e[1].z)})}P.push(s[0][0],a[m][0],s[m][0],a[0][0])}}for(;P.length;){let e,t,i,r;[e,t]=P.splice(0,2);let s=[e];for(;e!=t;)s.push(t),r=(i=P.indexOf(t))%2,t=P.splice(i-r,2)[1-r];g.subVectors(s[0],s[1]).cross(c.subVectors(s[0],s[2])).normalize();let a=0>g.dot(s[0]);a&&g.negate();for(let e=1;e<=s.length-2;e++)[s[e+ +a],s[e+1-+a],s[0]].forEach(e=>{o.push(e.x,e.y,e.z),h.push(g.x,g.y,g.z)})}})(),function(){let e=new iv;for(let t=0;t<o.length;t+=3){e.x=o[t+0],e.y=o[t+1],e.z=o[t+2];let i=u(e)/2/Math.PI+.5,r=Math.atan2(-e.y,Math.sqrt(e.x*e.x+e.z*e.z))/Math.PI+.5;l.push(i,1-r)}let t=new iv,i=new iv,r=new iv,s=new iv,a=new tQ,h=new tQ,c=new tQ,d=(e,t,i,r)=>{r<0&&1===e.x&&(l[t]=e.x-1),0===i.x&&0===i.z&&(l[t]=r/2/Math.PI+.5)};for(let e=0,p=0;e<o.length;e+=9,p+=6){t.set(o[e+0],o[e+1],o[e+2]),i.set(o[e+3],o[e+4],o[e+5]),r.set(o[e+6],o[e+7],o[e+8]),a.set(l[p+0],l[p+1]),h.set(l[p+2],l[p+3]),c.set(l[p+4],l[p+5]),s.copy(t).add(i).add(r).divideScalar(3);let f=u(s);d(a,p+0,t,f),d(h,p+2,i,f),d(c,p+4,r,f)}for(let e=0;e<l.length;e+=6){let t=l[e+0],i=l[e+2],r=l[e+4],s=Math.max(t,i,r),a=Math.min(t,i,r);s>
vendor: 1,347 bytes, line 3139
3139.9&&a<.1&&(t<.2&&(l[e+0]+=1),i<.2&&(l[e+2]+=1),r<.2&&(l[e+4]+=1))}function u(e){return Math.atan2(e.z,-e.x)}}(),this.setAttribute("position",new rT(o,3)),this.setAttribute("normal",new rT(h,3)),this.setAttribute("uv",new rT(l,2))}static fromJSON(e){return new xY(e.vertices,e.indices,e.radius,e.corner,e.cornerSides)}},xQ=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,detail:0,corner:0,cornerSides:4},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t,height:i,depth:r,detail:s,corner:a,cornerSides:o}=e.parameters,l=0===s&&0!==a?new xK(.5*t,a,o):new oc(.5*t,s);return l.scale(1,i/t,r/t),Object.assign(l,{userData:{...e,type:"DodecahedronGeometry"}})}},xK=class extends xY{constructor(e=1,t=.2,i=4){let r=(1+Math.sqrt(5))/2,s=1/r,a="DodecahedronGeometry";super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-s,-r,0,-s,r,0,s,-r,0,s,r,-s,-r,0,-s,r,0,s,-r,0,s,r,0,-r,0,-s,r,0,-s,-r,0,s,r,0,s],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,
vendor: 4,241 bytes, line 3139
313919,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a,e,t,i),this.type=a}static fromJSON(e){return new xK(e.radius,e.corner,e.cornerSides)}},xZ=class{constructor(e){this.position=new tQ,this.startPosition=new tQ,this.uuid=tY.generateUUID(),this.position=e.clone()}start(){this.reset()}reset(){this.startPosition.copy(this.position)}applyOffset(e){this.position.copy(this.startPosition).add(e)}copy(e){return this.position.copy(e.position),this.startPosition.copy(e.startPosition),this}clone(){return new xZ(this.position).copy(this)}toJSON(){return[this.position.x,this.position.y]}},xJ=class extends xZ{constructor(e){super(e.position),this.parent=e}copy(e){return super.copy(e),this}clone(){return new xJ(this.parent).copy(this)}},x$=class extends xZ{constructor(e,t){super(t),this.controls=[],this.roundness=0,this.areControlsDirectionsMirrored=!0,this.uuid=e,this.controls.push(new xJ(this),new xJ(this))}static create(e,t){let i=new x$(e,new tQ(...t.position));return i.controls[0].position.set(...t.controlPrevious.position),i.controls[1].position.set(...t.controlNext.position),i.roundness=t.roundness,i.areControlsDirectionsMirrored=t.areControlsDirectionsMirrored,i}getOppositeControl(e){let t=this.controls.indexOf(e);return 0===t?this.controls[1]:1===t?this.controls[0]:null}applyOffsetToControls(e,t=1){for(let i=0,r=this.controls.length;i<r;i++){let r=this.controls[i];this.position.distanceTo(r.position)<=t?r.position.copy(this.position):r.applyOffset(e)}}controlsMoved(){return!(this.position.equals(this.controls[0].position)&&this.position.equals(this.controls[1].position))}copy(e){return super.copy(e),this.controls[0].copy(e.controls[0]),this.controls[1].copy(e.controls[1]),this.roundness=e.roundness,this.uuid=e.uuid,this}clone(){return new x$(this.uuid,this.position).copy(this)}toJSON(){return super.toJSON().concat(this.controls[0].toJSON(),this.controls[1].toJSON(),[this.roundness])}computeTangents(){return[this.curveBefore?.getTangentAt(1),this.curveAfter?.getTangentAt(0)]}computeNormals(e=new tQ,t=new tQ){let[i,r]=this.computeTangents();return i&&r&&(x0(i,e),x0(r,t)),[e,t]}computeTangent(e=new tQ){let[t,i]=this.computeTangents();return t&&i&&e.copy(t).add(i).normalize(),e}computeNormal(e=new tQ){let[t,i]=this.computeNormals();return e.copy(t).add(i).normalize(),e}};function x0(e,t=new tQ){let i=e.length();return t.set(-e.y/i,e.x/i)}var x1=e=>e,x2=new tQ,x3=new tQ,x4=new tQ,x5=new tQ,x6=new tQ,x8=new tQ,x9=new iv,x7=new iv;function be(e,t,i=Number.EPSILON){return Math.abs(e-t)<i}function bt(e,t,i){let r=Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)),s=Math.sqrt(Math.pow(t.x-i.x,2)+Math.pow(t.y-i.y,2)),a=Math.sqrt(Math.pow(i.x-e.x,2)+Math.pow(i.y-e.y,2));return Math.acos((s*s+r*r-a*a)/(2*s*r))}function bi(e,t,i){return 0===x2.copy(t).sub(e).cross(x3.copy(i).sub(e))}function br(e,t){return e.position.equals(e.controls[1].position)&&t.position.equals(t.controls[0].position)}function bs(e,t){return bi(e.position,e.controls[1].position,t.position)&&bi(e.position,t.controls[0].position,t.position)}function ba(e,t=12,i=!1){let r=[];for(let s=0,a=e.length;s<a;s++){let a=e[s],o=0;if(i&&void 0!==a.roundedCurveCorner){let e=.5*bn(a.roundedCurveCorner,t);s>0&&(r[s-1]+=e),o+=e}void 0!==a.curveAfter&&(o+=bn(a.curveAfter,t)),r.push(o)}return e.length>0&&i&&void 0!==e[0].roundedCurveCorner&&(r[e.length-1]+=.5*bn(e[0].roundedCurveCorner,t)),r}function bn(e,t=12){return e&&e instanceof nQ?2*t:e&&(e instanceof n9||e instanceof n7)?1:e&&e instanceof oi?t*e.points.length:t}var bo=new tQ,bl=new tQ,bh=new tQ,bc=new tQ,bd=new tQ,bu=new tQ,bp=class extends od{constructor(e=100,t=100){super(),this.points=[],this.shapeHoles=[],this.plane=new ss(new iv(0,0,-1)),this.subdivision=0,this.controlSnapDistance=4,this.pointIDs=0,this.isMesh2D=!1,this.isText=!1,this._roundness=0,this.isClosed=!1,this.useCubicForRoundedCorners=!0,this.uuid=tY.generateUUID(),this.needsUpdate=!1,this.roundedCurves=[],this._width=e,this._height=t}static createFromState(e,t,i){let r=new bp;return r.isClosed=e.isClosed,r.points=e.points.map(e=>x$.create(e.id,e.data)),"number"==typeof e.roundness&&(r.roundness=e.roundness),r.shapeHoles=e.shapeHoles.map(e=>bp.createFromState(e)),void 0!==t&&void 0!==i&&r.applySize(t,i),r.update(
3139),r}get width(){return this._width}get height(){return this._height}get roundness(){return this._roundness}set roundness(e){if(this._roundness!==e){this._roundness=e;for(let t=0,i=this.points.length;t<i;t++)this.points[t].roundness=e;this.needsUpdate=!0}}getPointsIndexesByIds(e){return e.map(e=>this.getPointIndexById(e)).filter(e=>e>=0)}getPointIndexById(e){let t=this.points.length,i=this.points.findIndex(t=>t.uuid===e);if(i<0){let i=t;for(let t=0,r=this.shapeHoles.length;t<r;t++){let r=this.shapeHoles[t],s=r.points.length,a=r.getPointIndexById(e);if(!(a<0))return a+i;i+=s}}return i}getLineIndexById(e){return this.getPointIndexById(e)}getBezierPoint(e){if(e<=this.points.length-1)return this.points[e];if(this.shapeHoles.length>0){let t=this.points.length;for(let i=0,r=this.shapeHoles.length;i<r;i++){let r=this.shapeHoles[i],s=e-t;if(s<=r.points.length-1)return r.points[s];t+=r.points.length}}throw Error("This shape does not have a point for this index: "+e)}getBezierPointIndex(e){let t=this.points.indexOf(e);if(t>=0)return t;if(t=this.points.length,this.shapeHoles.length>0)for(let i=0,r=this.shapeHoles.length;i<r;i++){let r=this.shapeHoles[i],s=r.points.indexOf(e);if(s>=0)return t+s;t+=r.points.length}return -1}getAllPoints(){let e=[].concat(...this.shapeHoles.map(e=>e.points));return[...this.points,...e]}applySize(e,t){0===e&&(e=.001),0===t&&(t=.001),this._width=e,this._height=t}applyScale(e,t){let i=bo.set(e,t);for(let e=0,t=this.points.length;e<t;e++){let t=this.points[e];t.position.multiply(i),t.controls[0].position.multiply(i),t.controls[1].position.multiply(i)}for(let i=0,r=this.shapeHoles.length;i<r;i++)this.shapeHoles[i].applyScale(e,t);this._update()}createPoint(e,t=0,i=tY.generateUUID()){let r=new x$(i,e instanceof tQ?e:new tQ(e,t));return r.roundness=this.roundness,r}addPoint(e){this.points.push(e),this.needsUpdate=!0}addPointAt(e,t){this.points.splice(t,0,e),this.needsUpdate=!0}getPointByUuid(e){for(let t=0,i=this.points.length;t<i;t++){let i=this.points[t];if(i.uuid===e)return i}for(let t=0,i=this.shapeHoles.length;t<i;t++){let i=this.shapeHoles[t].getPointByUuid(e);if(i)return i}}getFirstPoint(){return this.points[0]}getLastPoint(){return this.points[this.points.length-1]}removePoint(e){let t=this.points.indexOf(e);t>=0&&this.points.splice(t,1),this.needsUpdate=!0}removePointById(e){let t=this.points.find(t=>t.uuid===e);t&&this.removePoint(t)}update(){for(let e=0,t=this.shapeHoles.length;e<t;e++)this.shapeHoles[e].update();this._update()}extractShapePointsToBuffer(e,t=12,i=!1){this.subdivision=t,void 0===this.curveDivisions&&this.computeCurveDivisions(t);let r=i?this.roundedCurveDivisions:this.curveDivisions;return function(e,t,i=12,r=!0){let s=x7.set(0,0,0),a,o=0,l=[];for(let r=0;r<t.length;r++){let h=x1(t[r]),c=bn(h,i);l.push(c);for(let t=0;t<=c;t++)if(h instanceof n6||h instanceof oe||h instanceof n9){if(h.getPoint(t/c,x2),s.set(x2.x,x2.y,0),void 0!==a&&function(e,t,i=Number.EPSILON){return e.distanceTo(t)<i}(a,s))continue;void 0===a&&(a=x9),a.copy(s),e.setXYZ(o,s.x,s.y,s.z),o++}}r&&o>1&&!(e.getX(o-1)===e.getX(0)&&e.getY(o-1)===e.getY(0)&&e.getZ(o-1)===e.getZ(0))&&(e.setXYZ(o,e.getX(0),e.getY(0),e.getZ(0)),o++)}(e,i?this.roundedCurves:this.curves,t,this.autoClose),r.reduce((e,t)=>e+t,0)+1}computeCurveDivisions(e=12){return this.curveDivisions=ba(this.points,e,!1),this.roundedCurveDivisions=ba(this.points,e,!0),this.curveDivisions}extractFilteredShapePointsToBuffer(e,t,i=12){return 2*(function(e,t,i,r=12,s=!0){let a=x7.set(0,0,0),o=0,l=[];for(let s=0;s<t.length;s++){if(!1===i[s])continue;let h,c=x1(t[s]),d=bn(c,r);l.push(d);for(let t=0;t<=d;t++)if(c instanceof n6||c instanceof oe||c instanceof n9){if(c.getPoint(t/d,x2),a.set(x2.x,x2.y,0),h?.equals(a))continue;void 0===h?h=x9:(e.setXYZ(o,h.x,h.y,h.z),o++,e.setXYZ(o,a.x,a.y,a.z),o++),h.copy(a)}}return s&&o>1&&!(e.getX(o-1)===e.getX(0)&&e.getY(o-1)===e.getY(0)&&e.getZ(o-1)===e.getZ(0))&&(e.setXYZ(o,e.getX(0),e.getY(0),e.getZ(0)),o++),l})(e,this.curves,t,i,this.autoClose).reduce((e,t)=>e+t,0)}extractShapePointsToFlatArray(e,t=12){return this.subdivision=t,void 0===this.curveDivisions&&this.computeCurveDivisions(t),function(e,t,i=12,r=!0){let s,a=0;for(let r=0;r<t.length;r++){let o=x1(t[r]),l=bn(o,i);for(let t=0;t<=l;t++)if(o instanceof n6||o instanceof oe||o instanceof n9){if(o.getPoint(t/l,x2),void 0!==s&&function(e,t,i=Number.EPSILON){return e.distanceTo(t)<i}(s,x2,1e-12))continue;void 0===s&&(s=x3),s.copy(x2),e.push(x2.x,x2.y),a++}}return be(e[0],e[e.length-2],1e-12)&&be(e[1],e[e.length-1],1e-12)&&(e.pop(),e.pop()),r&&a>1&&!(be(e[a-1],e[1],1e-12)&&be(e[a-2],e[0],1e-12))&&(e.push(e[0],e[1]),a++),e}(e,this.roundedCurves,t,this.autoClose)}getCurveIndexFromVertexId(e,t=!1){let i=0;void 0===this.curveDivisions&&this.computeCurveDivisions(this.subdivision);let r=t?this.roundedCurveDivisions:this.curveDivisions,s=0;
vendor: 12,183 bytes, line 3139
3139t&&void 0!==this.points[0].roundedCurveCorner&&(s=.5*bn(this.points[0].roundedCurveCorner,this.subdivision));let a=e-s;a<0&&(a+=r.reduce((e,t)=>e+t,0));for(let e=0,t=r.length;e<t;e++){let t=r[e];if(a<i+t)return[e,(a-i+1)/t];i+=t}return[0,1]}getCurveT(e,t,i){let r=this.points[e],s=this.points[e>=this.points.length-1?0:e+1],a=this.curveDivisions,o=a[e];if(br(r,s)){let e=r.position.distanceTo(s.position);return r.position.distanceTo(bo.set(i.x,i.y))/e}let l=0;for(let t=0;t<e;t++)l+=a[t];return(t-l)/o}dispose(){}_applyCurveForPoint(e,t){br(t,e)?this.lineTo(e.position.x,e.position.y):this.bezierCurveTo(t.controls[1].position.x,t.controls[1].position.y,e.controls[0].position.x,e.controls[0].position.y,e.position.x,e.position.y);let i=this.curves[this.curves.length-1];e.curveBefore=i,t.curveAfter=i;let r=i.clone();e.roundedCurveBefore=r,t.roundedCurveAfter=r,e.roundedCurveCorner=void 0,this.roundedCurves.push(r)}_update(){if(this.curves=[],this.roundedCurves=[],!this.points.length)return;for(let e=0,t=this.points.length;e<t;e++){let t=this.points[e];if(0===e)this.moveTo(t.position.x,t.position.y);else{let i=this.points[e-1];this._applyCurveForPoint(t,i)}}let e=this.getLastPoint();if(e?.curveAfter&&(e.curveAfter=void 0),this.isClosed){let e=this.points[0],t=this.points[this.points.length-1];this._applyCurveForPoint(e,t)}if(this.points.length>2){let e=0;for(let i=0,r=this.points.length;i<r;i++){var t;let r=this.points[i],s=this.points[i-1]??this.points[this.points.length-1],a=this.points[i+1]??this.points[0],o=r.roundness,l=s&&a&&bs(s,r)&&bs(r,a)&&bi(s.position,r.position,a.position);if(!r.controlsMoved()&&o>0&&!l){let s,a=r.curveBefore,l=r.curveAfter;if(void 0===a||void 0===l)continue;let h=r.roundedCurveBefore,c=r.roundedCurveAfter,d=a.getLength(),u=l.getLength(),p=Math.min(Math.min(o,.499*d),Math.min(o,.499*u)),f=1-p/d,m=p/u,g=a.getPointAt(f,bo),v=l.getPointAt(m,bl);if(this._subSplitCurve(a,h,f,g,void 0),this._subSplitCurve(l,c,m,void 0,v),this.useCubicForRoundedCorners){let e=Math.tan(bt(g,r.position,v)/2)*g.distanceTo(r.position),[i,a]=function(e,t,i,r,s){let a=Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)),o=(e.y+t.y)/2,l=(e.x+t.x)/2,h=Math.sqrt(Math.pow(i,2)-Math.pow(a/2,2))*(e.y-t.y)/a,c=Math.sqrt(Math.pow(i,2)-Math.pow(a/2,2))*(t.x-e.x)/a;return r.set(l+h,o+c),s.set(l-h,o-c),[r,s]}(g,v,e,bh,bc),[o,l]=function(e,t,i,r,s,a){let o=t.x-e.x,l=t.y-e.y,h=i.x-e.x,c=i.y-e.y,d=Math.sqrt((o+h)*(o+h)+(l+c)*(l+c)),u;return bt(t,e,i)>Math.PI&&(d*=-1),u=be(c,l)?(l+c)*(r/d-.5)*8/3/(o-h):(o+h)*(r/d-.5)*8/3/(c-l),s.set(t.x-u*l,t.y+u*o),a.set(i.x+u*c,i.y-u*h),[s,a]}((t=r.position,i.distanceTo(t)<a.distanceTo(t)?a:i),g,v,e,bd,bu);s=new n6(g.clone(),o.clone(),l.clone(),v.clone())}else s=new oe(g.clone(),r.position.clone(),v.clone());r.roundedCurveCorner=s,this.roundedCurves.splice(i+e,0,s),e++}}}}_subSplitCurve(e,t,i,r,s){if(e instanceof n9)void 0!==r&&t.v2.copy(r),void 0!==s&&t.v1.copy(s);else{let a=e.getUtoTmapping(i,0),o=function(e,t,i,r,s=.5){let a=x2.subVectors(t,e).multiplyScalar(s).add(e),o=x3.subVectors(i,t).multiplyScalar(s).add(t),l=x4.subVectors(r,i).multiplyScalar(s).add(i),h=x5.subVectors(o,a).multiplyScalar(s).add(a),c=x6.subVectors(l,o).multiplyScalar(s).add(o),d=x8.subVectors(c,h).multiplyScalar(s).add(h);return[e.x,e.y,a.x,a.y,h.x,h.y,d.x,d.y,c.x,c.y,l.x,l.y,r.x,r.y]}(e.v0,e.v1,e.v2,e.v3,a);return void 0!==r&&(t.v0.set(o[0],o[1]),t.v1.set(o[2],o[3]),t.v2.set(o[4],o[5]),t.v3.set(o[6],o[7])),void 0!==s&&(t.v0.set(o[6],o[7]),t.v1.set(o[8],o[9]),t.v2.set(o[10],o[11]),t.v3.set(o[12],o[13])),t}return t}clone(){let e=new bp(this._width,this._height);return e.points=this.points.map(e=>e.clone()),e.isClosed=this.isClosed,e.roundness=this.roundness,e.isMesh2D=this.isMesh2D,e.shapeHoles=this.shapeHoles.map(e=>e.clone()),e}toJSON(){return{points:this.points.reduce((e,t)=>e.concat(t.toJSON()),[]),shapeHoles:this.shapeHoles.map(e=>e.toJSON()),isClosed:this.isClosed,roundness:this.roundness}}fromJSON(e){this.points=[],this.pointIDs=0;let t=e.points.length/7;for(let i=0;i<t;i++){let t=7*i,r=e.points[t+0],s=e.points[t+1],a=e.points[t+2],o=e.points[t+3],l=e.points[t+4],h=e.points[t+5],c=e.points[t+6],d=new x$(tY.generateUUID(),new tQ(r,s));d.controls[0].position.set(a,o),d.controls[1].position.set(l,h),d.roundness=c,this.points.push(d)}return this.shapeHoles=e.shapeHoles?.length?e.shapeHoles.map(e=>{let t=new bp;return t.fromJSON(e),t}):[],this.isClosed=e.isClosed,this._roundness=e.roundness,this._update(),this}fromShape(e,t=!1){this.isText=t;let i=(e,t)=>{t instanceof n6&&t.v3.equals(e.position)&&e.controls[0].position.copy(t.v2)};return this.points=(e=>{let t=[],r,s;for(r=0,s=e.length;r<s;r++)e[r]instanceof oe&&(e[r]=function(e){let t=new tQ;t.addVectors(e.v0,x2.subVectors(e.v1,e.v0).multiplyScalar(2/3));let i=new tQ;return i.addVectors(e.v2,x3.subVectors(e.v1,e.v2).multiplyScalar(2/3)),new n6(e.v0,t,i,e.v2)}(e[r]));for(r=0,s=e.length;r<s;r++){let s=e[r],a=r>0?e[r-1]:null,o;s instanceof n6?(o=this.createPoint(s.v0)).controls[1].position.copy(s.v1):s instanceof n9&&(o=this.createPoint(s.v1)),void 0!==o&&(null!==a&&i(o,a),t.push(o))}let a=e[e.length-1],o=!1;return a instanceof n6?a.v3.equals(t[0].position)&&(t[0].controls[0].position.copy(a.v2),o=!0):a instanceof n9&&a.v2.equals(t[0].position)&&(o=!0),this.isClosed=o,t})(e.curves),e instanceof od&&(this.shapeHoles=e.holes.map(e=>{let t=new bp;return t.fromShape(e),t})),this.update(),this}updatePoint(e,t){let i=this.getPointByUuid(e);i&&(void 0!==t.position&&i.position.fromArray(t.position),void 0!==t.roundness&&(i.roundness=t.roundness),void 0!==t.areControlsDirectionsMirrored&&(i.areControlsDirectionsMirrored=t.areControlsDirectionsMirrored),this.needsUpdate=!0)}updatePreviousControl(e,t){let i=this.getPointByUuid(e)?.controls[0];i&&(t.position&&i.position.fromArray(t.position),this.needsUpdate=!0)}updateNextControl(e,t){let i=this.getPointByUuid(e)?.controls[1];i&&(t.position&&i.position.fromArray(t.position),this.needsUpdate=!0)}},bf=2*Math.PI;function bm({x:e,y:t},i,r,s,a){return{x:e*i+s,y:t*r+a}}function bg(e,t,i,r){let s=Math.min(1,Math.max(-1,e*i+t*r));return(e*r-t*i<0?-1:1)*Math.acos(s)}function bv(e,t){if(!e)throw t||"Assertion Failed!"}(wX=wK||(wK={}))[wX.ODD=0]="ODD",wX[wX.NONZERO=1]="NONZERO",wX[wX.POSITIVE=2]="POSITIVE",wX[wX.NEGATIVE=3]="NEGATIVE",wX[wX.ABS_GEQ_TWO=4]="ABS_GEQ_TWO",(wY=wZ||(wZ={}))[wY.POLYGONS=0]="POLYGONS",wY[wY.CONNECTED_POLYGONS=1]="CONNECTED_POLYGONS",wY[wY.BOUNDARY_CONTOURS=2]="BOUNDARY_CONTOURS";var by=function(){function e(){}return e.vertEq=function(e,t){return e.s===t.s&&e.t===t.t},e.vertLeq=function(e,t){return e.s<t.s||e.s===t.s&&e.t<=t.t},e.transLeq=function(e,t){return e.t<t.t||e.t===t.t&&e.s<=t.s},e.edgeGoesLeft=function(t){return e.vertLeq(t.Dst,t.Org)},e.edgeGoesRight=function(t){return e.vertLeq(t.Org,t.Dst)},e.vertL1dist=function(e,t){return Math.abs(e.s-t.s)+Math.abs(e.t-t.t)},e.edgeEval=function(t,i,r){bv(e.vertLeq(t,i)&&e.vertLeq(i,r));var s=i.s-t.s,a=r.s-i.s;return s+a>0?s<a?i.t-t.t+(t.t-r.t)*(s/(s+a)):i.t-r.t+(r.t-t.t)*(a/(s+a)):0},e.edgeSign=function(t,i,r){bv(e.vertLeq(t,i)&&e.vertLeq(i,r));var s=i.s-t.s,a=r.s-i.s;return s+a>0?(i.t-r.t)*s+(i.t-t.t)*a:0},e.transEval=function(t,i,r){bv(e.transLeq(t,i)&&e.transLeq(i,r));var s=i.t-t.t,a=r.t-i.t;return s+a>0?s<a?i.s-t.s+(t.s-r.s)*(s/(s+a)):i.s-r.s+(r.s-t.s)*(a/(s+a)):0},e.transSign=function(t,i,r){bv(e.transLeq(t,i)&&e.transLeq(i,r));var s=i.t-t.t,a=r.t-i.t;return s+a>0?(i.s-r.s)*s+(i.s-t.s)*a:0},e.vertCCW=function(e,t,i){return e.s*(t.t-i.t)+t.s*(i.t-e.t)+i.s*(e.t-t.t)>=0},e.interpolate=function(e,t,i,r){return(e=e<0?0:e)<=(i=i<0?0:i)?0===i?(t+r)/2:t+e/(e+i)*(r-t):r+i/(e+i)*(t-r)},e.intersect=function(t,i,r,s,a){var o,l,h;e.vertLeq(t,i)||(h=t,t=i,i=h),e.vertLeq(r,s)||(h=r,r=s,s=h),e.vertLeq(t,r)||(h=t,t=r,r=h,h=i,i=s,s=h),e.vertLeq(r,i)?e.vertLeq(i,s)?((o=e.edgeEval(t,r,i))+(l=e.edgeEval(r,i,s))<0&&(o=-o,l=-l),a.s=e.interpolate(o,r.s,l,i.s)):((o=e.edgeSign(t,r,i))+(l=-e.edgeSign(t,s,i))<0&&(o=-o,l=-l),a.s=e.interpolate(o,r.s,l,s.s)):a.s=(r.s+i.s)/2,e.transLeq(t,i)||(h=t,t=i,i=h),e.transLeq(r,s)||(h=r,r=s,s=h),e.transLeq(t,r)||(h=t,t=r,r=h,h=i,i=s,s=h),e.transLeq(r,i)?e.transLeq(i,s)?((o=e.transEval(t,r,i))+(l=e.transEval(r,i,s))<0&&(o=-o,l=-l),a.t=e.interpolate(o,r.t,l,i.t)):((o=e.transSign(t,r,i))+(l=-e.transSign(t,s,i))<0&&(o=-o,l=-l),a.t=e.interpolate(o,r.t,l,s.t)):a.t=(r.t+i.t)/2},e}(),bx=function(){this.next=null,this.prev=null,this.anEdge=null,this.trail=null,this.n=0,this.marked=!1,this.inside=!1},bb=function(){function e(e){this.side=e,this.next=null,this.Org=null,this.Sym=null,this.Onext=null,this.Lnext=null,this.Lface=null,this.activeRegion=null,this.winding=0}return Object.defineProperty(e.prototype,"Rface",{get:function(){return this.Sym.Lface},set:function(e){this.Sym.Lface=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Dst",{get:function(){return this.Sym.Org},set:function(e){this.Sym.Org=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Oprev",{get:function(){return this.Sym.Lnext},set:function(e){this.Sym.Lnext=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Lprev",{get:function(){return this.Onext.Sym},set:function(e){this.Onext.Sym=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Dprev",{get:function(){return this.Lnext.Sym},set:function(e){this.Lnext.Sym=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Rprev",{get:function(){return this.Sym.Onext},set:function(e){this.Sym.Onext=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Dnext",{get:function(){return this.Sym.Onext.Sym},set:function(e){this.Sym.Onext.Sym=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Rnext",{get:function(){return this.Sym.Lnext.Sym},set:function(e){this.Sym.Lnext.Sym=e},enumerable:!0,configurable:!0}),e}(),bw=function(){this.next=null,this.prev=null,this.anEdge=null,this.coords=[0,0,0],this.s=0,this.t=0,this.pqHandle=0,this.n=0,this.idx=0},bS=function(){function e(){var e=new bw,t=new bx,i=new bb(0),r=new bb(1);e.next=e.prev=e,e.anEdge=null,t.next=t.prev=t,i.next=i,i.Sym=r,r.next=r,r.Sym=i,this.vHead=e,this.fHead=t,this.eHead=i,this.eHeadSym=r}return e.prototype.makeEdge_=function(e){var t=new bb(0),i=new bb(1);e.Sym.side<e.side&&(e=e.Sym);var r=e.Sym.next;return i.next=r,r.Sym.next=t,t.next=e,e.Sym.next=i,t.Sym=i,t.Onext=t,t.Lnext=i,t.Org=null,t.Lface=null,t.winding=0,t.activeRegion=null,i.Sym=t,i.Onext=i,i.Lnext=t,i.Org=null,i.Lface=null,i.winding=0,i.activeRegion=null,t},e.prototype.splice_=function(e,t){var i=e.Onext,r=t.Onext;i.Sym.Lnext=t,r.Sym.Lnext=e,e.Onext=r,t.Onext=i},e.prototype.makeVertex_=function(e,t,i){bv(e,"Vertex can't be null!");var r=i.prev;e.prev=r,r.next=e,e.next=i,i.prev=e,e.anEdge=t;var s=t;do s.Org=e,s=s.Onext;while(s!==t)},e.prototype.makeFace_=function(e,t,i){bv(e,"Face can't be null");var r=i.prev;e.prev=r,r.next=e,e.next=i,i.prev=e,e.anEdge=t,e.trail=null,e.marked=!1,e.inside=i.inside;var s=t;do s.Lface=e,s=s.Lnext;while(s!==t)},e.prototype.killEdge_=function(e){e.Sym.side<e.side&&(e=e.Sym);var t=e.next,i=e.Sym.next;t.Sym.next=i,i.Sym.next=t},e.prototype.killVertex_=function(e,t){var i=e.anEdge,r=i;do r.Org=t,r=r.Onext;while(r!==i);var s=e.prev,a=e.next;a.prev=s,s.next=a},e.prototype.killFace_=function(e,t){var i=e.anEdge,r=i;do r.Lface=t,r=r.Lnext;while(r!==i);var s=e.prev,a=e.next;a.prev=s,s.next=a},e.prototype.makeEdge=function(){var e=new bw,t=new bw,i=new bx,r=this.makeEdge_(this.eHead);return this.makeVertex_(e,r,this.vHead),this.makeVertex_(t,r.Sym,this.vHead),this.makeFace_(i,r,this.fHead),r},e.prototype.splice=function(e,t){var i=!1,r=!1;if(e!==t){if(t.Org!==e.Org&&(r=!0,this.killVertex_(t.Org,e.Org)),t.Lface!==e.Lface&&(i=!0,this.killFace_(t.Lface,e.Lface)),this.splice_(t,e),!r){var s=new bw;this.makeVertex_(s,t,e.Org),e.Org.anEdge=e}if(!i){var a=new bx;this.makeFace_(a,t,e.Lface),e.Lface.anEdge=e}}},e.prototype.delete=function(e){var t=e.Sym,i=!1;if(e.Lface!==e.Rface&&(i=!0,this.killFace_(e.Lface,e.Rface)),e.Onext===e)this.killVertex_(e.Org,null);else if(e.Rface.anEdge=e.Oprev,e.Org.anEdge=e.Onext,this.splice_(e,e.Oprev),!i){var r=new bx;
vendor: 5,712 bytes, line 3139
3139this.makeFace_(r,e,e.Lface)}t.Onext===t?(this.killVertex_(t.Org,null),this.killFace_(t.Lface,null)):(e.Lface.anEdge=t.Oprev,t.Org.anEdge=t.Onext,this.splice_(t,t.Oprev)),this.killEdge_(e)},e.prototype.addEdgeVertex=function(e){var t=this.makeEdge_(e),i=t.Sym;this.splice_(t,e.Lnext),t.Org=e.Dst;var r=new bw;return this.makeVertex_(r,i,t.Org),t.Lface=i.Lface=e.Lface,t},e.prototype.splitEdge=function(e){var t=this.addEdgeVertex(e).Sym;return this.splice_(e.Sym,e.Sym.Oprev),this.splice_(e.Sym,t),e.Dst=t.Org,t.Dst.anEdge=t.Sym,t.Rface=e.Rface,t.winding=e.winding,t.Sym.winding=e.Sym.winding,t.idx=e.idx,t.Sym.idx=e.Sym.idx,t},e.prototype.connect=function(e,t){var i=!1,r=this.makeEdge_(e),s=r.Sym;if(t.Lface!==e.Lface&&(i=!0,this.killFace_(t.Lface,e.Lface)),this.splice_(r,e.Lnext),this.splice_(s,t),r.Org=e.Dst,s.Org=t.Org,r.Lface=s.Lface=e.Lface,e.Lface.anEdge=s,!i){var a=new bx;this.makeFace_(a,r,e.Lface)}return r},e.prototype.zapFace=function(e){var t,i,r,s,a,o=e.anEdge;i=o.Lnext;do i=(t=i).Lnext,t.Lface=null,null===t.Rface&&(t.Onext===t?this.killVertex_(t.Org,null):(t.Org.anEdge=t.Onext,this.splice_(t,t.Oprev)),(r=t.Sym).Onext===r?this.killVertex_(r.Org,null):(r.Org.anEdge=r.Onext,this.splice_(r,r.Oprev)),this.killEdge_(t));while(t!=o);s=e.prev,(a=e.next).prev=s,s.next=a},e.prototype.countFaceVerts_=function(e){var t=e.anEdge,i=0;do i++,t=t.Lnext;while(t!==e.anEdge);return i},e.prototype.mergeConvexFaces=function(e){var t,i,r,s,a;for(t=this.fHead.next;t!==this.fHead;t=t.next)if(t.inside)for(a=(i=t.anEdge).Org;r=i.Lnext,(s=i.Sym)&&s.Lface&&s.Lface.inside&&this.countFaceVerts_(t)+this.countFaceVerts_(s.Lface)-2<=e&&by.vertCCW(i.Lprev.Org,i.Org,s.Lnext.Lnext.Org)&&by.vertCCW(s.Lprev.Org,s.Org,i.Lnext.Lnext.Org)&&(r=s.Lnext,this.delete(s),i=null,s=null),!(i&&i.Lnext.Org===a);)i=r;return!0},e.prototype.check=function(){var e,t,i,r,s,a,o=this.fHead,l=this.vHead,h=this.eHead;for(t=o,t=o;(e=t.next)!==o;t=e){bv(e.prev===t),s=e.anEdge;do bv(s.Sym!==s),bv(s.Sym.Sym===s),bv(s.Lnext.Onext.Sym===s),bv(s.Onext.Sym.Lnext===s),bv(s.Lface===e),s=s.Lnext;while(s!==e.anEdge)}for(bv(e.prev===t&&null===e.anEdge),r=l,r=l;(i=r.next)!==l;r=i){bv(i.prev===r),s=i.anEdge;do bv(s.Sym!==s),bv(s.Sym.Sym===s),bv(s.Lnext.Onext.Sym===s),bv(s.Onext.Sym.Lnext===s),bv(s.Org===i),s=s.Onext;while(s!==i.anEdge)}for(bv(i.prev===r&&null===i.anEdge),a=h,a=h;(s=a.next)!==h;a=s)bv(s.Sym.next===a.Sym),bv(s.Sym!==s),bv(s.Sym.Sym===s),bv(null!==s.Org),bv(null!==s.Dst),bv(s.Lnext.Onext.Sym===s),bv(s.Onext.Sym.Lnext===s);bv(s.Sym.next===a.Sym&&s.Sym===this.eHeadSym&&s.Sym.Sym===s&&null===s.Org&&null===s.Dst&&null===s.Lface&&null===s.Rface)},e}(),b_=function(){this.handle=null},bA=function(){this.key=null,this.node=0},bM=function(){function e(e,t){this.leq=t,this.max=0,this.nodes=[],this.handles=[],this.initialized=!1,this.freeList=0,this.size=0,this.max=e,this.nodes=[],this.handles=[];for(var i=0;i<e+1;i++)this.nodes[i]=new b_,this.handles[i]=new bA;this.initialized=!1,this.nodes[1].handle=1,this.handles[1].key=null}return e.prototype.floatDown_=function(e){var t,i,r,s=this.nodes,a=this.handles;for(t=s[e].handle;;){if((r=e<<1)<this.size&&this.leq(a[s[r+1].handle].key,a[s[r].handle].key)&&++r,bv(r<=this.max),i=s[r].handle,r>this.size||this.leq(a[t].key,a[i].key)){s[e].handle=t,a[t].node=e;break}s[e].handle=i,a[i].node=e,e=r}},e.prototype.floatUp_=function(e){var t,i,r,s=this.nodes,a=this.handles;for(t=s[e].handle;;){if(i=s[r=e>>1].handle,0===r||this.leq(a[i].key,a[t].key)){s[e].handle=t,a[t].node=e;break}s[e].handle=i,a[i].node=e,e=r}},e.prototype.init=function(){for(var e=this.size;e>=1;--e)this.floatDown_(e);this.initialized=!0},e.prototype.min=function(){return this.handles[this.nodes[1].handle].key},e.prototype.insert=function(e){var t,i,r,s;if(2*(t=++this.size)>this.max){for(this.max*=2,s=this.nodes.length,this.nodes.length=this.max+1,r=s;r<this.nodes.length;r++)this.nodes[r]=new b_;for(s=this.handles.length,this.handles.length=this.max+1,r=s;r<this.handles.length;r++)this.handles[r]=new bA}return 0===this.freeList?i=t:(i=this.freeList,this.freeList=this.handles[i].node),this.nodes[t].handle=i,this.handles[i].node=t,this.handles[i].key=e,this.initialized&&this.floatUp_(t),i},e.prototype.extractMin=function(){var e=this.nodes,t=this.handles,i=e[1].handle,r=t[i].key;return this.size>0&&(e[1].handle=e[this.size].handle,t[e[1].handle].node=1,t[i].key=null,t[i].node=this.freeList,this.freeList=i,--this.size,this.size>0&&this.floatDown_(1)),r},e.prototype.delete=function(e){var t,i=this.nodes,r=this.handles;bv(e>=1&&e<=this.max&&null!==r[e].key),i[t=r[e].node].handle=i[this.size].handle,r[i[t].handle].node=t,--this.size,t<=this.size&&(t<=1||this.leq(r[i[t>>1].handle].key,r[i[t].handle].key)?this.floatDown_(t):this.floatUp_(t)),r[e].key=null,r[e].node=this.freeList,this.freeList=e},e}(),bE=function(){this.eUp=null,this.nodeUp=null,this.windingNumber=0,this.inside=!1,this.sentinel=!1,this.dirty=!1,this.fixUpperEdge=!1},bC=function(){this.key=null,this.next=null,this.prev=null},bT=function(){function e(e,t){this.frame=e,this.leq=t,this.head=new bC,this.head.next=this.head,this.head.prev=this.head}return e.prototype.min=function(){return this.head.next},e.prototype.max=function(){return this.head.prev},e.prototype.insert=function(e){return this.insertBefore(this.head,e)},e.prototype.search=function(e){var t=this.head;do t=t.next;while(null!==t.key&&!this.leq(this.frame,e,t.key));return t},e.prototype.insertBefore=function(e,t){do e=e.prev;while(null!==e.key&&!this.leq(this.frame,e.key,t));var i=new bC;return i.key=t,i.next=e.next,e.next.prev=i,i.prev=e,e.next=i,i},e.prototype.delete=function(e){e.next.prev=e.prev,e.prev.next=e.next},e}(),bP=function(){function e(){}
3139return e.regionBelow=function(e){return e.nodeUp.prev.key},e.regionAbove=function(e){return e.nodeUp.next.key},e.debugEvent=function(e){},e.addWinding=function(e,t){e.winding+=t.winding,e.Sym.winding+=t.Sym.winding},e.edgeLeq=function(e,t,i){var r=e.event,s=t.eUp,a=i.eUp;return s.Dst===r?a.Dst===r?by.vertLeq(s.Org,a.Org)?0>=by.edgeSign(a.Dst,s.Org,a.Org):by.edgeSign(s.Dst,a.Org,s.Org)>=0:0>=by.edgeSign(a.Dst,r,a.Org):a.Dst===r?by.edgeSign(s.Dst,r,s.Org)>=0:by.edgeEval(s.Dst,r,s.Org)>=by.edgeEval(a.Dst,r,a.Org)},e.deleteRegion=function(e,t){t.fixUpperEdge&&bv(0===t.eUp.winding),t.eUp.activeRegion=null,e.dict.delete(t.nodeUp)},e.fixUpperEdge=function(e,t,i){bv(t.fixUpperEdge),e.mesh.delete(t.eUp),t.fixUpperEdge=!1,t.eUp=i,i.activeRegion=t},e.topLeftRegion=function(t,i){var r,s=i.eUp.Org;do i=e.regionAbove(i);while(i.eUp.Org===s);if(i.fixUpperEdge){if(null===(r=t.mesh.connect(e.regionBelow(i).eUp.Sym,i.eUp.Lnext)))return null;e.fixUpperEdge(t,i,r),i=e.regionAbove(i)}return i},e.topRightRegion=function(t){var i=t.eUp.Dst;do t=e.regionAbove(t);while(t.eUp.Dst===i);return t},e.addRegionBelow=function(e,t,i){var r=new bE;return r.eUp=i,r.nodeUp=e.dict.insertBefore(t.nodeUp,r),r.fixUpperEdge=!1,r.sentinel=!1,r.dirty=!1,i.activeRegion=r,r},e.isWindingInside=function(e,t){switch(e.windingRule){case wK.ODD:return(1&t)!=0;case wK.NONZERO:return 0!==t;case wK.POSITIVE:return t>0;case wK.NEGATIVE:return t<0;case wK.ABS_GEQ_TWO:return t>=2||t<=-2}throw Error("Invalid winding rulle")},e.computeWinding=function(t,i){i.windingNumber=e.regionAbove(i).windingNumber+i.eUp.winding,i.inside=e.isWindingInside(t,i.windingNumber)},e.finishRegion=function(t,i){var r=i.eUp,s=r.Lface;s.inside=i.inside,s.anEdge=r,e.deleteRegion(t,i)},e.finishLeftRegions=function(t,i,r){for(var s,a=null,o=i,l=i.eUp;o!==r;){if(o.fixUpperEdge=!1,(s=(a=e.regionBelow(o)).eUp).Org!=l.Org){if(!a.fixUpperEdge){e.finishRegion(t,o);break}s=t.mesh.connect(l.Lprev,s.Sym),e.fixUpperEdge(t,a,s)}l.Onext!==s&&(t.mesh.splice(s.Oprev,s),t.mesh.splice(l,s)),e.finishRegion(t,o),l=a.eUp,o=a}return l},e.addRightEdges=function(t,i,r,s,a,o){var l,h,c,d,u=!0;c=r;do bv(by.vertLeq(c.Org,c.Dst)),e.addRegionBelow(t,i,c.Sym),c=c.Onext;while(c!==s);for(null===a&&(a=e.regionBelow(i).eUp.Rprev),h=i,d=a;(c=(l=e.regionBelow(h)).eUp.Sym).Org===d.Org;)c.Onext!==d&&(t.mesh.splice(c.Oprev,c),t.mesh.splice(d.Oprev,c)),l.windingNumber=h.windingNumber-c.winding,l.inside=e.isWindingInside(t,l.windingNumber),h.dirty=!0,!u&&e.checkForRightSplice(t,h)&&(e.addWinding(c,d),e.deleteRegion(t,h),t.mesh.delete(d)),u=!1,h=l,d=c;h.dirty=!0,bv(h.windingNumber-c.winding===l.windingNumber),o&&e.walkDirtyRegions(t,h)},e.spliceMergeVertices=function(e,t,i){e.mesh.splice(t,i)},e.vertexWeights=function(e,t,i){var r=by.vertL1dist(t,e),s=by.vertL1dist(i,e),a=.5*s/(r+s),o=.5*r/(r+s);e.coords[0]+=a*t.coords[0]+o*i.coords[0],e.coords[1]+=a*t.coords[1]+o*i.coords[1],e.coords[2]+=a*t.coords[2]+o*i.coords[2]},e.getIntersectData=function(t,i,r,s,a,o){i.coords[0]=i.coords[1]=i.coords[2]=0,i.idx=-1,e.vertexWeights(i,r,s),e.vertexWeights(i,a,o)},e.checkForRightSplice=function(t,i){var r=e.regionBelow(i),s=i.eUp,a=r.eUp;if(by.vertLeq(s.Org,a.Org)){if(by.edgeSign(a.Dst,s.Org,a.Org)>0)return!1;by.vertEq(s.Org,a.Org)?s.Org!==a.Org&&(t.pq.delete(s.Org.pqHandle),e.spliceMergeVertices(t,a.Oprev,s)):(t.mesh.splitEdge(a.Sym),t.mesh.splice(s,a.Oprev),i.dirty=r.dirty=!0)}else{if(0>by.edgeSign(s.Dst,a.Org,s.Org))return!1;e.regionAbove(i).dirty=i.dirty=!0,t.mesh.splitEdge(s.Sym),t.mesh.splice(a.Oprev,s)}return!0},e.checkForLeftSplice=function(t,i){var r,s=e.regionBelow(i),a=i.eUp,o=s.eUp;if(bv(!by.vertEq(a.Dst,o.Dst)),by.vertLeq(a.Dst,o.Dst)){if(0>by.edgeSign(a.Dst,o.Dst,a.Org))return!1;e.regionAbove(i).dirty=i.dirty=!0,r=t.mesh.splitEdge(a),t.mesh.splice(o.Sym,r),r.Lface.inside=i.inside}else{if(by.edgeSign(o.Dst,a.Dst,o.Org)>0)return!1;i.dirty=s.dirty=!0,r=t.mesh.splitEdge(o),t.mesh.splice(a.Lnext,o.Sym),r.Rface.inside=i.inside}return!0},e.checkForIntersect=function(t,i){var r,s,a=e.regionBelow(i),o=i.eUp,l=a.eUp,h=o.Org,c=l.Org,d=o.Dst,u=l.Dst,p=new bw;if(bv(!by.vertEq(u,d)),bv(0>=by.edgeSign(d,t.event,h)),bv(by.edgeSign(u,t.event,c)>=0),bv(h!==t.event&&c!==t.event),bv(!i.fixUpperEdge&&!a.fixUpperEdge),h===c||Math.min(h.t,d.t)>Math.max(c.t,u.t))return!1;if(by.vertLeq(h,c)){if(by.edgeSign(u,h,c)>0)return!1}else if(0>by.edgeSign(d,c,h))return!1;return e.debugEvent(t),by.intersect(d,h,u,c,p),bv(Math.min(h.t,d.t)<=p.t),bv(p.t<=Math.max(c.t,u.t)),bv(Math.min(u.s,d.s)<=p.s),bv(p.s<=Math.max(c.s,h.s)),by.vertLeq(p,t.event)&&(p.s=t.event.s,p.t=t.event.t),r=by.vertLeq(h,c)?h:c,by.vertLeq(r,p)&&(p.s=r.s,p.t=r.t),by.vertEq(p,h)||by.vertEq(p,c)?(e.checkForRightSplice(t,i),!1):!by.vertEq(d,t.event)&&by.edgeSign(d,t.event,p)>=0||!by.vertEq(u,t.event)&&0>=by.edgeSign(u,t.event,p)?u===t.event?(t.mesh.splitEdge(o.Sym),t.mesh.splice(l.Sym,o),i=e.topLeftRegion(t,i),o=e.regionBelow(i).eUp,e.finishLeftRegions(t,e.regionBelow(i),a),e.addRightEdges(t,i,o.Oprev,o,o,!0),!0):d===t.event?(t.mesh.splitEdge(l.Sym),t.mesh.splice(o.Lnext,l.Oprev),a=i,i=e.topRightRegion(i),s=e.regionBelow(i).eUp.Rprev,a.eUp=l.Oprev,l=e.finishLeftRegions(t,a,null),e.addRightEdges(t,i,l.Onext,o.Rprev,s,!0),!0):(by.edgeSign(d,t.event,p)>=0&&(e.regionAbove(i).dirty=i.dirty=!0,t.mesh.splitEdge(o.Sym),o.Org.s=t.event.s,o.Org.t=t.event.t),0>=by.edgeSign(u,t.event,p)&&(i.dirty=a.dirty=!0,t.mesh.splitEdge(l.Sym),l.Org.s=t.event.s,l.Org.t=t.event.t),!1):(t.mesh.splitEdge(o.Sym),t.mesh.splitEdge(l.Sym),t.mesh.splice(l.Oprev,o),o.Org.s=p.s,o.Org.t=p.t,o.Org.pqHandle=t.pq.insert(o.Org),e.getIntersectData(t,o.Org,h,d,c,u),e.regionAbove(i).dirty=i.dirty=a.dirty=!0,!1)}
3139,e.walkDirtyRegions=function(t,i){for(var r,s,a=e.regionBelow(i);;){for(;a.dirty;)i=a,a=e.regionBelow(a);if(!i.dirty&&(a=i,null===(i=e.regionAbove(i))||!i.dirty))return;if(i.dirty=!1,r=i.eUp,s=a.eUp,r.Dst!==s.Dst&&e.checkForLeftSplice(t,i)&&(a.fixUpperEdge?(e.deleteRegion(t,a),t.mesh.delete(s),s=(a=e.regionBelow(i)).eUp):i.fixUpperEdge&&(e.deleteRegion(t,i),t.mesh.delete(r),r=(i=e.regionAbove(a)).eUp)),r.Org!==s.Org){if(r.Dst===s.Dst||i.fixUpperEdge||a.fixUpperEdge||r.Dst!==t.event&&s.Dst!==t.event)e.checkForRightSplice(t,i);else if(e.checkForIntersect(t,i))return}r.Org===s.Org&&r.Dst===s.Dst&&(e.addWinding(s,r),e.deleteRegion(t,i),t.mesh.delete(r),i=e.regionAbove(a))}},e.connectRightVertex=function(t,i,r){var s,a=r.Onext,o=e.regionBelow(i),l=i.eUp,h=o.eUp,c=!1;if(l.Dst!==h.Dst&&e.checkForIntersect(t,i),by.vertEq(l.Org,t.event)&&(t.mesh.splice(a.Oprev,l),i=e.topLeftRegion(t,i),a=e.regionBelow(i).eUp,e.finishLeftRegions(t,e.regionBelow(i),o),c=!0),by.vertEq(h.Org,t.event)&&(t.mesh.splice(r,h.Oprev),r=e.finishLeftRegions(t,o,null),
3139c=!0),c){e.addRightEdges(t,i,r.Onext,a,a,!0);return}s=by.vertLeq(h.Org,l.Org)?h.Oprev:l,s=t.mesh.connect(r.Lprev,s),e.addRightEdges(t,i,s,s.Onext,s.Onext,!1),s.Sym.activeRegion.fixUpperEdge=!0,e.walkDirtyRegions(t,i)},e.connectLeftDegenerate=function(t,i,r){var s,a,o,l,h;if(s=i.eUp,by.vertEq(s.Org,r)){bv(!1),e.spliceMergeVertices(t,s,r.anEdge);return}if(!by.vertEq(s.Dst,r)){t.mesh.splitEdge(s.Sym),i.fixUpperEdge&&(t.mesh.delete(s.Onext),i.fixUpperEdge=!1),t.mesh.splice(r.anEdge,s),e.sweepEvent(t,r);return}bv(!1),i=e.topRightRegion(i),a=l=(o=(h=e.regionBelow(i)).eUp.Sym).Onext,h.fixUpperEdge&&(bv(a!==o),e.deleteRegion(t,h),t.mesh.delete(o),o=a.Oprev),t.mesh.splice(r.anEdge,o),by.edgeGoesLeft(a)||(a=null),e.addRightEdges(t,i,o.Onext,l,a,!0)},e.connectLeftVertex=function(t,i){var r,s,a,o,l,h,c=new bE;if(c.eUp=i.anEdge.Sym,r=t.dict.search(c).key,s=e.regionBelow(r)){if(o=r.eUp,l=s.eUp,0===by.edgeSign(o.Dst,i,o.Org)){e.connectLeftDegenerate(t,r,i);return}(a=by.vertLeq(l.Dst,o.Dst)?r:s,r.inside||a.fixUpperEdge)?(h=a===r?t.mesh.connect(i.anEdge.Sym,o.Lnext):t.mesh.connect(l.Dnext,i.anEdge).Sym,a.fixUpperEdge?e.fixUpperEdge(t,a,h):e.computeWinding(t,e.addRegionBelow(t,r,h)),e.sweepEvent(t,i)):e.addRightEdges(t,r,i.anEdge,i.anEdge,null,!0)}},e.sweepEvent=function(t,i){t.event=i,e.debugEvent(t);for(var r=i.anEdge;null===r.activeRegion;)if((r=r.Onext)===i.anEdge){e.connectLeftVertex(t,i);return}var s=e.topLeftRegion(t,r.activeRegion);bv(null!==s);var a=e.regionBelow(s),o=a.eUp,l=e.finishLeftRegions(t,a,null);l.Onext===o?e.connectRightVertex(t,s,l):e.addRightEdges(t,s,l.Onext,o,o,!0)},e.addSentinel=function(e,t,i,r){var s=new bE,a=e.mesh.makeEdge();a.Org.s=i,a.Org.t=r,a.Dst.s=t,a.Dst.t=r,e.event=a.Dst,s.eUp=a,s.windingNumber=0,s.inside=!1,s.fixUpperEdge=!1,s.sentinel=!0,s.dirty=!1,s.nodeUp=e.dict.insert(s)},e.initEdgeDict=function(t){t.dict=new bT(t,e.edgeLeq);var i=t.bmax[0]-t.bmin[0],r=t.bmax[1]-t.bmin[1],s=t.bmin[0]-i,a=t.bmax[0]+i,o=t.bmin[1]-r,l=t.bmax[1]+r;e.addSentinel(t,s,a,o),e.addSentinel(t,s,a,l)},e.doneEdgeDict=function(t){for(var i,r=0;null!==(i=t.dict.min().key);)i.sentinel||(bv(i.fixUpperEdge),bv(1==++r)),bv(0===i.windingNumber),e.deleteRegion(t,i)},e.removeDegenerateEdges=function(t){var i,r,s,a=t.mesh.eHead;for(i=a.next;i!==a;i=r)r=i.next,s=i.Lnext,by.vertEq(i.Org,i.Dst)&&i.Lnext.Lnext!==i&&(e.spliceMergeVertices(t,s,i),t.mesh.delete(i),s=(i=s).Lnext),s.Lnext===i&&(s!==i&&((s===r||s===r.Sym)&&(r=r.next),t.mesh.delete(s)),(i===r||i===r.Sym)&&(r=r.next),t.mesh.delete(i))},e.initPriorityQ=function(e){var t,i,r,s=0;for(i=(r=e.mesh.vHead).next;i!==r;i=i.next)s++;for(s+=8,t=e.pq=new bM(s,by.vertLeq),i=(r=e.mesh.vHead).next;i!==r;i=i.next)i.pqHandle=t.insert(i);return i===r&&(t.init(),!0)},e.donePriorityQ=function(e){e.pq=null},e.removeDegenerateFaces=function(t,i){var r,s,a;for(r=i.fHead.next;r!==i.fHead;r=s)s=r.next,bv((a=r.anEdge).Lnext!==a),a.Lnext.Lnext===a&&(e.addWinding(a.Onext,a),t.mesh.delete(a));return!0},e.computeInterior=function(t,i){var r,s;if(void 0===i&&(i=!0),e.removeDegenerateEdges(t),!e.initPriorityQ(t))return!1;for(e.initEdgeDict(t);null!==(r=t.pq.extractMin());){for(;!(null===(s=t.pq.min())||!by.vertEq(s,r));)s=t.pq.extractMin(),e.spliceMergeVertices(t,r.anEdge,s.anEdge);e.sweepEvent(t,r)}return t.event=t.dict.min().key.eUp.Org,e.debugEvent(t),e.doneEdgeDict(t),e.donePriorityQ(t),!!e.removeDegenerateFaces(t,t.mesh)&&(i&&t.mesh.check(),!0)},e}(),bD=function(){function e(){this.mesh=new bS,this.normal=[0,0,0],this.sUnit=[0,0,0],this.tUnit=[0,0,0],this.bmin=[0,0],this.bmax=[0,0],this.windingRule=wK.ODD,this.dict=null,this.pq=null,this.event=null,this.vertexIndexCounter=0,this.vertices=[],this.vertexIndices=[],this.vertexCount=0,this.elements=[],this.elementCount=0}return e.prototype.dot_=function(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]},e.prototype.normalize_=function(e){var t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2];if(!t)throw"Zero-size vector!";t=Math.sqrt(t),e[0]/=t,e[1]/=t,e[2]/=t},e.prototype.longAxis_=function(e){var t=0;return Math.abs(e[1])>Math.abs(e[0])&&(t=1),Math.abs(e[2])>Math.abs(e[t])&&(t=2),t},e.prototype.computeNormal_=function(e){var t,i,r,s,a,o,l=[0,0,0],h=[0,0,0],c=[0,0,0],d=[0,0,0],u=[0,0,0],p=[null,null,null],f=[null,
3139null,null],m=this.mesh.vHead;t=m.next;for(var g=0;g<3;++g)s=t.coords[g],h[g]=s,f[g]=t,l[g]=s,p[g]=t;for(t=m.next;t!==m;t=t.next)for(var v=0;v<3;++v)(s=t.coords[v])<h[v]&&(h[v]=s,f[v]=t),s>l[v]&&(l[v]=s,p[v]=t);var y=0;if(l[1]-h[1]>l[0]-h[0]&&(y=1),l[2]-h[2]>l[y]-h[y]&&(y=2),h[y]>=l[y]){e[0]=0,e[1]=0,e[2]=1;return}for(o=0,i=f[y],r=p[y],c[0]=i.coords[0]-r.coords[0],c[1]=i.coords[1]-r.coords[1],c[2]=i.coords[2]-r.coords[2],t=m.next;t!==m;t=t.next)d[0]=t.coords[0]-r.coords[0],d[1]=t.coords[1]-r.coords[1],d[2]=t.coords[2]-r.coords[2],u[0]=c[1]*d[2]-c[2]*d[1],u[1]=c[2]*d[0]-c[0]*d[2],u[2]=c[0]*d[1]-c[1]*d[0],(a=u[0]*u[0]+u[1]*u[1]+u[2]*u[2])>o&&(o=a,e[0]=u[0],e[1]=u[1],e[2]=u[2]);o<=0&&(e[0]=e[1]=e[2]=0,e[this.longAxis_(c)]=1)},e.prototype.checkOrientation_=function(){for(var e,t,i=this.mesh.fHead,r=this.mesh.vHead,s=0,a=i.next;a!==i;a=a.next)if(!((t=a.anEdge).winding<=0))do s+=(t.Org.s-t.Dst.s)*(t.Org.t+t.Dst.t),t=t.Lnext;while(t!==a.anEdge);if(s<0){for(e=r.next;e!==r;e=e.next)e.t=-e.t;this.tUnit[0]=-this.tUnit[0],this.tUnit[1]=-this.tUnit[1],this.tUnit[2]=-this.tUnit[2]}},e.prototype.projectPolygon_=function(){var e,t,i=this.mesh.vHead,r=[0,0,0],s=!1;r[0]=this.normal[0],r[1]=this.normal[1],r[2]=this.normal[2],r[0]||r[1]||r[2]||(this.computeNormal_(r),s=!0),e=this.sUnit,t=this.tUnit;var a=this.longAxis_(r);e[a]=0,e[(a+1)%3]=1,e[(a+2)%3]=0,t[a]=0,t[(a+1)%3]=0,t[(a+2)%3]=r[a]>0?1:-1;for(var o=i.next;o!==i;o=o.next)o.s=this.dot_(o.coords,e),o.t=this.dot_(o.coords,t);s&&this.checkOrientation_();for(var l=!0,h=i.next;h!==i;h=h.next)l?(this.bmin[0]=this.bmax[0]=h.s,this.bmin[1]=this.bmax[1]=h.t,l=!1):(h.s<this.bmin[0]&&(this.bmin[0]=h.s),h.s>this.bmax[0]&&(this.bmax[0]=h.s),h.t<this.bmin[1]&&(this.bmin[1]=h.t),h.t>this.bmax[1]&&(this.bmax[1]=h.t))},e.prototype.addWinding_=function(e,t){e.winding+=t.winding,e.Sym.winding+=t.Sym.winding},e.prototype.tessellateMonoRegion_=function(e,t){var i,r;if(!((i=t.anEdge).Lnext!==i&&i.Lnext.Lnext!==i))throw"Mono region invalid";for(;by.vertLeq(i.Dst,i.Org);i=i.Lprev);for(;by.vertLeq(i.Org,i.Dst);i=i.Lnext);for(r=i.Lprev;i.Lnext!==r;)if(by.vertLeq(i.Dst,r.Org)){for(;r.Lnext!==i&&(by.edgeGoesLeft(r.Lnext)||0>=by.edgeSign(r.Org,r.Dst,r.Lnext.Dst));)r=e.connect(r.Lnext,r).Sym;r=r.Lprev}else{for(;r.Lnext!==i&&(by.edgeGoesRight(i.Lprev)||by.edgeSign(i.Dst,i.Org,i.Lprev.Org)>=0);)i=e.connect(i,i.Lprev).Sym;i=i.Lnext}if(r.Lnext===i)throw"Mono region invalid";for(;r.Lnext.Lnext!==i;)r=e.connect(r.Lnext,r).Sym;return!0},e.prototype.tessellateInterior_=function(e){for(var t,i=e.fHead.next;i!==e.fHead;i=t)if(t=i.next,i.inside&&!this.tessellateMonoRegion_(e,i))return!1;return!0},e.prototype.discardExterior_=function(e){for(var t,i=e.fHead.next;i!==e.fHead;i=t)t=i.next,i.inside||e.zapFace(i)},e.prototype.setWindingNumber_=function(e,t,i){for(var r,s=e.eHead.next;s!==e.eHead;s=r)r=s.next,s.Rface.inside!==s.Lface.inside?s.winding=s.Lface.inside?t:-t:i?e.delete(s):s.winding=0},e.prototype.getNeighbourFace_=function(e){return e.Rface&&e.Rface.inside?e.Rface.n:-1},e.prototype.outputPolymesh_=function(e,t,i,r){var s,a,o=0,l=0;i>3&&e.mergeConvexFaces(i);for(var h=e.vHead.next;h!==e.vHead;h=h.next)h.n=-1;for(var c=e.fHead.next;c!==e.fHead;c=c.next)if(c.n=-1,c.inside){s=c.anEdge,a=0;do{var h=s.Org;-1===h.n&&(h.n=l,l++),a++,s=s.Lnext}while(s!==c.anEdge);if(a>i)throw"Face vertex greater that support polygon";c.n=o,++o}this.elementCount=o,t===wZ.CONNECTED_POLYGONS&&(o*=2),this.elements=[],this.elements.length=o*i,this.vertexCount=l,this.vertices=[],this.vertices.length=l*r,this.vertexIndices=[],this.vertexIndices.length=l;for(var h=e.vHead.next;h!==e.vHead;h=h.next)if(-1!==h.n){var d=h.n*r;this.vertices[d+0]=h.coords[0],this.vertices[d+1]=h.coords[1],r>2&&(this.vertices[d+2]=h.coords[2]),this.vertexIndices[h.n]=h.idx}for(var u=0,c=e.fHead.next;c!==e.fHead;c=c.next)if(c.inside){s=c.anEdge,a=0;do{var h=s.Org;this.elements[u++]=h.n,a++,s=s.Lnext}while(s!==c.anEdge);for(var p=a;p<i;++p)this.elements[u++]=-1;if(t===wZ.CONNECTED_POLYGONS){s=c.anEdge;do this.elements[u++]=this.getNeighbourFace_(s),s=s.Lnext;while(s!==c.anEdge);for(var f=a;f<i;++f)this.elements[u++]=-1}}},e.prototype.outputContours_=function(e,t){var i,r,s=0,a=0;this.vertexCount=0,this.elementCount=0;for(var o=e.fHead.next;o!==e.fHead;o=o.next)if(o.inside){r=i=o.anEdge;do this.vertexCount++,i=i.Lnext;while(i!==r);this.elementCount++}this.elements=[],this.elements.length=2*this.elementCount,this.vertices=[],this.vertices.length=this.vertexCount*t,this.vertexIndices=[],this.vertexIndices.length=this.vertexCount;var l=0,h=0,c=0;s=0;for(var o=e.fHead.next;o!==e.fHead;o=o.next)if(o.inside){a=0,r=i=o.anEdge;do this.vertices[l++]=i.Org.coords[0],this.vertices[l++]=i.Org.coords[1],t>2&&(this.vertices[l++]=i.Org.coords[2]),this.vertexIndices[h++]=this.vertexIdCallback?this.vertexIdCallback(i):i.Org.idx,a++,i=i.Lnext;while(i!==r);this.elements[c++]=s,this.elements[c++]=a,s+=a}},e.prototype.addContour=function(e,t){null===this.mesh&&(this.mesh=new bS),e<2&&(e=2),e>3&&(e=3);for(var i=null,r=0;r<t.length;r+=e)null===i?(i=this.mesh.makeEdge(),this.mesh.splice(i,i.Sym)):(this.mesh.splitEdge(i),i=i.Lnext),i.Org.coords[0]=t[r+0],i.Org.coords[1]=t[r+1],e>2?i.Org.coords[2]=t[r+2]:i.Org.coords[2]=0,i.Org.idx=this.vertexIndexCounter++,this.edgeCreateCallback&&this.edgeCreateCallback(i),i.winding=1,i.Sym.winding=-1},e.prototype.tesselate=function(e,t,i,r,s,a){if(void 0===e&&(e=wK.ODD),void 0===t&&(t=wZ.POLYGONS),void 0===a&&(a=!0),this.vertices=[],this.elements=[],this.vertexIndices=[],this.vertexIndexCounter=0,s&&(this.normal[0]=s[0],this.normal[1]=s[1],this.normal[2]=s[2]),this.windingRule=e,r<2&&(r=2),r>3&&(r=3),!this.mesh)return!1;this.projectPolygon_(),bP.computeInterior(this,a);var o=this.mesh;return t===wZ.BOUNDARY_CONTOURS?this.setWindingNumber_(o,1,!0):this.tessellateInterior_(o),a&&o.check(),t===wZ.BOUNDARY_CONTOURS?this.outputContours_(o,r):this.outputPolymesh_(o,t,i,r),!0},e}();function bI(e){var t=e.windingRule,i=void 0===t?wK.ODD:t,r=e.elementType,s=void 0===r?wZ.POLYGONS:r,a=e.polySize,o=e.vertexSize,l=void 0===o?2:o,h=e.normal,c=e.contours,d=void 0===c?[]:c,u=e.strict,p=void 0===u||u,f=e.debug;if(!d&&p)throw Error("Contours can't be empty");if(d){var m=new bD;e.edgeCreateCallback&&(m.edgeCreateCallback=e.edgeCreateCallback),e.vertexIdCallback&&(m.vertexIdCallback=e.vertexIdCallback);for(var g=0;g<d.length;g++)m.addContour(l||2,d[g]);return m.tesselate(i,s,void 0===a?3:a,l,void 0===h?[0,0,1]:h,p),{vertices:m.vertices,vertexIndices:m.vertexIndices,vertexCount:m.vertexCount,elements:m.elements,elementCount:m.elementCount,mesh:void 0!==f&&f?m.mesh:void 0}}}wK.ODD,wK.NONZERO,wK.POSITIVE,wK.NEGATIVE,wK.ABS_GEQ_TWO,wZ.POLYGONS,wZ.CONNECTED_POLYGONS,wZ.BOUNDARY_CONTOURS;var bO=class{constructor(e=256,t=!1){this.capacity=e,this.size=0,this.debug=t,this.debug&&console.log(`allocating with cap ${e}`);let i=e*bO.eSize;this.buffer=new ArrayBuffer(i);let r=Float32Array.BYTES_PER_ELEMENT,s=0;this.positions=new Float32Array(this.buffer,s*r,3*e),s+=3*e,this.normals=new Float32Array(this.buffer,s*r,3*e),s+=3*e,this.uvs=new Float32Array(this.buffer,s*r,2*e)}realloc(e,t=!1){if(e<this.size)throw Error("cannot shrink buffer");if(e<=this.capacity&&!t)return;this.debug&&console.log(`resizing from ${this.capacity} \u2192 ${e}`);let i=new ArrayBuffer(e*bO.eSize),r=Float32Array.BYTES_PER_ELEMENT,s=0,a=new Float32Array(i,0*r,3*e),o=new Float32Array(i,(s+=3*e)*r,3*e),l=new Float32Array(i,(s+=3*e)*r,2*e);t?(a.set(this.positions.subarray(0,3*this.size)),o.set(this.normals.subarray(0,3*this.size)),l.set(this.uvs.subarray(0,2*this.size))):(a.set(this.positions),o.set(this.normals),l.set(this.uvs)),this.buffer=i,this.positions=a,this.normals=o,this.uvs=l,this.capacity=e}get(e=1){let t=this.size+e;if(t>this.capacity){let e=this.capacity;for(;t>e;)e*=2;this.realloc(e)}let i=this.size;return this.size=t,i}reserve(e){let t=this.size+e;t>this.capacity&&this.realloc(t)}shrink(){this.debug&&console.log(`shrinking ${this.capacity} \u2192 ${this.size}`),this.realloc(this.size,!0)}};bO.eSize=8*Float32Array.BYTES_PER_ELEMENT;var bR=class{constructor(e=[],t=(e,t)=>e<t?-1:e>t?1:0){if(this.data=e,this.length=this.data.length,this.compare=t,this.length>0)for(let e=(this.length>>1)-1;e>=0;e--)this._down(e)}push(e){this.data.push(e),this._up(this.length++)}pop(){if(0===this.length)return;let e=this.data[0],t=this.data.pop();return--this.length>0&&(this.data[0]=t,this._down(0)),e}peek(){return this.data[0]}_up(e){let{data:t,compare:i}=this,r=t[e];for(;e>0;){let s=e-1>>1,a=t[s];if(i(r,a)>=0)break;t[e]=a,e=s}t[e]=r}_down(e){let{data:t,compare:i}=this,r=this.length>>1,s=t[e];for(;e<r;){let r=(e<<1)+1,a=r+1;if(a<this.length&&0>i(t[a],t[r])&&(r=a),i(t[r],s)>=0)break;t[e]=t[r],e=r}t[e]=s}};function bL(e,t,i,r){this.x=e,this.y=t,this.h=i,this.d=function(e,t,i){let r=!1,s=1/0;for(let a of i)for(let i=0,o=a.length,l=o-1;i<o;l=i++){let o=a[i],h=a[l];o[1]>t!=h[1]>
3139t&&e<(h[0]-o[0])*(t-o[1])/(h[1]-o[1])+o[0]&&(r=!r),s=Math.min(s,function(e,t,i,r){let s=i[0],a=i[1],o=r[0]-s,l=r[1]-a;if(0!==o||0!==l){let i=((e-s)*o+(t-a)*l)/(o*o+l*l);i>1?(s=r[0],a=r[1]):i>0&&(s+=o*i,a+=l*i)}return(o=e-s)*o+(l=t-a)*l}(e,t,o,h))}return 0===s?0:(r?1:-1)*Math.sqrt(s)}(e,t,r),this.max=this.d+this.h*Math.SQRT2}var bB={vertices:[160,160,-160,160,-160,-160,160,-160],vertexIndices:[1,0,3,2],vertexCount:4,elements:[0,4],elementCount:1,mesh:void 0},bz={vertices:[],vertexIndices:[],vertexCount:0,elements:[],elementCount:0,mesh:void 0},bF={vertices:[-160,160,160,-160,160,160,-160,-160],vertexIndices:[1,3,0,2],vertexCount:4,elements:[0,1,2,1,0,3],elementCount:2,mesh:void 0},bN=(e,t)=>([i,r])=>(r<i&&(r+=t),(e>=i?e:e+t)<=r),bk=class extends rz{constructor(e,t,i=0,r=12,s=3,a=wK.ODD,o=!1){let l,h,c;super(),this.forPathBevel=o,this.type="ShapeGeometry",this.vertexCache={},this._shape=e,this._depth=t,this._curveSegments=r,this._bevelSegmentsInput=s;let d=this._shape.extractShapePointsToFlatArray([],r),u=this._shape.shapeHoles.map(e=>{let t=e.extractShapePointsToFlatArray([],r),i=[];for(let e=t.length-1;e>=1;e-=2){let r=t[e-1],s=t[e-0];i.push(r,s)}return i}),p=[],f=[];for(let e=0;e<d.length;e+=2)f.push([d[e],d[e+1]]);p.push(f);for(let e=0;e<u.length;e++){let t=u[e],i=[];for(let e=0;e<t.length;e+=2)i.push([t[e],t[e+1]]);p.push(i)}l=e.isText?.1*new lz().setFromPoints(e.points.map(e=>e.position)).getSize(new tQ).length():0===p[0].length?i:i>0?function(e,t,i=1,r=!1){let s=1/0,a=1/0,o=-1/0,l=-1/0;for(let[t,i]of e[0])t<s&&(s=t),i<a&&(a=i),t>o&&(o=t),i>l&&(l=i);let h=o-s,c=l-a,d=Math.max(i,Math.min(h,c));if(d===i){let e=[s,a];return e.distance=0,e.distance}let u=new bR([],(e,t)=>t.max-e.max),p=function(e){let t=0,i=0,r=0,s=e[0];for(let e=0,a=s.length,o=a-1;e<a;o=e++){let a=s[e],l=s[o],h=a[0]*l[1]-l[0]*a[1];i+=(a[0]+l[0])*h,r+=(a[1]+l[1])*h,t+=3*h}let a=new bL(i/t,r/t,0,e);return 0===t||a.d<0?new bL(s[0][0],s[0][1],0,e):a}(e),f=new bL(s+h/2,a+c/2,0,e);f.d>p.d&&(p=f);let m=2;function g(s,a,o){let l=new bL(s,a,o,e);if(m++,l.max>p.d+i&&u.push(l),l.d>p.d&&(p=l,r&&console.log(`found best ${Math.round(1e4*l.d)/1e4} after ${m} probes`),p.d>t))return t}let v=d/2;for(let e=s;e<o;e+=d)for(let t=a;t<l;t+=d)g(e+v,t+v,v);for(;u.length;){let{max:e,x:t,y:r,h:s}=u.pop();if(e-p.d<=i)break;g(t-(v=s/2),r-v,v),g(t+v,r-v,v),g(t-v,r+v,v),g(t+v,r+v,v)}r&&console.log(`num probes: ${m} 3140best distance: ${p.d}`);let y=[p.x,p.y];return y.distance=p.d,y.distance}(p,i):1e-5,i<=0?(this._bevel=0,this._bevelSegments=0):(this._bevel=Math.min(i,l,t/2),this._bevelSegments=Math.floor(s));try{h=bI({windingRule:a,elementType:wZ.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[d]})}catch{h=bB}try{c=bI({windingRule:wK.ODD,elementType:wZ.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[...u]})}catch{c=bz}if(!h)throw Error("error generating geometry");let m=h.elementCount;if(c){h.elementCount+=c.elementCount;for(let e=0;e<c.elements.length;e++){let t=c.elements[e],i=e%2==0?h.vertexCount:0;h.elements.push(t+i)}for(let e=0;e<c.vertexIndices.length;e++){let t=c.vertexIndices[e],i=h.vertexCount;h.vertexIndices.push(t+i)}for(let e=0;e<c.vertices.length;e++){let t=c.vertices[e];h.vertices.push(t)}}let g=1/0,v=-1/0,y=1/0,x=-1/0;for(let e=0,t=h.vertexCount;e<t;e++){let t=2*e,i=h.vertices[t+0],r=h.vertices[t+1];i<g&&(g=i),i>v&&(v=i),r<y&&(y=r),r>x&&(x=r)}this._minX=g,this._minY=y,this._width=v-g,this._height=x-y,this._buffer=new bO(this._computeBufferEstimatedSize(h));let b=[],w=[];for(let e=h.elementCount-1;e>=0;e--){let t=e>=m,i=2*e,s=h.elements[i+0],a=h.elements[i+1],c=s+a,d={start:s,count:a,normals:[],continuous:[],concave:[]},p=s,f=c-1,g=s+1,v=this._shape.roundedCurves.length;do{let e=p-s,i=h.vertices[2*f+0],r=h.vertices[2*f+1],o=h.vertices[2*p+0],l=h.vertices[2*p+1],u=h.vertices[2*g+0],m=h.vertices[2*g+1],y=o-i,x=l-r,b=Math.sqrt(y*y+x*x);y/=b,x/=b;let w=o-u,S=l-m,_=Math.sqrt(w*w+S*S);w/=_,S/=_,d.normals[2*e+0]=-S,d.normals[2*e+1]=w,d.concave[e]=y*S-x*w>0;let A=h.vertexIndices[p];if(Array.isArray(A))d.continuous[e]=!1;else{let[t,i]=this._shape.getCurveIndexFromVertexId(A-1,!0);if(i>0&&i<1)d.continuous[e]=!0;else{let r=1===i?t+1:t-1;r=(r+v)%v;let s=1===i?0:1,a=this._shape.roundedCurves[t].getTangent(i),o=this._shape.roundedCurves[r].getTangent(s);d.continuous[e]=a.dot(o)>.95}}t&&(d.normals[2*e+0]*=-1,d.normals[2*e+1]*=-1),[f,p,g]=[p,g,g+1],g>=c&&(g-=a)}while(g!==s+1);let y=[];y.push({bevelI:0,angle:0,size:0,boundary:{vertices:h.vertices.slice(2*s,2*c),vertexCount:a,vertexIndices:Array(a).fill(!0).map((e,t)=>[t,t]),elements:[0,a],elementCount:1,mesh:null},reverseMap:[],insetPoints:h.vertices.slice(2*s,2*c)});let x=0;for(let e=1;e<=this._bevelSegments;e++){let i=e/this._bevelSegments*Math.PI/2,s=(1-Math.cos(i))*this._bevel,o=[],l=[],c=[],u=[],p=0;for(let e=0;e<a;e++){let i=2*e,f=(e-1+a)%a*2,m=h.vertices[2*d.start+i+0],g=h.vertices[2*d.start+i+1],v=-d.normals[f+0]*s,y=-d.normals[f+1]*s,x=-d.normals[i+0]*s,b=-d.normals[i+1]*s;if(d.concave[e]||!d.concave[e]&&t){let i=Math.atan2(y,v),a=Math.atan2(b,x);a>i&&(a-=2*Math.PI);let l=a-i;if(d.continuous[e]||t){let r=i+l/2,a=Math.cos(r)*s,h=Math.sin(r)*s;o[2*p+0]=m+a*(t?-1:1),o[2*p+1]=g+h*(t?-1:1),u[p]=e,p++}else{let t=Math.max(1,Math.floor(r/4*Math.abs(l)/Math.PI));for(let r=0;r<=t;r++){let a=i+r/t*l,h=Math.cos(a)*s,c=Math.sin(a)*s;o[2*p+0]=m+h,o[2*p+1]=g+c,u[p]=e,p++}}}
3140else o[2*p+0]=m+v,o[2*p+1]=g+y,u[p]=e,l[e]=p,o[2*++p+0]=m,o[2*p+1]=g,u[p]=e,o[2*++p+0]=m+x,o[2*p+1]=g+b,u[p]=e,c[e]=p,p++}let f=bI({windingRule:wK.POSITIVE,elementType:wZ.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[o],edgeCreateCallback:e=>{let t=e.Org.idx,i=u[t],r=u[(t+1)%u.length];e.idx=[i,r],e.Sym.idx=[r,i]},vertexIdCallback:e=>{let t=e.Lprev.idx;return[t?t[1]:0,e.idx?e.idx[0]:0]}});if(!f)throw console.log("Error"),Error(`error generating bevel geometry for ${e}'th loop`);if(!f.vertexCount){x=(1-Math.sin((e-1)/this._bevelSegments*Math.PI/2))*this._bevel;break}for(let e=0;e<f.vertexIndices.length;e++){let[t,i]=f.vertexIndices[e];if(t===i)continue;let r=i;i<t&&(r+=a);for(let s=t;s<r;s++){let r=s%a,o=(s+1)%a;if(!d.continuous[r]||!d.continuous[o]){f.vertexIndices[e]=[t,r],f.vertexIndices.splice(e+1,0,[o,i]),f.vertices.splice((e+1)*2,0,f.vertices[2*e],f.vertices[2*e+1]);break}}}y.push({bevelI:e,angle:i,size:s,boundary:f,reverseMap:u,insetPoints:o})}let S=(e,t,i)=>{let r=0,s=e.boundary.vertexIndices.length;for(;r<s&&i(e.boundary.vertexIndices[t]);)t=(t+1)%s,r++;return r},_=b.length;for(let e=1;e<y.length;e++){let t=y[e-1],i=y[e],r=t.boundary.vertexIndices.length,s=i.boundary.vertexIndices.length;if(!r||!s)break;let l=d.concave.length,h=0,c=bN(0,a);for(;!t.boundary.vertexIndices.filter(c).length||!i.boundary.vertexIndices.filter(c).length;)c=bN(++h,a);let u=t.boundary.vertexIndices.findIndex(c),p=i.boundary.vertexIndices.findIndex(c);do u=(u+1)%r;while(c(t.boundary.vertexIndices[u]));do p=(p+1)%s;while(c(i.boundary.vertexIndices[p]));let f=h=(h+1)%a,m=0,g=this._buildBevelVert(d,t,(u-1+r)%r,void 0,m),v=this._buildBevelVert(d,i,(p-1+s)%s,void 0,m),x=g,w=v,_,A,M=!1;do{m=(h||l)/l;let e=S(t,u,c=bN(h,a)),f=S(i,p,c),g=M;if(M=!1,e&&!f){for(let i=0;i<e;i++)_=this._buildBevelVert(d,t,(u+i)%r,i/(e-1),m),b.push(x.topN,_.topP,w.topN),!1===o&&b.push(_.bottomP,x.bottomN,w.bottomN),x=_;M=!0}else if(!e&&f)for(let e=0;e<f;e++)A=this._buildBevelVert(d,i,(p+e)%s,e/(f-1),m),b.push(w.topN,x.topP,A.topP),!1===o&&b.push(x.bottomP,w.bottomN,A.bottomP),w=A;else if(e&&f){if(_=this._buildBevelVert(d,t,u,0,m),A=this._buildBevelVert(d,i,p,0,m),g?(b.push(x.topN,A.topP,w.topN),b.push(x.topN,_.topP,A.topP),!1===o&&(b.push(A.bottomP,x.bottomN,w.bottomN),b.push(A.bottomP,_.bottomP,x.bottomN))):(b.push(w.topN,x.topN,_.topP),b.push(w.topN,_.topP,A.topP),!1===o&&(b.push(_.bottomP,x.bottomN,w.bottomN),b.push(_.bottomP,w.bottomN,A.bottomP))),x=_,w=A,e===f)for(let a=1;a<e;a++)_=this._buildBevelVert(d,t,(u+a)%r,a/(e-1),m),A=this._buildBevelVert(d,i,(p+a)%s,a/(f-1),m),b.push(x.topN,_.topP,w.topN),b.push(w.topN,_.topP,A.topP),!1===o&&(b.push(_.bottomP,x.bottomN,w.bottomN),b.push(_.bottomP,w.bottomN,A.bottomP)),x=_,w=A;else if(e>f){let a=e/f,l=0;for(let h=1;h<e;h++)_=this._buildBevelVert(d,t,(u+h)%r,h/(e-1),m),b.push(x.topN,_.topP,w.topN),!1===o&&b.push(_.bottomP,x.bottomN,w.bottomN),x=_,h>(l+1)*a&&(l++,A=this._buildBevelVert(d,i,(p+l)%s,l/(f-1),m),b.push(w.topN,_.topP,A.topP),!1===o&&b.push(_.bottomP,w.bottomN,A.bottomP),w=A)}else{let a=f/e,l=0;for(let h=1;h<f;h++)A=this._buildBevelVert(d,i,(p+h)%s,h/(f-1),m),b.push(w.topN,_.topP,A.topP),!1===o&&b.push(_.bottomP,w.bottomN,A.bottomP),w=A,h>(l+1)*a&&(l++,_=this._buildBevelVert(d,t,(u+l)%r,l/(e-1),m),b.push(x.topN,_.topP,w.topN),!1===o&&b.push(_.bottomP,x.bottomN,w.bottomN),x=_)}}u=(u+e)%r,p=(p+f)%s,h=(h+1)%l}while(h!==f)}if(!1===o&&this._depth>2*this._bevel&&this._buildWall(y,d,b),t){let e=[];for(let t=b.length-1;t>=_+2;t-=3){let i=b[t-2],r=b[t-1],s=b[t-0];e.push(s,r,i)}b.splice(_,b.length-_,...e)}if(t){let e=[];for(let t=y[y.length-1].boundary.vertices.length-1;t>=1;t-=2){let i=y[y.length-1].boundary.vertices[t-1],r=y[y.length-1].boundary.vertices[t-0];e.push(i,r)}w.push(e)}if(!t){let e=y[y.length-1],t;try{t=bI({windingRule:y.length>1?wK.POSITIVE:wK.ODD,elementType:wZ.POLYGONS,vertexSize:2,strict:!0,contours:[e.insetPoints,...w]})}catch{t=bF}if(!t)throw Error("Error generating geometry for surface");0===u.length&&this._bevel<l&&Object.assign(this,{useNgonForTopBottomFaceDuringBake:!0});for(let e=0;e<3*t.elementCount;e+=3){let i=this._buildSurfaceVert(t,t.elements[e+0],x),r=this._buildSurfaceVert(t,t.elements[e+1],x),s=this._buildSurfaceVert(t,t.elements[e+2],x);b.push(i.top,r.top,s.top),!1===o&&b.push(s.bottom,r.bottom,i.bottom)}}this.vertexCache={}}this._buffer.shrink();let S=new rM(Uint32Array.from(b),1),_=new rM(this._buffer.positions,3),A=new rM(this._buffer.normals,3),M=new rM(this._buffer.uvs,2);_.needsUpdate=!0,A.needsUpdate=!0,M.needsUpdate=!0,S.needsUpdate=!0,this.setAttribute("position",_),this.setAttribute("normal",A),this.setAttribute("uv",M),this.setIndex(S)}_computeBufferEstimatedSize(e){return 2*e.vertexCount*(2+this._bevelSegments)}_buildWall(e,t,i){let r=e[0];
3140for(let e=0,s=r.boundary.vertexCount;e<s;e++){let a=this._buildBevelVert(t,r,e),o=this._buildBevelVert(t,r,(e+1)%s);i.push(o.topP,a.topN,a.bottomN),i.push(o.topP,a.bottomN,o.bottomP)}}_buildSurfaceVert(e,t,i){let r=t.toString();if(r in this.vertexCache)return this.vertexCache[r];let s=e.vertices[2*t+0],a=e.vertices[2*t+1],o=(s-this._minX)/this._width,l=(a-this._minY)/this._height;this.forPathBevel&&(l=1);let h=this._buffer.get(this.forPathBevel?1:2),c=3*h,d=2*h,u={top:h+0,bottom:h+1};return this._buffer.positions[c+0]=s,this._buffer.positions[c+1]=a,this._buffer.positions[c+2]=this.forPathBevel?this._bevel:this._depth-i,this._buffer.normals[c+0]=0,this._buffer.normals[c+1]=0,this._buffer.normals[c+2]=1,this._buffer.uvs[d+0]=o,this._buffer.uvs[d+1]=l,!1===this.forPathBevel&&(this._buffer.positions[c+3]=s,this._buffer.positions[c+4]=a,this._buffer.positions[c+5]=i,this._buffer.normals[c+3]=0,this._buffer.normals[c+4]=0,this._buffer.normals[c+5]=-1,this._buffer.uvs[d+2]=o,this._buffer.uvs[d+3]=l),this.vertexCache[r]=u,u}_buildBevelVert(e,t,i,r=1,s){let a=`${t.bevelI}:${i}`;if(a in this.vertexCache&&0!==s&&1!==s&&(!s||s===this.vertexCache[a].pathBevelUCoord))return this.vertexCache[a];let[o,l]=t.boundary.vertexIndices[i],h,c,d,u;o!==l?(c=o,h=l,u=!1,d=e.continuous[c]&&e.continuous[h]):(c=((h=o)-1+e.count)%e.count,u=e.concave[h]&&t.bevelI>0,d=e.continuous[h]||u);let p=Math.cos(t.angle),f=Math.sin(t.angle),m=2*i,g=2*h,v=2*c,y=t.boundary.vertices[m+0],x=t.boundary.vertices[m+1],b=(1-f)*this._bevel,w=(y-this._minX)/this._width,S=(x-this._minY)/this._height;this.forPathBevel&&(void 0!==s&&(w=s),S=1);let _=e.normals[g+0],A=e.normals[g+1],M=e.normals[v+0],E=e.normals[v+1];if(u){let e=M-_,t=E-A,i=Math.sqrt((_+=e*(1-r))*_+(A+=t*(1-r))*A);_/=i,A/=i}let C=this.forPathBevel?this._buffer.get(d?1:2):this._buffer.get(d?2:4),T=3*C,P=2*C,D={i,fi:h,topP:C+0,topN:C+0,bottomP:C+1,bottomN:C+1,pathBevelUCoord:s};return this._buffer.positions[T+0]=y,this._buffer.positions[T+1]=x,this._buffer.positions[T+2]=(this.forPathBevel?this._bevel:this._depth)-b,this._buffer.normals[T+0]=_*p,this._buffer.normals[T+1]=A*p,this._buffer.normals[T+2]=f,this._buffer.uvs[P+0]=w,this._buffer.uvs[P+1]=S,!1===this.forPathBevel&&(this._buffer.positions[T+3]=y,this._buffer.positions[T+4]=x,this._buffer.positions[T+5]=b,this._buffer.normals[T+3]=_*p,this._buffer.normals[T+4]=A*p,this._buffer.normals[T+5]=-f,this._buffer.uvs[P+2]=S,this._buffer.uvs[P+3]=w),d||(this.forPathBevel?(C+=1,T+=3,P+=2):(C+=2,T+=6,P+=4),D.topP=C+0,D.bottomP=C+1,this._buffer.positions[T+0]=y,this._buffer.positions[T+1]=x,this._buffer.positions[T+2]=(this.forPathBevel?this._bevel:this._depth)-b,this._buffer.normals[T+0]=M*p,this._buffer.normals[T+1]=E*p,this._buffer.normals[T+2]=f,this._buffer.uvs[P+0]=w,this._buffer.uvs[P+1]=S,!1===this.forPathBevel&&(this._buffer.positions[T+3]=y,this._buffer.positions[T+4]=x,this._buffer.positions[T+5]=b,this._buffer.normals[T+3]=M*p,this._buffer.normals[T+4]=E*p,this._buffer.normals[T+5]=-f,this._buffer.uvs[P+2]=S,this._buffer.uvs[P+3]=w)),this.vertexCache[a]=D,D}clone(){let e=new bk(this._shape,this._depth,this._bevel,this._curveSegments,this._bevelSegmentsInput);return e.userData=uc(this.userData),e}},bU=class extends rz{constructor(e,t=12,i={}){super(),this.type="ShapeGeometry",this.windingRule=wK.ODD,this.elementType=wZ.POLYGONS,this.polySize=3,this.vertexSize=2,this.strict=!0,this._shape=e,this._curveSegments=t,this._triangulationOptions=Object.assign({windingRule:wK.ODD,elementType:wZ.POLYGONS,polySize:3,vertexSize:2,strict:!0},i);let r=this._shape.extractShapePointsToFlatArray([],this._curveSegments),s=this._shape.shapeHoles.map(e=>e.extractShapePointsToFlatArray([],this._curveSegments)),a,o=!0,l=!0,h,c;for(let e=0,t=r.length/2;e<t;e++){let t=2*e,i=r[t+0],s=r[t+1];if(void 0!==h&&i!==h&&(o=!1),void 0!==c&&s!==c&&(l=!1),h=i,c=s,!o&&!l)break}if(!o&&!l)try{a=bI({contours:[r,...s],windingRule:this._triangulationOptions.windingRule,elementType:this._triangulationOptions.elementType,polySize:this._triangulationOptions.polySize,vertexSize:this._triangulationOptions.vertexSize,strict:this._triangulationOptions.strict})}catch{a=bB}let d=a?.vertexCount??1,u=a?.elementCount??1;if(this._positionAttribute=new rM(new Float32Array(3*d),3),this._normalAttribute=new rM(new Float32Array(3*d),3),this._uvAttribute=new rM(new Float32Array(2*d),2),this._indexAttribute=new rM(new Uint32Array(3*u),1),a){let e=1/0,t=-1/0,i=1/0,r=-1/0;for(let s=0;s<d;s++){let o=2*s,l=a.vertices[o+0],h=a.vertices[o+1];l<e&&(e=l),l>t&&(t=l),h<i&&(i=h),h>r&&(r=h)}let s=t-e,o=r-i;for(let t=0;t<d;t++){let r=2*t,l=a.vertices[r+0],h=a.vertices[r+1],c=(l-e)/s,d=(h-i)/o;this._positionAttribute.setXYZ(t,l,h,0),this._normalAttribute.setXYZ(t,0,0,1),this._uvAttribute.setXY(t,c,d)}for(let e=0;e<u;e++){let t=3*e,i=a.elements[t+0],r=a.elements[t+1],s=a.elements[t+2];this._indexAttribute.setX(t+0,i),this._indexAttribute.setX(t+1,r),this._indexAttribute.setX(t+2,s)}}this.setAttribute("position",this._positionAttribute),this.setAttribute("normal",this._normalAttribute),this.setAttribute("uv",this._uvAttribute),this.setIndex(this._indexAttribute),this.setDrawRange(0,(a?.elementCount??1)*3)}clone(){let e=new bU(this._shape,this._curveSegments);return e.userData=uc(this.userData),e}},bV=class extends bk{constructor(e,t,i=0,r=12,s=3,a=wK.ODD){super(e,t,i,r,s,a),this.type="ShapeGeometry"}_computeBufferEstimatedSize(e){return 2*e.vertexCount*(2+this._bevelSegments)}_buildWall(e,t,i){let r=e[0];
3140for(let e=0,s=r.boundary.vertexCount;e<s;e++){let a=this._buildBevelVert(t,r,e),o=this._buildBevelVert(t,r,(e+1)%s);i.push(o.topP,a.topN,a.bottomN),i.push(o.topP,a.bottomN,o.bottomP)}}clone(){let e=new bV(this._shape,this._depth,this._bevel,this._curveSegments,this._bevelSegmentsInput);return e.userData=uc(this.userData),e}},bj=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,subdivisions:40,roundness:0,extrudeBevelSize:0,extrudeBevelSegments:3,windingRule:wK.ODD},e.parameters),r=Math.abs(i.width),s=Math.abs(i.height??i.width),a=Math.abs(i.depth??0),o=e.shape??t?.shape,l=o?.roundness??i.roundness;void 0!==o&&(o instanceof bp?(o.width!==r||o.height!==s)&&o.applySize(r,s):o=new bp(r,s).fromJSON(o),e.parameters?.roundness!==void 0&&e.parameters?.roundness>0&&o.update());let h=o??new bp(r,s);return{parameters:Object.assign(i,{width:r,height:s,depth:a,roundness:l}),shape:h}}static build(e){let{depth:t,extrudeBevelSize:i,extrudeBevelSegments:r,subdivisions:s,roundness:a,windingRule:o}=e.parameters;return e.shape.roundness=a,Object.assign(t<=0?new bU(e.shape,s,{windingRule:o}):new bV(e.shape,t,i,s,r,o),{userData:{...e,type:"VectorGeometry"}})}},bG=2*Math.PI,bH=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,spikes:64,angle:360,innerRadius:0,extrudeBevelSize:0,extrudeBevelSegments:1},e.parameters);return i.angle=tY.clamp(i.angle,0,360),{shape:e.shape&&e.shape instanceof bp?e.shape:new bp,parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??0)})}}static build(e){let t,{width:i,height:r,spikes:s,angle:a,innerRadius:o,depth:l,extrudeBevelSize:h,extrudeBevelSegments:c}=e.parameters,d=e.shape,u=function(e,t,i,r,s,a){if(r>=bG)return s>30||s%4==0?(function(e,t,i,r=0,s=0,a=0){let o=.5522847498*t,l=.5522847498*i;e.addPoint(bX(s-t,a,s-t,a-l,s-t,a+l)),e.addPoint(bX(s,a+i,s-o,a+i,s+o,a+i)),e.addPoint(bX(s+t,a,s+t,a+l,s+t,a-l)),e.addPoint(bX(s,a-i,s+o,a-i,s-o,a-i)),r>0&&bQ(e,t,i,r)}(e,t,i,a),Math.round(s/4)):bW(e,r,s,t,i,a);let o={x:0,y:i},l=(r=Math.max(r,.001))+.5*Math.PI,h={x:Math.cos(l)*t,y:Math.sin(l)*i},c=function({px:e,py:t,cx:i,cy:r,rx:s,ry:a,largeArcFlag:o,sweepFlag:l}){var h,c;let d,u,p,f,m,g,v,y,x,b,w,S=[];if(0===s||0===a)return[];let _=(e-i)/2,A=(t-r)/2;if(0===_&&0===A)return[];let M=Math.pow(_,2)/Math.pow(s=Math.abs(s),2)+Math.pow(A,2)/Math.pow(a=Math.abs(a),2);M>1&&(s*=Math.sqrt(M),a*=Math.sqrt(M));let E=(h=s,c=a,d=Math.pow(h,2),u=Math.pow(c,2),p=Math.pow(_,2),(m=d*u-d*(f=Math.pow(A,2))-u*p)<0&&(m=0),m/=d*f+u*p,g=(m=Math.sqrt(m)*(o===l?-1:1))*h/c*A,v=-(m*c)/h*_,b=bg(1,0,y=(_-g)/h,x=(A-v)/c),w=bg(y,x,(-_-g)/h,(-A-v)/c),!l&&w>0&&(w-=bf),l&&w<0&&(w+=bf),{centerx:g+(e+i)/2,centery:v+(t+r)/2,ang1:b,ang2:w}),{ang1:C,ang2:T}=E,{centerx:P,centery:D}=E,I=Math.abs(T)/(bf/4);1e-7>Math.abs(1-I)&&(I=1);let O=Math.max(Math.ceil(I),1);T/=O;for(let e=0;e<O;e++)S.push(function(e,t){let i=1.5707963267948966===t?.551915024494:-1.5707963267948966===t?-.551915024494:1.3333333333333333*Math.tan(t/4),r=Math.cos(e),s=Math.sin(e),a=Math.cos(e+t),o=Math.sin(e+t);return[{x:r-s*i,y:s+r*i},{x:a+o*i,y:o-a*i},{x:a,y:o}]}(C,T)),C+=T;return S.map(e=>{let{x:t,y:i}=bm(e[0],s,a,P,D),{x:r,y:o}=bm(e[1],s,a,P,D),{x:l,y:h}=bm(e[2],s,a,P,D);return{x1:t,y1:i,x2:r,y2:o,x:l,y:h}})}({px:o.x,py:o.y,cx:h.x,cy:h.y,rx:t,ry:i,largeArcFlag:r>Math.PI,sweepFlag:!0});return s>30||s%c.length==0?function(e,t,i,r,s,a,o,l){let h=Math.round(s/r.length);e.addPoint(bq(t,i));for(let t=0,i=r.length;t<i;t++){let i=r[t],s=e.points[t],a=bq(i.x,i.y);s.controls[1].position.set(i.x1,i.y1),a.controls[0].position.set(i.x2,i.y2),e.addPoint(a)}return l>0?bY(e,a,o,l):e.addPoint(bq(0,0)),h}(e,o.x,o.y,c,s,t,i,a):bW(e,r,s,t,i,a)}(d,.5*i,.5*r,a*Math.PI/180,s,o);
3140return d.isClosed=!0,d.update(),0===a?(t=new rz).setAttribute("position",new rT([],3)):t=bj.create({shape:d,parameters:{subdivisions:u,depth:l,extrudeBevelSize:h,extrudeBevelSegments:c}}),Object.assign(t,{userData:{...e,type:"EllipseGeometry"}})}};function bW(e,t,i,r,s,a){let o=-t/i;for(let t=0;t<=i;t++){let i=o*t,a=Math.sin(i)*r,l=Math.cos(i)*s;e.addPoint(bq(a,l))}return t<bG?a>0?bY(e,r,s,a):e.addPoint(bq(0,0)):(e.removePoint(e.points[e.points.length-1]),a>0&&bQ(e,r,s,a)),1}function bq(e,t){return new x$(tY.generateUUID(),new tQ(e,t))}function bX(e,t,i,r,s,a){let o=bq(e,t);return o.controls[0].position.set(i,r),o.controls[1].position.set(s,a),o}function bY(e,t,i,r){bK(e,t,i,r).forEach(t=>e.addPoint(t))}function bQ(e,t,i,r){let s=bK(e,t,i,r),a=new bp;s.forEach(e=>a.addPoint(e)),a.isClosed=!0,e.shapeHoles.push(a)}function bK(e,t,i,r){let s=r*t/100,a=Math.abs(i)/Math.abs(t)*s,o=new tQ(s/t,a/i),l=e.points.map(e=>{let t=e.clone();return t.uuid=tY.generateUUID(),t}).reverse();return l.forEach(e=>{e.position.multiply(o);let t=e.controls[0].position.clone().multiply(o),i=e.controls[1].position.clone().multiply(o);e.controls[0].position.copy(i),e.controls[1].position.copy(t)}),l}var bZ=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,revolutions:2,segments:40,pathRadius:10,pathType:0,pathSegments:30,cornerRadius:30,cornerSegments:4},e.parameters),r=Math.abs(i.width),s=Math.abs(i.height??r),a=Math.abs(i.depth??r),o=Math.abs(Math.min(r,a))/2;return{parameters:Object.assign(i,{width:r,height:s,depth:a,radius:o,segments:Math.round(i.segments),pathSegments:Math.round(i.pathSegments),cornerSegments:Math.round(i.cornerSegments)})}}static build(e){let{width:t,height:i,depth:r,radius:s,revolutions:a,segments:o,pathRadius:l,pathType:h,pathSegments:c,cornerRadius:d,cornerSegments:u}=e.parameters;return Object.assign(new b$(!1,t,i,r,s,a,o,l,h,c,d,u),{userData:{...e,type:"HelixGeometry"}})}},bJ=new rC([0,0,0],1),b$=class extends rz{constructor(e=!0,t=1,i=1,r=1,s=1,a=1,o=1,l=1,h=1,c=1,d=1,u=1){if(super(),0===a)return;let p=e&&1===a;p&&(u=0),d>100&&(d=100),0===d&&(u=0);let f=()=>new iv,m=new iv,g=f(),v=f(),y=f(),x,b,w,S,_,A,M,E,C=f(),T=f(),P=f(),D=f(),I=f(),O=f(),R=f(),L=f(),B=i-2*l+.001,z=B/a,F=Math.ceil(o*a),N=F+1,k=B/F,U=-B/2,V=c+1,j=2*Math.PI/c,G=Math.PI/2/u,H=Math.min((1-d/100)*l,l-.01),W=l-H,q=0,X=2*u+2,Y=V*X/2,Q=Y+V*N,K=Math.max(0,V*(N+X)),[Z,J,$]=[3,3,2].map(e=>Array(K*e).fill(0)),ee=[],et=s-l;function ei(t,i){let r=Math.PI/2;E=2*Math.PI*((A=i*k)%z)/z+r,A+=U,M=Math.sin(E)*et,_=Math.cos(E)*et,e?t.set(_,M,A):t.set(_,A,M)}ei(m,-.0000000001),ei(g,0),C.copy(m),ei(m,1);let er=m.distanceTo(g),es=p?0:W+H,ea=er*F+2*es,en=ea-es;for(let t=0;t<=F;t++){ei(v,t),L.subVectors(v,C).normalize(),C.copy(v),O.copy(v).setComponent(+e+1,0).normalize(),R.crossVectors(L,O).normalize();let i=0===t,r=t===F,s=i?3*Math.PI/2:G,a=i?H:en,o=i?V:Q,h=i?0:K-V,d=L.clone().multiplyScalar(i?-W:W).add(v),f=L.clone().multiplyScalar(i?-1:1).normalize();for(let e=0;e<V;e++){let x=e*j;if(T.addVectors(m.copy(O).multiplyScalar(l*Math.cos(x)),g.copy(R).multiplyScalar(l*Math.sin(x))),P.copy(T).normalize(),i||r){p||(q=h+e,[0,1,2].forEach(e=>{Z[3*q+e]=d.getComponent(e),J[3*q+e]=f.getComponent(e)}),$[2*q]=+r,$[2*q+1]=e/c),g.copy(P).multiplyScalar(H),y.addVectors(v,g);for(let t=0;t<u;t++){let r=t*G+s;D.addVectors(m.copy(L).multiplyScalar(W*Math.sin(r)),g.copy(P).multiplyScalar(W*Math.cos(r))),I.copy(D).normalize(),g.addVectors(y,D),D.normalize(),q=o+t*V+e,[0,1,2].forEach(e=>{Z[3*q+e]=g.getComponent(e),J[3*q+e]=I.getComponent(e)});let l=+i+Math.sin(r);$[2*q]=(a+W*l)/ea,$[2*q+1]=e/c}}g.addVectors(v,T),q=Y+t*V+e,[0,1,2].forEach(e=>{Z[3*q+e]=g.getComponent(e),J[3*q+e]=P.getComponent(e)}),$[2*q]=(es+t*er)/ea,$[2*q+1]=e/c}}let eo=N+2*u+2,[el,eh]=[+p,eo-1];for(let e=el;e<=eh-1;e++){let t=p&&e===eh-1;for(let i=0;i<V-1;i++)b=(x=e*V+i)+1,w=(t?i:x)+V,S=(t?i+1:b)+V,0===e?ee.push(b,S,w):e===eo-2?ee.push(x,b,w):ee.push(x,b,w,b,S,w)}this.setIndex(ee),this.setAttribute("position",new rT(Z,3)),this.setAttribute("normal",new rT(J,3)),this.setAttribute("uv",new rT($,2))}getClosedTorusIndicesForBooleanOrSubdiv(){let e=this.userData.parameters,t=Math.ceil(e.tubularSegments),i=e.radialSegments+1,r=Array.from(this.getIndex().array),s,a,o,l,h=6*(t-1)*e.radialSegments,c=t==t;for(let d=0;d<e.radialSegments;d++)a=(s=t*i+d)+1,o=(c?d:s)+i,l=(c?d+1:a)+i,r[h++]=s,r[h++]=a,r[h++]=o,r[h++]=a,r[h++]=l,r[h++]=o;return r.length=h,bJ.array=r,bJ.count=r.length,bJ}},b0=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,detail:0,corner:0,cornerSides:4},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}
3140static build(e){let{width:t,height:i,depth:r,detail:s,corner:a,cornerSides:o}=e.parameters,l=0===s&&0!==a?new b1(.5*t,a,o):new oI(.5*t,s);return l.scale(1,i/t,r/t),Object.assign(l,{userData:{...e,type:"IcosahedronGeometry"}})}},b1=class extends xY{constructor(e=1,t=.2,i=4){let r=(1+Math.sqrt(5))/2,s="IcosahedronGeometry";super([-1,r,0,1,r,0,-1,-r,0,1,-r,0,0,-1,r,0,1,r,0,-1,-r,0,1,-r,r,0,-1,r,0,1,-r,0,-1,-r,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],s,e,t,i),this.type=s}static fromJSON(e){return new b1(e.radius,e.corner,e.cornerSides)}},b2=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){(e.parameters?.points??[]).forEach(e=>{Array.isArray(e)&&(e.x=e[0],e.y=e[1])});let i=Object.assign({},t?.parameters??{width:100,segments:64,verticalSegments:64,points:[{x:0,y:-50,id:0},{x:50,y:-50,id:1},{x:50,y:50,id:2},{x:0,y:50,id:3}]},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{points:t,segments:i,verticalSegments:r}=e.parameters,s=new od;s.moveTo(t[0].x,t[0].y),s.bezierCurveTo(t[1].x,t[1].y,t[2].x,t[2].y,t[3].x,t[3].y);let a=new on(s.extractPoints(r).shape,i);return a.rotateZ(Math.PI),Object.assign(a,{userData:{...e,type:"LatheGeometry"}})}},b3=new iX,b4=new rl,b5=new iv,b6=class extends tL{constructor(){super(),this.uuid=tY.generateUUID(),this.name="",this.type="Geometry",this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.elementsNeedUpdate=!1,this.verticesNeedUpdate=!1,this.uvsNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.lineDistancesNeedUpdate=!1,this.groupsNeedUpdate=!1}applyMatrix4(e){let t=new tK().getNormalMatrix(e);for(let t=0,i=this.vertices.length;t<i;t++)this.vertices[t].applyMatrix4(e);for(let e=0,i=this.faces.length;e<i;e++){let i=this.faces[e];i.normal.applyMatrix3(t).normalize();for(let e=0,r=i.vertexNormals.length;e<r;e++)i.vertexNormals[e].applyMatrix3(t).normalize()}return null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this.verticesNeedUpdate=!0,this.normalsNeedUpdate=!0,this}rotateX(e){return b3.makeRotationX(e),this.applyMatrix4(b3),this}rotateY(e){return b3.makeRotationY(e),this.applyMatrix4(b3),this}rotateZ(e){return b3.makeRotationZ(e),this.applyMatrix4(b3),this}translate(e,t,i){return b3.makeTranslation(e,t,i),this.applyMatrix4(b3),this}scale(e,t,i){return b3.makeScale(e,t,i),this.applyMatrix4(b3),this}lookAt(e){return b4.lookAt(e),b4.updateMatrix(),this.applyMatrix4(b4.matrix),this}fromBufferGeometry(e){let t=this,i=null!==e.index?e.index:void 0,r=e.attributes;if(void 0===r.position)return console.error("THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion."),this;let s=r.position,a=r.normal,o=r.color,l=r.uv,h=r.uv2;void 0!==h&&(this.faceVertexUvs[1]=[]);for(let e=0;e<s.count;e++)t.vertices.push(new iv().fromBufferAttribute(s,e)),void 0!==o&&t.colors.push(new ii().fromBufferAttribute(o,e));function c(e,i,r,s){let c=void 0===o?[]:[t.colors[e].clone(),t.colors[i].clone(),t.colors[r].clone()],d=void 0===a?[]:[new iv().fromBufferAttribute(a,e),new iv().fromBufferAttribute(a,i),new iv().fromBufferAttribute(a,r)],u=new b9(e,i,r,d,c,s);t.faces.push(u),void 0!==l&&t.faceVertexUvs[0].push([new tQ().fromBufferAttribute(l,e),new tQ().fromBufferAttribute(l,i),new tQ().fromBufferAttribute(l,r)]),void 0!==h&&t.faceVertexUvs[1].push([new tQ().fromBufferAttribute(h,e),new tQ().fromBufferAttribute(h,i),new tQ().fromBufferAttribute(h,r)])}let d=e.groups;if(d.length>0)for(let e=0;e<d.length;e++){let t=d[e],r=t.start,s=t.count;for(let e=r,a=r+s;e<a;e+=3)void 0!==i?c(i.getX(e),i.getX(e+1),i.getX(e+2),t.materialIndex):c(e,e+1,e+2,t.materialIndex)}else if(void 0!==i)for(let e=0;e<i.count;e+=3)c(i.getX(e),i.getX(e+1),i.getX(e+2));else for(let e=0;e<s.count;e+=3)c(e,e+1,e+2);
3140return this.computeFaceNormals(),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone()),null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(b5).negate(),this.translate(b5.x,b5.y,b5.z),this}normalize(){this.computeBoundingSphere();let e=this.boundingSphere.center,t=this.boundingSphere.radius,i=0===t?1:1/t,r=new iX;return r.set(i,0,0,-i*e.x,0,i,0,-i*e.y,0,0,i,-i*e.z,0,0,0,1),this.applyMatrix4(r),this}computeFaceNormals(){let e=new iv,t=new iv;for(let i=0,r=this.faces.length;i<r;i++){let r=this.faces[i],s=this.vertices[r.a],a=this.vertices[r.b],o=this.vertices[r.c];e.subVectors(o,a),t.subVectors(s,a),e.cross(t),e.normalize(),r.normal.copy(e)}}computeVertexNormals(e=!0){let t=Array(this.vertices.length);for(let e=0,i=this.vertices.length;e<i;e++)t[e]=new iv;if(e){let e=new iv,i=new iv;for(let r=0,s=this.faces.length;r<s;r++){let s=this.faces[r],a=this.vertices[s.a],o=this.vertices[s.b],l=this.vertices[s.c];e.subVectors(l,o),i.subVectors(a,o),e.cross(i),t[s.a].add(e),t[s.b].add(e),t[s.c].add(e)}}else{this.computeFaceNormals();for(let e=0,i=this.faces.length;e<i;e++){let i=this.faces[e];t[i.a].add(i.normal),t[i.b].add(i.normal),t[i.c].add(i.normal)}}for(let e=0,i=this.vertices.length;e<i;e++)t[e].normalize();for(let e=0,i=this.faces.length;e<i;e++){let i=this.faces[e],r=i.vertexNormals;3===r.length?(r[0].copy(t[i.a]),r[1].copy(t[i.b]),r[2].copy(t[i.c])):(r[0]=t[i.a].clone(),r[1]=t[i.b].clone(),r[2]=t[i.c].clone())}this.faces.length>0&&(this.normalsNeedUpdate=!0)}computeFlatVertexNormals(){this.computeFaceNormals();for(let e=0,t=this.faces.length;e<t;e++){let t=this.faces[e],i=t.vertexNormals;3===i.length?(i[0].copy(t.normal),i[1].copy(t.normal),i[2].copy(t.normal)):(i[0]=t.normal.clone(),i[1]=t.normal.clone(),i[2]=t.normal.clone())}this.faces.length>0&&(this.normalsNeedUpdate=!0)}computeMorphNormals(){for(let e=0,t=this.faces.length;e<t;e++){let t=this.faces[e];
3140t.__originalFaceNormal?t.__originalFaceNormal.copy(t.normal):t.__originalFaceNormal=t.normal.clone(),t.__originalVertexNormals||(t.__originalVertexNormals=[]);for(let e=0,i=t.vertexNormals.length;e<i;e++)t.__originalVertexNormals[e]?t.__originalVertexNormals[e].copy(t.vertexNormals[e]):t.__originalVertexNormals[e]=t.vertexNormals[e].clone()}let e=new b6;e.faces=this.faces;for(let t=0,i=this.morphTargets.length;t<i;t++){if(!this.morphNormals[t]){this.morphNormals[t]={},this.morphNormals[t].faceNormals=[],this.morphNormals[t].vertexNormals=[];let e=this.morphNormals[t].faceNormals,i=this.morphNormals[t].vertexNormals;for(let t=0,r=this.faces.length;t<r;t++){let t=new iv,r={a:new iv,b:new iv,c:new iv};e.push(t),i.push(r)}}let i=this.morphNormals[t];e.vertices=this.morphTargets[t].vertices,e.computeFaceNormals(),e.computeVertexNormals();for(let e=0,t=this.faces.length;e<t;e++){let t=this.faces[e],r=i.faceNormals[e],s=i.vertexNormals[e];r.copy(t.normal),s.a.copy(t.vertexNormals[0]),s.b.copy(t.vertexNormals[1]),s.c.copy(t.vertexNormals[2])}}for(let e=0,t=this.faces.length;e<t;e++){let t=this.faces[e];
3140t.normal=t.__originalFaceNormal,t.vertexNormals=t.__originalVertexNormals}}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new ib),this.boundingBox.setFromPoints(this.vertices)}computeBoundingSphere(){null===this.boundingSphere&&(this.boundingSphere=new iN),this.boundingSphere.setFromPoints(this.vertices)}merge(e,t,i=0){if(!(e&&e.isGeometry)){console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",e);return}let r,s=this.vertices.length,a=this.vertices,o=e.vertices,l=this.faces,h=e.faces,c=this.colors,d=e.colors;void 0!==t&&(r=new tK().getNormalMatrix(t));for(let e=0,i=o.length;e<i;e++){let i=o[e].clone();void 0!==t&&i.applyMatrix4(t),a.push(i)}for(let e=0,t=d.length;e<t;e++)c.push(d[e].clone());for(let e=0,t=h.length;e<t;e++){let t=h[e],a,o,c=t.vertexNormals,d=t.vertexColors,u=new b9(t.a+s,t.b+s,t.c+s);u.normal.copy(t.normal),void 0!==r&&u.normal.applyMatrix3(r).normalize();for(let e=0,t=c.length;e<t;e++)a=c[e].clone(),void 0!==r&&a.applyMatrix3(r).normalize(),u.vertexNormals.push(a);u.color.copy(t.color);for(let e=0,t=d.length;e<t;e++)o=d[e],u.vertexColors.push(o.clone());u.materialIndex=t.materialIndex+i,l.push(u)}for(let t=0,i=e.faceVertexUvs.length;t<i;t++){let i=e.faceVertexUvs[t];void 0===this.faceVertexUvs[t]&&(this.faceVertexUvs[t]=[]);for(let e=0,r=i.length;e<r;e++){let r=i[e],s=[];for(let e=0,t=r.length;e<t;e++)s.push(r[e].clone());this.faceVertexUvs[t].push(s)}}}mergeMesh(e){if(!(e&&e.isMesh)){console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.",e);return}e.matrixAutoUpdate&&e.updateMatrix(),this.merge(e.geometry,e.matrix)}mergeVertices(e=4){let t={},i=[],r=[],s=Math.pow(10,e);for(let e=0,a=this.vertices.length;e<a;e++){let a=this.vertices[e],o=Math.round(a.x*s)+"_"+Math.round(a.y*s)+"_"+Math.round(a.z*s);void 0===t[o]?(t[o]=e,i.push(this.vertices[e]),r[e]=i.length-1):r[e]=r[t[o]]}let a=[];for(let e=0,t=this.faces.length;e<t;e++){let t=this.faces[e];t.a=r[t.a],t.b=r[t.b],t.c=r[t.c];let i=[t.a,t.b,t.c];for(let t=0;t<3;t++)if(i[t]===i[(t+1)%3]){a.push(e);break}}for(let e=a.length-1;e>=0;e--){let t=a[e];this.faces.splice(t,1);for(let e=0,i=this.faceVertexUvs.length;e<i;e++)this.faceVertexUvs[e].splice(t,1)}let o=this.vertices.length-i.length;return this.vertices=i,o}setFromPoints(e){this.vertices=[];for(let t=0,i=e.length;t<i;t++){let i=e[t];this.vertices.push(new iv(i.x,i.y,i.z||0))}return this}sortFacesByMaterialIndex(){let e=this.faces,t=e.length;for(let i=0;i<t;i++)e[i]._id=i;e.sort(function(e,t){return e.materialIndex-t.materialIndex});let i=this.faceVertexUvs[0],r=this.faceVertexUvs[1],s,a;i&&i.length===t&&(s=[]),r&&r.length===t&&(a=[]);for(let o=0;o<t;o++){let t=e[o]._id;s&&s.push(i[t]),a&&a.push(r[t])}s&&(this.faceVertexUvs[0]=s),a&&(this.faceVertexUvs[1]=a)}toJSON(){let e={metadata:{version:4.5,type:"Geometry",generator:"Geometry.toJSON"}};if(e.uuid=this.uuid,e.type=this.type,""!==this.name&&(e.name=this.name),void 0!==this.parameters){let t=this.parameters;for(let i in t)void 0!==t[i]&&(e[i]=t[i]);return e}let t=[];for(let e=0;e<this.vertices.length;e++){let i=this.vertices[e];t.push(i.x,i.y,i.z)}let i=[],r=[],s={},a=[],o={},l=[],h={};for(let e=0;e<this.faces.length;e++){let t=this.faces[e],r=void 0!==this.faceVertexUvs[0][e],s=t.normal.length()>0,a=t.vertexNormals.length>0,o=1!==t.color.r||1!==t.color.g||1!==t.color.b,l=t.vertexColors.length>0,h=0;if(h=c(0,0,0),h=c(h,1,!0),h=c(h,2,!1),h=c(h,3,r),h=c(h,4,s),h=c(h,5,a),h=c(h,6,o),h=c(h,7,l),i.push(h),i.push(t.a,t.b,t.c),i.push(t.materialIndex),r){let t=this.faceVertexUvs[0][e];i.push(p(t[0]),p(t[1]),p(t[2]))}if(s&&i.push(d(t.normal)),a){let e=t.vertexNormals;i.push(d(e[0]),d(e[1]),d(e[2]))}if(o&&i.push(u(t.color)),l){let e=t.vertexColors;i.push(u(e[0]),u(e[1]),u(e[2]))}}function c(e,t,i){return i?e|1<<t:e&~(1<<t)}function d(e){let t=e.x.toString()+e.y.toString()+e.z.toString();return void 0!==s[t]||(s[t]=r.length/3,r.push(e.x,e.y,e.z)),s[t]}function u(e){let t=e.r.toString()+e.g.toString()+e.b.toString();return void 0!==o[t]||(o[t]=a.length,a.push(e.getHex())),o[t]}function p(e){let t=e.x.toString()+e.y.toString();return void 0!==h[t]||(h[t]=l.length/2,l.push(e.x,e.y)),h[t]}return e.data={},e.data.vertices=t,e.data.normals=r,a.length>0&&(e.data.colors=a),l.length>0&&(e.data.uvs=[l]),e.data.faces=i,e}clone(){return new b6().copy(this)}copy(e){this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.name=e.name;let t=e.vertices;for(let e=0,i=t.length;e<i;e++)this.vertices.push(t[e].clone());let i=e.colors;for(let e=0,t=i.length;e<t;e++)this.colors.push(i[e].clone());let r=e.faces;for(let e=0,t=r.length;e<t;e++)this.faces.push(r[e].clone());for(let t=0,i=e.faceVertexUvs.length;t<i;t++){let i=e.faceVertexUvs[t];void 0===this.faceVertexUvs[t]&&(this.faceVertexUvs[t]=[]);for(let e=0,r=i.length;e<r;e++){let r=i[e],s=[];for(let e=0,t=r.length;e<t;e++){let t=r[e];s.push(t.clone())}this.faceVertexUvs[t].push(s)}}let s=e.morphTargets;for(let e=0,t=s.length;e<t;e++){let t={};if(t.name=s[e].name,void 0!==s[e].vertices){t.vertices=[];for(let i=0,r=s[e].vertices.length;i<r;i++)t.vertices.push(s[e].vertices[i].clone())}if(void 0!==s[e].normals){t.normals=[];for(let i=0,r=s[e].normals.length;i<r;i++)t.normals.push(s[e].normals[i].clone())}this.morphTargets.push(t)}let a=e.morphNormals;for(let e=0,t=a.length;e<t;e++){let t={};if(void 0!==a[e].vertexNormals){t.vertexNormals=[];for(let i=0,r=a[e].vertexNormals.length;i<r;i++){let r=a[e].vertexNormals[i],s={};s.a=r.a.clone(),s.b=r.b.clone(),s.c=r.c.clone(),t.vertexNormals.push(s)}}if(void 0!==a[e].faceNormals){t.faceNormals=[];for(let i=0,r=a[e].faceNormals.length;i<r;i++)t.faceNormals.push(a[e].faceNormals[i].clone())}this.morphNormals.push(t)}let o=e.skinWeights;for(let e=0,t=o.length;e<t;e++)this.skinWeights.push(o[e].clone());let l=e.skinIndices;for(let e=0,t=l.length;e<t;e++)this.skinIndices.push(l[e].clone());let h=e.lineDistances;for(let e=0,t=h.length;e<t;e++)this.lineDistances.push(h[e]);let c=e.boundingBox;null!==c&&(this.boundingBox=c.clone());let d=e.boundingSphere;return null!==d&&(this.boundingSphere=d.clone()),this.elementsNeedUpdate=e.elementsNeedUpdate,this.verticesNeedUpdate=e.verticesNeedUpdate,this.uvsNeedUpdate=e.uvsNeedUpdate,this.normalsNeedUpdate=e.normalsNeedUpdate,this.colorsNeedUpdate=e.colorsNeedUpdate,this.lineDistancesNeedUpdate=e.lineDistancesNeedUpdate,this.groupsNeedUpdate=e.groupsNeedUpdate,this}toBufferGeometry(){let e=new b8().fromGeometry(this),t=new rz,i=new Float32Array(3*e.vertices.length);if(t.setAttribute("position",wi.call(new rM(i,3),e.vertices)),e.normals.length>0){let i=new Float32Array(3*e.normals.length);t.setAttribute("normal",wi.call(new rM(i,3),e.normals))}if(e.colors.length>0){let i=new Float32Array(3*e.colors.length);t.setAttribute("color",we.call(new rM(i,3),e.colors))}if(e.uvs.length>0){let i=new Float32Array(2*e.uvs.length);t.setAttribute("uv",wt.call(new rM(i,2),e.uvs))}if(e.uvs2.length>0){let i=new Float32Array(2*e.uvs2.length);t.setAttribute("uv2",wt.call(new rM(i,2),e.uvs2))}for(let i in t.groups=e.groups,e.morphTargets){let r=[],s=e.morphTargets[i];for(let e=0,t=s.length;e<t;e++){let t=s[e],i=new rT(3*t.data.length,3);i.name=t.name,r.push(wi.call(i,t.data))}t.morphAttributes[i]=r}if(e.skinIndices.length>0){let i=new rT(4*e.skinIndices.length,4);t.setAttribute("skinIndex",wr.call(i,e.skinIndices))}if(e.skinWeights.length>0){let i=new rT(4*e.skinWeights.length,4);t.setAttribute("skinWeight",wr.call(i,e.skinWeights))}
3140return null!==e.boundingSphere&&(t.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(t.boundingBox=e.boundingBox.clone()),t}computeTangents(){console.error("THREE.Geometry: .computeTangents() has been removed.")}computeLineDistances(){console.error("THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.")}applyMatrix(e){return console.warn("THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(e)}dispose(){this.dispatchEvent({type:"dispose"})}static createBufferGeometryFromObject(e){let t=new rz,i=e.geometry;if(e.isPoints||e.isLine){let e=new rT(3*i.vertices.length,3),r=new rT(3*i.colors.length,3);if(t.setAttribute("position",wi.call(e,i.vertices)),t.setAttribute("color",we.call(r,i.colors)),i.lineDistances&&i.lineDistances.length===i.vertices.length){let e=new rT(i.lineDistances.length,1);t.setAttribute("lineDistance",b7.call(e,i.lineDistances))}null!==i.boundingSphere&&(t.boundingSphere=i.boundingSphere.clone()),null!==i.boundingBox&&(t.boundingBox=i.boundingBox.clone())}else e.isMesh&&(t=i.toBufferGeometry());return t}};b6.prototype.isGeometry=!0;var b8=class{constructor(){this.vertices=[],this.normals=[],this.colors=[],this.uvs=[],this.uvs2=[],this.groups=[],this.morphTargets={},this.skinWeights=[],this.skinIndices=[],this.boundingBox=null,this.boundingSphere=null,this.verticesNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.uvsNeedUpdate=!1,this.groupsNeedUpdate=!1}computeGroups(e){let t=[],i,r,s,a=e.faces;for(r=0;r<a.length;r++){let e=a[r];e.materialIndex!==s&&(s=e.materialIndex,void 0!==i&&(i.count=3*r-i.start,t.push(i)),i={start:3*r,materialIndex:s})}void 0!==i&&(i.count=3*r-i.start,t.push(i)),this.groups=t}fromGeometry(e){let t=e.faces,i=e.vertices,r=e.faceVertexUvs,s=r[0]&&r[0].length>0,a=r[1]&&r[1].length>0,o=e.morphTargets,l=o.length,h;if(l>0){h=[];for(let e=0;e<l;e++)h[e]={name:o[e].name,data:[]};this.morphTargets.position=h}let c=e.morphNormals,d=c.length,u;if(d>0){u=[];for(let e=0;e<d;e++)u[e]={name:c[e].name,data:[]};this.morphTargets.normal=u}let p=e.skinIndices,f=e.skinWeights,m=p.length===i.length,g=f.length===i.length;i.length>0&&0===t.length&&console.error("THREE.DirectGeometry: Faceless geometries are not supported.");for(let e=0;e<t.length;e++){let v=t[e];this.vertices.push(i[v.a],i[v.b],i[v.c]);let y=v.vertexNormals;if(3===y.length)this.normals.push(y[0],y[1],y[2]);else{let e=v.normal;this.normals.push(e,e,e)}let x=v.vertexColors;if(3===x.length)this.colors.push(x[0],x[1],x[2]);else{let e=v.color;this.colors.push(e,e,e)}if(!0===s){let t=r[0][e];void 0!==t?this.uvs.push(t[0],t[1],t[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ",e),this.uvs.push(new tQ,new tQ,new tQ))}if(!0===a){let t=r[1][e];void 0!==t?this.uvs2.push(t[0],t[1],t[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ",e),this.uvs2.push(new tQ,new tQ,new tQ))}for(let e=0;e<l;e++){let t=o[e].vertices;h[e].data.push(t[v.a],t[v.b],t[v.c])}for(let t=0;t<d;t++){let i=c[t].vertexNormals[e];u[t].data.push(i.a,i.b,i.c)}m&&this.skinIndices.push(p[v.a],p[v.b],p[v.c]),g&&this.skinWeights.push(f[v.a],f[v.b],f[v.c])}return this.computeGroups(e),this.verticesNeedUpdate=e.verticesNeedUpdate,this.normalsNeedUpdate=e.normalsNeedUpdate,this.colorsNeedUpdate=e.colorsNeedUpdate,this.uvsNeedUpdate=e.uvsNeedUpdate,this.groupsNeedUpdate=e.groupsNeedUpdate,null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone()),this}},b9=class{constructor(e,t,i,r,s,a=0){this.a=e,this.b=t,this.c=i,this.normal=r&&r.isVector3?r:new iv,this.vertexNormals=Array.isArray(r)?r:[],this.color=s&&s.isColor?s:new ii,this.vertexColors=Array.isArray(s)?s:[],this.materialIndex=a}clone(){return new this.constructor().copy(this)}copy(e){this.a=e.a,this.b=e.b,this.c=e.c,this.normal.copy(e.normal),this.color.copy(e.color),this.materialIndex=e.materialIndex;for(let t=0,i=e.vertexNormals.length;t<i;t++)this.vertexNormals[t]=e.vertexNormals[t].clone();for(let t=0,i=e.vertexColors.length;t<i;t++)this.vertexColors[t]=e.vertexColors[t].clone();return this}};function b7(e){return this.array.set(e),this}function we(e){let t=this.array,i=0;for(let r=0,s=e.length;r<s;r++){let s=e[r];void 0===s&&(console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined",r),s=new ii),t[i++]=s.r,t[i++]=s.g,t[i++]=s.b}return this}function wt(e){let t=this.array,i=0;for(let r=0,s=e.length;r<s;r++){let s=e[r];void 0===s&&(console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined",r),s=new tQ),t[i++]=s.x,t[i++]=s.y}return this}function wi(e){let t=this.array,i=0;for(let r=0,s=e.length;r<s;r++){let s=e[r];void 0===s&&(console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined",r),s=new iv),t[i++]=s.x,t[i++]=s.y,t[i++]=s.z}return this}function wr(e){let t=this.array,i=0;for(let r=0,s=e.length;r<s;r++){let s=e[r];void 0===s&&(console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined",r),s=new ic),t[i++]=s.x,t[i++]=s.y,t[i++]=s.z,t[i++]=s.w}return this}var ws=["a","b","c"];function wa(e,t,i){let r=Math.min(e,t),s=Math.max(e,t);return i.get(r+"_"+s)}function wn(e,t,i,r,s,a){let o=Math.min(e,t),l=Math.max(e,t),h=o+"_"+l,c;r.has(h)?c=r.get(h):(c={a:i[o],b:i[l],newEdge:null,faces:[]},r.set(h,c)),c.faces.push(s),a[e].edges.push(c),a[t].edges.push(c)}function wo(e,t,i,r,s){e.push(new b9(t,i,r,void 0,void 0,s))}function wl(e,t){return Math.abs(t-e)/2+Math.min(e,t)}function wh(e,t,i,r){e.push([t.clone(),i.clone(),r.clone()])}var wc=class{constructor(e=1){this.subdivisions=e}modify(e){(e=e instanceof rz?new b6().fromBufferGeometry(e):e.clone()).mergeVertices();let t=this.subdivisions;for(;t-- >0;)this._smooth(e);return e.computeFaceNormals(),e.computeVertexNormals(),e}_smooth(e){let t=new iv,i,r,s,a,o,l=e.vertices,h=e.faces,c=e.faceVertexUvs[0],d=void 0!==c&&c.length>0,u=[],p=new Map;!function(e,t,i,r){let s,a,o;for(s=0,a=e.length;s<a;s++)i[s]={edges:[]};for(s=0,a=t.length;s<a;s++)wn((o=t[s]).a,o.b,e,r,o,i),wn(o.b,o.c,e,r,o,i),wn(o.c,o.a,e,r,o,i)}(l,h,u,p);let f=[],m,g,v,y,x,b,w;for(let e of Array.from(p.keys())){for(g=p.get(e),v=new iv,x=3/8,b=1/8,2!=(w=g.faces.length)&&(x=.5,b=0),v.addVectors(g.a,g.b).multiplyScalar(x),t.set(0,0,0),a=0;a<w;a++){for(y=g.faces[a],o=0;o<3&&!((m=l[function(e,t){switch(t){case"c":return e.c;case"b":return e.b;default:return e.a}}
3140(y,ws[o])])!==g.a&&m!==g.b);o++);m&&t.add(m)}t.multiplyScalar(b),v.add(t),g.newEdge=f.length,f.push(v)}let S,_,A,M,E,C,T,P=[];for(r=0,s=l.length;r<s;r++){for(C=l[r],3==(i=(E=u[r].edges).length)?S=3/16:i>3&&(S=3/(8*i)),_=1-i*Number(S),A=S,i<=2&&2==i&&(_=3/4,A=1/8),T=C.clone().multiplyScalar(_),t.set(0,0,0),a=0;a<i;a++)m=(M=E[a]).a!==C?M.a:M.b,t.add(m);t.multiplyScalar(Number(A)),T.add(t),P.push(T)}let D=P.concat(f),I=P.length,O,R,L,B=[],z=[],F,N,k,U,V=new tQ,j=new tQ,G=new tQ;for(r=0,s=h.length;r<s;r++)wo(B,O=Number(wa((y=h[r]).a,y.b,p).newEdge)+I,R=Number(wa(y.b,y.c,p).newEdge)+I,L=Number(wa(y.c,y.a,p).newEdge)+I,y.materialIndex),wo(B,y.a,O,L,y.materialIndex),wo(B,y.b,R,O,y.materialIndex),wo(B,y.c,L,R,y.materialIndex),d&&(N=(F=c[r])[0],k=F[1],U=F[2],V.set(wl(N.x,k.x),wl(N.y,k.y)),j.set(wl(k.x,U.x),wl(k.y,U.y)),G.set(wl(N.x,U.x),wl(N.y,U.y)),wh(z,V,j,G),wh(z,N,V,G),wh(z,k,j,V),wh(z,U,G,j));e.vertices=D,e.faces=B,d&&(e.faceVertexUvs[0]=z)}},wd=new iv,wu=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=e.geometry??t?.geometry??new rz().copy(new rJ(100,100,100)),r;void 0===t?(i.computeBoundingBox(),i.boundingBox.getSize(wd),r={width:wd.x,height:wd.y,depth:wd.z,subdivisions:0}):r=t.parameters;let s={...r,...e.parameters};return{parameters:{width:Math.abs(s.width),height:Math.abs(s.height),depth:Math.abs(s.depth),subdivisions:Math.abs(s.subdivisions)},geometry:i}}static build(e){let{width:t,height:i,depth:r,subdivisions:s}=e.parameters,a=e.geometry??new rz().copy(new rJ(100,100,100)),o=a.userData.parameters;void 0===o?(a.computeBoundingBox(),a.boundingBox.getSize(wd)):wd.set(o.width,o.height,o.depth),(t!==wd.x||i!==wd.y||r!==wd.z)&&a.scale(0===wd.x?1:t/wd.x,0===wd.y?1:i/wd.y,0===wd.z?1:r/wd.z);let l=a.originalGeometry;try{s>0?(void 0===l||o?.subdivisions!==s)&&(void 0===l&&(l=a),a=new wc(s).modify(l).toBufferGeometry()):(void 0!==l&&(a=l),l=void 0,void 0===a.getAttribute("normal")&&a.computeVertexNormals())}catch{void 0!==l&&(a=l),l=void 0,void 0===a.getAttribute("normal")&&a.computeVertexNormals()}return void 0!==l&&Object.assign(a,{originalGeometry:l}),delete e.geometry,Object.assign(a,{userData:{...e,type:"NonParametricGeometry"}})}static loadFromUrl(e,t,i){new lm(i).load(e,e=>{let i=this.normalizeInputs({geometry:e});e.boundingBox.getSize(wd);let r=100/wd.x;Object.assign(i.parameters,{width:100,height:wd.y*r,depth:wd.z*r}),t(this.build(i))})}},wp=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,spikes:5,cornerRadius:0,extrudeBevelSize:0,extrudeBevelSegments:3},e.parameters);return{shape:e.shape&&e.shape instanceof bp?e.shape:new bp,parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??0)})}}static build(e){let{width:t,height:i,spikes:r,cornerRadius:s,depth:a,extrudeBevelSize:o,extrudeBevelSegments:l}=e.parameters,h=e.shape,c=.5*t,d=.5*i,u=2*Math.PI/r;for(let e=0;e<r;e++){let t=u*e,i=0+Math.sin(t)*c,r=0+Math.cos(t)*d;h.addPoint(h.createPoint(i,r))}h.isClosed=!0;for(let e=0,t=h.points.length;e<t;e++)h.points[e].roundness=s;return h.roundness=s,h.update(),Object.assign(bj.create({shape:h,parameters:{roundness:s,depth:a,extrudeBevelSize:o,extrudeBevelSegments:l}}),{userData:{...e,type:"PolygonGeometry"}})}},wf=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,radialSegments:4,heightSegments:1,cornerRadius:0,cornerSegments:8,openEnded:!1},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t,height:i,depth:r,radialSegments:s,heightSegments:a,openEnded:o,cornerRadius:l,cornerSegments:h}=e.parameters,c=new wv(.5*t,i,s,a,o,l,h);return c.scale(1,1,r/t),Object.assign(c,{userData:{...e,type:"PyramidGeometry"}})}};function wm(e,t,i){i.x=e.x*t.x,i.y=e.y,i.z=e.x*t.y}function wg(e,t,i,r,s,a){let o=t.clone().sub(e),l=i.clone().sub(e),h=o.angleTo(l);
vendor: 1,449 bytes, line 3140
3140if(o.normalize(),l.normalize(),r===s){let t=o.add(l).normalize();a.copy(e).addScaledVector(t,r/Math.sin(h/2))}else{let t=o.angleTo(l);a.copy(e),a.addScaledVector(o,s/Math.sin(t)),a.addScaledVector(l,r/Math.sin(t))}}var wv=class extends rz{constructor(e=.5,t=1,i=4,r=1,s=!1,a=0,o=4){let l;super(),i=Math.floor(Math.max(3,i)),r=Math.floor(r),o=Math.floor(o);let h=[],c=[],d=[],u=[],p=0,f=t/2,m=Math.PI/i,g=e*Math.cos(Math.PI/i),v=2*Math.PI/i,y=Math.PI-(i-2)*Math.PI/i,x=new iv(0,-f,0),b=new iv(0,f,0),w=new tQ(e,-f),S=new tQ(g,-f),_=new tQ(0,b.y).sub(S),A=new tQ(0,b.y).sub(w),M=new tQ(_.y,-_.x).normalize(),E=new tQ(A.y,-A.x).normalize(),C=e*Math.cos(Math.PI/i)*Math.tan((Math.PI-_.angle())/2)-1e-8;a=Math.min(a,C);{let e=new iv(M.x,M.y,0),t=new iv(Math.cos(v)*e.x,e.y,Math.sin(v)*e.x);l=e.angleTo(t)}let T=a/Math.tan((Math.PI-_.angle())/2),P=a/Math.tan((Math.PI-l)/2),D=new iv;if(!s){c.push(x.x,x.y,x.z),d.push(0,-1,0),u.push(0,0);let e=p++,t=[],r=w.clone(),s=T/Math.cos(Math.PI/i);r.x-=s;for(let e=0;e<i;e++){let s=e/i*Math.PI*2+m;wm(r,new tQ(Math.sin(s),Math.cos(s)),D),c.push(D.x,D.y,D.z),d.push(0,-1,0),u.push(0,0),t.push(p++)}for(let i=0;i<t.length;i++)h.push(t[i],e,t[(i+1)%t.length])}let I=[];{let e=new iv,t=new iv,r=new iv,s=new iv,f=new iv,g=new iv;for(let v=0;v<i;v++){let S=v/i*Math.PI*2+m,C=(v+.5)/i*Math.PI*2+m,D=(v+1)/i*Math.PI*2+m,R=new tQ(Math.sin(S),Math.cos(S)),L=new tQ(Math.sin(C),Math.cos(C)),B=new tQ(Math.sin(D),Math.cos(D));
vendor: 6,031 bytes, line 3140
3140wm(w,R,t),wm(w,B,r),wm(M,L,e),wg(b,t,r,P,P,s),c.push(s.x,s.y,s.z),wg(t,b,r,P,T,f),c.push(f.x,f.y,f.z),wg(r,t,b,T,P,g),c.push(g.x,g.y,g.z),d.push(e.x,e.y,e.z),d.push(e.x,e.y,e.z),d.push(e.x,e.y,e.z),u.push(0,0),u.push(0,0),u.push(0,0);let z=p++,F=p++,N=p++;if(h.push(z,F,N),a>0){let m,v;{let e=t.clone().add(r).multiplyScalar(.5),i=b.clone().sub(e).normalize(),s=x.clone().sub(e).normalize().add(i).normalize().multiplyScalar(-1);O(e,g.clone().sub(f),s,_.angle())}{let e=new iv;wm(E,B,e);let t=g.clone().add(s).multiplyScalar(.5);t=function(e,t,i){let r=e.clone().sub(t),s=i.clone().sub(t);return r.projectOnVector(s),r.add(t)}(t,r,b);let i=g.clone().sub(s);[m,v]=O(t,i,e,l,s.y)}{let e=m,t=e.clone().setY(0).normalize(),i=new iv(0,-1,0),r=t.clone().cross(i);!function(e,t,i,r){let s=Math.PI/2,l=A.angle()-s,f=[],m=new iv,g=new iv;for(let h=0;h<=o;h++){let v=[],x=h/o;for(let o=0;o<=h;o++){let f=((h?o/h:0)-.5)*y,b=Math.cos(f),w=Math.sin(f),S=(s+Math.atan(Math.tan(l)*b))*x,_=Math.cos(S),A=Math.sin(S);m.set(0,0,0),m.addScaledVector(t,A*b),m.addScaledVector(i,_),m.addScaledVector(r,A*w),g.copy(e).addScaledVector(m,a),c.push(g.x,g.y,g.z),d.push(m.x,m.y,m.z),u.push(0,0),v.push(p++)}f.push(v)}let v=f.length-1;for(let e=0;e<v;e++){let t=f[e],i=f[e+1],r=t.length-1;h.push(t[0],i[1],i[0]);for(let e=1;e<=r;e++)h.push(t[e-1],t[e],i[e]),h.push(t[e],i[e+1],i[e])}}(e,t,i,r)}I.concat(v);{let t=_.angle(),r=Math.PI-t,s=b.clone();s.y-=a/Math.sin(t-Math.PI/2);let l=new iv,f=[];for(let t=0;t<o;t++){let h=[],m=Math.PI/2-r*t/o,g=Math.cos(m),v=Math.sin(m),y=C;for(let r=0;r<=t;r++){let r=Math.cos(y),o=Math.sin(y);e.x=g*o,e.y=v,e.z=g*r,l.copy(s).addScaledVector(e,a),c.push(l.x,l.y,l.z),d.push(e.x,e.y,e.z),u.push(0,0),h.push(p++),y+=2*Math.PI/t/i}f.push(h)}v.reverse(),f.push(v);let m=f.length-1;for(let e=0;e<m;e++){let t=f[e],i=f[e+1],r=t.length-1;h.push(i[1],t[0],i[0]);for(let e=1;e<=r;e++)h.push(t[e],t[e-1],i[e]),h.push(i[e+1],t[e],i[e])}}}}}function O(e,t,i,r,s){let l=-r/2,f=(Math.PI-r)/2,m=t.clone().normalize().cross(i);e.addScaledVector(i,-a/Math.sin(f));let g=new iv,v=new iv,y=p,x=[];for(let h=0;h<=o;h++){let f=l+h/o*r;v.set(0,0,0),v.addScaledVector(m,Math.sin(f)),v.addScaledVector(i,Math.cos(f));for(let i=0;i<=1;i++){let r=i/1-.5;if(g.copy(e),g.addScaledVector(t,r),g.addScaledVector(v,a),null!=s){let e=Math.max(0,g.y-s);g.addScaledVector(t,-e/t.y)}c.push(g.x,g.y,g.z),d.push(v.x,v.y,v.z),u.push(0,0),0===i&&x.push(p),p++}}for(let e=0;e<o;e++)for(let t=0;t<1;t++){let i=y+t+2*e,r=i+2,s=r+1,a=i+1;h.push(i,r,a),h.push(r,s,a)}return[e.clone().addScaledVector(t,.5),x]}this.setIndex(h),this.setAttribute("position",new rT(c,3)),this.setAttribute("normal",new rT(d,3)),this.setAttribute("uv",new rT(u,2))}},wy=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,cornerRadius:[0,0,0,0],cornerType:1,extrudeBevelSize:0,extrudeBevelSegments:1},e.parameters),r=Object.assign(t?.ui??{enabledIndieCorners:!1},e.ui);return{shape:e.shape&&e.shape instanceof bp?e.shape:new bp,parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??0)}),ui:r}}static build(e){let t=e.shape,{width:i,height:r,cornerRadius:s,cornerType:a,depth:o,extrudeBevelSize:l,extrudeBevelSegments:h}=e.parameters,c={x:.5*i,y:.5*r},d={x:-c.x,y:-c.y},u={x:c.x,y:c.y};function p(e,t,s){return t>i&&s>r?Math.min(e*i/t,e*r/s):t>i?e*i/t:s>r?e*r/s:e}let f=[];f[0]=0===s[0]?0:p(s[0],s[0]+s[3],s[0]+s[1]),f[1]=0===s[1]?0:p(s[1],s[1]+s[2],s[1]+s[0]),f[2]=0===s[2]?0:p(s[2],s[2]+s[1],s[2]+s[3]),f[3]=0===s[3]?0:p(s[3],s[3]+s[0],s[3]+s[2]);let m=d.x,g=u.x,v=u.y,y=d.y;t.addPoint(t.createPoint(m,v)),t.addPoint(t.createPoint(g,v)),t.addPoint(t.createPoint(g,y)),t.addPoint(t.createPoint(m,y)),t.isClosed=!0;let x=!0;for(let e=0,i=t.points.length;e<i;e++)t.points[e].roundness=f[e],e>0&&f[e]!==f[e-1]&&(x=!1);return x&&(t.roundness=f[0]),t.useCubicForRoundedCorners=1!==a,t.update(),Object.assign(bj.create({shape:t,parameters:{depth:o,extrudeBevelSize:l,extrudeBevelSegments:h}}),{userData:{...e,type:"RectangleGeometry"}})}},wx=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,widthSegments:64,heightSegments:64,phiStart:0,phiLength:2*Math.PI,thetaStart:0,thetaLength:180},e.parameters);return i.thetaLength=tY.clamp(i.thetaLength,0,180),{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t=100,height:i=t,depth:r=t,widthSegments:s=64,heightSegments:a=64,phiStart:o,phiLength:l,thetaStart:h,thetaLength:c}=e.parameters,d;return 0===c?(d=new rz).setAttribute("position",new rT([],3)):d=new oO(.5*t,s,a,o,l,h,c*tY.DEG2RAD),d.scale(1,i/t,r/t),Object.assign(d,{userData:{...e,type:"SphereGeometry"}})}},wb=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,widthSegments:8,heightSegments:8},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:0})}}static build(e){let{width:t=100,height:i=t,widthSegments:r=8,heightSegments:s=8}=e.parameters,a=new sc(t,i,r,s);return a.scale(1,1,1),Object.assign(a,{userData:{...e,type:"PlaneGeometry"}})}},ww=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,angle:90,cornerRadius:24,cornerSegments:8},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t,height:i,depth:r,angle:s,cornerRadius:a,cornerSegments:o}=e.parameters;return Object.assign(new wS(t,i,r,s,a,o),{userData:{...e,type:"BackdropGeometry"}})}},wS=class extends rz{constructor(e=1,t=1,i=1,r=90,s=10,a=24){super(),this.type="BackdropGeometry";let o=[],l=[],h=[];
31400==s&&(a=1),a=Math.max(1,Math.floor(a)),s=Math.min(s,100),r=Math.PI/180*Math.min(179.999,r);let c=[],d=Math.PI/2,u=(e=0,t=0,i=0)=>new iv(e,t,i),p=u(),f=u(),[m,g,v]=[t/2,e/2,i/2],y=-g,x=+g,[b,w,S]=[u(y,-m,+v),u(y,-m,-v),u(y,+m,-v)],_=(e,t=!1)=>Math.sin(e-Math.PI/(1+ +t)),A=(e,t=!1)=>Math.cos(e-Math.PI/(1+ +t));S.y=Math.sin(r)*t-m;let M=Math.cos(r)*t-v,E=b.z-.001;r<=d?(S.z=Math.min(M,E),S.z==E&&(S.y-=(M-E)/Math.tan(d-r))):w.z=Math.min(w.z-M-v,b.z-.001),p.subVectors(b,w),f.subVectors(S,w);let C=Math.min(p.length(),f.length())*s/100,T=C*Math.tan(r/2),P=C/Math.cos(r/2),D=p.clone().normalize().add(f.normalize()).setLength(P).add(w);p.set(0,_(r,!0),A(r,!0)),c.push([S,p.clone()]);let I=(Math.PI-r)/a;for(let e=0;e<=a;e++){let t=d+r+e*I;p.set(0,Math.sin(t)*T,Math.cos(t)*T),p.add(D),f.set(0,_(t),A(t)),c.push([p.clone(),f.clone()])}c.push([b,u(0,1,0)]);let O=Math.sin(I/2)*T*2,R=c.length-1,L=c[0][0].distanceTo(c[1][0]),B=L+O*a+c[R-1][0].distanceTo(c[R][0]);c[0].push(1);for(let e=0;e<=a;e++)c[e+1].push(1-(L+e*O)/B);c[R].push(0);let[z,F,N]=c[0],k,U,V;for(let e=1;e<c.length;e++)[k,U,V]=c[e],o.push(y,z.y,z.z,y,k.y,k.z,x,z.y,z.z,x,z.y,z.z,y,k.y,k.z,x,k.y,k.z),l.push(0,F.y,F.z,0,U.y,U.z,0,F.y,F.z,0,F.y,F.z,0,U.y,U.z,0,U.y,U.z),h.push(0,N,0,V,1,N,1,N,0,V,1,V),[z,F,N]=[k,U,V];this.setAttribute("position",new rT(o,3)),this.setAttribute("normal",new rT(l,3)),this.setAttribute("uv",new rT(h,2))}},w_=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,innerRadiusPercent:38.19,spikes:5,cornerRadius:0,angle:360,extrudeBevelSize:0,extrudeBevelSegments:1},e.parameters);return{shape:e.shape&&e.shape instanceof bp?e.shape:new bp,parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??0)})}}static build(e){let{width:t,height:i,innerRadiusPercent:r,spikes:s,cornerRadius:a,angle:o,depth:l,extrudeBevelSize:h,extrudeBevelSegments:c}=e.parameters,d=e.shape,u=.5*t,p=.5*i,f=o*Math.PI/360/s,m=-(Math.PI/2*3),g=u*r/100,v=p*r/100;if(3===s&&50===r){f=2*Math.PI/s;for(let e=0;e<s;e++){let t=f*e,i=0+Math.sin(t)*u,r=0+Math.cos(t)*p;d.addPoint(d.createPoint(i,r))}}else for(let e=0;e<s;e++){let e=0+Math.cos(m)*u,t=0+Math.sin(m)*p;d.addPoint(d.createPoint(e,t)),m+=f,e=0+Math.cos(m)*g,t=0+Math.sin(m)*v,d.addPoint(d.createPoint(e,t)),m+=f}d.isClosed=!0;for(let e=0,t=d.points.length;e<t;e++)d.points[e].roundness=a;return d.roundness=a,d.update(),Object.assign(bj.create({shape:d,parameters:{roundness:a,depth:l,extrudeBevelSize:h,extrudeBevelSegments:c}}),{userData:{...e,type:"StarGeometry"}})}},wA=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??0)})}}static build(e){let{width:t,height:i}=e.parameters;return Object.assign(new sc(t,i),{userData:{...e,type:"TextFrameGeometry"}})}},wM=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,radialSegments:32,tubularSegments:64,arc:360,cornerRadius:30,cornerSegments:8},e.parameters),r=Math.abs(i.width),s=Math.abs(i.height??i.width);i.shapeBlendNode&&(s=r);let a=Math.round(Math.abs(i.depth??.25*i.width));return{parameters:Object.assign(i,{width:r,height:s,depth:a})}}static build(e){let{width:t,height:i,depth:r,radialSegments:s,tubularSegments:a,arc:o,cornerRadius:l,cornerSegments:h}=e.parameters,c=function(e,t,i,r,s,a,o,l,h,c,d){[t,i]=[i,t],o=t/2;let u=tY.clamp(s/360,0,1);if(0===u){let e=new rz;return e.setAttribute("position",new rT([],3)),e}return 1===u&&(c=0),new b$(!0,e,t,i,r,u,a,o,0,h,c,d)}(t,i,r,.5*t,o,a,0,0,s,l,h);return c.scale(1,i/t,1),Object.assign(c,{userData:{...e,type:"TorusGeometry"}})}},wE=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,tubularSegments:64,radialSegments:32,p:2,q:3},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width),tube:i.tube??.125*i.width})}}static build(e){let{width:t,tube:i,tubularSegments:r,radialSegments:s,p:a,q:o}=e.parameters,l=.5*t;return l!==i&&(l-=i),Object.assign(new oL(l,i,r,s,a,o),{userData:{...e,type:"TorusKnotGeometry"}})}},wC=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,spikes:5,cornerRadius:0,extrudeBevelSize:0,extrudeBevelSegments:1,isRect:!1},e.parameters);return{shape:e.shape&&e.shape instanceof bp?e.shape:new bp,parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width*(i.isRect?1:Math.sqrt(3)/2)),depth:Math.abs(i.depth??0)})}}static build(e){let{width:t=100,height:i,cornerRadius:r,depth:s,extrudeBevelSize:a,extrudeBevelSegments:o,isRect:l}=e.parameters,h=e.shape,c=.5*t,d=.5*i;l?h.addPoint(h.createPoint(-c,d)):h.addPoint(h.createPoint(0,d)),h.addPoint(h.createPoint(c,-d)),h.addPoint(h.createPoint(-c,-d)),h.isClosed=!0;for(let e=0,t=h.points.length;e<t;e++)h.points[e].roundness=r;return h.roundness=r,h.update(),Object.assign(bj.create({shape:h,parameters:{roundness:r,depth:s,extrudeBevelSize:a,extrudeBevelSegments:o}}),{userData:{...e,type:"TriangleGeometry"}})}},wT={hexStringToRgb:function(e){e=e.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,(e,t,i,r)=>String(t+t+i+i+r+r));let t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:null}},wP=class{add(e,t,i){if("string"!=typeof arguments[0])for(let e in arguments[0])this.add(e,arguments[0][e],arguments[1]);
3140else(Array.isArray(e)?e:[e]).forEach(function(e){this[e]=this[e]||[],t&&this[e][i?"unshift":"push"](t)},this)}run(e,t){this[e]=this[e]||[],this[e].forEach(function(e){e.call(t&&t.context?t.context:t,t)})}},wD=class{constructor(e){this.jsep=e,this.registered={}}register(...e){e.forEach(e=>{if("object"!=typeof e||!e.name||!e.init)throw Error("Invalid JSEP plugin format");this.registered[e.name]||(e.init(this.jsep),this.registered[e.name]=e)})}},wI=class{static get version(){return"1.3.8"}static toString(){return"JavaScript Expression Parser (JSEP) v"+wI.version}static addUnaryOp(e){return wI.max_unop_len=Math.max(e.length,wI.max_unop_len),wI.unary_ops[e]=1,wI}static addBinaryOp(e,t,i){return wI.max_binop_len=Math.max(e.length,wI.max_binop_len),wI.binary_ops[e]=t,i?wI.right_associative.add(e):wI.right_associative.delete(e),wI}static addIdentifierChar(e){return wI.additional_identifier_chars.add(e),wI}static addLiteral(e,t){return wI.literals[e]=t,wI}static removeUnaryOp(e){return delete wI.unary_ops[e],e.length===wI.max_unop_len&&(wI.max_unop_len=wI.getMaxKeyLen(wI.unary_ops)),wI}static removeAllUnaryOps(){return wI.unary_ops={},wI.max_unop_len=0,wI}static removeIdentifierChar(e){return wI.additional_identifier_chars.delete(e),wI}static removeBinaryOp(e){return delete wI.binary_ops[e],e.length===wI.max_binop_len&&(wI.max_binop_len=wI.getMaxKeyLen(wI.binary_ops)),wI.right_associative.delete(e),wI}static removeAllBinaryOps(){return wI.binary_ops={},wI.max_binop_len=0,wI}static removeLiteral(e){return delete wI.literals[e],wI}static removeAllLiterals(){return wI.literals={},wI}get char(){return this.expr.charAt(this.index)}get code(){return this.expr.charCodeAt(this.index)}constructor(e){this.expr=e,this.index=0}static parse(e){return new wI(e).parse()}static getMaxKeyLen(e){return Math.max(0,...Object.keys(e).map(e=>e.length))}static isDecimalDigit(e){return e>=48&&e<=57}static binaryPrecedence(e){return wI.binary_ops[e]||0}static isIdentifierStart(e){return e>=65&&e<=90||e>=97&&e<=122||e>=128&&!wI.binary_ops[String.fromCharCode(e)]||wI.additional_identifier_chars.has(String.fromCharCode(e))}static isIdentifierPart(e){return wI.isIdentifierStart(e)||wI.isDecimalDigit(e)}throwError(e){let t=Error(e+" at character "+this.index);throw t.index=this.index,t.description=e,t}runHook(e,t){if(wI.hooks[e]){let i={context:this,node:t};return wI.hooks.run(e,i),i.node}return t}searchHook(e){if(wI.hooks[e]){let t={context:this};return wI.hooks[e].find(function(e){return e.call(t.context,t),t.node}),t.node}}gobbleSpaces(){let e=this.code;for(;e===wI.SPACE_CODE||e===wI.TAB_CODE||e===wI.LF_CODE||e===wI.CR_CODE;)e=this.expr.charCodeAt(++this.index);this.runHook("gobble-spaces")}parse(){this.runHook("before-all");let e=this.gobbleExpressions(),t=1===e.length?e[0]:{type:wI.COMPOUND,body:e};return this.runHook("after-all",t)}gobbleExpressions(e){let t=[],i,r;for(;this.index<this.expr.length;)if((i=this.code)===wI.SEMCOL_CODE||i===wI.COMMA_CODE)this.index++;else if(r=this.gobbleExpression())t.push(r);else if(this.index<this.expr.length){if(i===e)break;this.throwError('Unexpected "'+this.char+'"')}return t}gobbleExpression(){let e=this.searchHook("gobble-expression")||this.gobbleBinaryExpression();return this.gobbleSpaces(),this.runHook("after-expression",e)}gobbleBinaryOp(){this.gobbleSpaces();let e=this.expr.substr(this.index,wI.max_binop_len),t=e.length;for(;t>0;){if(wI.binary_ops.hasOwnProperty(e)&&(!wI.isIdentifierStart(this.code)||this.index+e.length<this.expr.length&&!wI.isIdentifierPart(this.expr.charCodeAt(this.index+e.length))))return this.index+=t,e;e=e.substr(0,--t)}return!1}gobbleBinaryExpression(){let e,t,i,r,s,a,o,l,h;if(!(a=this.gobbleToken())||!(t=this.gobbleBinaryOp()))return a;for(s={value:t,prec:wI.binaryPrecedence(t),right_a:wI.right_associative.has(t)},(o=this.gobbleToken())||this.throwError("Expected expression after "+t),r=[a,s,o];t=this.gobbleBinaryOp();){if(0===(i=wI.binaryPrecedence(t))){this.index-=t.length;break}s={value:t,prec:i,right_a:wI.right_associative.has(t)},h=t;let l=e=>s.right_a&&e.right_a?i>e.prec:i<=e.prec;for(;r.length>2&&l(r[r.length-2]);)o=r.pop(),t=r.pop().value,a=r.pop(),e={type:wI.BINARY_EXP,operator:t,left:a,right:o},r.push(e);(e=this.gobbleToken())||this.throwError("Expected expression after "+h),r.push(s,e)}for(l=r.length-1,e=r[l];l>1;)e={type:wI.BINARY_EXP,operator:r[l-1].value,left:r[l-2],right:e},l-=2;return e}gobbleToken(){let e,t,i,r;if(this.gobbleSpaces(),r=this.searchHook("gobble-token"))return this.runHook("after-token",r);
3140if(e=this.code,wI.isDecimalDigit(e)||e===wI.PERIOD_CODE)return this.gobbleNumericLiteral();if(e===wI.SQUOTE_CODE||e===wI.DQUOTE_CODE)r=this.gobbleStringLiteral();else if(e===wI.OBRACK_CODE)r=this.gobbleArray();else{for(i=(t=this.expr.substr(this.index,wI.max_unop_len)).length;i>0;){if(wI.unary_ops.hasOwnProperty(t)&&(!wI.isIdentifierStart(this.code)||this.index+t.length<this.expr.length&&!wI.isIdentifierPart(this.expr.charCodeAt(this.index+t.length)))){this.index+=i;let e=this.gobbleToken();return e||this.throwError("missing unaryOp argument"),this.runHook("after-token",{type:wI.UNARY_EXP,operator:t,argument:e,prefix:!0})}t=t.substr(0,--i)}wI.isIdentifierStart(e)?(r=this.gobbleIdentifier(),wI.literals.hasOwnProperty(r.name)?r={type:wI.LITERAL,value:wI.literals[r.name],raw:r.name}:r.name===wI.this_str&&(r={type:wI.THIS_EXP})):e===wI.OPAREN_CODE&&(r=this.gobbleGroup())}return r?(r=this.gobbleTokenProperty(r),this.runHook("after-token",r)):this.runHook("after-token",!1)}gobbleTokenProperty(e){this.gobbleSpaces();let t=this.code;for(;t===wI.PERIOD_CODE||t===wI.OBRACK_CODE||t===wI.OPAREN_CODE||t===wI.QUMARK_CODE;){let i;if(t===wI.QUMARK_CODE){if(this.expr.charCodeAt(this.index+1)!==wI.PERIOD_CODE)break;i=!0,this.index+=2,this.gobbleSpaces(),t=this.code}this.index++,t===wI.OBRACK_CODE?(e={type:wI.MEMBER_EXP,computed:!0,object:e,property:this.gobbleExpression()},this.gobbleSpaces(),(t=this.code)!==wI.CBRACK_CODE&&this.throwError("Unclosed ["),this.index++):t===wI.OPAREN_CODE?e={type:wI.CALL_EXP,arguments:this.gobbleArguments(wI.CPAREN_CODE),callee:e}:(t===wI.PERIOD_CODE||i)&&(i&&this.index--,this.gobbleSpaces(),e={type:wI.MEMBER_EXP,computed:!1,object:e,property:this.gobbleIdentifier()}),i&&(e.optional=!0),this.gobbleSpaces(),t=this.code}return e}gobbleNumericLiteral(){let e="",t,i;for(;wI.isDecimalDigit(this.code);)e+=this.expr.charAt(this.index++);if(this.code===wI.PERIOD_CODE)for(e+=this.expr.charAt(this.index++);wI.isDecimalDigit(this.code);)e+=this.expr.charAt(this.index++);if("e"===(t=this.char)||"E"===t){for(e+=this.expr.charAt(this.index++),("+"===(t=this.char)||"-"===t)&&(e+=this.expr.charAt(this.index++));wI.isDecimalDigit(this.code);)e+=this.expr.charAt(this.index++);wI.isDecimalDigit(this.expr.charCodeAt(this.index-1))||this.throwError("Expected exponent ("+e+this.char+")")}return i=this.code,wI.isIdentifierStart(i)?this.throwError("Variable names cannot start with a number ("+e+this.char+")"):(i===wI.PERIOD_CODE||1===e.length&&e.charCodeAt(0)===wI.PERIOD_CODE)&&this.throwError("Unexpected period"),{type:wI.LITERAL,value:parseFloat(e),raw:e}}gobbleStringLiteral(){let e="",t=this.index,i=this.expr.charAt(this.index++),r=!1;for(;this.index<this.expr.length;){let t=this.expr.charAt(this.index++);if(t===i){r=!0;break}if("\\"===t)switch(t=this.expr.charAt(this.index++)){case"n":e+=` 3141`;break;case"r":e+="\r";break;case"t":e+=" ";break;case"b":e+="\b";break;case"f":e+="\f";break;case"v":e+="\v";break;default:e+=t}else e+=t}return r||this.throwError('Unclosed quote after "'+e+'"'),{type:wI.LITERAL,value:e,raw:this.expr.substring(t,this.index)}}gobbleIdentifier(){let e=this.code,t=this.index;for(wI.isIdentifierStart(e)?this.index++:this.throwError("Unexpected "+this.char);this.index<this.expr.length&&(e=this.code,wI.isIdentifierPart(e));)this.index++;return{type:wI.IDENTIFIER,name:this.expr.slice(t,this.index)}}gobbleArguments(e){let t=[],i=!1,r=0;for(;this.index<this.expr.length;){this.gobbleSpaces();let s=this.code;if(s===e){i=!0,this.index++,e===wI.CPAREN_CODE&&r&&r>=t.length&&this.throwError("Unexpected token "+String.fromCharCode(e));break}if(s===wI.COMMA_CODE){if(this.index++,++r!==t.length){if(e===wI.CPAREN_CODE)this.throwError("Unexpected token ,");else if(e===wI.CBRACK_CODE)for(let e=t.length;e<r;e++)t.push(null)}}else if(t.length!==r&&0!==r)this.throwError("Expected comma");else{let e=this.gobbleExpression();e&&e.type!==wI.COMPOUND||this.throwError("Expected comma"),t.push(e)}}return i||this.throwError("Expected "+String.fromCharCode(e)),t}gobbleGroup(){this.index++;let e=this.gobbleExpressions(wI.CPAREN_CODE);if(this.code===wI.CPAREN_CODE)return this.index++,1===e.length?e[0]:!!e.length&&{type:wI.SEQUENCE_EXP,expressions:e};this.throwError("Unclosed (")}gobbleArray(){return this.index++,{type:wI.ARRAY_EXP,elements:this.gobbleArguments(wI.CBRACK_CODE)}}};Object.assign(wI,{hooks:new wP,plugins:new wD(wI),COMPOUND:"Compound",SEQUENCE_EXP:"SequenceExpression",IDENTIFIER:"Identifier",MEMBER_EXP:"MemberExpression",LITERAL:"Literal",THIS_EXP:"ThisExpression",CALL_EXP:"CallExpression",UNARY_EXP:"UnaryExpression",BINARY_EXP:"BinaryExpression",ARRAY_EXP:"ArrayExpression",TAB_CODE:9,LF_CODE:10,CR_CODE:13,SPACE_CODE:32,PERIOD_CODE:46,COMMA_CODE:44,SQUOTE_CODE:39,DQUOTE_CODE:34,OPAREN_CODE:40,CPAREN_CODE:41,OBRACK_CODE:91,CBRACK_CODE:93,QUMARK_CODE:63,SEMCOL_CODE:59,COLON_CODE:58,unary_ops:{"-":1,"!":1,"~":1,"+":1},binary_ops:{"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10},right_associative:new Set,additional_identifier_chars:new Set(["$","_"]),literals:{true:!0,false:!1,null:null},this_str:"this"}),wI.max_unop_len=wI.getMaxKeyLen(wI.unary_ops),wI.max_binop_len=wI.getMaxKeyLen(wI.binary_ops);var wO=e=>new wI(e).parse();function wR(e){return{all:e=e||new Map,on:function(t,i){var r=e.get(t);r?r.push(i):e.set(t,[i])},off:function(t,i){var r=e.get(t);r&&(i?r.splice(r.indexOf(i)>>>0,1):e.set(t,[]))},emit:function(t,i){var r=e.get(t);r&&r.slice().map(function(e){e(i)}),(r=e.get("*"))&&r.slice().map(function(e){e(t,i)})}}}
3141Object.getOwnPropertyNames(wI).forEach(e=>{void 0===wO[e]&&"prototype"!==e&&(wO[e]=wI[e])}),wO.Jsep=wI,wO.plugins.register({name:"ternary",init(e){e.hooks.add("after-expression",function(t){if(t.node&&this.code===e.QUMARK_CODE){this.index++;let i=t.node,r=this.gobbleExpression();if(r||this.throwError("Expected expression"),this.gobbleSpaces(),this.code===e.COLON_CODE){this.index++;let s=this.gobbleExpression();if(s||this.throwError("Expected expression"),t.node={type:"ConditionalExpression",test:i,consequent:r,alternate:s},i.operator&&e.binary_ops[i.operator]<=.9){let r=i;for(;r.right.operator&&e.binary_ops[r.right.operator]<=.9;)r=r.right;t.node.test=r.right,r.right=t.node,t.node=i}}else this.throwError("Expected :")}})}});var wL=class{constructor(e,t,i){this.id=e,this.userAPI=t,this.result=void 0,this.error="null",this.isPrefetched=!1,this.isLoading=!1,this.isLoaded=!1,this.prefetchPromise=new Promise(e=>e()),this.emitter=wR(),this._innerCallUserAPI=async e=>{this.emitter.emit("start",{userAPIId:this.id}),this.isLoading=!0,this.isLoading=!1;try{this.result=await wB(this.userAPI,e),this.error="null",this.emitter.emit("success",{userAPIId:this.id})}catch(t){let e=t.message?.split("_:_")?.[0]?.replace("status:","")??"null";this.error=e,this.result=null,this.emitter.emit("error",{userAPIId:this.id})}this.isLoading=!1,this.isPrefetched=!0,this.isLoaded=!0},t?.integration?.type==="OpenAI"?this.result={content:""}:"GET"===t.method&&""!==t.url&&(this.prefetchPromise=this.prefetch(i)),this._debouncedCallUserAPI=this._innerCallUserAPI,this._updateDebouncedCallUserAPI(),this._debouncedPrefetch=uI(this.prefetch,1e3,{trailing:!0})}_updateDebouncedCallUserAPI(){this._debouncedCallUserAPI=void 0!==this.userAPI.debounce&&this.userAPI.debounce>0?uI(this._innerCallUserAPI,this.userAPI.debounce,{leading:!0,trailing:!0}):this._innerCallUserAPI}async prefetch(e){await this.callUserAPI(e)}async callUserAPI(e){await this._debouncedCallUserAPI(e)}update(e,t,i=!0){this.userAPI=e,this._updateDebouncedCallUserAPI(),""!==this.userAPI.url&&"GET"===this.userAPI.method&&i&&this._debouncedPrefetch(t)}retrieveValue(e){if(this.result)try{return p1.zoom(this.result,e)}catch(e){console.error(e)}}retrieveZoomedKeyValues(e){if(this.result){let t=e&&e.length?p1.zoom(this.result,e):this.result;if("object"==typeof t&&null!==t)return Object.entries(t);if(Array.isArray(t))return t.map((e,t)=>[t.toString(),e]);throw"string"==typeof t||"number"==typeof t||"boolean"==typeof t||null===t?Error("This path points to a value, use retrieveValue() instead. "+e?.join(".")):Error("Path error"+e?.join("."))}}dispose(){}on(e,t){this.emitter.on(e,t)}off(e,t){this.emitter.off(e,t)}get autostart(){return this.userAPI.autoStart}};async function wB(e,t,i=new AbortController){let r,s,a=e.url,o=e.proxy?.enabled??!1,l;if(e.integration?.type==="OpenAI"){let i=wF(""===e.integration.prompt?[]:JSON.parse(e.integration.prompt),t),r=""===e.integration.behavior?[]:wF(JSON.parse(e.integration.behavior),t);l=`{ 3142 "model": "${e.integration.model}", 3143 "messages": [${e.integration.useBehavior?` 3144 { 3145 "role": "system", 3146 "content": "${r}" 3147 },`:""} 3148 { 3149 "role": "user", 3150 "content": "${i}" 3151 } 3152 ] 3153 }`}if(o){let i;a=`https://apis.spline.design/file/${e.proxy.fileId}/external-api/request?uuidexternalapi=${e.proxy.proxyId}`,void 0!==l?i=l:"POST"===e.method&&e.body&&(i=wF(JSON.parse(e.body),t)),void 0!==i&&(a+=`&data=${encodeURIComponent(i.replace(/(\r\n|\n|\r|\t)/gm,""))}`)}else e.integration?.type==="OpenAI"?s=l:"POST"===e.method&&e.body&&(s=wF(JSON.parse(e.body),t));let h=await fetch(a,{method:o?"GET":e.method,headers:o?void 0:(r=new Headers,e.headers.forEach(e=>{""!==e.data.key&&r.append(e.data.key,e.data.value)}),r),signal:i.signal,body:s});if(!h.ok)throw Error("status:"+h.status+"_:_"+h.statusText);if(e.integration?.type==="OpenAI"){let e=await h.json();return o&&(e=e.response),{content:e.choices[0].message.content}}{let e=await h.json();return o&&(e=e.response),e}}var wz=(e,t)=>{if("string"==typeof e){let i=t.getVariable(e);if(i)return wz(i,t)}return yg.isBoolean(e)?yg.getDisplayedValue(e).toLowerCase():yg.getDisplayedValue(e)},wF=(e,t)=>e.map((e,i)=>{if("text"in e)return e.text;if("type"in e){if("paragraph"===e.type)return(i>0?` 3154`:"")+wF(e.children,t);
3154if("variable"===e.type){let i=t.getVariable(e.variableId);if(void 0!==i)return wz(i,t)}}return""}).join(""),wN=["+","-","*","/","(",")","==","!=",">","<",">=","<=","and","or","!","%","^",","],wk=["0","1","2","3","4","5","6","7","8","9","."],wU=["sin","cos","tan","asin","acos","atan","atan2","sqrt","abs","log","exp","floor","ceil","round","min","max","random"];function wV(e,t,i="number"){let r,s,a="";for(let r=0;r<e.length;r++){var o;let s=e[r];if("objType"in s&&"api"===s.objType){let e=JSON.parse(s.id),i=e[0],r=t.getUserAPI(i);if(void 0!==r&&r instanceof wL){let t=r.retrieveValue(e.slice(1));void 0!==t&&(a+=t)}continue}if("objType"in s&&"webhook"===s.objType){let[e,i]=JSON.parse(s.id),r=t.getUserWebhook(e);if(void 0!==r){let e=r.getParameterValue(i);void 0!==e&&(a+=e)}continue}if("objType"in s&&"aiAssistant"===s.objType){let e=t.openAIRealtime;if("objId"in s&&void 0!==s.objId){let i;if(t.scene.data.objects.traverse((e,t)=>{let r=t.events?.find(e=>e.id===s.objId);r&&(i=r)}),void 0!==i&&"AIAssistantListener"===i.data.type){let t=e?.computeAnalysisForListenerEvent(i.data);if(void 0!==t){a+=t;continue}}}a+=e?.voice??0;continue}if("id"in s){let o=e[r-1];if(r>0&&"id"in o){console.error("Two variables in a row",e);return}let l=t.getVariable(s.id),h=yg.getDisplayedValue(l);"number"===i&&yg.isTextValue(l)&&Array.isArray(l.textValue)&&1===l.textValue.length?h=parseFloat(h).toString():"boolean"===i&&yg.isBoolean(l)?h=l?"true":"false":"boolean"===i&&yg.isTextValue(l)&&!Array.isArray(l.textValue)&&(h='"'+h+'"'),a+=h;continue}if("string"===i){'"'!==s.name&&("+"!==s.name||s.escaped)&&(a+=s.name),"+"!==s.name||s.escaped||"\\"!==a[a.length-1]||(a=a.slice(0,-1)+s.name);continue}if("and"===s.name){a+="&&";continue}if("or"===s.name){a+="||";continue}if("True"===s.name){a+="true";continue}if("False"===s.name){a+="false";continue}if("boolean"===i&&!("string"==typeof(o=s.name)&&!isNaN(o)&&!isNaN(parseFloat(o)))&&!wk.includes(s.name)&&!wN.includes(s.name)&&!wU.includes(s.name.replace(/\($/g,""))){a+='"'+s.name+'"';continue}a+=s.name}if("string"===i)return a;if(0===e.length){if("number"===i)return 0;if("boolean"===i)return!1}try{r=wO(a)}catch(e){console.error(a,e);return}try{s=function e(t){switch(t.type){case"BinaryExpression":switch(t.operator){case"==":return Number(e(t.left)===e(t.right));case"!=":return Number(e(t.left)!==e(t.right));case">":return Number(e(t.left)>e(t.right));case">=":return Number(e(t.left)>=e(t.right));case"<":return Number(e(t.left)<e(t.right));case"<=":return Number(e(t.left)<=e(t.right));case"+":return e(t.left)+e(t.right);case"-":return e(t.left)-e(t.right);case"*":return e(t.left)*e(t.right);case"/":return e(t.left)/e(t.right);case"%":return e(t.left)%e(t.right);case"&&":return e(t.left)&&e(t.right);case"||":return e(t.left)||e(t.right);case"^":return Math.pow(e(t.left),e(t.right));default:throw Error("Unknown operator: "+t.operator)}case"UnaryExpression":switch(t.operator){case"-":return-e(t.argument);case"!":return Number(!e(t.argument));default:throw Error("Unknown operator: "+t.operator)}case"Identifier":throw Error("Unknown identifier: "+t.name);case"Literal":return t.value;case"CallExpression":if("Identifier"===t.callee.type){if("random"===t.callee.name){let i=0,r=1;if(t.arguments.length>=1)try{i=e(t.arguments[0])}catch(e){console.warn(e)}if(t.arguments.length>=2)try{r=e(t.arguments[1])}catch(e){console.warn(e)}return i=Math.min(r,i),r=Math.max(r,i),i+Math.random()*(r-i)}return Math[t.callee.name].apply(null,t.arguments.map(e))}throw Error("Unknown node");default:throw Error("Unknown node type: "+t.type)}}(r)}catch(e){console.error(a,r,e)}return s}wO.addBinaryOp("^",11,!0);var wj=new iX,wG=new iX,wH=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,height:100,depth:1,subdivisions:12,roundness:0,extrudeBevelSize:0,extrudeBevelSegments:3},e.parameters),r=Math.abs(i.width),s=Math.abs(i.height??i.width),a=Math.abs(i.depth??0),o=t?.shapeData??bH.create({parameters:gT}).userData.shape;return{path:e.path??vV.defaultData(),parameters:Object.assign(i,{width:r,height:s,depth:a,extrusion:{...gP,...i.extrusion}}),shapeData:o}}static build(e){return e.path.points.length>=2?Object.assign(new wW(e),{userData:{...e,type:"PathGeometry"}}):Object.assign(new rz,{userData:{...e,type:"PathGeometry"}})}},wW=class extends rz{constructor(e){super(),this.type="PathExtrusionGeometry",this.inputs=e,this.build()}_isGeometryClosed(){return this.inputs.path.isClosed&&1===this.inputs.parameters.extrusion.depth}_isOpenEnded(){let e,t=this.inputs.parameters.extrusion;return!(this.inputs.path.isClosed&&1===t.depth)||(t.twist%(e=2*Math.PI)+e)%e!=(0%e+e)%e||t.startScale!==t.endScale}build(){let e=this._extractPathPoints();if(e.length<2)return;let t=this._computeBasisMatrices(e),{depth:i,offset:r}=this.inputs.parameters.extrusion;i=Math.max(0,Math.min(i,1)),r=Math.max(0,Math.min(r,1));let s=this.inputs.path.isClosed?e.length:e.length-1,a=Math.floor(r*s),o=Math.min(Math.max(2,(this.inputs.path.isClosed?Math.ceil((i+r)*s):Math.ceil(Math.min(1,i+r)*s))-a+1),s+2),l=[],h=[];for(let i=0;i<o;i++){let r=this.inputs.path.isClosed?(i+a)%e.length:Math.min(i+a,e.length-1);l.push(e[r].clone()),h.push(t[r].clone())}let c=(e,t,i)=>{var r,s;let a,o;l[e]=l[e].clone().lerp(l[t],i),h[e]=(r=h[e],s=h[t],a=[new iv,new iv,new iv],o=[new iv,new iv,new iv],r.extractBasis(a[0],a[1],a[2]),s.extractBasis(o[0],o[1],o[2]),a.forEach((e,t)=>{let r=o[t],s=tY.lerp(e.length(),r.length(),i);e.lerp(r,i).setLength(s)}),new iX().makeBasis(a[0],a[1],a[2]))},d=0,u=r*s%1;(!this.inputs.path.isClosed||i<=1)&&(u||0===r)&&c(0,1,d=u);let p=0,f=(r+i)*s%1;if((this.inputs.path.isClosed&&i<=1||!this.inputs.path.isClosed&&r+i<1)&&f&&(p=f,c(l.length-1,l.length-2,1-p)),0===i){let e=l.length-1;
3154l[e].copy(l[0]),h[e].copy(h[0])}this._applyPathModifiers(h,d,p);let{bevel:m,bevelSides:g}=this.inputs.parameters.extrusion,v=m>0?this.inputs.parameters.extrusion.capType:"flat",y=5;"Custom"===this.inputs.parameters.extrusion.shape.type&&(y="low"===this.inputs.parameters.extrusion.shape.shapeQuality?5:12);let{regions:x,infos:b,vertices:w}=this._computeShapePoints(y),S=0,_;"round"===v&&(S=(_=new bk(this.inputs.shapeData,2*m,m,y,g,void 0,!0)).getAttribute("position").count);let A=0,M=0;b.sort((e,t)=>e.start-t.start),b.forEach(e=>{e.verticesStart=A,e.verticesCount=e.continuous.reduce((e,t,i)=>e+(0!==i&&t?1:2),0),M+=e.verticesCount,A=M});let E=M*o,C,T=0;if(this._isOpenEnded()&&"flat"===v){try{C=bI({windingRule:wK.ODD,elementType:wZ.POLYGONS,polySize:3,vertexSize:2,strict:!0,contours:x})}catch{C=bF}T=C.vertexCount}let P=E+2*T+2*S,D=E+2*T,I={positions:new Float32Array(3*P),normals:new Float32Array(3*P),uvs:new Float32Array(2*P)},O=[];if(b.forEach(e=>{this._extrudeRegion(e,w,h,l,I,O,this._isGeometryClosed()&&!this._isOpenEnded())}),C&&(this._closeEnd(C,E,O,I,h[0],l[0],!1),this._closeEnd(C,E+T,O,I,h[h.length-1],l[l.length-1],!0)),_){I.positions.set(_.getAttribute("position").array,3*D),I.normals.set(_.getAttribute("normal").array,3*D),I.uvs.set(_.getAttribute("uv").array,2*D);for(let e=D;e<D+S;e++)I.uvs[2*e+1]=1e-4;let e=O.length;O.push(..._.getIndex().array.map(e=>e+D)),D+=S,I.positions.set(_.getAttribute("position").array,3*D),I.normals.set(_.getAttribute("normal").array,3*D),I.uvs.set(_.getAttribute("uv").array,2*D);let t=O.length;O.push(..._.getIndex().array.map(e=>e+D)),this.setAttribute("position",new rM(I.positions,3)),this.setAttribute("normal",new rM(I.normals,3)),this.setAttribute("uv",new rM(I.uvs,2)),this.setIndex(O),wj.copy(h[h.length-1]).setPosition(l[l.length-1]),this.applyMatrix4OnRange(wj,D,P),wj.copy(h[0]).setPosition(l[0]).multiply(wG.makeScale(1,1,-1)),this.applyMatrix4OnRange(wj,D-S,D),this.reverseIndicesOnRange(e,t)}else this.setAttribute("position",new rM(I.positions,3)),this.setAttribute("normal",new rM(I.normals,3)),this.setAttribute("uv",new rM(I.uvs,2)),this.setIndex(O)}_extractPathPoints(){let e=xR(this.inputs.path).getPoints(this.inputs.path.subdivisions);if(e.length<2)return[];let t=[e[0]];return e.forEach(e=>{t[t.length-1].distanceToSquared(e)>.001&&t.push(e)}),this.inputs.path.isClosed&&.001>t[t.length-1].distanceTo(t[0])&&t.pop(),t}_computeBasisMatrices(e){let t=[],i=e.length,r=this.inputs.path.isClosed,s=new iv,a=new iv,o=new iv,l=new iv,h=new iv(0,1,0);for(let c=0;c<i;c++){let d,u=e[c],p;p=0===c?r?e[e.length-2]:u.clone().multiplyScalar(2).sub(e[1]):e[c-1],d=c===i-1?r?e[1]:u.clone().multiplyScalar(2).sub(e[c-1]):e[c+1];let f=u.clone().sub(p).normalize(),m=d.clone().sub(u).normalize(),g=f.clone().add(m).normalize();o.copy(g),0===c&&(g.equals(h)||g.clone().negate().equals(h))&&h.set(0,0,1);let v=h.clone().cross(g).normalize(),y=g.clone().cross(v).normalize();h.copy(y),l.copy(v),0===c&&(s.copy(y),a.copy(g));let x=new iX().makeBasis(v,y,g);t.push(x)}
3154let c=r?a:o,d=r?s:new iv(0,1,0),u=c.clone().cross(l).normalize(),p=Math.acos(d.dot(u));if(isNaN(p))return t;let f=d.clone().cross(u);c.dot(f)>0&&(p*=-1);for(let e=1;e<t.length;e++){let i=new iX().makeRotationZ(p*e/t.length);t[e].multiply(i)}return t}_applyPathModifiers(e,t,i){let r=e.length,{angle:s,twist:a,startScale:o,endScale:l}=this.inputs.parameters.extrusion,h=new iX,c=new iX;return e.forEach((e,d)=>{let u=0===d?0:d===r-1?1:(d-t)/(r-(0===i?0:1)-(t+(1-i)));h.makeRotationZ(tY.lerp(s,s+a,u)*tY.DEG2RAD);let p=tY.lerp(o,l,u);c.makeScale(p,p,p),e.multiply(h).multiply(c)}),e}_computeShapePoints(e=12,t=wK.ODD){let i,r=this.inputs.shapeData,s=r.extractShapePointsToFlatArray([],e),a=r.shapeHoles.map(t=>{let i=t.extractShapePointsToFlatArray([],e),r=[];for(let e=i.length-1;e>=1;e-=2){let t=i[e-1],s=i[e-0];r.push(t,s)}return r}),o;try{o=bI({windingRule:t,elementType:wZ.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[s]})}catch{o=bB}try{i=bI({windingRule:wK.ODD,elementType:wZ.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[...a]})}catch{i=bz}if(!o)throw Error("error generating geometry");let l=o.elementCount;if(i){o.elementCount+=i.elementCount;for(let e=0;e<i.elements.length;e++){let t=i.elements[e],r=e%2==0?o.vertexCount:0;o.elements.push(t+r)}for(let e=0;e<i.vertexIndices.length;e++){let t=i.vertexIndices[e],r=o.vertexCount;o.vertexIndices.push(t+r)}for(let e=0;e<i.vertices.length;e++){let t=i.vertices[e];o.vertices.push(t)}}let h=1/0,c=-1/0,d=1/0,u=-1/0;for(let e=0,t=o.vertexCount;e<t;e++){let t=2*e,i=o.vertices[t+0],r=o.vertices[t+1];i<h&&(h=i),i>c&&(c=i),r<d&&(d=r),r>u&&(u=r)}let p=[];for(let e=o.elementCount-1;e>=0;e--){let t=e>=l,i=2*e,s=o.elements[i+0],a=o.elements[i+1],h=s+a,c={start:s,count:a,normals:[],isHole:t,continuous:[],verticesStart:0,verticesCount:0};p.push(c);let d=s,u=h-1,f=s+1,m=r.roundedCurves.length;do{let e=d-s,i=o.vertices[2*u+0],l=o.vertices[2*u+1],p=o.vertices[2*d+0],g=o.vertices[2*d+1],v=o.vertices[2*f+0],y=o.vertices[2*f+1],x=p-i,b=g-l,w=Math.sqrt(x*x+b*b);x/=w,b/=w;let S=p-v,_=g-y,A=Math.sqrt(S*S+_*_);S/=A,_/=A,c.normals[2*e+0]=-_,c.normals[2*e+1]=S;let M=o.vertexIndices[d];if(Array.isArray(M))c.continuous[e]=!1;else{let[t,i]=r.getCurveIndexFromVertexId(M-1,!0);if(i>0&&i<1)c.continuous[e]=!0;else{let s=1===i?t+1:t-1;s=(s+m)%m;let a=1===i?0:1,o=r.roundedCurves[t].getTangent(i),l=r.roundedCurves[s].getTangent(a);c.continuous[e]=o.dot(l)>.95}}t&&(c.normals[2*e+0]*=-1,c.normals[2*e+1]*=-1),[u,d,f]=[d,f,f+1],f>=h&&(f-=a)}while(f!==s+1)}return{regions:[s,...a],infos:p,vertices:o.vertices}}_insertVertex(e,t,i,r,s){let a=2*t,o=3*t;e.positions[o+0]=i.x,e.positions[o+1]=i.y,e.positions[o+2]=i.z,e.normals[o+0]=r.x,e.normals[o+1]=r.y,e.normals[o+2]=r.z,e.uvs[a+0]=s.x,e.uvs[a+1]=s.y}_extrudeRegion(e,t,i,r,s,a,o){let l=new iv,h=new iv,c=new iv,d=new iv,u=new tQ;i.forEach((a,o)=>{let p=r[o],f=e.verticesStart*i.length+e.verticesCount*o;for(let r=0;r<e.count;r++){let m=(e.start+r)*2;if(l.set(t[m+0],t[m+1],0),c.copy(l).applyMatrix4(a).add(p),e.continuous[r])d.set(e.normals[2*r+0],e.normals[2*r+1],0);else{let i=0===r?(e.start+e.count-1)*2:m-2;h.set(t[i+0],t[i+1],0),d.copy(l).sub(h),d.set(-d.y,d.x,0),e.isHole||d.negate()}if(d.applyMatrix4(a).normalize(),u.set(0===r?1:r/e.count,o/(i.length-1)),this._insertVertex(s,f,c,d,u),f++,!e.continuous[r]||0===r){if(0===r)d.set(e.normals[2*r+0],e.normals[2*r+1],0),u.set(0,o/(i.length-1));else{let i=r===e.count-1?2*e.start:m+2;h.set(t[i+0],t[i+1],0),d.copy(h).sub(l),d.set(-d.y,d.x,0),e.isHole||d.negate()}d.applyMatrix4(a).normalize(),this._insertVertex(s,f,c,d,u),f++}}});let p=i.length-1;for(let t=0;t<p;t++){let r=e.verticesStart*i.length+e.verticesCount*t,s=e.verticesStart*i.length+e.verticesCount*(t+1),o=0;for(let t=0;t<e.count;t++){(!e.continuous[t]||0===t)&&o++;let i=t===e.count-1?0:o+1,l=r+o,h=r+i,c=s+i,d=s+o;e.isHole?a.push(l,c,h,l,d,c):a.push(l,h,c,l,c,d),o++}}}_closeEnd(e,t,i,r,s,a,o){let l=e.vertexCount,h=new iv(0,0,o?-1:1).applyMatrix4(s),c=new iv,d=new tQ;for(let i=0;i<l;i++){let o=2*i;c.set(e.vertices[o+0],e.vertices[o+1],0).applyMatrix4(s).add(a),this._insertVertex(r,t+i,c,h,d)}let u=e.elements;for(let r=0;r<e.elementCount;r++){let e=3*r,s=u[e+0]+t,a=u[e+(o?1:2)]+t,l=u[e+(o?2:1)]+t;i.push(s,a,l)}}applyMatrix4OnRange(e,t,i){let r=e.elements,s=new tK().getNormalMatrix(e).elements,a,o,l,h,c=this.attributes.position,d=this.attributes.normal;if(!c||!d)return;let u=c.array,p=d.array,f=c.itemSize;
3154for(let e=t*f,c=i*f;e<c;e+=f)a=u[e+0],o=u[e+1],l=u[e+2],h=1/(r[3]*a+r[7]*o+r[11]*l+r[15]),u[e+0]=(r[0]*a+r[4]*o+r[8]*l+r[12])*h,u[e+1]=(r[1]*a+r[5]*o+r[9]*l+r[13])*h,u[e+2]=(r[2]*a+r[6]*o+r[10]*l+r[14])*h,a=p[e+0],o=p[e+1],l=p[e+2],p[e+0]=s[0]*a+s[3]*o+s[6]*l,p[e+1]=s[1]*a+s[4]*o+s[7]*l,p[e+2]=s[2]*a+s[5]*o+s[8]*l;c.needsUpdate=!0,d.needsUpdate=!0}reverseIndicesOnRange(e,t){let i=this.index;if(i){for(let r=e;r<t;r+=3){let e=i.getX(r),t=i.getX(r+1),s=i.getX(r+2);i.setXYZ(r,s,t,e)}i.needsUpdate=!0}}};function wq(){let e=new rz;return e.setAttribute("position",new rM(new Float32Array([]),3)),e.setIndex(new rM(new Uint16Array([]),1)),e}var wX,wY,wQ,wK,wZ,wJ,w$=wq().attributes,w0=class extends rz{constructor(e,t){super(),this.charWidths=[],this.charCoords=[],this.wrappedText=[],this.isLowResolution=!1,this.vectorShapes=[],Object.assign(this.attributes,w$),this.userData={parameters:e,type:"TextGeometry"};let i=t.getFont(e.font);i?.isLoaded?(this.font=i,this.update(e)):this.updateFont(e.font,t).then(()=>{this.update(e),t?.requestRender()})}async updateFont(e,t){let i=t.getFont(e);i&&(this.font=i,await i.loadingPromise)}update(e){let t=this.font;if(this.userData={parameters:e,type:"TextGeometry"},!t?.isLoaded){console.warn("Cannot update text because its font is not loaded");return}let{width:i,height:r,depth:s,extrudeBevelSize:a,extrudeBevelSegments:o,text:l,textTransform:h}=e,c=yg.getDisplayedValue(l),d=function(e,t,i){let r=[""],s="";for(let a of i)s+=a," "===a||a===` 3155`?(r[r.length-1]+=s,s="",a===` 3156`&&r.push("")):t.getTextWidth(r[r.length-1]+s,e)>e.width&&(r[r.length-1].length&&r.push(""),t.getTextWidth(r[r.length-1]+s,e)>e.width&&(1===s.length?(r[r.length-1]+=s,s=""):(r[r.length-1]+=s.slice(0,-1),s=s[s.length-1],r.push(""))));return r[r.length-1]+=s,r}(e,t,2===h?c.toUpperCase():3===h?c.toLowerCase():c),{shapes:u,charWidths:p,charCoords:f}=t.generateShapes(d,e),m=u.map(e=>new bp().fromShape(e,!0));this.vectorShapes=m;let g=m.map(e=>bj.create({shape:e,parameters:{depth:s,extrudeBevelSegments:o,extrudeBevelSize:a,windingRule:s<=0?wK.NONZERO:wK.ODD,subdivisions:this.isLowResolution&&s>0?1:12}})),v=g.length?gQ(g):wq();v.translate(-(("number"==typeof i?i:1)*.5),("number"==typeof r?r:1)*.5,0),this.dispose(),this.wrappedText=d,this.charCoords=f,this.charWidths=p,this.deleteAttribute("extrudeNormal"),Object.entries(v.attributes).forEach(([e,t])=>{this.setAttribute(e,t)}),this.setIndex(v.index),this.computeBoundingSphere()}clone(){let e=uH(new rz,w0.prototype);return e.copy(this),console.log("CloneGeometry",this,e),e}copy(e){return Object.entries(e.attributes).forEach(([e,t])=>{this.setAttribute(e,t)}),this.setIndex(e.index),this.userData={parameters:{...e.userData.parameters},type:"TextGeometry"},this}async setText(e){this.font&&await this.font.loadingPromise,await this.update({...this.userData.parameters,text:{textValue:e}})}get text(){return this.userData.parameters.text??""}},w1=new Promise(e=>{wJ=e}),w2=!1,w3=["font"];function w4(e,t,i,r){let s,a,o,l;for(let i of("PathGeometry"===e.type?(a=JSON.parse(JSON.stringify(e)),o=[[],["extrusion"]]):(a={...e},o=[[]]),o)){let e=a;for(let t of i)e=e[t];for(s in e){let a=e[s];md(a)&&!w3.includes(s)&&(e[s]=t.getVariable(a,[r.uuid,"geometry",...i,s]),md(e[s])&&(e[s]=1))}}let h={parameters:a,type:a.type};if("PathGeometry"===a.type)h.path=a.path;else if("VectorGeometry"===a.type){let e=bp.createFromState(a.shape,a.width,a.height);h.shape=e}else if("NonParametricGeometry"===a.type){if(a.data.groups&&a.data.groups?.forEach(e=>e.materialIndex=Math.max(e.materialIndex??0,0)),h.geometry=new lm().parse(a),0===h.geometry.groups.length){let e=h.geometry;e.addGroup(0,Math.max(e.getIndex()?.count??0,e.getAttribute("position").count),0)}}else if("SubdivGeometry"===a.type){let t=new Ss(a,i);return t.data=e,t}else{if("TextGeometry"===a.type||"InputGeometry"===a.type)return new w0(a,t);if("UIGeometry"===a.type)return wy.create({parameters:{width:a.width,height:a.height,cornerRadius:a.cornerRadius,cornerType:a.cornerType}})}try{l=SS(h)}catch(e){console.error(e)}if(!l){let e=bp.createFromState(vU.defaultData(),100,100);h.shape=e,l=SS(h)}return l}var w5=new iX;function w6(e,t,i,r){let s=e.position.array,a=e.normal.array,o=w5.makeScale(t,i,r).invert().elements,l,h,c;for(var d=0,u=s.length;d<u;d+=3)s[d]*=t,s[d+1]*=i,s[d+2]*=r,l=a[d],h=a[d+1],c=a[d+2],a[d]=o[0]*l+o[4]*h+o[8]*c,a[d+1]=o[1]*l+o[5]*h+o[9]*c,a[d+2]=o[2]*l+o[6]*h+o[10]*c;e.position.needsUpdate=!0,e.normal.needsUpdate=!0}var w8,w9,w7=new ib,Se=new iv;w1.then(e=>{w9=e});
3156var St=new Float32Array([10,10,0,-10,10,0,-10,-10,0,10,-10,0]),Si=new Uint32Array([0,1,2,3]),Sr=new Uint8Array([4]),Ss=class extends rz{constructor(e,t){super(),this.data=e,this.flatShading=t,this.subdivPointer=0,this.rebuild(),this.freeSubdivPointer()}mutateDirectlyScaleBaked(e,t){this.freeSubdivPointer();let i=this.data.scaleBaked,r=ge.div(t,i);this.subdividedGeometry&&w6(this.subdividedGeometry.attributes,...r),this.originalGeometry&&w6(this.originalGeometry.attributes,...r),this.data=e;let s=this.userData.parameters;this.userData.parameters={width:s.width*r[0],height:s.height*r[1],depth:s.depth*r[2]},this.originalGeometry.boundingSphere.center.multiply(Se.fromArray(r));let a=Se.set(s.width,s.height,s.depth).length();this.originalGeometry.boundingSphere.radius=a/2}ensureSubdivPointer(){return 0===this.subdivPointer&&this.rebuild(),this.subdivPointer}rebuild(){let e,t,i;try{({originalGeometry:e,subdividedGeometry:t,subdivPointer:i}=Ss.build(this.data,void 0,!this.flatShading,void 0))}catch{e=new rJ(100,100,100),i=0}this.subdivPointer=i,this.originalGeometry=e,this.subdividedGeometry=t??void 0,Object.assign(this,this.subdividedGeometry??this.originalGeometry),this.calcBoundingBox()}freeSubdivPointer(){this.subdivPointer&&(Ss.freeSubdivPointer(this.subdivPointer),this.subdivPointer=0)}dispose(){super.dispose(),this.freeSubdivPointer()}calcBoundingBox(){let e=this.originalGeometry;null===e.boundingSphere&&(e.boundingSphere=new iN,this.subdividedGeometry&&(this.subdividedGeometry.boundingSphere=e.boundingSphere));let t=e.attributes.position,i=e.boundingSphere.center;w7.setFromBufferAttribute(t),w7.getCenter(i),e.boundingSphere.radius=i.distanceTo(w7.max),isNaN(e.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this),w7.getSize(Se);let r={width:Se.x,height:Se.y,depth:Se.z};return this.userData.parameters=r,r}static build(e,t,i,r){let s,a,o,l=e?.phongAngle??35;!1===i&&(l=-1),t&&(w9.free_bvh(t),w9.free_subdivision_surface(t));try{s=Ss.allocate(e,r)}catch(t){console.error(t,e),s=Ss.allocate({positionWASM:St,indexWASM:Si,verticesPerFaceWASM:Sr},r)}if(w9.set_destination_refinement_level(s,0),a=Ss.buildLevel(s,!0,l),e.subdivisions>0)try{w9.set_destination_refinement_level(s,e.subdivisions),o=Ss.buildLevel(s,!1,l)}catch{try{w9.set_destination_refinement_level(s,e.subdivisions-1),o=Ss.buildLevel(s,!1,l)}catch{o=null}}else o=null;return{subdivPointer:s,originalGeometry:a,subdividedGeometry:o}}static primitiveToQuads(e,t,i){let r,s,a,o,l;e.widthSegments>16&&(e.widthSegments=16),e.heightSegments>16&&(e.heightSegments=16),e.depthSegments>16&&(e.depthSegments=16),e.radialSegments>16&&(e.radialSegments=16),"DodecahedronGeometry"===e.type&&(e.detail=0);let h=void 0!==e.shape||void 0!==e.path?t.geometry:w4(e,i,!1),c;if(c="TorusGeometry"===e.type&&e.arc===2*Math.PI?h.getClosedTorusIndicesForBooleanOrSubdiv():h.getIndex(),{positions:r,triIndices:o}=Sn(h.getAttribute("position"),c),"CylinderGeometry"===e.type&&0===e.cornerRadius&&0===e.hollow&&!1===e.openEnded){let t=e.radialSegments*e.heightSegments*6,i=t+3*e.radialSegments;l=[t,i]}return{indices:s,verticesPerFace:a}=Sd(r,o,h,l),{positions:r,indices:s,verticesPerFace:a}}static allocate(e,t){let i,r,s,a,o=[],l=[];e.positionWASM&&e.positionWASM.length>0?(r=e.positionWASM,s=e.indexWASM,a=e.verticesPerFaceWASM):(r=St,s=Si,a=Sr);let h=r.length,c=s.length,d=a.length,u=r.length+o.length+l.length,p=s.length+a.length,f=u*Float32Array.BYTES_PER_ELEMENT+p*Uint32Array.BYTES_PER_ELEMENT,m=u*Float32Array.BYTES_PER_ELEMENT,g=(Uint32Array.BYTES_PER_ELEMENT,w9._malloc(f)),v=new Float32Array(w9.HEAPF32.buffer,g,u),y=new Uint32Array(w9.HEAPU32.buffer,g+m,p);v.set(r,0),v.set(o,r.length),v.set(l,r.length+o.length),y.set(s,0),y.set(a,s.length),e?.scaleBaked?.some(e=>1!==e)&&(i=new iX().makeScale(...e.scaleBaked)),t&&(i?i.premultiply(t):i=t);let x=i?w9.alloc_subdivision_surface2(g,h,g+m,c,g+m+s.length*Uint32Array.BYTES_PER_ELEMENT,d,i.elements):w9.alloc_subdivision_surface(g,h,g+m,c,g+m+s.length*Uint32Array.BYTES_PER_ELEMENT,d);return w9._free(g),x}static buildLevel(e,t,i,r,s){let a=s?w9.get_mesh_data2(e,t?w9.Level.CONTROL:w9.Level.REFINED,i,s.elements):w9.get_mesh_data(e,t?w9.Level.CONTROL:w9.Level.REFINED,i),o=w9.HEAPU32.subarray(a>>2,(a>>2)+8),l=o.subarray(4,8),h=0,c=w9.HEAPU32[o[h]>>2],d=w9.HEAPF32.subarray(c>>2,(c>>2)+l[h]);h++;let u=w9.HEAPU32[o[h]>>2],p=w9.HEAPF32.subarray(u>>2,(u>>2)+l[h]);h++;let f=w9.HEAPU32[o[h]>>2],m=w9.HEAPU32.subarray(f>>2,(f>>2)+l[h]);h++;let g=w9.HEAPU32[o[h]>>2],v=w9.HEAPU32.subarray(g>>2,(g>>2)+l[h]);if(h++,void 0===r){let e=new rz;if(e.setIndex(new rC(v,1)),e.setAttribute("position",new rT(d,3)),e.setAttribute("normal",new rT(p,3)),t){e.setAttribute("faceMap",new rC(m,1));let t=new Float32Array(p.length/3*4).fill(0);e.setAttribute("color",new rM(t,4))}return w9.free_mesh_data(a),e.userData.type="SubdivGeometry",e}r.getAttribute("position").copyArray(d),r.getAttribute("normal").copyArray(p),r.attributes.position.needsUpdate=!0,r.attributes.normal.needsUpdate=!0,w9.free_mesh_data(a)}static freeSubdivPointer(e){w9.free_bvh(e),w9.free_subdivision_surface(e)}static buildControlCageWireframe(e,t,i){let r=w9.get_wireframe_data_for_base_level(e),s=w9.HEAPU32.subarray(r>>2,(r>>2)+4),a=s.subarray(2,4),o=0,l=w9.HEAPU32[s[o]>>2],h=w9.HEAPF32.subarray(l>>2,(l>>2)+a[o]);o++;let c=w9.HEAPU32[s[o]>>2],d=w9.HEAPU32.subarray(c>>2,(c>>2)+a[o]);if(void 0===t){let e=new rz;e.setAttribute("position",new rT(h,3));let t=new Float32Array(h.length);for(let e=0,r=h.length;e<r;)t[e++]=i.r,t[e++]=i.g,t[e++]=i.b;return e.setAttribute("color",new rM(t,3)),e.setIndex(new rC(d,1)),w9.free_wireframe_data_for_base_level(r),e}t.getAttribute("position").copyArray(h),t.attributes.position.needsUpdate=!0,w9.free_wireframe_data_for_base_level(r)}static updateCollabMesh(e,t,i){let r=0===t;r||w9.set_destination_refinement_level(e,t);let s=i?w9.get_topological_data2(e,r?w9.Level.CONTROL:w9.Level.REFINED,i.elements):w9.get_topological_data(e,r?w9.Level.CONTROL:w9.Level.REFINED),a=w9.HEAPU32.subarray(s>>2,(s>>2)+6),o=a.subarray(3,6),l=0,h=w9.HEAPU32[a[l]>>2],c=new Float32Array(w9.HEAPF32.subarray(h>>2,(h>>2)+o[l]));l++;let d=w9.HEAPU32[a[l]>>2],u=new Uint32Array(w9.HEAPU32.subarray(d>>2,(d>>2)+o[l]));l++;let p=w9.HEAPU32[a[l]>>2],f=new Uint8Array(w9.HEAPU32.subarray(p>>2,(p>>2)+o[l]));return w9.free_topological_data(s),{positions:c,indices:u,verticesPerFace:f}}},Sa=["getX","getY","getZ"];function Sn(e,t){let i={},r=t?t.count:e.count,s=0,a=[],o=[];for(let l=0;l<r;l++){let r=t?t.getX(l):l,h="";for(let t=0;t<3;t++)h+=`${~~(1e4*e[Sa[t]](r))},`;if(h in i)a.push(i[h]);else{for(let t=0;t<3;t++)o.push(e[Sa[t]](r));i[h]=s,a.push(s),s++}}let l=[];for(let e=0;e<a.length;e+=3)a[e]===a[e+1]||a[e]===a[e+2]||a[e+1]===a[e+2]||l.push(a[e],a[e+1],a[e+2]);return{positions:o,triIndices:l}}var So=new iv,Sl=new iv,Sh=new iv,Sc=new iv;function Sd(e,t,i,r){let s=[],a=[];if(void 0!==i.userData.shape&&0===i.userData.parameters.depth&&0===i.userData.shape.shapeHoles.length){let t=i.userData.shape.extractShapePointsToFlatArray([]),r=i.userData.parameters.spikes;if("EllipseGeometry"===i.userData.type&&r<=24&&r%4==0&&i.userData.parameters.angle>=360){let e=t.length/2/r;t=t.filter((t,i)=>Math.floor(i/2)%e==0)}let o=0;for(let e=0;e<t.length;e+=2)o+=(t[e]-t[(0===e?t.length:e)-2])*(t[e+1]+t[(0===e?t.length:e)-1]);e.length=0;let l=0;if(o<0)for(let i=0;i<t.length;i+=2)e.push(t[i],t[i+1],0),s.push(l++);else for(let i=t.length-2;i>=0;i-=2)e.push(t[i],t[i+1],0),s.push(l++);return a.push(l),{indices:s,verticesPerFace:a}}let o=new Float32Array([i.userData.parameters.depth])[0],l=0;for(;l<t.length;){if(i.useNgonForTopBottomFaceDuringBake){let i=0;if((e[3*t[l]+2]===o||0===e[3*t[l]+2])&&i++,(e[3*t[l+1]+2]===o||0===e[3*t[l+1]+2])&&i++,(e[3*t[l+2]+2]===o||0===e[3*t[l+2]+2])&&i++,3===i)break}t[l+1]===t[l+3]&&t[l+2]===t[l+5]||t[l+0]===t[l+3]&&t[l+2]===t[l+4]?(So.set(e[3*t[l]],e[3*t[l]+1],e[3*t[l]+2]),Sl.set(e[3*t[l+1]],e[3*t[l+1]+1],e[3*t[l+1]+2]),Sh.set(e[3*t[l+4]],e[3*t[l+4]+1],e[3*t[l+4]+2]),Sc.set(e[3*t[l+5]],e[3*t[l+5]+1],e[3*t[l+5]+2]),Sl.sub(So).normalize(),Sh.sub(So).normalize(),Sc.sub(So).normalize(),Math.abs(Sl.cross(Sh).dot(Sc))>.005||r&&r.some((e,t)=>t%2!=1&&l>
3156=r[t]&&l<r[t+1])?(s.push(t[l],t[l+1],t[l+2]),a.push(3),l+=3):(s.push(t[l],t[l+1],t[l+4],t[l+5]),a.push(4),l+=6)):(s.push(t[l],t[l+1],t[l+2]),a.push(3),l+=3)}if(i.useNgonForTopBottomFaceDuringBake){let t=[],r=[],l=0;for(let i=0,s=0;i<e.length;i+=3,s++)0===e[i+2]&&(t.push(s),l++),e[i+2]===o&&r.push(s);if(0===i.userData.parameters.extrudeBevelSize){let e=r[0];r[0]=r[1],r[1]=e}t.reverse(),s.push(...t,...r),a.push(l,l)}return{indices:s,verticesPerFace:a}}var Su={};function Sp(e){let t=e.length,i=t*Uint32Array.BYTES_PER_ELEMENT,r=t*Float32Array.BYTES_PER_ELEMENT,s=Number.isInteger(e[0])?i:r,a=_j._malloc(s);return(Number.isInteger(e[0])?new Uint32Array(_j.HEAPU32.buffer,a,t):new Float32Array(_j.HEAPF32.buffer,a,t)).set(e,0),a}function Sf(e){switch(e){case 0:return _j.OP.UNION;case 1:return _j.OP.INTERSECTION;case 2:return _j.OP.A_MINUS_B;default:throw Error("Unknown boolean operation "+e)}}function Sm(e,t){void 0===_G&&(_G=_j.init_csg());let i=Sp(e),r=_j.csg_calc_topological(_G,i,e.length,Sf(t));_j._free(i);let s=_j.HEAPU32.subarray(r>>2,(r>>2)+6),a=s.subarray(3,6),o=0,l=_j.HEAPU32[s[o]>>2],h=new Float32Array(_j.HEAPF32.subarray(l>>2,(l>>2)+a[o]));o++;let c=_j.HEAPU32[s[o]>>2],d=new Uint32Array(_j.HEAPU32.subarray(c>>2,(c>>2)+a[o]));o++;let u=_j.HEAPU32[s[o]>>2],p=new Uint8Array(_j.HEAPU32.subarray(u>>2,(u>>2)+a[o]));return _j.free_mesh_data(r),{positions:h,indices:d,verticesPerFace:p}}function Sg(e,t,i,r){void 0===_G&&(_G=_j.init_csg());let s=Sp(e),a=_j.csg_calc(_G,s,e.length,r,Sf(t));_j._free(s);let o=_j.HEAPU32.subarray(a>>2,(a>>2)+5),l=o.subarray(2,5),h=0,c=_j.HEAPU32[o[h]>>2],d=_j.HEAPF32.subarray(c>>2,(c>>2)+l[h]);h++;let u=_j.HEAPU32[o[h]>>2],p=_j.HEAPF32.subarray(u>>2,(u>>2)+l[h]),f=l[++h];i.setAttribute("position",new rT(d,3)),i.setAttribute("normal",new rT(p,3));let m=_j.HEAPF32.subarray((a>>2)+5,(a>>2)+5+6);return null===i.boundingSphere&&(i.boundingSphere=new iN),i.boundingSphere.center.set(m[0],m[1],m[2]),i.boundingSphere.radius=(m[3]**2+m[4]**2+m[5]**2)**.5,i.userData.parameters={width:2*m[3],height:2*m[4],depth:2*m[5]},_j.free_mesh_data(a),f}function Sv(e,t,i){let r,s,a;if(void 0===_j)return -1;if(t&&void 0!==e.userData.positions){let t=e.userData;a=t.verticesPerFace.length,r=t.positions,s=Array(t.verticesPerFace.reduce((e,t)=>e+t,0)+a);for(let e=0,i=0,r=0;e<t.verticesPerFace.length;e++){s[r++]=t.verticesPerFace[e];for(let a=0;a<t.verticesPerFace[e];a++)s[r++]=t.indices[i++]}}else({positions:r,faceIndices:s,nFaces:a}=function(e,t,i){let r,s;s="TorusGeometry"===e.userData.parameters.type&&e.userData.parameters.arc===2*Math.PI?e.getClosedTorusIndicesForBooleanOrSubdiv():e.getIndex();let{positions:a,triIndices:o}=Sn(e.getAttribute("position"),s),l;if(t&&i){let{indices:t,verticesPerFace:i}=Sd(a,o,e);l=i.length,r=[];for(let e=0,s=0;e<l;e++){r.push(i[e]);for(let a=0;a<i[e];a++)r.push(t[s++])}}else{let e=o.length;r=Array(e+e/3),l=0;for(let e=0,t=0;t<r.length;)r[t++]=3,l++,r[t++]=o[e++],r[t++]=o[e++],r[t++]=o[e++]}return{positions:a,faceIndices:r,nFaces:l}}(e,t,i));let o=r.length,l=s.length,h=r.length,c=s.length,d=h*Float32Array.BYTES_PER_ELEMENT+c*Uint32Array.BYTES_PER_ELEMENT,u=h*Float32Array.BYTES_PER_ELEMENT,p=(Uint32Array.BYTES_PER_ELEMENT,_j._malloc(d)),f=new Float32Array(_j.HEAPF32.buffer,p,h),m=new Uint32Array(_j.HEAPU32.buffer,p+u,c);f.set(r,0),m.set(s,0);let g=_j.get_csg_mesh(p,o,p+u,l,a);return _j._free(p),g}function Sy(e){return _j.has_open_edges(e)}function Sx(e,t){_j.transform_csg_mesh(e,t.elements)}function Sb(e){_j.free_csg_mesh(e)}((e,t)=>{for(var i in t)tp(e,i,{get:t[i],enumerable:!0})})(Su,{calcBoolean:()=>Sg,calcBooleanTopological:()=>Sm,freeMeshSet:()=>Sb,getMeshSet:()=>Sv,hasOpenEdges:()=>Sy,transformMeshSet:()=>Sx}),new Promise(e=>{_U=e}).then(e=>_j=e);var Sw={ConeGeometry:xH,CubeGeometry:xW,CylinderGeometry:xU,DodecahedronGeometry:xQ,EllipseGeometry:bH,HelixGeometry:bZ,IcosahedronGeometry:b0,LatheGeometry:b2,NonParametricGeometry:wu,PolygonGeometry:wp,PyramidGeometry:wf,RectangleGeometry:wy,SphereGeometry:wx,PlaneGeometry:wb,BackdropGeometry:ww,StarGeometry:w_,TextFrameGeometry:wA,TorusGeometry:wM,TorusKnotGeometry:wE,TriangleGeometry:wC,PathGeometry:wH,VectorGeometry:bj},SS=e=>Sw[e.type].create(e);function S_(e){return null!==e&&"booleanOp"in e}var SA=class extends xk(rK){constructor(){super(...arguments),this.booleanMeshSetAddress=-1,this.booleanWasTransformed=!1,this.booleanMatrixInvOld=new iX}updateVisible(e){super.updateVisible(e),this.visible=!S_(this.parent)&&this.visible,S_(this.parent)&&this.parent.invali
vendor: 4,246 bytes, line 3156
3156dateDownstreamBooleanData()}freeBooleanPointer(){-1!==this.booleanMeshSetAddress&&(Su.freeMeshSet(this.booleanMeshSetAddress),this.booleanMeshSetAddress=-1)}invalidateDownstreamBooleanData(e=!1){return e?this.booleanWasTransformed=!0:this.freeBooleanPointer(),S_(this.parent)?this.parent.invalidateDownstreamBooleanData():this}invalidateUpstreamBooleanData(){for(let e of(this.freeBooleanPointer(),this.children))e instanceof SA&&(e.freeBooleanPointer(),S_(e)&&e.invalidateUpstreamBooleanData())}updateTransformState(e,t){let i=super.updateTransformState(e,t);return i&&S_(this.parent)&&this.invalidateDownstreamBooleanData(!0),i}onVariableUpdate(e=!1){super.onVariableUpdate(e),S_(this.parent)&&this.invalidateDownstreamBooleanData(!0)}},SM=new ib;function SE(e,t=0,i=e.count,r,s){let a=1/0,o=1/0,l=1/0,h=-1/0,c=-1/0,d=-1/0;for(let r=t;r<i;r++){let t=e.getX(r),i=e.getY(r),s=e.getZ(r);t<a&&(a=t),i<o&&(o=i),s<l&&(l=s),t>h&&(h=t),i>c&&(c=i),s>d&&(d=s)}SM.min.set(a,o,l),SM.max.set(h,c,d),SM.getCenter(r),SM.getSize(s).multiplyScalar(.5)}var SC=new rz,ST=new rS,SP=class extends SA{constructor(e,t){super(SC,ST),this.super_Entity(e,t)}updateState(e,t){this.updateState_Entity(e,t)}updateEntityBoxSize(e,t){let i=this.geometry.getAttribute("position");void 0!==i?SE(i,this.geometry.drawRange.start,this.geometry.drawRange.count<1/0?this.geometry.drawRange.count:i.count,e,t):super.updateEntityBoxSize(e,t)}},SD=class{constructor(e){if(this.hashProperties=void 0,this.isNode=!0,this.shortcuts={},null===SD.uuidContext)throw Error("plz startContext");SD.uuidContext===SD.globalContext?this.uuid="_gid"+SD.uuidContext.nodeContextUuid++:this.uuid="_uid"+SD.uuidContext.nodeContextUuid++,this.type=e,this.name=""}static startContext(e){null===this.uuidContext||this.uuidContext===SD.globalContext?this.uuidContext=e:console.error("Can't start context twice")}static endContext(e){this.uuidContext!==e&&console.error("Can't end context twice"),this.uuidContext=null}analyze(e,t){t=t??{},e.analyzing=!0,this.build(e.addFlow(t.slot,t.cache,t.context),"v4"),e.clearVertexNodeCode(),e.clearFragmentNodeCode(),e.removeFlow(),e.analyzing=!1}analyzeAndFlow(e,t,i){return i=i??{},this.analyze(e,i),this.flow(e,t,i)}flow(e,t,i){i=i??{},e.addFlow(i.slot,i.cache,i.context);let r={result:this.build(e,t),code:e.clearNodeCode(),extra:e.context.extra};return e.removeFlow(),r}build(e,t,i){t=t??this.getType(e,t);let r=e.getNodeData(i??this);return e.analyzing&&this.appendDepsNode(e,r,t),-1===e.nodes.indexOf(this)&&e.nodes.push(this),void 0!==this.updateFrame&&-1===e.updaters.indexOf(this)&&e.updaters.push(this),this.generate(e,t,i)}updateFrame(e){}generateReadonly(e,t,i,r,s,a){return""}generate(e,t,i,r,s){return""}parse(e,t,i,r){}appendDepsNode(e,t,i){t.deps=(t.deps||0)+1;let r=e.getTypeLength(i);(r>(t.outputMax||0)||this.getType(e,i))&&(t.outputMax=r,t.output=i)}setName(e){this.name=e}getName(){return this.name}getType(e,t){return"sampler2D"===t||"samplerCube"===t?t:this.type}},SI=SD;SI.globalContext={nodeContextUuid:0},SI.uuidContext=SD.globalContext;var SO=class{constructor(e){e=e??{},this.name=e.name,this.type=e.type,this.node=e.node,this.size=e.size,this.needsUpdate=e.needsUpdate}get value(){return this.node.value}set value(e){this.node.value=e}},SR=new class{constructor(){this.nodes={},this.keywords={}}add(e){this.nodes[e.name]=e}addKeyword(e,t,i){i=void 0===i||i,this.keywords[e]={callback:t,cache:i}}remove(e){delete this.nodes[e.name]}removeKeyword(e){delete this.keywords[e]}get(e){return this.nodes[e]}getKeyword(e,t){return this.keywords[e].callback(t)}getKeywordData(e){return this.keywords[e]}contains(e){return void 0!==this.nodes[e]}containsKeyword(e){return void 0!==this.keywords[e]}},SL=class extends SI{constructor(e,t){super(e),this.scope="",t=t??{},this.shared=void 0===t.shared||t.shared,this.unique=void 0!==t.unique&&t.unique}build(e,t,i,r){if(t=t??this.getType(e),this.getShared(e,t)){let s=this.getUnique(e,t);s&&void 0===this.uuid&&(this.uuid=tY.generateUUID()),i=e.getUUID(i??this.getUUID(),!s);let a=e.getNodeData(i),o=a.output||this.getType(e);if(e.analyzing)return(a.deps||0)>0||this.getLabel()?(this.appendDepsNode(e,a,t),this.generate(e,t,i)):super.build(e,t,i);if(s)return a.name=a.name||super.build(e,t,i),a.name;
vendor: 5,541 bytes, line 3156
3156if(!this.getLabel()&&(!this.getShared(e,o)||e.context.ignoreCache||1===a.deps))return super.build(e,t,i);i=this.getUUID(!1);let l=this.getTemp(e,i);if(l)return e.format(l,o,t);{l=super.generate(e,t,i,a.output,r);let s=this.generate(e,o,i);return e.addNodeCode(l+" = "+s+";"),e.format(l,o,t)}}return super.build(e,t,i)}getShared(e,t){return"sampler2D"!==t&&"samplerCube"!==t&&this.shared}getUnique(e,t){return this.unique}setLabel(e){return this.label=e,this}getLabel(){return this.label}getUUID(e){let t=this.uuid;return"string"==typeof this.scope&&(t=this.scope+"-"+t),t}getTemp(e,t){t=t||this.uuid;let i=e.getVars()[t];return i?i.name:void 0}generate(e,t,i,r,s){return this.getShared(e,t)||console.error("TempNode is not shared"),i=i??this.uuid,e.getTempVar(i,r??this.getType(e),s,this.getLabel()).name}},SB=class extends SL{constructor(e,t){(t=t??{}).shared=void 0!==t.shared&&t.shared,super(e,t),this.readonly=!1}setReadonly(e){return this.readonly=e,this.hashProperties=this.readonly?["value"]:void 0,this}getReadonly(){return this.readonly}generate(e,t,i,r,s,a){i=e.getUUID(i??this.getUUID()),r=r??this.getType(e);let o=e.getNodeData(i);return this.getReadonly()&&void 0!==this.generateReadonly?this.generateReadonly(e,t,i,r,s,a):e.isShader("vertex")?(o.vertex||(o.vertex=e.createVertexUniform(r,this,s,a,this.getLabel())),e.format(o.vertex.name,r,t)):(o.fragment||(o.fragment=e.createFragmentUniform(r,this,s,a,this.getLabel())),e.format(o.fragment.name,r,t))}},Sz=class extends SB{constructor(e=0,t){super("v2"),this.nodeType="Vector2",this.value=e instanceof tQ?e:new tQ(e,t)}get x(){return this.value.x}set x(e){this.value.x=e}get y(){return this.value.y}set y(e){this.value.y=e}generateReadonly(e,t,i,r,s,a){return e.format("vec2("+this.value.x+", "+this.value.y+")",r,t)}},SF=class extends SB{constructor(e=0,t,i){super("v3"),this.nodeType="Vector3",this.value=e instanceof iv?e:new iv(e,t,i)}get x(){return this.value.x}set x(e){this.value.x=e}get y(){return this.value.y}set y(e){this.value.y=e}get z(){return this.value.z}set z(e){this.value.z=e}generateReadonly(e,t,i,r,s,a){return e.format("vec3("+this.value.x+", "+this.value.y+", "+this.value.z+")",r,t)}},SN=class extends ii{constructor(e,t,i,r){super(e,t,i),this.isColorA=!0,this.a=r}setRGBA(e,t,i,r){super.setRGB(e,t,i),this.a=r}copy(e){return super.copy(e),this.a="a"in e?e.a:1,this}clone(){return new this.constructor(this.r,this.g,this.b,this.a)}equals(e){return super.equals(e)&&this.a===e.a}setStyle(e,t="srgb"){let i;if("transparent"===e)return this.setRGBA(0,0,0,0),this;if(i=/^((?:rgb|hsl)a?)\(([^)]*)\)/.exec(e)){let r,s=i[1],a=i[2];switch(s){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return this.a="rgba"===s?parseFloat(r[4]):1,super.setStyle(e,t);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)%\s*,\s*(\d*\.?\d+)%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return this.a="hsla"===s?parseFloat(r[4]):1,super.setStyle(e,t)}}return super.setStyle(e,t)}get x(){return this.r}get y(){return this.g}get z(){return this.b}get w(){return this.a}set x(e){this.r=e}set y(e){this.g=e}set z(e){this.b=e}set w(e){this.a=e}},Sk=class extends SB{constructor(e){super("v4"),this.nodeType="Vector4",this.value=e instanceof SN?e:new SN(e.r,e.g,e.b,e.a)}generateReadonly(e,t,i,r,s,a){return e.format("vec4("+this.value.r+", "+this.value.g+", "+this.value.b+", "+this.value.a+")",r,t)}},SU=/^\s*([a-z_0-9]+)\s([a-z_0-9]+)\s*\((.*?)\)/i,SV=/[a-z_0-9]+/gi,Sj=class extends SL{constructor(e,t,i,r,s){super(s),this.src="",this.nodeType="Function",this.useKeywords=!0,this.includes=[],this.extensions={},this.keywords={},this.isMethod=void 0===s,this.isInterface=!1,this.parse(e,t,i,r)}getShared(e,t){return!this.isMethod}getType(e){return e.getTypeByFormat(this.type)}getInputByName(e){if(this.inputs){let t=this.inputs.length;for(;t--;)if(this.inputs[t].name===e)return this.inputs[t]}}getIncludeByName(e){if(this.includes){let t=this.includes.length;for(;t--;)if(this.includes[t].name===e)return this.includes[t]}}generate(e,t,i,r,s){let a,o=0,l=this.src;if(this.includes)for(let t=0;t<this.includes.length;t++)e.include(this.includes[t],this);for(let t in this.extensions)e.extensions[t]=!0;let h=[];for(;a=SV.exec(this.src);)h.push(a);for(let t=0;t<h.length;t++){let i=h[t],r=i[0],s=!this.isMethod||!this.getInputByName(r),a=r;if(this.keywords[r]||this.useKeywords&&s&&SR.containsKeyword(r)){let t=this.keywords[r];if(!t){let i=SR.getKeywordData(r);i.cache&&(t=e.keywords[r]),t=t||SR.getKeyword(r,e),i.cache&&(e.keywords[r]=t)}a=t.build(e)}r!==a&&"."!==l[i.index+o-1]&&(l=l.substring(0,i.index+o)+a+l.substring(i.index+r.length+o),o+=a.length-r.length),void 0===this.getIncludeByName(a)&&SR.contains(a)&&e.include(SR.get(a))}return"source"===t?l:this.isMethod?(this.isInterface||e.include(this,void 0,l),this.name):e.format("( "+l+" )",this.getType(e),t)}parse(e,t,i,r){if(this.src=e||"",this.includes=t??[],this.extensions=i??{},this.keywords=r??{},this.isMethod){let e=SU.exec(this.src);if(this.inputs=[],e&&4==e.length){this.type=e[1],this.name=e[2];let t=e[3].match(SV);if(t){let e=0;for(;e<t.length;){let i=t[e++],r;"in"===i||"out"===i||"inout"===i?r=t[e++]:(r=i,i="");let s=t[e++];this.inputs.push({name:s,type:r,qualifier:i})}}this.isInterface=-1===this.src.indexOf("{")}else this.type="",this.name=""}}},SG=/^([a-z_0-9]+)\s([a-z_0-9]+)\s?\=?\s?(.*?)(\;|$)/i,SH=class extends SL{constructor(e="",t){super(),this.src="",this.useDefine=!1,this.nodeType="Const",this.parse(e||SH.PI,void 0,void 0,void 0,t)}
vendor: 12,915 bytes, lines 3156-3235
3156getType(e){return e.getTypeByFormat(this.type)}parse(e,t,i,r,s){this.src=e||"";let a,o,l="",h=SG.exec(e);this.useDefine=s??"#"===this.src.charAt(0),h&&h.length>1?(o=h[1],a=h[2],l=h[3]):(a=this.src,o="f"),this.name=a,this.type=o,this.value=l}build(e,t){if("source"===t){if(this.value)return this.useDefine?"#define "+this.name+" "+this.value:"const "+this.type+" "+this.name+" = "+this.value+";";if(this.useDefine)return this.src}return e.include(this),e.format(this.name,this.getType(e),t)}generate(e,t,i,r,s){return e.format(this.name,this.getType(e),t)}};SH.PI="PI",SH.PI2="PI2",SH.RECIPROCAL_PI="RECIPROCAL_PI",SH.RECIPROCAL_PI2="RECIPROCAL_PI2",SH.LOG2="LOG2",SH.EPSILON="EPSILON";var SW=RegExp(`^structs*([a-z_0-9]+)s*{s*((.| 3157)*?)}`,"gim"),Sq=RegExp("s*(w*?)s*(w*?)(=|;)","gim"),SX=class extends SL{constructor(e=""){super(),this.inputs=[],this.src="",this.nodeType="Struct",this.parse(e)}getType(e){return e.getTypeByFormat(this.name)}getInputByName(e){let t=this.inputs.length;for(;t--;)if(this.inputs[t].name===e)return this.inputs[t]}generate(e,t,i,r,s){return"source"===t?this.src+";":e.format("( "+this.src+" )",this.getType(e),t)}parse(e=""){this.src=e,this.inputs=[];let t=SW.exec(e);if(t){let e=t[2],i;for(;i=Sq.exec(e);)this.inputs.push({type:i[1],name:i[2]});this.name=t[1]}else this.name="";this.type=this.name}},SY=class extends SL{constructor(e){super("v2",{shared:!1}),this.nodeType="UV",this.index=e??0}generate(e,t){e.requires.uv[this.index]=!0;let i=this.index>0?this.index+1:"",r=e.isShader("vertex")?"uv"+i:"vUv"+i;return e.format(r,this.getType(e),t)}};SR.addKeyword("uv",function(){return new SY}),SR.addKeyword("uv2",function(){return new SY(1)});var SQ=class extends SL{constructor(e,t){super("v4"),this.nodeType="ColorSpace",this.input=e,this.method=t??SQ.LINEAR_TO_LINEAR,this.hashProperties=["method"]}static getEncodingComponents(e){switch(e){case 3e3:return["Linear"];case 3001:return["sRGB"];default:return[]}}generate(e,t){let i=this.input.build(e,"v4"),r=this.getType(e),s=SQ.Nodes[this.method],a=e.include(s);if(a===SQ.LINEAR_TO_LINEAR)return e.format(i,r,t);if(s.inputs?.length!==2)return e.format(a+"( "+i+" )",r,t);{let s=this.factor.build(e,"f");return e.format(a+"( "+i+", "+s+" )",r,t)}}fromEncoding(e){let t=SQ.getEncodingComponents(e);this.method="LinearTo"+t[0],this.factor=t[1]}fromDecoding(e){let t=SQ.getEncodingComponents(e);this.method=t[0]+"ToLinear",this.factor=t[1]}};SQ.Nodes={LinearToLinear:new Sj(["vec4 LinearToLinear( in vec4 value ) {"," return value;","}"].join(` 3158`)),sRGBToLinear:new Sj(["vec4 sRGBToLinear( in vec4 value ) {"," return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );","}"].join(` 3159`)),LinearTosRGB:new Sj(["vec4 LinearTosRGB( in vec4 value ) {"," return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );","}"].join(` 3160`))},SQ.LINEAR_TO_LINEAR="LinearToLinear",SQ.SRGB_TO_LINEAR="sRGBToLinear",SQ.LINEAR_TO_SRGB="LinearTosRGB";var SK=class extends Sj{constructor(e="",t,i,r,s){super(e,s,r,i,t),this.nodeType="Expression"}},SZ=class extends SB{constructor(e=new ih,t,i,r){super("v4",{shared:!0}),this.nodeType="Texture",this.value=e,this.uv=t??new SY,this.bias=i,this.project=void 0!==r&&r}getTexture(e,t){return super.generate(e,t,this.value.uuid,"t")}generate(e,t){let i,r;if("sampler2D"===t)return this.getTexture(e,t);let s=this.getTexture(e,t),a=this.uv.build(e,this.project?"v4":"v2"),o=this.bias?this.bias.build(e,"f"):void 0;void 0===o&&e.context.bias&&(o=e.context.bias.setTexture(this).build(e,"f")),i=this.project?"texture2DProj":o?"tex2DBias":"tex2D",r=o?i+"( "+s+", "+a+", "+o+" )":i+"( "+s+", "+a+" )";let l={include:e.isShader("vertex"),ignoreCache:!0},h=this.getType(e);return e.addContext(l),this.colorSpace=this.colorSpace??new SQ(new SK("",h)),this.colorSpace.fromDecoding(e.getTextureEncodingFromMap(this.value)),this.colorSpace.input.parse(r),r=this.colorSpace.build(e,h),e.removeContext(),e.format(r,h,t)}},SJ=class extends SB{constructor(e){super("f"),this.nodeType="Float",this.value=e??0}generateReadonly(e,t,i,r,s,a){return e.format(this.value+(this.value%1?"":".0"),r,t)}},S$=class extends SL{constructor(e,t){super(),this.inputs=[],this.nodeType="FunctionCall",this.value=e,this.inputs=t??[]}getFunction(){return this.value}getType(e){return this.value.getType(e)}generate(e,t,i,r,s){r=this.getType(e);let a=this.value,o=a.build(e,t)+"( ",l=[];if(a.inputs){for(let t=0;t<a.inputs.length;t++){let i=a.inputs[t],r=this.inputs[t]||this.inputs[i.name];l.push(r.build(e,e.getTypeByFormat(i.type)))}o+=l.join(", ")+" )"}return e.format(o,r,t)}},S0=class extends SL{constructor(e,t,i=S0.ADD){super(),this.nodeType="Operator",this.type=e.type,this.a=e,this.b=t,this.op=i}getType(e){let t=this.a.getType(e),i=this.b.getType(e);return e.isTypeMatrix(t)?"v4":e.getTypeLength(i)>e.getTypeLength(t)?i:t}generate(e,t){let i=this.getType(e);this.type=i;let r=this.a.build(e,i),s=this.b.build(e,i);return e.format("( "+r+" "+this.op+" "+s+" )",i,t)}};S0.ADD="+",S0.SUB="-",S0.MUL="*",S0.DIV="/";var S1=class extends SL{constructor(e,t=S1.ABS,i,r){super(),this.nodeType="Math",this.a=e,"string"!=typeof t?this.b=t:r=t,"string"!=typeof i?this.c=i:r=i,this.method=r,this.hashProperties=["method"]}getNumInputs(e){switch(this.method){case S1.MIX:case S1.CLAMP:case S1.REFRACT:case S1.SMOOTHSTEP:case S1.FACEFORWARD:return 3;case S1.MIN:case S1.MAX:case S1.MOD:case S1.STEP:case S1.REFLECT:case S1.DISTANCE:case S1.DOT:case S1.CROSS:case S1.POW:return 2;default:return 1}}getInputType(e){let t=e.getTypeLength(this.a.getType(e)),i=this.b?e.getTypeLength(this.b.getType(e)):0,r=this.c?e.getTypeLength(this.c.getType(e)):0;return t>i&&t>r?this.a.getType(e):i>r?this.b.getType(e):this.c.getType(e)}getType(e){switch(this.method){case S1.LENGTH:case S1.DISTANCE:case S1.DOT:return"f";case S1.CROSS:return"v3"}return this.getInputType(e)}generate(e,t){let i,r,s,a=this.a?e.getTypeLength(this.a.getType(e)):0,o=this.b?e.getTypeLength(this.b.getType(e)):0,l=this.c?e.getTypeLength(this.c.getType(e)):0,h=this.getInputType(e),c=this.getType(e);switch(this.type=c,this.method){case S1.NEGATE:return e.format("( -"+this.a.build(e,h)+" )",h,t);case S1.INVERT:return e.format("( 1.0 - "+this.a.build(e,h)+" )",h,t);case S1.CROSS:i=this.a.build(e,"v3"),r=this.b.build(e,"v3");break;case S1.STEP:i=this.a.build(e,1===a?"f":h),r=this.b.build(e,h);break;case S1.MIN:case S1.MAX:case S1.MOD:i=this.a.build(e,h),r=this.b.build(e,1===o?"f":h);break;case S1.REFRACT:i=this.a.build(e,h),r=this.b.build(e,h),s=this.c.build(e,"f");break;case S1.MIX:i=this.a.build(e,h),r=this.b.build(e,h),s=this.c.build(e,1===l?"f":h);break;default:i=this.a.build(e,h),this.b&&(r=this.b.build(e,h)),this.c&&(s=this.c.build(e,h))}let d=[];d.push(i),r&&d.push(r),s&&d.push(s);let u=this.getNumInputs(e);if(d.length!==u)throw Error(`Arguments not match used in "${this.method}". Require ${u}, currently ${d.length}.`);return e.format(this.method+"( "+d.join(", ")+" )",c,t)}};S1.RAD="radians",S1.DEG="degrees",S1.EXP="exp",S1.EXP2="exp2",S1.LOG="log",S1.LOG2="log2",S1.SQRT="sqrt",S1.INV_SQRT="inversesqrt",S1.FLOOR="floor",S1.CEIL="ceil",S1.NORMALIZE="normalize",S1.FRACT="fract",S1.SATURATE="saturate",S1.SIN="sin",S1.COS="cos",S1.TAN="tan",S1.ASIN="asin",S1.ACOS="acos",S1.ARCTAN="atan",S1.ABS="abs",S1.SIGN="sign",S1.LENGTH="length",S1.NEGATE="negate",S1.INVERT="invert",S1.MIN="min",S1.MAX="max",S1.MOD="mod",S1.STEP="step",S1.REFLECT="reflect",S1.DISTANCE="distance",S1.DOT="dot",S1.CROSS="cross",S1.POW="pow",S1.MIX="mix",S1.CLAMP="clamp",S1.REFRACT="refract",S1.SMOOTHSTEP="smoothstep",S1.FACEFORWARD="faceforward";var S2=class extends SL{constructor(e,t,i){super("v4"),this.nodeType="TextureCubeUV",this.value=e,this.uv=t,this.bias=i}bilinearCubeUV(e,t,i,r){let s=new S$(S2.Nodes.bilinearCubeUV,[t,i,r]);this.colorSpaceTL=this.colorSpaceTL??new SQ(new SK("","v4")),this.colorSpaceTL.fromDecoding(e.getTextureEncodingFromMap(this.value.value)),this.colorSpaceTL.input.parse(s.build(e)+".tl"),this.colorSpaceTR=this.colorSpaceTR??new SQ(new SK("","v4")),this.colorSpaceTR.fromDecoding(e.getTextureEncodingFromMap(this.value.value)),this.colorSpaceTR.input.parse(s.build(e)+".tr"),this.colorSpaceBL=this.colorSpaceBL??new SQ(new SK("","v4")),this.colorSpaceBL.fromDecoding(e.getTextureEncodingFromMap(this.value.value)),this.colorSpaceBL.input.parse(s.build(e)+".bl"),this.colorSpaceBR=this.colorSpaceBR??new SQ(new SK("","v4")),this.colorSpaceBR.fromDecoding(e.getTextureEncodingFromMap(this.value.value)),this.colorSpaceBR.input.parse(s.build(e)+".br");let a={include:e.isShader("vertex"),ignoreCache:!0};e.addContext(a),this.colorSpaceTLExp=new SK(this.colorSpaceTL.build(e,"v4"),"v4"),this.colorSpaceTRExp=new SK(this.colorSpaceTR.build(e,"v4"),"v4"),this.colorSpaceBLExp=new SK(this.colorSpaceBL.build(e,"v4"),"v4"),this.colorSpaceBRExp=new SK(this.colorSpaceBR.build(e,"v4"),"v4"),e.removeContext();let o=new SK("mix( mix( cubeUV_TL, cubeUV_TR, cubeUV.f.x ), mix( cubeUV_BL, cubeUV_BR, cubeUV.f.x ), cubeUV.f.y )","v4");return o.keywords.cubeUV_TL=this.colorSpaceTLExp,o.keywords.cubeUV_TR=this.colorSpaceTRExp,o.keywords.cubeUV_BL=this.colorSpaceBLExp,o.keywords.cubeUV_BR=this.colorSpaceBRExp,o.keywords.cubeUV=s,o}generate(e,t){if(!e.isShader("fragment"))return console.warn("TextureCubeUVNode is not compatible with "+e.shader+" shader."),e.format("vec4( 0.0 )",this.getType(e),t);{let i=this.uv,r=this.bias||e.context.roughness,s=new S1(new S$(S2.Nodes.roughnessToMip,[r]),S2.Nodes.m0,S2.Nodes.cubeUV_maxMipLevel,S1.CLAMP),a=new S1(s,S1.FLOOR),o=new S1(s,S1.FRACT),l=new S1(this.bilinearCubeUV(e,this.value,i,a),this.bilinearCubeUV(e,this.value,i,new S0(a,new SJ(1).setReadonly(!0),S0.ADD)),o,S1.MIX);return e.format(l.build(e),"v4",t)}}};S2.Nodes=(ep=new SX(`struct TextureCubeUVData { 3161 vec4 tl; 3162 vec4 tr; 3163 vec4 br; 3164 vec4 bl; 3165 vec2 f; 3166 }`),ef=new SH("float cubeUV_maxMipLevel 8.0",!0),em=new SH("float cubeUV_minMipLevel 4.0",!0),eg=new SH("float cubeUV_maxTileSize 256.0",!0),ev=new SH("float cubeUV_minTileSize 16.0",!0),(ey=new Sj(`float getFace(vec3 direction) { 3167 vec3 absDirection = abs(direction); 3168 float face = -1.0; 3169 if (absDirection.x > absDirection.z) { 3170 if (absDirection.x > absDirection.y) 3171 face = direction.x > 0.0 ? 0.0 : 3.0; 3172 else 3173 face = direction.y > 0.0 ? 1.0 : 4.0; 3174 } else { 3175 if (absDirection.z > absDirection.y) 3176 face = direction.z > 0.0 ? 2.0 : 5.0; 3177 else 3178 face = direction.y > 0.0 ? 1.0 : 4.0; 3179 } 3180 return face; 3181 }`)).useKeywords=!1,(ex=new Sj(`vec2 getUV(vec3 direction, float face) { 3182 vec2 uv; 3183 if (face == 0.0) { 3184 uv = vec2(direction.z, direction.y) / abs(direction.x); // pos x 3185 } else if (face == 1.0) { 3186 uv = vec2(-direction.x, -direction.z) / abs(direction.y); // pos y 3187 } else if (face == 2.0) { 3188 uv = vec2(-direction.x, direction.y) / abs(direction.z); // pos z 3189 } else if (face == 3.0) { 3190 uv = vec2(-direction.z, direction.y) / abs(direction.x); // neg x 3191 } else if (face == 4.0) { 3192 uv = vec2(-direction.x, direction.z) / abs(direction.y); // neg y 3193 } else { 3194 uv = vec2(direction.x, direction.y) / abs(direction.z); // neg z 3195 } 3196 return 0.5 * (uv + 1.0); 3197 }`)).useKeywords=!1,(eb=new Sj(`TextureCubeUVData bilinearCubeUV(sampler2D envMap, vec3 direction, float mipInt) { 3198 float face = getFace(direction); 3199 float filterInt = max(cubeUV_minMipLevel - mipInt, 0.0); 3200 mipInt = max(mipInt, cubeUV_minMipLevel); 3201 float faceSize = exp2(mipInt); 3202 float texelSize = 1.0 / (3.0 * cubeUV_maxTileSize); 3203 vec2 uv = getUV(direction, face) * (faceSize - 1.0); 3204 vec2 f = fract(uv); 3205 uv += 0.5 - f; 3206 if (face > 2.0) { 3207 uv.y += faceSize; 3208 face -= 3.0; 3209 } 3210 uv.x += face * faceSize; 3211 if(mipInt < cubeUV_maxMipLevel){ 3212 uv.y += 2.0 * cubeUV_maxTileSize; 3213 } 3214 uv.y += filterInt * 2.0 * cubeUV_minTileSize; 3215 uv.x += 3.0 * max(0.0, cubeUV_maxTileSize - 2.0 * faceSize); 3216 uv *= texelSize; 3217 vec4 tl = texture2D(envMap, uv); 3218 uv.x += texelSize; 3219 vec4 tr = texture2D(envMap, uv); 3220 uv.y += texelSize; 3221 vec4 br = texture2D(envMap, uv); 3222 uv.x -= texelSize; 3223 vec4 bl = texture2D(envMap, uv); 3224 return TextureCubeUVData( tl, tr, br, bl, f ); 3225 }`,[ep,ey,ex,ef,em,eg,ev])).useKeywords=!1,{bilinearCubeUV:eb,roughnessToMip:new Sj(`float roughnessToMip(float roughness) { 3226 float mip = 0.0; 3227 if (roughness >= r1) { 3228 mip = (r0 - roughness) * (m1 - m0) / (r0 - r1) + m0; 3229 } else if (roughness >= r4) { 3230 mip = (r1 - roughness) * (m4 - m1) / (r1 - r4) + m1; 3231 } else if (roughness >= r5) { 3232 mip = (r4 - roughness) * (m5 - m4) / (r4 - r5) + m4; 3233 } else if (roughness >= r6) { 3234 mip = (r5 - roughness) * (m6 - m5) / (r5 - r6) + m5; 3235 } else {
3236 mip = -2.0 * log2(1.16 * roughness);// 1.16 = 1.79^0.25 3237 } 3238 return mip; 3239 }`,[new SH("float r0 1.0",!0),new SH("float v0 0.339",!0),ew=new SH("float m0 -2.0",!0),new SH("float r1 0.8",!0),new SH("float v1 0.276",!0),new SH("float m1 -1.0",!0),new SH("float r4 0.4",!0),new SH("float v4 0.046",!0),new SH("float m4 2.0",!0),new SH("float r5 0.305",!0),new SH("float v5 0.016",!0),new SH("float m5 3.0",!0),new SH("float r6 0.21",!0),new SH("float v6 0.0038",!0),new SH("float m6 4.0",!0)]),m0:ew,cubeUV_maxMipLevel:ef});var S3=class extends SL{constructor(e){super("v3"),this.nodeType="Normal",this.scope=e??S3.VIEW}getShared(){return this.scope===S3.WORLD}build(e,t,i,r){let s=e.context[this.scope+"Normal"];return s?s.build(e,t,i,r):super.build(e,t,i)}generate(e,t,i,r,s){let a;switch(this.scope){case S3.VIEW:a=e.isShader("vertex")?"transformedNormal":"geometryNormal";break;case S3.LOCAL:e.isShader("vertex")?a="objectNormal":(e.requires.normal=!0,a="vObjectNormal");break;case S3.WORLD:e.isShader("vertex")?a="inverseTransformDirection( transformedNormal, viewMatrix ).xyz":(e.requires.worldNormal=!0,a="vWNormal")}return e.format(a,this.getType(e),t)}};S3.LOCAL="local",S3.WORLD="world",S3.VIEW="view",S3.NORMAL="normal",SR.addKeyword("viewNormal",function(){return new S3(S3.VIEW)}),SR.addKeyword("localNormal",function(){return new S3(S3.NORMAL)}),SR.addKeyword("worldNormal",function(){return new S3(S3.WORLD)});var S4=class extends SL{constructor(e){super("v3"),this.nodeType="Position",this.scope=e??S4.LOCAL}getType(){return this.scope===S4.PROJECTION?"v4":this.type}getShader(){switch(this.scope){case S4.LOCAL:case S4.WORLD:return!1}return!0}generate(e,t,i,r,s){let a;switch(this.scope){case S4.LOCAL:e.isShader("vertex")?a="transformed":(e.requires.position=!0,a="vPosition");break;case S4.WORLD:if(e.isShader("vertex"))return"( modelMatrix * vec4( transformed, 1.0 ) ).xyz";e.requires.worldPosition=!0,a="vWPosition";break;case S4.VIEW:a=e.isShader("vertex")?"-mvPosition.xyz":"vViewPosition";break;case S4.PROJECTION:a=e.isShader("vertex")?"( projectionMatrix * modelViewMatrix * vec4( position, 1.0 ) )":"vec4( 0.0 )"}return e.format(a,this.getType(),t)}};S4.LOCAL="local",S4.WORLD="world",S4.VIEW="view",S4.PROJECTION="projection",SR.addKeyword("position",function(){return new S4}),SR.addKeyword("worldPosition",function(){return new S4(S4.WORLD)}),SR.addKeyword("viewPosition",function(){return new S4(S4.VIEW)});var S5=class extends SL{constructor(e){super("v3"),this.nodeType="Reflect",this.scope=e??S5.CUBE}getUnique(e){return!e.context.viewNormal}getType(){return this.scope===S5.SPHERE?"v2":this.type}generate(e,t){let i=this.getUnique(e);if(!e.isShader("fragment"))return console.warn("ReflectNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.type,t);{let r;switch(this.scope){case S5.VECTOR:{let t=new S3(S3.VIEW),s=e.context.roughness,a=t.build(e,"v3"),o=new S4(S4.VIEW).build(e,"v3"),l=s?s.build(e,"f"):void 0,h=`reflect( -normalize( ${o} ), ${a} )`;l&&(h=`normalize( mix( ${h}, ${a}, ${l} * ${l} ) )`);let c=`inverseTransformDirection( ${h}, viewMatrix )`;i?(e.addNodeCode(`vec3 reflectVec = ${c};`),r="reflectVec"):r=c;break}case S5.CUBE:{let t=new S5(S5.VECTOR).build(e,"v3"),s="vec3( -"+t+".x, "+t+".yz )";i?(e.addNodeCode(`vec3 reflectCubeVec = ${s};`),r="reflectCubeVec"):r=s;break}case S5.SPHERE:{let t="normalize( ( viewMatrix * vec4( "+new S5(S5.VECTOR).build(e,"v3")+", 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) ).xy * 0.5 + 0.5";i?(e.addNodeCode(`vec2 reflectSphereVec = ${t};`),r="reflectSphereVec"):r=t}}return e.format(r,this.getType(),t)}}};S5.CUBE="cube",S5.SPHERE="sphere",S5.VECTOR="vector";var S6=class extends SL{constructor(e=new SZ,t,i){super("v4"),this.nodeType="TextureCube",this.value=e,this.radianceNode=new S2(this.value,t??new S5(S5.VECTOR),i),this.irradianceNode=new S2(this.value,new S3(S3.WORLD),new SJ(1).setReadonly(!0))}generate(e,t){return e.isShader("fragment")?(e.require("irradiance"),e.context.bias&&e.context.bias.setTexture(this.value),("irradiance"===e.slot?this.irradianceNode:this.radianceNode).build(e,t)):(console.warn("TextureCubeNode is not compatible with "+e.shader+" shader."),e.format("vec4( 0.0 )",this.getType(e),t))}},S8=class extends SB{constructor(e=new r7,t,i){super("v4",{shared:!0}),this.nodeType="CubeTexture",this.value=e,this.uv=t??new S5,this.bias=i}getTexture(e,t){return super.generate(e,t,this.value.uuid,"tc")}generate(e,t){let i;if("samplerCube"===t)return this.getTexture(e,t);let r=this.getTexture(e,t),s=this.uv?.build(e,"v3"),a=this.bias?this.bias.build(e,"f"):void 0;void 0===a&&e.context.bias&&(a=e.context.bias.setTexture(this).build(e,"f")),i=a?"texCubeBias( "+r+", "+s+", "+a+" )":"texCube
3239( "+r+", "+s+" )";let o={include:e.isShader("vertex"),ignoreCache:!0},l=this.getType(e);return e.addContext(o),this.colorSpace=this.colorSpace??new SQ(new SK("",l)),this.colorSpace.fromDecoding(e.getTextureEncodingFromMap(this.value)),this.colorSpace.input.parse(i),i=this.colorSpace.build(e,l),e.removeContext(),e.format(i,l,t)}},S9=` 3240uniform int frameIndex; 3241uniform vec2 resolution; 3242uniform mat4 previousModelViewMatrix; 3243uniform mat4 previousProjectionMatrix; 3244 3245varying vec4 vCurrentPosition; 3246varying vec4 vPreviousPosition; 3247`,S7=` 3248layout(location = 1) out vec4 gVelocity; 3249 3250uniform int frameIndex; 3251uniform vec2 resolution; 3252 3253varying vec4 vCurrentPosition; 3254varying vec4 vPreviousPosition; 3255 3256const vec2 haltonSequence[16] = vec2[16]( 3257vec2( 0.000000,-0.333334), 3258vec2(-0.500000, 0.333334), 3259vec2( 0.500000,-0.777778), 3260vec2(-0.750000,-0.111112), 3261vec2( 0.250000, 0.555556), 3262vec2(-0.250000,-0.555556), 3263vec2( 0.750000, 0.111112), 3264vec2(-0.875000, 0.777778), 3265vec2(0.125000, -0.925926), 3266vec2(-0.375000, -0.259260), 3267vec2(0.625000, 0.407408), 3268vec2(-0.625000, -0.703704), 3269vec2(0.375000, -0.037038), 3270vec2(-0.125000, 0.629630), 3271vec2(0.875000, -0.481482), 3272vec2(-0.937500, 0.185186)); 3273 3274vec2 vogelDiskSample(int sampleIndex, int sampleCount, float angle) { 3275 const float goldenAngle = 2.399963f; // radians 3276 float r = sqrt(float(sampleIndex) + 0.5f) / sqrt(float(sampleCount)); 3277 float theta = float(sampleIndex) * goldenAngle + angle; 3278 float sine = sin(theta); 3279 float cosine = cos(theta); 3280 return vec2(cosine, sine) * r; 3281} 3282 3283// Derived from the interleaved gradient function from Jimenez 2014 http:goo.gl/eomGso 3284float getNoiseInterleavedGradient(vec2 screenPos) { 3285 vec3 magic = vec3(0.06711056f, 0.00583715f, 52.9829189f); 3286 return fract(magic.z * fract(dot(screenPos, magic.xy))); 3287} 3288 3289`,_e=` 3290// TODO: This could be generated CPU side and passed to the shader every frame 3291const vec2 haltonSequence[16] = vec2[16]( 3292vec2( 0.000000,-0.333334), 3293vec2(-0.500000, 0.333334), 3294vec2( 0.500000,-0.777778), 3295vec2(-0.750000,-0.111112), 3296vec2( 0.250000, 0.555556), 3297vec2(-0.250000,-0.555556), 3298vec2( 0.750000, 0.111112), 3299vec2(-0.875000, 0.777778), 3300vec2(0.125000, -0.925926), 3301vec2(-0.375000, -0.259260), 3302vec2(0.625000, 0.407408), 3303vec2(-0.625000, -0.703704), 3304vec2(0.375000, -0.037038), 3305vec2(-0.125000, 0.629630), 3306vec2(0.875000, -0.481482), 3307vec2(-0.937500, 0.185186)); 3308 3309// TODO: Pass correct view size 3310vec2 offset = haltonSequence[frameIndex]; 3311offset.x /= resolution.x; 3312offset.y /= resolution.y; 3313 3314vec4 currentPosition = gl_Position; 3315vec4 currentPositionJittered = currentPosition + (vec4(offset.x, offset.y, 0.0, 0.0) * currentPosition.w); 3316 3317// We want to calculate the velocity with unjittered positions 3318// so that things that are not moving get a velocity = 0 3319vCurrentPosition = currentPosition; 3320vPreviousPosition = previousProjectionMatrix * previousModelViewMatrix * vec4(transformed, 1.0); 3321#ifdef OUTLINE_COMPENSATION 3322vPreviousPosition.xy += OUTLINE_COMPENSATION; 3323#endif 3324gl_Position = currentPositionJittered; 3325 3326`,_t=` 3327vec2 oldPos = vPreviousPosition.xy; 3328 oldPos /= vPreviousPosition.w; 3329 oldPos.xy = (oldPos.xy+1.)/2.0; 3330 3331vec2 newPos = vCurrentPosition.xy; 3332 newPos /= vCurrentPosition.w; 3333 newPos.xy = (newPos.xy+1.)/2.0; 3334 3335vec2 velocity = (newPos - oldPos); 3336 3337// Discard fully transparent pixels 3338if (gl_FragColor.a <= 0.0) discard; 3339 3340gVelocity = vec4(velocity, 0.0, 1.0); 3341`,_i=` 3342layout(location = 1) out vec4 gVelocity; 3343`,_r=` 3344 // Discard fully transparent pixels 3345 if (gl_FragColor.a <= 0.0) discard; 3346 3347 gVelocity = vec4(0.0, 0.0, 0.0, 1.0); 3348`,_s=["x","y","z","w"],_a=["float","vec2","vec3","vec4"],_n={float:"f",vec2:"v2",vec3:"v3",vec4:"v4",mat4:"v4",int:"i",bool:"b","float[]":"f[]","vec4[]":"v4[]"},_o={t:"sampler2D",tc:"samplerCube",b:"bool",i:"int",f:"float",c:"vec3",v2:"vec2",v3:"vec3",v4:"vec4",m3:"mat3",m4:"mat4","f[]":"float[]","v4[]":"vec4[]"},_l=class{constructor(){this.includes={consts:{},functions:{},structs:{}},this.cache="",this.slot="",this.shader="",this.context={},this.needsJitter=!0,this.getIncludesCode=function(){function e(e,t){return e.deps.length-t.deps.length}return function(t,i){let r=this.getIncludes(t,i);if(!r)return"";let s="";r=r.sort(e);for(let e=0;e<r.length;e++)r[e].src&&(s+=r[e].src+` 3349`);return s}}(),this.slots=[],this.caches=[],this.contexts=[],this.keywords={},this.nodeData={},this.fragmentVariables={},this.fragmentParsVariables={},this.vertexParsVariables={},this.requires={uv:[],color:[],transparent:!1,irradiance:!1,position:!1,worldPosition:!1,normal:!1,worldNormal:!1,vWorldViewDir:!1,modelMatrix:!1,viewMatrix:!1,projectionMatrix:!1},this.includes={consts:[],functions:[],structs:[]},this.attributes={}
vendor: 4,744 bytes, lines 3349-3392
3349,this.prefixCode=["#ifdef TEXTURE_LOD_EXT"," #define texCube(a, b) textureCube(a, b)"," #define texCubeBias(a, b, c) textureCubeLodEXT(a, b, c)"," #define tex2D(a, b) texture2D(a, b)"," #define tex2DBias(a, b, c) texture2DLodEXT(a, b, c)","#else"," #define texCube(a, b) textureCube(a, b)"," #define texCubeBias(a, b, c) textureCube(a, b, c)"," #define tex2D(a, b) texture2D(a, b)"," #define tex2DBias(a, b, c) texture2D(a, b, c)","#endif",` 3350 // NOTE: Include Spline's blending modes. This could be part of BlendNode 3351 #define SPE_BLENDING_NORMAL 0 3352 #define SPE_BLENDING_MULTIPLY 1 3353 #define SPE_BLENDING_SCREEN 2 3354 #define SPE_BLENDING_OVERLAY 3 3355 3356 vec3 spe_normalBlend( vec3 a, vec3 b, float alpha ) { 3357 return mix( a, b, alpha ); 3358 } 3359 3360 vec3 spe_multiplyBlend( vec3 a, vec3 b, float alpha ) { 3361 return mix( a, a * b, alpha ); 3362 } 3363 3364 vec3 spe_screenBlend( vec3 a, vec3 b, float alpha ) { 3365 vec3 tmp = 1.0 - ( 1.0 - a ) * ( 1.0 - b ); 3366 return mix( a, tmp, alpha ); 3367 } 3368 3369 vec3 spe_overlayBlend( vec3 a, vec3 b, float alpha ) { 3370 vec3 tmp = mix( 1. - 2. * (1. - a) * (1. - b), 2. * a * b, step( a, vec3(.5) ) ); 3371 return clamp( mix( a, tmp, alpha ), 0.0, 1.0 ); 3372 } 3373 3374 vec3 spe_blend( vec3 a, vec3 b, float alpha, int mode ) { 3375 if ( mode == SPE_BLENDING_NORMAL ) return spe_normalBlend( a, b, alpha ); 3376 else if ( mode == SPE_BLENDING_MULTIPLY ) return spe_multiplyBlend( a, b, alpha ); 3377 else if ( mode == SPE_BLENDING_SCREEN ) return spe_screenBlend( a, b, alpha ); 3378 else if ( mode == SPE_BLENDING_OVERLAY ) return spe_overlayBlend( a, b, alpha ); 3379 return vec3( 1.0 ); 3380 } 3381 `,"#include <packing>","#include <common>"].join(` 3382`),this.parsCode={vertex:["float neighbor_offset = 0.0001;",""].join(` 3383`),fragment:["float accumAlpha = 0.0;",`void accumulateAlpha(float alpha) { 3384 accumAlpha += (1.0 - accumAlpha) * alpha; 3385 }`,""].join(` 3386`)},this.code={vertex:"",fragment:""},this.nodeCode={vertex:"",fragment:""},this.resultCode={vertex:"",fragment:""},this.finalCode={vertex:"",fragment:""},this.inputs={uniforms:{list:[],vertex:[],fragment:[]},arrayUniforms:{list:[],vertex:[],fragment:[]},vars:{varying:[],vertex:[],fragment:[]}},this.defines={},this.uniforms={},this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.updaters=[],this.nodes=[],this.analyzing=!1}build(e,t){this.addVertexParsCode(S9),this.addFragmentParsCode(S7),this.buildShader("vertex",e),this.buildShader("fragment",t);for(let e=0;e<this.requires.uv.length;e++)if(this.requires.uv[e]){let t=e>0?e+1:"";this.addVaryCode("varying vec2 vUv"+t+";"),e>0&&this.addVertexParsCode("attribute vec2 uv"+t+";"),this.addVertexFinalCode("vUv"+t+" = uv"+t+";")}return this.requires.color[0]&&(this.addVaryCode("varying vec4 vColor;"),this.addVertexParsCode("attribute vec4 color;"),this.addVertexFinalCode("vColor = color;")),this.requires.color[1]&&(this.addVaryCode("varying vec4 vColor2;"),this.addVertexParsCode("attribute vec4 color2;"),this.addVertexFinalCode("vColor2 = color2;")),this.requires.position&&(this.addVaryCode("varying vec3 vPosition;"),this.addVertexFinalCode("vPosition = transformed;")),this.requires.worldPosition,this.requires.normal&&(this.addVaryCode("varying vec3 vObjectNormal;"),this.addVertexFinalCode(` 3387 #ifndef SHAPEBLEND 3388 vObjectNormal = normal; 3389 #else 3390 vObjectNormal = objectNormal; 3391 #endif 3392 `)),this.requires.modelMatrix&&this.addFragmentParsCode("uniform mat4 modelMatrix;"),this.requires.viewMatrix&&this.addFragmentParsCode("uniform mat4 viewMatrix;"),this.requires.projectionMatrix&&this.addFragmentParsCode("uniform mat4 projectionMatrix;"),this.requires.worldNormal&&(this.addVaryCode("varying vec3 vWNormal;"),this.addVertexFinalCode("vWNormal = inverseTransformDirection( transformedNormal, viewMatrix ).xyz;")),this.requires.vWorldViewDir&&(this.addVaryCode("varying vec3 vWorldViewDir;"),this.addVertexFinalCode("vWorldViewDir = isPerspectiveMatrix( projectionMatrix ) ? ( (modelMatrix * vec4(position, 1.0)).xyz - cameraPosition ) : vec3( -viewMatrix[0][2], -viewMatrix[1][2], -viewMatrix[2][2] );")),this.needsJitter&&(this.addVertexFinalCode(_e),this.addFragmentFinalCode(_t)),this}buildShader(e,t){this.resultCode[e]=t.build(this.setShader(e),"v4")}setMaterial(e,t){return this.defines={},this}addFlow(e,t,i){return this.addSlot(e).addCache(t).addContext(i)}removeFlow(){return this.removeSlot().removeCache().removeContext()}addCache(e){return this.cache=e??"",this.caches.push(this.cache),this}removeCache(){return this.caches.pop(),this.cache=this.caches[this.caches.length-1]||"",this}addContext(e){return this.context=Object.assign({},this.context,e),this.context.extra=this.context.extra||{},this.contexts.push(this.context),this}
vendor: 9,920 bytes, lines 3392-3399
3392removeContext(){return this.contexts.pop(),this.context=this.contexts[this.contexts.length-1]||{},this}addSlot(e){return this.slot=e||"",this.slots.push(this.slot),this}removeSlot(){return this.slots.pop(),this.slot=this.slots[this.slots.length-1]||"",this}addFragmentVariable(e,t){void 0===this.fragmentVariables[e]&&(this.addFragmentCode(`${t} ${e};`),this.fragmentVariables[e]="")}addFragmentParsVariable(e,t){void 0===this.fragmentParsVariables[e]&&(this.addFragmentParsCode(`${t} ${e};`),this.fragmentParsVariables[e]="")}addVertexParsVariable(e,t){void 0===this.vertexParsVariables[e]&&(this.addVertexParsCode(`${t} ${e};`),this.vertexParsVariables[e]="")}addVertexCode(e){this.addCode(e,"vertex")}addFragmentCode(e){this.addCode(e,"fragment")}addCode(e,t){this.code[t??this.shader]+=e+` 3393`}addVertexNodeCode(e){this.addNodeCode(e,"vertex")}addFragmentNodeCode(e){this.addNodeCode(e,"fragment")}addNodeCode(e,t){this.nodeCode[t??this.shader]+=e+` 3394`}clearNodeCode(e){e=e??this.shader;let t=this.nodeCode[e];return this.nodeCode[e]="",t}clearVertexNodeCode(){return this.clearNodeCode("vertex")}clearFragmentNodeCode(){return this.clearNodeCode("fragment")}addVertexFinalCode(e){this.addFinalCode(e,"vertex")}addFragmentFinalCode(e){this.addFinalCode(e,"fragment")}addFinalCode(e,t){this.finalCode[t??this.shader]+=e+` 3395`}addVertexParsCode(e){this.addParsCode(e,"vertex")}addFragmentParsCode(e){this.addParsCode(e,"fragment")}addParsCode(e,t){this.parsCode[t??this.shader]+=e+` 3396`}addVaryCode(e){this.addVertexParsCode(e),this.addFragmentParsCode(e)}isCache(e){return -1!==this.caches.indexOf(e)}isSlot(e){return -1!==this.slots.indexOf(e)}define(e,t){this.defines[e]=void 0===t?1:t}require(e){this.requires[e]=!0}isDefined(e){return void 0!==this.defines[e]}getVar(e,t,i,r="varying",s="V",a=""){let o=this.getVars(r),l=o[e];if(!l){let r=o.length;l={name:i||"node"+s+r+(a?"_"+a:""),type:t},o.push(l),o[e]=l}return l}getTempVar(e,t,i,r){return this.getVar(e,t,i,this.shader,"T",r)}getAttribute(e,t){if(!this.attributes[e]){let i=this.getVar(e,t);this.addVertexParsCode("attribute "+t+" "+e+";"),this.addVertexFinalCode(i.name+" = "+e+";"),this.attributes[e]={varying:i,name:e,type:t}}return this.attributes[e]}getCode(e){return[this.prefixCode,this.parsCode[e],this.getVarListCode(this.getVars("varying"),"varying"),this.getVarListCode(this.inputs.uniforms[e],"uniform"),this.getVarListCode(this.inputs.arrayUniforms[e],"uniform"),this.getIncludesCode("consts",e),this.getIncludesCode("structs",e),this.getIncludesCode("functions",e),"void main() {",this.getVarListCode(this.getVars(e)),this.code[e],this.resultCode[e],this.finalCode[e],"}"].join(` 3397`)}getVarListCode(e,t){t=t??"";let i="";for(let r=0,s=e.length;r<s;++r){let s=e[r],a=s.type,o=s.name,l=s.size,h=this.getFormatByType(a);if(void 0===h)throw Error("Node pars "+h+" not found.");h.includes("[]")?i+=t+" "+h.substring(0,h.length-2)+" "+o+`[${l}]; 3398`:i+=t+" "+h+" "+o+`; 3399`}return i}getVars(e){return this.inputs.vars[e??this.shader]}getNodeData(e){let t=e instanceof SI?e.uuid:e;return this.nodeData[t]=this.nodeData[t]||{}}createUniform(e,t,i,r,s,a){if(t.includes("[]")){let o=this.inputs.arrayUniforms,l=o.list.length,h=new SO({type:t,size:i.size,name:r||"nodeUA"+l+(a?"_"+a:""),node:i,needsUpdate:s});return o.list.push(h),o[e].push(h),o[e][h.name]=h,this.uniforms[h.name]=h,h}{let o=this.inputs.uniforms,l=o.list.length,h=new SO({type:t,name:r||"nodeU"+l+(a?"_"+a:""),node:i,needsUpdate:s});return o.list.push(h),o[e].push(h),o[e][h.name]=h,this.uniforms[h.name]=h,h}}createVertexUniform(e,t,i,r,s){return this.createUniform("vertex",e,t,i,r,s)}createFragmentUniform(e,t,i,r,s){return this.createUniform("fragment",e,t,i,r,s)}include(e,t,i){let r;if(e="string"==typeof e?SR.get(e):e,!1===this.context.include)return e.name;e instanceof Sj?r=this.includes.functions:e instanceof SH?r=this.includes.consts:e instanceof SX&&(r=this.includes.structs);let s=r[this.shader]=r[this.shader]||[];if(e){let r=s[e.name];if(r||(r=s[e.name]={node:e,deps:[]},s.push(r),r.src=e.build(this,"source")),e instanceof Sj&&t&&s[t.name]&&-1===s[t.name].deps.indexOf(e)&&(s[t.name].deps.push(e),e.includes?.length)){let i=0;do this.include(e.includes[i++],t);while(i<e.includes.length)}return i&&(r.src=i),e.name}throw Error("Include not found.")}colorToVectorProperties(e){return e.replace("r","x").replace("g","y").replace("b","z").replace("a","w")}colorToVector(e){return e.replace(/c/g,"v3")}getIncludes(e,t){return this.includes[e][t||this.shader]}getConstructorFromLength(e){return _a[e-1]}isTypeMatrix(e){return/^m/.test(e)}getTypeLength(e){return"f"===e?1:parseInt(this.colorToVector(e).substr(1))}getTypeFromLength(e){return 1===e?"f":"v"+e}findNode(...e){for(let t=0;t<arguments.length;t++){let i=e[t];if(i?.isNode)return i}}resolve(...e){for(let t=0;t<arguments.length;t++){let i=e[t];if(void 0!==i){if(i.isNode)return i;if(i.isTexture)switch(i.mapping){case 301:case 302:return new S8(i);case 306:return new S6(new SZ(i));default:return new SZ(i)}else{if(i.isVector2)return new Sz(i);if(i.isVector3)return new SF(i);if(i.isVector4)return new Sk(i)}}}}format(e,t,i){switch(this.colorToVector(i+" <- "+t)){case"f <- v2":case"f <- v3":case"f <- v4":return e+".x";case"f <- i":case"f <- b":return"float( "+e+" )";case"v2 <- f":return"vec2( "+e+" )";case"v2 <- v3":case"v2 <- v4":return e+".xy";case"v2 <- i":case"v2 <- b":case"v3 <- i":case"v3 <- b":return"vec2( float( "+e+" ) )";case"v3 <- f":return"vec3( "+e+" )";case"v3 <- v2":return"vec3( "+e+", 0.0 )";case"v3 <- v4":return e+".xyz";case"v4 <- f":return"vec4( "+e+" )";case"v4 <- v2":return"vec4( "+e+", 0.0, 1.0 )";case"v4 <- v3":return"vec4( "+e+", 1.0 )";case"v4 <- i":case"v4 <- b":return"vec4( float( "+e+" ) )";case"i <- f":case"i <- b":return"int( "+e+" )";case"i <- v2":case"i <- v3":case"i <- v4":return"int( "+e+".x )";case"b <- f":return"( "+e+" != 0.0 )";case"b <- v2":return"( "+e+" != vec2( 0.0 ) )";case"b <- v3":return"( "+e+" != vec3( 0.0 ) )";case"b <- v4":return"( "+e+" != vec4( 0.0 ) )";case"b <- i":return"( "+e+" != 0 )"}return e}getTypeByFormat(e){return _n[e]||e}getFormatByType(e){return _o[e]||e}getUUID(e,t){return(t=void 0===t||t)&&this.cache&&(e=this.cache+"-"+e),e}getElementByIndex(e){return _s[e]}getIndexByElement(e){return _s.indexOf(e)}isShader(e){return this.shader===e}setShader(e){return this.shader=e,this}mergeDefines(e){for(let t in e)this.defines[t]=e[t];return this.defines}mergeUniform(e){for(let t in e)this.uniforms[t]=e[t];return this.uniforms}getTextureEncodingFromMap(e){let t;return e?e.isTexture&&(t=e.encoding):t=3e3,3e3===t&&this.context.gamma&&(t=3001),t}},_h=class extends SB{constructor(e=0,t,i,r){super("c"),this.nodeType="Color",this.value=e instanceof SN?e:new SN(e||0,t,i,r)}setRGBA(e){this.value.setRGBA(e.r,e.g,e.b,e.a)}generate(e,t,i,r,s,a){i=e.getUUID(i??this.getUUID()),r=r??this.getType(e);let o=e.getNodeData(i),l=this.getReadonly()&&void 0!==this.generateReadonly;if(this.alpha){let t=this.alpha.build(e,"f");e.addFragmentNodeCode(`accumAlpha += ( 1.0 - accumAlpha ) * ${t};`)}return l?this.generateReadonly(e,t,i,r,s,a):e.isShader("vertex")?(o.vertex||(o.vertex=e.createVertexUniform(r,this,s,a,this.getLabel())),e.format(o.vertex.name,r,t)):(o.fragment||(o.fragment=e.createFragmentUniform(r,this,s,a,this.getLabel())),e.format(o.fragment.name,r,t))}generateReadonly(e,t,i,r,s,a){return e.format("vec3("+this.value.r+", "+this.value.g+", "+this.value.b+")",r,t)}},_c=class extends SB{constructor(e){super("i"),this.nodeType="Int",this.value=Math.floor(e??0)}generateReadonly(e,t,i,r,s,a){return e.format(this.value.toString(),r,t)}},_d=class extends SB{constructor(e){super("b"),this.nodeType="Bool",this.value=e??!1}generateReadonly(e,t,i,r){return e.format(this.value?"true":"false",r,t)}},_u=class extends SB{constructor(e=1,t){super("f[]"),this.nodeType="FloatArray",this.size=e,this.value=Array.isArray(t)?t:"number"==typeof t?Array(e).fill(t):Array(e).fill(0)}},_p=class extends SB{},_f=class extends _p{constructor(e){super("v3"),this.image=e,this._value=new iv}get value(){return this._value.x=this.image.isVideo?this.image.img.videoWidth??0:this.image.img.width,this._value.y=this.image.isVideo?this.image.img.videoHeight??0:this.image.img.height,this._value}},_m=class extends _p{constructor(e,t,i=1008,r=1006){super("t"),this.image=e,this.wrap=t,this.minFilter=i,this.magFilter=r}get value(){return this.image.getTexture(this.wrap,this.minFilter,this.magFilter)}},_g=class extends SB{constructor(e){super("m3"),this.nodeType="Matrix3",this.value=e??new tK}generateReadonly(e,t,i,r,s,a){return e.format("mat3("+this.value.elements.join(", ")+")",r,t)}get elements(){return this.value.elements}set elements(e){this.value.fromArray(e)}},_v=class extends SB{constructor(e){super("m4"),this.nodeType="Matrix4",this.value=e??new iX}generateReadonly(e,t,i,r,s,a){return e.format("mat4("+this.value.elements.join(", ")+")",r,t)}get elements(){return this.value.elements}set elements(e){this.value.fromArray(e)}};function _y(e,t,i,r=0){e.setUvTransform(i[0],i[1],t[0],t[1],0,0,0).premultiply(new tK().makeRotation(r*tY.DEG2RAD))}var _x=class extends _g{constructor(e,t,i=0){super(new tK),this.repeat=e,this.offset=t,this.rotation=i,_y(this.value,e,t,i)}updateMatrix(){_y(this.value,this.repeat,this.offset,this.rotation)}},_b=class extends SB{constructor(e=1,t){super("v4[]"),this.nodeType="Vector4Array",this.size=e,this.value=Array.isArray(t)?t:t instanceof ic?Array(e).fill(t):Array(e).fill(new ic(0))}},_w=class extends SL{constructor(e,t,i,r){super("v3"),this.nodeType="Blend",this.a=e,this.b=t,this.alpha=i,this.mode=r}generate(e,t){if(!e.isShader("fragment"))return console.warn("BlendNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{let i=[];return i.push(this.a.build(e,"c")),i.push(this.b.build(e,"c")),i.push(this.alpha.build(e,"f")),i.push(this.mode.build(e,"i")),e.format("spe_blend("
3399+i.join(",")+")",this.getType(e),t)}}},_S=class extends SL{constructor(e,t){super("v3"),this.nodeType="CustomColor",this.color=e,this.alpha=t,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(!e.isShader("fragment"))return console.warn("CustomColorNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{let i=e.include(_S.Nodes.customColor);e.addFragmentVariable(this.calpha,"float");let r=[];return r.push(this.color.build(e,"v3")),r.push(this.mask?`luminance(${this.mask.build(e,"v3")})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_S.Nodes={customColor:new Sj(`vec3 customColor(vec3 color, float mask, float alpha, out float calpha) { 3400 float lalpha = alpha * mask; 3401 calpha = lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0); 3402 accumAlpha += (1.0 - accumAlpha) * lalpha; 3403 3404 return color; 3405 }`)};var __=class extends SL{constructor(e,t){super("v3"),this.nodeType="CustomNormal",this.cnormal=e,this.alpha=t,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(!e.isShader("fragment"))return console.warn("CustomNormalNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{let i=e.include(__.Nodes.customNormal);e.addFragmentVariable(this.calpha,"float");let r=[];return r.push(this.cnormal.build(e,"v3")),r.push("normal"),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};__.Nodes={customNormal:new Sj(`vec3 customNormal(vec3 cnormal, vec3 norm, float mask, float alpha, out float calpha) { 3406 vec3 normal = packNormalToRGB( norm ).rgb; 3407 normal *= step( vec3(0.5), cnormal ); 3408 3409 float lalpha = alpha * mask; 3410 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 3411 accumAlpha += ( 1.0 - accumAlpha ) * lalpha; 3412 3413 return normal; 3414 }`)};var _A=class extends SL{constructor(e,t,i,r,s,a,o,l,h,c,d,u){super("v3"),this.nodeType="CustomTexture",this.texture=e,this.textureSize=t,this.crop=i,this.projection=r,this.axis=s,this.side=a,this.size=o,this.blending=l,this.mat=h,this.isMask=u,this.alpha=c,this.mode=d,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){e.require("position"),e.require("normal"),e.require("uv"),e.requires.uv=[!0],e.extensions.shaderTextureLOD=!0,e.extensions.derivatives=!0;let i=`g${this.uuid.toString().replace(/-/g,"")}`,r;switch(this.projection.value){case 3:r=e.include(_A.Nodes.cylindrical);break;case 2:r=e.include(_A.Nodes.spherical);break;case 1:let s=["vec3(1.0, 0.0, 0.0)","vec3(0.0, 1.0, 0.0)","vec3(0.0, 0.0, 1.0)"][this.axis.value],a=["zy","xz","xy"][this.axis.value],o=new Sj(` 3415 vec3 ${i}_planarTexture(vec3 normal, sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float blending, bool isMask, float mask, float alpha, int mode, out float calpha, out vec2 writeUv) { 3416 vec2 projected = (1. + (position.${a})) / 2.; 3417 vec2 uvs = ( mat * vec3( (projected * 2. - 1.) / (size * .5), 1. ) / 2. + 0.5 ).xy; 3418 writeUv = uvs; 3419 3420 vec4 tmp = texture2D( tex, uvs ); 3421 3422 vec3 col = tmp.rgb; 3423 float lalpha = alpha * tmp.a; 3424 ${2===this.side.value?"":`lalpha *= step(0.0, ${1===this.side.value?"-1.0 * ":""}dot(vObjectNormal, ${s}));`} 3425 3426 if ( crop > 0.5 ) { 3427 if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 ) { 3428 lalpha = 0.0; 3429 } 3430 } 3431 3432 lalpha *= mask; 3433 3434 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 3435 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3436 3437 return col; 3438 }`);r=e.include(o);break;case 4:r=e.include(_A.Nodes.triplanar);break;default:r=e.include(_A.Nodes.uv)}e.addFragmentVariable(this.calpha,"float");let l=[];if(l.push("normal"),l.push(this.texture.generate(e,"t")),l.push(this.textureSize.build(e,"v2")),l.push(this.crop.build(e,"f")),l.push(this.mat.build(e,"mat3")),l.push(this.size.build(e,"v2")),l.push(this.blending.build(e,"f")),l.push(this.isMask.build(e,"b")),l.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),l.push(this.alpha.build(e,"f")),l.push(this.mode.build(e,"i")),l.push(this.calpha),4===this.projection.value){let t=`${i}_writeUvs`,r=t+"0",s=t+"1",a=t+"2",o=`${i}_triplanarWeights`;e.addFragmentVariable(r,"vec2"),e.addFragmentVariable(s,"vec2"),e.addFragmentVariable(a,"vec2"),e.addFragmentVariable(o,"vec3"),l.push(r),l.push(s),l.push(a),l.push(o)}else{let t=`${i}_writeUvs`;e.addFragmentVariable(t,"vec2"),l.push(t)}return e.format(r+"("+l.join(",")+")",this.getType(e),t)}};_A.Nodes={cylindrical:new Sj(` 3439vec3 cylindricalTexture(vec3 normal, sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float blending, bool isMask, float mask, float alpha, int mode, out float calpha, out vec2 writeUv) { 3440 vec3 posN = normalize(position); 3441 float u = 0.5 + atan(posN.z, posN.x) / (2.*3.1415); 3442 float scaledHeight = position.y / (size.y * 0.5); 3443 float v = (scaledHeight / 2.) + .5; 3444 3445 vec2 calculatedUv = vec2(u,v); 3446 vec2 uvs = ( mat * vec3( calculatedUv * 2. - 1., 1. ) / 2. + 0.5 ).xy; 3447 writeUv = uvs; 3448 3449 vec2 df = fwidth(uvs); 3450 if(df.x > 0.5) df.x = 0.; 3451 3452 #ifdef GL_EXT_shader_texture_lod 3453 vec4 tmp = texture2DLodEXT(tex, uvs, log2(max(df.x, df.y)*min(textureSize.x, textureSize.y))); 3454 #else 3455 vec4 tmp = textureLod(tex, uvs, log2(max(df.x, df.y)*min(textureSize.x, textureSize.y))); 3456 #endif 3457 3458 vec3 col = tmp.rgb;
3459 float lalpha = alpha * tmp.a; 3460 if ( crop > 0.5 ) { 3461 if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 ) { 3462 lalpha = 0.0; 3463 } 3464 } 3465 3466 lalpha *= mask; 3467 3468 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 3469 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3470 3471 return col; 3472 } 3473`),spherical:new Sj(` 3474vec3 sphericalTexture(vec3 normal, sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float blending, bool isMask, float mask, float alpha, int mode, out float calpha, out vec2 writeUv) { 3475 vec3 posN = normalize(vPosition); 3476 float u = 0.5 + atan(posN.z, posN.x) / (2.*3.1415); 3477 float v = 0.5 + asin(posN.y) / 3.1415; 3478 3479 vec2 calculatedUv = vec2(u,v); 3480 vec2 uvs = ( mat * vec3( calculatedUv * 2. - 1., 1. ) / 2. + 0.5 ).xy; 3481 writeUv = uvs; 3482 3483 vec2 df = fwidth(uvs); 3484 if(df.x > 0.5) df.x = 0.; 3485 #ifdef GL_EXT_shader_texture_lod 3486 vec4 tmp = texture2DLodEXT(tex, uvs, log2(max(df.x, df.y)*min(textureSize.x, textureSize.y))); 3487 #else 3488 vec4 tmp = textureLod(tex, uvs, log2(max(df.x, df.y)*min(textureSize.x, textureSize.y))); 3489 #endif 3490 3491 vec3 col = tmp.rgb; 3492 float lalpha = alpha * tmp.a; 3493 if ( crop > 0.5 ) { 3494 if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 ) { 3495 lalpha = 0.0; 3496 } 3497 } 3498 3499 lalpha *= mask; 3500 3501 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 3502 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3503 3504 return col; 3505 } 3506`),uv:new Sj(`vec3 uvTexture(vec3 normal, sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float blending, bool isMask, float mask, float alpha, int mode, out float calpha, out vec2 writeUv) { 3507 vec2 uvs = ( mat * vec3( vUv * 2. - 1., 1. ) / 2. + 0.5 ).xy; 3508 writeUv = uvs; 3509 3510 vec4 tmp = texture2D( tex, uvs ); 3511 3512 vec3 col = tmp.rgb; 3513 3514 float lalpha = alpha * tmp.a; 3515 if ( crop > 0.5 ) { 3516 if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 ) { 3517 lalpha = 0.0; 3518 } 3519 } 3520 3521 lalpha *= mask; 3522 3523 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 3524 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3525 3526 return col; 3527 }`),triplanar:new Sj(`vec3 triplanarTexture(vec3 normal, sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float blending, bool isMask, float mask, float alpha, int mode, out float calpha, out vec2 writeUvs0, out vec2 writeUvs1, out vec2 writeUvs2, out vec3 writeWeights) { 3528 vec3 p = position; 3529 vec2 uv0 = (1.0 + p.xy) / 2.0; 3530 vec2 uv1 = (1.0 + p.zy) / 2.0; 3531 vec2 uv2 = (1.0 + p.xz) / 2.0; 3532 3533 uv0 = (mat * vec3((uv0 * 2.0 - 1.0) / (size * 0.5), 1.0) / 2.0 + 0.5).xy; 3534 uv1 = (mat * vec3((uv1 * 2.0 - 1.0) / (size * 0.5), 1.0) / 2.0 + 0.5).xy; 3535 uv2 = (mat * vec3((uv2 * 2.0 - 1.0) / (size * 0.5), 1.0) / 2.0 + 0.5).xy; 3536 3537 // Range from 3 to 128 seems to be good 3538 float exponent = (1.0 - blending) * 125.0 + 3.0; 3539 3540 vec3 n = vObjectNormal; 3541 vec3 weights = abs(normalize(n)); 3542 weights = pow(weights, vec3(exponent)); 3543 weights /= dot(weights, vec3(1.0)); 3544 3545 // Write out all sets of UVs that we generated 3546 writeUvs0 = uv0; 3547 writeUvs1 = uv1; 3548 writeUvs2 = uv2; 3549 writeWeights = weights; 3550 3551 // Derivatives for LOD 3552 vec2 df0 = fwidth(uv0); 3553 vec2 df1 = fwidth(uv1); 3554 vec2 df2 = fwidth(uv2); 3555 if (df0.x > 0.5) df0.x = 0.0; 3556 if (df1.x > 0.5) df1.x = 0.0; 3557 if (df2.x > 0.5) df2.x = 0.0; 3558 3559 #ifdef GL_EXT_shader_texture_lod 3560 vec4 tmp = 3561 texture2DLodEXT(tex, uv0, log2(max(df0.x, df0.y)*min(textureSize.x, textureSize.y))) * weights.z + 3562 texture2DLodEXT(tex, uv1, log2(max(df1.x, df1.y)*min(textureSize.x, textureSize.y))) * weights.x + 3563 texture2DLodEXT(tex, uv2, log2(max(df2.x, df2.y)*min(textureSize.x, textureSize.y))) * weights.y; 3564 #else 3565 vec4 tmp = 3566 textureLod(tex, uv0, log2(max(df0.x, df0.y)*min(textureSize.x, textureSize.y))) * weights.z + 3567 textureLod(tex, uv1, log2(max(df1.x, df1.y)*min(textureSize.x, textureSize.y))) * weights.x + 3568 textureLod(tex, uv2, log2(max(df2.x, df2.y)*min(textureSize.x, textureSize.y))) * weights.y; 3569 #endif 3570 3571 vec3 col = tmp.rgb;
3572 float lalpha = alpha * tmp.a; 3573 3574 // Apply cropping across all 3 planes 3575 if ( crop > 0.5 ) { 3576 if ( uv0.x < 0.0 || uv0.x > 1.0 || uv0.y < 0.0 || uv0.y > 1.0 ) { 3577 lalpha = 0.0; 3578 } 3579 if ( uv1.x < 0.0 || uv1.x > 1.0 || uv1.y < 0.0 || uv1.y > 1.0 ) { 3580 lalpha = 0.0; 3581 } 3582 if ( uv2.x < 0.0 || uv2.x > 1.0 || uv2.y < 0.0 || uv2.y > 1.0 ) { 3583 lalpha = 0.0; 3584 } 3585 } 3586 3587 lalpha *= mask; 3588 calpha = lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0); 3589 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3590 3591 return col;//n * 0.5 + 0.5; 3592 } 3593 `)};var _M=class extends SL{constructor(e,t,i,r,s,a,o,l,h,c,d,u){super("v3"),this.nodeType="Depth",this.gradientType=e,this.smooth=t,this.near=i,this.far=r,this.isVector=s,this.isWorldSpace=a,this.origin=o,this.direction=l,this.colors=h,this.steps=c,this.isMask=u,this.alpha=d,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){let i=`g${this.uuid.toString().replace(/-/g,"")}`,r=new Sj(`vec3 ${i}_sdepth(float near, float far, vec3 origin, vec3 direction, vec4 colors[${i}_MAX_COLORS], float steps[${i}_MAX_COLORS], bool isMask, float mask, float alpha, out float calpha) { 3594 vec4 color = colors[0]; 3595 #ifdef ${i}_IS_VECTOR 3596 #ifdef ${i}_LINEAR 3597 #ifdef ${i}_WORLDSPACE 3598 float depth = vectorLinearWorldSpaceDepth(direction, origin, near, far); 3599 #else 3600 float depth = vectorLinearObjectSpaceDepth(direction, origin, near, far); 3601 #endif 3602 #else 3603 #ifdef ${i}_WORLDSPACE 3604 float depth = vectorSphericalWorldSpaceDepth(origin, near, far); 3605 #else 3606 float depth = vectorSphericalObjectSpaceDepth(origin, near, far); 3607 #endif 3608 #endif 3609 #else 3610 float dist = length(vWPosition - cameraPosition); 3611 float depth = ( dist - near ) / ( far - near ); 3612 #endif 3613 3614 3615 float p; 3616 #ifdef ${i}_SMOOTH 3617 for ( int i = 1; i < ${i}_MAX_COLORS; i++ ) { 3618 p = clamp( ( depth - steps[i-1] ) / ( steps[i] - steps[i-1] ), 0.0, 1.0 ); 3619 color = mix(color, colors[i], smoothstep(0.0, 1.0, p)); 3620 } 3621 #else 3622 for ( int i = 1; i < ${i}_MAX_COLORS; i++ ) { 3623 p = clamp(( depth - steps[i - 1] ) / ( steps[i] - steps[i - 1] ), 0.0, 1.0); 3624 color = mix(color, colors[i], p); 3625 } 3626 #endif 3627 3628 float lalpha = alpha * color.a * mask; 3629 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 3630 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3631 3632 return color.rgb; 3633 }`,[_M.Nodes.vectorLinearWorldSpaceDepth,_M.Nodes.vectorLinearObjectSpaceDepth,_M.Nodes.vectorSphericalObjectSpaceDepth,_M.Nodes.vectorSphericalWorldSpaceDepth]);if(!e.isShader("fragment"))return console.warn("DepthNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.define(`${i}_MAX_COLORS`,this.colors.value.length),this.smooth.value&&e.define(`${i}_SMOOTH`),this.isVector.value>.5&&e.define(`${i}_IS_VECTOR`),0===this.gradientType.value&&e.define(`${i}_LINEAR`),this.isWorldSpace.value>.5&&e.define(`${i}_WORLDSPACE`),e.require("worldPosition"),e.addFragmentVariable(this.calpha,"float");let s=e.include(r),a=[];return a.push(this.near.build(e,"f")),a.push(this.far.build(e,"f")),a.push(this.origin.build(e,"v3")),a.push(this.direction.build(e,"v3")),a.push(this.colors.build(e,"v4[]")),a.push(this.steps.build(e,"f[]")),a.push(this.isMask.build(e,"b")),a.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),a.push(this.alpha.build(e,"f")),a.push(this.calpha),e.format(s+"("+a.join(",")+")",this.getType(e),t)}}};_M.Nodes={vectorLinearWorldSpaceDepth:new Sj(`float vectorLinearWorldSpaceDepth(vec3 direction, vec3 origin, float near, float far) { 3634 vec3 n = normalize(direction); 3635 float dist = (n.x*(vWPosition.x - origin.x) + n.y*(vWPosition.y - origin.y) + n.z*(vWPosition.z - origin.z)); 3636 return ( dist - near ) / ( far - near ); 3637 }`),vectorLinearObjectSpaceDepth:new Sj(`float vectorLinearObjectSpaceDepth(vec3 direction, vec3 origin, float near, float far) { 3638 vec3 n = normalize(direction); 3639 float dist = (n.x*(position.x - origin.x) + n.y*(position.y - origin.y) + n.z*(position.z - origin.z)); 3640 return ( dist - near ) / ( far - near ); 3641 }`),vectorSphericalWorldSpaceDepth:new Sj(`float vectorSphericalWorldSpaceDepth(vec3 origin, float near, float far) { 3642 float dist = length(vWPosition - origin); 3643 return ( dist - near ) / ( far - near ); 3644 }`),vectorSphericalObjectSpaceDepth:new Sj(`float vectorSphericalObjectSpaceDepth(vec3 origin, float near, float far) { 3645 float dist = length(position - origin); 3646 return ( dist - near ) / ( far - near ); 3647 }`)};var _E=class extends SL{constructor(e,t,i,r,s,a,o,l){super("v3"),this.nodeType="Fresnel",this.color=e,this.bias=t,this.scale=i,this.intensity=r,this.factor=s,this.isMask=l,this.alpha=a,this.mode=o,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(e.require("vWorldViewDir"),e.require("worldNormal"),!e.isShader("fragment"))return console.warn("FresnelNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.addFragmentVariable(this.calpha,"float");
3647let i=new Sj(`vec3 fresnel(vec3 color, float bias, float scale, float intensity, float factor, bool isMask, float mask, float alpha, int mode, out float calpha) { 3648 float fresnel = bias + scale * pow( abs( factor + dot( normalize( vWorldViewDir ), normalize( vWNormal ) ) ), intensity ); 3649 3650 float lalpha = clamp(fresnel, 0.0, 1.0) * alpha * mask; 3651 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 3652 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3653 3654 return color; 3655 }`),r=e.include(i),s=[];return s.push(this.color.build(e,"c")),s.push(this.bias.build(e,"f")),s.push(this.scale.build(e,"f")),s.push(this.intensity.build(e,"f")),s.push(this.factor.build(e,"f")),s.push(this.isMask.build(e,"b")),s.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),s.push(this.alpha.build(e,"f")),s.push(this.mode.build(e,"i")),s.push(this.calpha),e.format(r+"("+s.join(",")+")",this.getType(e),t)}}},_C=class extends SL{constructor(e,t,i,r,s,a,o,l,h){super("v3"),this.nodeType="Gradient",this.gradientType=e,this.smooth=t,this.colors=i,this.steps=r,this.offset=s,this.morph=a,this.angle=o,this.isMask=h,this.alpha=l,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(!e.isShader("fragment"))return console.warn("GradientNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.define("GRAD_MAX",10),e.require("uv"),e.requires.uv=[!0],e.addFragmentVariable(this.calpha,"float");let i=e.include(_C.Nodes.gradient),r=[];return r.push(this.gradientType.build(e,"i")),r.push(this.smooth.build(e,"b")),r.push(this.colors.build(e,"v4[]")),r.push(this.steps.build(e,"f[]")),r.push(this.offset.build(e,"v2")),r.push(this.morph.build(e,"v2")),r.push(this.angle.build(e,"f")),r.push(this.isMask.build(e,"b")),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_C.Nodes={gradient:new Sj(`vec3 gradient(int gradientType, bool smoothed, vec4 colors[GRAD_MAX], float steps[GRAD_MAX], vec2 offset, vec2 morph, float angle, bool isMask, float mask, float alpha, out float calpha) { 3656 vec4 color = colors[0]; 3657 vec2 m = morph / vUv.xy; 3658 vec2 rot = vec2( 0.5 + m.x, m.y ); 3659 vec2 dt = vec2( 3660 cos( angle ) * rot.x - sin( angle ) * rot.y, 3661 sin( angle ) * rot.x + cos( angle ) * rot.y 3662 ); 3663 vec2 pt = ( vUv - 0.5 + offset ) / 2.0 + dt / 2.0; 3664 float t = dot( pt, dt ) / dot( dt, dt ); 3665 if ( gradientType == 1 ) { 3666 t = distance ( 3667 ( vUv + morph ) * 3.0, 3668 ( vUv + offset ) + 1.0 3669 ) + angle; 3670 } else if ( gradientType == 2 ) { 3671 float polar = atan( 3672 vUv.x + morph.x - 0.5 + offset.x, 3673 vUv.y + morph.y - 0.5 + offset.y 3674 ) * -1.0; 3675 t = fract( ( angle / PI / -2.0 ) + 0.5 * ( polar / PI ) ); 3676 } 3677 3678 float p; 3679 if (smoothed) { 3680 for ( int i = 1; i < GRAD_MAX; i++ ) { 3681 p = clamp( ( t - steps[i-1] ) / ( steps[i] - steps[i-1] ), 0.0, 1.0 ); 3682 color = mix(color, colors[i], smoothstep(0.0, 1.0, p)); 3683 } 3684 3685 } else { 3686 for ( int i = 1; i < GRAD_MAX; i++ ) { 3687 p = clamp( ( t - steps[i-1] ) / ( steps[i] - steps[i-1] ), 0.0, 1.0 ); 3688 color = mix(color, colors[i], p); 3689 } 3690 } 3691 3692 float lalpha = alpha * color.a * mask; 3693 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 3694 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3695 3696 return color.xyz; 3697 }`)};var _T=class extends SL{constructor(e,t,i,r,s){super("v3"),this.nodeType="Matcap",this.texture=e,this.isMask=r,this.alpha=t,this.mode=i,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`,this.rotation=s}generate(e,t){if(!e.isShader("fragment"))return console.warn("MatcapNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.addFragmentVariable(this.calpha,"float");let i=e.include(_T.Nodes.matcap);e.require("normal"),e.requires.normal=!0;let r=[];return r.push(this.texture.generate(e,"t")),r.push("normal"),r.push(this.isMask.build(e,"b")),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.mode.build(e,"i")),r.push(this.calpha),r.push(this.rotation.build(e,"f")),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_T.Nodes={matcap:new Sj(`vec3 matcap(sampler2D matcapTex, vec3 normal, bool isMask, float mask, float alpha, int mode, out float calpha, float rotation) { 3698 vec3 viewDir = normalize( vViewPosition ); 3699 vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) ); 3700 vec3 y = cross( viewDir, x ); 3701 vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ); 3702 uv = mat2( cos(rotation), sin(rotation), -sin(rotation), cos(rotation) ) * uv; 3703 uv = uv * 0.495 + 0.5;
3704 vec4 matcapColor = texture2D( matcapTex, uv ); 3705 3706 float lalpha = alpha * mask; 3707 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 3708 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3709 3710 return matcapColor.rgb; 3711 }`)};var _P=(eS=new Sj(`vec3 random3(vec3 c) { 3712 float j = 4096.0*sin(dot(c,vec3(17.0, 59.4, 15.0))); 3713 vec3 r; 3714 r.z = fract(512.0*j); 3715 j *= .125; 3716 r.x = fract(512.0*j); 3717 j *= .125; 3718 r.y = fract(512.0*j); 3719 return r-0.5; 3720 }`),(e_=new Sj(`float simplexFast(vec3 p) { 3721 vec3 s = floor(p + dot(p, vec3(F3))); 3722 mediump vec3 x = p - s + dot(s, vec3(G3)); 3723 mediump vec3 hs = s; 3724 3725 mediump vec3 e = step(vec3(0.0), x - x.yzx); 3726 mediump vec3 i1 = e*(1.0 - e.zxy); 3727 mediump vec3 i2 = 1.0 - e.zxy*(1.0 - e); 3728 3729 mediump vec3 x1 = x - i1 + G3; 3730 mediump vec3 x2 = x - i2 + 2.0*G3; 3731 mediump vec3 x3 = x - 1.0 + 3.0*G3; 3732 3733 mediump vec4 w, d; 3734 3735 w.x = dot(x, x); 3736 w.y = dot(x1, x1); 3737 w.z = dot(x2, x2);
3738 w.w = dot(x3, x3); 3739 3740 w = max(0.6 - w, 0.0); 3741 3742 d.x = dot(random3(hs), x); 3743 d.y = dot(random3(hs + i1), x1); 3744 d.z = dot(random3(hs + i2), x2); 3745 d.w = dot(random3(hs + 1.0), x3); 3746 3747 w *= w; 3748 w *= w; 3749 d *= w; 3750 3751 return dot(d, vec4(52.0)); 3752 }`,[eS])).keywords.F3=new SH("float F3 0.3333333"),e_.keywords.G3=new SH("float G3 0.1666667"),(eA=new Sj(`float simplexPrecise(vec3 p) { 3753 vec3 s = floor(p + dot(p, vec3(F3))); 3754 vec3 x = p - s + dot(s, vec3(G3)); 3755 3756 vec3 e = step(vec3(0.0), x - x.yzx); 3757 vec3 i1 = e*(1.0 - e.zxy); 3758 vec3 i2 = 1.0 - e.zxy*(1.0 - e); 3759 3760 vec3 x1 = x - i1 + G3; 3761 vec3 x2 = x - i2 + 2.0*G3; 3762 vec3 x3 = x - 1.0 + 3.0*G3; 3763 3764 vec4 w, d; 3765 3766 w.x = dot(x, x); 3767 w.y = dot(x1, x1); 3768 w.z = dot(x2, x2); 3769 w.w = dot(x3, x3); 3770 3771 w = max(0.6 - w, 0.0); 3772 3773 d.x = dot(random3(s), x); 3774 d.y = dot(random3(s + i1), x1); 3775 d.z = dot(random3(s + i2), x2); 3776 d.w = dot(random3(s + 1.0), x3); 3777 3778 w *= w; 3779 w *= w; 3780 d *= w; 3781 3782 return dot(d, vec4(52.0)); 3783 }`,[eS])).keywords.F3=new SH("float F3 0.3333333"),eA.keywords.G3=new SH("float G3 0.1666667"),eM=new Sj(`float simplexFractal(vec3 m) { 3784 mat3 rot1 = mat3(-0.37, 0.36, 0.85,-0.14,-0.93, 0.34,0.92, 0.01,0.4); 3785 mat3 rot2 = mat3(-0.55,-0.39, 0.74, 0.33,-0.91,-0.24,0.77, 0.12,0.63); 3786 mat3 rot3 = mat3(-0.71, 0.52,-0.47,-0.08,-0.72,-0.68,-0.7,-0.45,0.56); 3787 return 0.5333333 * simplexFast(m * rot1) 3788 + 0.2666667 * simplexFast(2.0 * m * rot2) 3789 + 0.1333333 * simplexFast(4.0 * m * rot3) 3790 + 0.0666667 * simplexFast(8.0 * m); 3791 }`,[e_]),eE=new Sj("vec4 permute(vec4 x){return mod(((x*34.0)+1.0)*x, 289.0);}"),eC=new Sj("vec4 taylorInvSqrt(vec4 r){return 1.79284291400159 - 0.85373472095314 * r;}"),eT=new Sj(`float simplexAshima(vec3 v) { 3792 const vec2 C = vec2(1.0/6.0, 1.0/3.0) ; 3793 const vec4 D = vec4(0.0, 0.5, 1.0, 2.0); 3794 vec3 i = floor(v + dot(v, C.yyy) ); 3795 vec3 x0 = v - i + dot(i, C.xxx) ; 3796 vec3 g = step(x0.yzx, x0.xyz); 3797 vec3 l = 1.0 - g; 3798 vec3 i1 = min( g.xyz, l.zxy ); 3799 vec3 i2 = max( g.xyz, l.zxy ); 3800 vec3 x1 = x0 - i1 + 1.0 * C.xxx; 3801 vec3 x2 = x0 - i2 + 2.0 * C.xxx; 3802 vec3 x3 = x0 - 1. + 3.0 * C.xxx; 3803 i = mod(i, 289.0 ); 3804 vec4 p = permute( permute( permute( 3805 i.z + vec4(0.0, i1.z, i2.z, 1.0 )) 3806 + i.y + vec4(0.0, i1.y, i2.y, 1.0 )) 3807 + i.x + vec4(0.0, i1.x, i2.x, 1.0 )); 3808 float n_ = 1.0/7.0; // N=7 3809 vec3 ns = n_ * D.wyz - D.xzx; 3810 vec4 j = p - 49.0 * floor(p * ns.z *ns.z); // mod(p,N*N) 3811 vec4 x_ = floor(j * ns.z); 3812 vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N) 3813 vec4 x = x_ *ns.x + ns.yyyy; 3814 vec4 y = y_ *ns.x + ns.yyyy; 3815 vec4 h = 1.0 - abs(x) - abs(y); 3816 vec4 b0 = vec4( x.xy, y.xy ); 3817 vec4 b1 = vec4( x.zw, y.zw ); 3818 vec4 s0 = floor(b0)*2.0 + 1.0; 3819 vec4 s1 = floor(b1)*2.0 + 1.0; 3820 vec4 sh = -step(h, vec4(0.0)); 3821 vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ; 3822 vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ; 3823 vec3 p0 = vec3(a0.xy,h.x); 3824 vec3 p1 = vec3(a0.zw,h.y); 3825 vec3 p2 = vec3(a1.xy,h.z); 3826 vec3 p3 = vec3(a1.zw,h.w); 3827 vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3))); 3828 p0 *= norm.x; 3829 p1 *= norm.y; 3830 p2 *= norm.z; 3831 p3 *= norm.w; 3832 vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0); 3833 m = m * m; 3834 return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1), 3835 dot(p2,x2), dot(p3,x3) ) ); 3836 }`,[eE,eC]),eP=new Sj("vec4 mod289(vec4 x){return x - floor(x * (1.0 / 289.0)) * 289.0;}"),eD=new Sj("vec4 perm(vec4 x){return mod289(((x * 34.0) + 1.0) * x);}",[eP]),eI=new Sj(`float noise(vec3 p){ 3837 vec3 a = floor(p); 3838 vec3 d = p - a; 3839 d = d * d * (3.0 - 2.0 * d); 3840 vec4 b = a.xxyy + vec4(0.0, 1.0, 0.0, 1.0); 3841 vec4 k1 = perm(b.xyxy); 3842 vec4 k2 = perm(k1.xyxy + b.zzww); 3843 vec4 c = k2 + a.zzzz; 3844 vec4 k3 = perm(c); 3845 vec4 k4 = perm(c + 1.0); 3846 vec4 o1 = fract(k3 * (1.0 / 41.0)); 3847 vec4 o2 = fract(k4 * (1.0 / 41.0)); 3848 vec4 o3 = o2 * d.z + o1 * (1.0 - d.z); 3849 vec2 o4 = o3.yw * d.x + o3.xz * (1.0 - d.x); 3850 return o4.y * d.y + o4.x * (1.0 - d.y); 3851 }`,[eD]),(eO=new Sj(`float fbm(vec3 x) { 3852 float v = 0.0; 3853 float a = 0.5; 3854 vec3 shift = vec3(100); 3855 for (int i = 0; i < NUM_OCTAVES; ++i) { 3856 v += a * noise(x); 3857 x = x * 2.0 + shift; 3858 a *= 0.5; 3859 } 3860 return v; 3861 }
3861`,[eI])).keywords.NUM_OCTAVES=new SH("int NUM_OCTAVES 5"),eR=new Sj("vec3 fade(vec3 t) {return t*t*t*(t*(t*6.0-15.0)+10.0);}"),eL=new Sj(`float perlin(vec3 P){ 3862 vec3 Pi0 = floor(P); 3863 vec3 Pi1 = Pi0 + vec3(1.0); 3864 Pi0 = mod(Pi0, 289.0); 3865 Pi1 = mod(Pi1, 289.0); 3866 vec3 Pf0 = fract(P); 3867 vec3 Pf1 = Pf0 - vec3(1.0); 3868 vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x); 3869 vec4 iy = vec4(Pi0.yy, Pi1.yy); 3870 vec4 iz0 = Pi0.zzzz; 3871 vec4 iz1 = Pi1.zzzz; 3872 vec4 ixy = permute(permute(ix) + iy); 3873 vec4 ixy0 = permute(ixy + iz0); 3874 vec4 ixy1 = permute(ixy + iz1); 3875 vec4 gx0 = ixy0 / 7.0; 3876 vec4 gy0 = fract(floor(gx0) / 7.0) - 0.5; 3877 gx0 = fract(gx0); 3878 vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0); 3879 vec4 sz0 = step(gz0, vec4(0.0)); 3880 gx0 -= sz0 * (step(0.0, gx0) - 0.5); 3881 gy0 -= sz0 * (step(0.0, gy0) - 0.5); 3882 vec4 gx1 = ixy1 / 7.0; 3883 vec4 gy1 = fract(floor(gx1) / 7.0) - 0.5; 3884 gx1 = fract(gx1); 3885 vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1); 3886 vec4 sz1 = step(gz1, vec4(0.0)); 3887 gx1 -= sz1 * (step(0.0, gx1) - 0.5); 3888 gy1 -= sz1 * (step(0.0, gy1) - 0.5); 3889 vec3 g000 = vec3(gx0.x,gy0.x,gz0.x); 3890 vec3 g100 = vec3(gx0.y,gy0.y,gz0.y); 3891 vec3 g010 = vec3(gx0.z,gy0.z,gz0.z); 3892 vec3 g110 = vec3(gx0.w,gy0.w,gz0.w); 3893 vec3 g001 = vec3(gx1.x,gy1.x,gz1.x); 3894 vec3 g101 = vec3(gx1.y,gy1.y,gz1.y); 3895 vec3 g011 = vec3(gx1.z,gy1.z,gz1.z); 3896 vec3 g111 = vec3(gx1.w,gy1.w,gz1.w); 3897 vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); 3898 g000 *= norm0.x; 3899 g010 *= norm0.y; 3900 g100 *= norm0.z; 3901 g110 *= norm0.w; 3902 vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); 3903 g001 *= norm1.x; 3904 g011 *= norm1.y; 3905 g101 *= norm1.z; 3906 g111 *= norm1.w; 3907 float n000 = dot(g000, Pf0); 3908 float n100 = dot(g100, vec3(Pf1.x, Pf0.yz)); 3909 float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z)); 3910 float n110 = dot(g110, vec3(Pf1.xy, Pf0.z)); 3911 float n001 = dot(g001, vec3(Pf0.xy, Pf1.z)); 3912 float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z)); 3913 float n011 = dot(g011, vec3(Pf0.x, Pf1.yz)); 3914 float n111 = dot(g111, Pf1); 3915 vec3 fade_xyz = fade(Pf0); 3916 vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z); 3917 vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y); 3918 float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); 3919 return 2.2 * n_xyz; 3920 }`,[eE,eC,eR]),eB=new Sj(`float hashwithoutsine13(vec3 p3) 3921 { 3922 p3 = fract(p3 * .1031); 3923 p3 += dot(p3, p3.yzx + 33.33); 3924 return fract((p3.x + p3.y) * p3.z); 3925 }`),ez=new Sj(`vec3 hashwithoutsine33(vec3 p3) 3926 { 3927 p3 = fract(p3 * vec3(.1031, .1030, .0973)); 3928 p3 += dot(p3, p3.yxz+33.33); 3929 return fract((p3.xxy + p3.yxx)*p3.zyx); 3930 }`),eF=new Sj(`float metric(in vec3 p) 3931 { 3932 // L2 3933 return length(p); 3934 3935 // Chebyshev 3936 // vec3 a = abs(p); 3937 // return max(a.x, max(a.y, a.z)); 3938 }`),eN=new Sj(`float smin( float a, float b, float k ) 3939 { 3940 float h = smoothstep(0.0, 1.0, 0.5 + 0.5 * (b - a) / k); 3941 float correction = k * h * (1.0 - h); 3942 return mix(b, a, h) - correction; 3943 }`),ek=new Sj(`float smax( float a, float b, float k ) 3944 { 3945 float h = smoothstep(1.0, 0.0, 0.5 + 0.5 * (a - b) / k); 3946 float correction = k * h * (1.0 - h); 3947 return mix(a, b, h) + correction; 3948 }`),eU=new Sj(`float remap(float value, float input_min, float input_max, float output_min, float output_max) { 3949 // Compute width of each interval 3950 float input_width = input_max - input_min; 3951 float output_width = output_max - output_min; 3952 3953 // Convert input range into a 0-1 range 3954 float scaled = (value - input_min) / input_width; 3955 3956 // Convert the 0-1 range into a value in output range 3957 return output_min + (scaled * output_width); 3958 }`),{simplexFast:e_,simplexPrecise:eA,simplexFractal:eM,simplexAshima:eT,fbm:eO,perlin:eL,voronoi:new Sj(`float voronoi(in vec3 x, in int style, in float smoothness, in float seed, in int quality) 3959 { 3960 // Integer and fractional parts of this point's coordinates 3961 ivec3 p = ivec3(floor(x)); 3962 vec3 f = fract(x); 3963 3964 // Different variables that we will use to construct noise: 3965 // 3966 // f1: distance to the closest feature point 3967 // f2: distance to the second closest feature point 3968 // e: distance to the closest edge (cell boundary) 3969 // 3970 // We also compute "smooth" versions of all of the above quantites, essentially 3971 // replacing "hard" minimums with "smooth" minimums (described by IQ) 3972 float f1_smooth = 8.0; 3973 float f1 = 8.0; 3974 float f2_smooth = 8.0; 3975 float f2 = 8.0; 3976 float e_smooth = 8.0; 3977 float e = 8.0; 3978 3979 // Variables stored from closest cell 3980 ivec3 mb; 3981 vec3 mr; 3982 3983 int steps = quality; 3984 3985 for (int x = -steps; x <= steps; x++) 3986 for (int y = -steps; y <= steps; y++) 3987 for (int z = -steps; z <= steps; z++) 3988 { 3989 ivec3 b = ivec3(x, y, z); 3990 vec3 r = vec3(b) + hashwithoutsine33(vec3(p + b) + seed) - f; 3991 float d = length(r); 3992 3993 f1_smooth = smin(d, f1_smooth, smoothness); 3994 3995 // Store un-smoothed distances too 3996 if (d < f1) 3997 { 3998 f2 = f1; 3999 f1 = d; 4000 4001 mb = ivec3(x, y, z); 4002 mr = r; 4003 } 4004 else if (d < f2) 4005 { 4006 f2 = d; 4007 } 4008 } 4009 4010 // Second pass for edge distance 4011 // skip for styles don't need 4012 if (style != 0 && style != 5 && style != 7) 4013 for (int x = -steps; x <= steps; x++) 4014 for (int y = -steps; y <= steps; y++) 4015 for (int z = -steps; z <= steps; z++) 4016 { 4017 // Start search at the cell that contains the closest point to "x" (found in 1st pass) 4018 ivec3 b = mb + ivec3(x, y, z); 4019 vec3 r = vec3(b) + hashwithoutsine33(vec3(p + b) + seed) - f; 4020 float d1 = dot(0.5 * (mr + r), (r - mr)); // IQ normalizes "r - mr" but that breaks things for the smooth version? 4021 float d2 = dot(0.5 * (mr + r), normalize(r - mr)); 4022 4023 e_smooth = smin(d1, e_smooth, smoothness); 4024 4025 e = min(e, d2); 4026 4027 // Also compute a smooth version of F2 in this pass 4028 { 4029 ivec3 b = ivec3(x, y, z); 4030 if (b != mb) 4031 { 4032 vec3 r = vec3(b) + hashwithoutsine33(vec3(p + b) + seed) - f; 4033 float d = length(r); 4034 4035 f2_smooth = smin(d, f2_smooth, smoothness); 4036 } 4037 } 4038 } 4039 4040 // Different visualization modes 4041 if (style == 0) 4042 { 4043 return f1_smooth; 4044 } 4045 if (style == 1) 4046 { 4047 return f2_smooth; 4048 } 4049 if (style == 2) 4050 { 4051 return f2_smooth - f1_smooth; 4052 4053 // "Pebbles" also cool 4054 //return step(0.2, f2_smooth - f1_smooth); 4055 } 4056 if (style == 3) 4057 {
4058 // This one is really good for rock / stone effects 4059 float a = f1; 4060 float b = f2; 4061 float k = 3.0; 4062 float h = max(k - abs(a - b), 0.0) / k; 4063 float final = min(a, b) - h * h * k * (1.0 / 4.0); 4064 return final; 4065 } 4066 if (style == 4) 4067 { 4068 // Some random adjustments to make this style stand out more 4069 return exp(5.0 * e_smooth); 4070 } 4071 if (style == 5) 4072 { 4073 return pow(f1_smooth, 3.0); 4074 } 4075 if (style == 6) 4076 { 4077 const float eps = 0.0125; 4078 4079 // Thicker lines as the user increases the smoothness slider 4080 float thickness = smoothness * 0.25 + eps; 4081 4082 // Blurrier lines as the user increases the smoothness slider 4083 float blur = pow(smoothness, 3.0) * 0.25 + eps; 4084 4085 return smoothstep( 4086 thickness - thickness * blur, 4087 thickness + thickness * blur, 4088 e 4089 ); 4090 } 4091 if (style == 7) 4092 { 4093 return hashwithoutsine13(vec3(p + mb) + seed); 4094 } 4095 } 4096 `,[eB,ez,eF,eN,ek,eU])}),_D=class extends SL{constructor(e,t,i,r,s,a,o,l,h,c,d,u,p,f,m,g,v,y,x){super("v3"),this.nodeType="Noise",this.scale=e,this.size=t,this.move=i,this.fA=r,this.fB=s,this.distortion=a,this.colorA=o,this.colorB=l,this.colorC=h,this.colorD=c,this.noiseType=u,this.voronoiStyle=f,this.highCut=m,this.lowCut=g,this.smoothness=v,this.seed=y,this.quality=x,this.isMask=p,this.alpha=d,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t,i,r,s){e.require("uv"),e.requires.uv=[!0],e.addFragmentVariable(this.calpha,"float");let a=["simplexFast","simplexFractal","simplexAshima","fbm","perlin","voronoi"][this.noiseType.value],o="voronoi"==a?` 4097 float v = ${a}(st + move, voronoiStyle, smoothness, seed, quality); 4098 4099 // Apply clipping to colors 4100 v = remap(v, lowCut, highCut, 0.0, 1.0); 4101 v = smax(v, 0.0, smoothness * 0.25); 4102 v = smin(v, 1.0, smoothness * 0.25); 4103 4104 // Note that the voronoi mode only uses colors "A" and "C" from the UI 4105 vec4 color = mix(colorA, colorC, v); 4106 `:` 4107 vec3 q = vec3(${a}(st), 4108 ${a}(st + vec3(1.0)), 4109 ${a}(st + vec3(1.0))); 4110 vec3 r = vec3(${a}(st + vec3(distortion, 1.0) * q + vec3(fA, 1.0) + move), 4111 ${a}(st + vec3(distortion, 1.0) * q + vec3(fB, 1.0) + move), 4112 ${a}(st * q)); 4113 float f = ${a}(st + r); 4114 vec4 color; 4115 color = mix(colorA, colorB, clamp((f * f) * 4.0, 0.0, 1.0)); 4116 color = mix(color, colorC, clamp(length(q), 0.0, 1.0)); 4117 color = mix(color, colorD, clamp(length(r.x), 0.0, 1.0)); 4118 `,l=new Sj(`vec3 ${a}customNoise(float scale, vec3 size, float move, vec2 fA, vec2 fB, vec2 distortion, vec4 colorA, vec4 colorB, vec4 colorC, vec4 colorD, int voronoiStyle, float highCut, float lowCut, float smoothness, float seed, int quality, bool isMask, float mask, float alpha, out float calpha) 4119 { 4120 // Prevent scale of zero 4121 scale = max(abs(scale), 0.001); 4122 4123 vec3 st = position / size; 4124 st /= scale; 4125 4126 ${o} 4127 4128 float lalpha = alpha * color.a * mask; 4129 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 4130 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 4131 4132 return clamp(color, 0.0, 1.0).rgb; 4133 }`,[_P.simplexFast,_P.simplexFractal,_P.simplexAshima,_P.fbm,_P.perlin,_P.voronoi]),h=e.include(l),c=[];return c.push(this.scale.build(e,"f")),c.push(this.size.build(e,"v3")),c.push(this.move.build(e,"f")),c.push(this.fA.build(e,"v2")),c.push(this.fB.build(e,"v2")),c.push(this.distortion.build(e,"v2")),c.push(this.colorA.build(e,"v4")),c.push(this.colorB.build(e,"v4")),c.push(this.colorC.build(e,"v4")),c.push(this.colorD.build(e,"v4")),c.push(this.voronoiStyle.build(e,"i")),c.push(this.highCut.build(e,"f")),c.push(this.lowCut.build(e,"f")),c.push(this.smoothness.build(e,"f")),c.push(this.seed.build(e,"f")),c.push(this.quality.build(e,"i")),c.push(this.isMask.build(e,"b")),c.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),c.push(this.alpha.build(e,"f")),c.push(this.calpha),e.format(h+"("+c.join(",")+")",this.getType(e),t)}};_D.numOctaves=5;var _I=class extends SL{constructor(e,t,i,r,s,a,o,l,h,c,d,u,p,f,m,g){super("v3"),this.nodeType="Outline",this.firstTime=!0,this.outlineColor=e,this.contourColor=t,this.outlineWidth=i,this.contourWidth=r,this.contourThreshold=s,this.outlineThreshold=a,this.contourFrequency=o,this.outlineSmoothing=l,this.contourDirection=h,this.positionalLines=c,this.compensation=d,this.resolution=u,this.normalMap=p,this.depthMap=f,this.pixelRatio=m,this.alpha=g,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){let i=`g${this.uuid.toString().replace(/-/g,"")}`;if(e.require("vWorldViewDir"),e.require("worldNormal"),e.extensions.derivatives=!0,this.compensation.value&&e.define("OUTLINE_COMPENSATION",`${i}_offset`),this.firstTime){let t=this.outlineWidth.build(e,"f"),r=this.resolution.build(e,"v2"),s=this.compensation.build(e,"b"),a=this.pixelRatio.build(e,"f");e.addVertexParsVariable("randomColor","attribute vec3"),e.addVertexParsVariable("extrudeNormal","attribute vec3"),e.addVertexParsVariable(t,"uniform float"),e.addVertexParsVariable(r,"uniform vec2"),e.addVertexParsVariable(s,"uniform bool"),e.addVertexParsVariable(a,"uniform float"),e.addVertexParsVariable("vID","flat out float"),e.addFragmentParsVariable("vID","flat in float"),e.addVertexFinalCode(` 4134 vID = randomColor.r; 4135 vec2 ${i}_offset = vec2(0.0); 4136 if (${s}) { 4137 vec4 ${i}_clipPosition = projectionMatrix * (modelViewMatrix * vec4(transformed, 1.0)); 4138 // NOTE: For certain shapes, like spheres, we get incorrect extrusion when the 4139 // normals face the camera directly. So we hackily fix this by offsetting the normal 4140 // by a tiny amount. 4141 vec3 ${i}_clipNormal = mat3(projectionMatrix) * (mat3(modelViewMatrix) * extrudeNormal) + 0.0000001; 4142 ${i}_offset = normalize(${i}_clipNormal.xy) / ${r} * (${t} / 2.0) * ${i}_clipPosition.w * 2.0 * ${a}; 4143 ${i}_clipPosition.xy += ${i}_offset; 4144 // TODO(MAX): To handle multiple outline layers, we only want to extrude 4145 // if this offset is the biggest of all the potential offsets 4146 gl_Position = ${i}_clipPosition; 4147 } 4148 `)}if(!e.isShader("fragment"))return console.warn("OutlineNode is not compatible with "+e.shader+" shader."),"";{e.require("uv"),e.requires.uv=[!0],e.addFragmentVariable(this.calpha,"float");let i=e.include(_I.Nodes.outline),r=[];return r.push(this.outlineColor.build(e,"c")),r.push(this.contourColor.build(e,"c")),r.push(this.outlineWidth.build(e,"f")),r.push(this.contourWidth.build(e,"f")),r.push(this.contourThreshold.build(e,"f")),r.push(this.outlineThreshold.build(e,"f")),r.push(this.contourFrequency.build(e,"f")),r.push(this.outlineSmoothing.build(e,"f")),r.push(this.contourDirection.build(e,"v3")),r.push(this.positionalLines.build(e,"b")),r.push(this.resolution.build(e,"v2")),r.push(this.normalMap.getTexture(e,"t")),r.push(this.depthMap.getTexture(e,"t")),r.push(this.pixelRatio.build(e,"f")),r.push(this.compensation.build(e,"b")),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),this.firstTime=!this.firstTime,e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_I.Nodes=(eV=new Sj(` 4149float sobelSample(sampler2D t, sampler2D d, vec2 uv, vec2 resolution, float outlineWidth, float pixelRatio) 4150{ 4151 vec2 halton = haltonSequence[frameIndex]; 4152 float temporalOffset = getNoiseInterleavedGradient(gl_FragCoord.xy + halton); 4153 float temporalAngle = temporalOffset * PI2; 4154 4155 vec2 texelSize = (vec2(1.0) / resolution); 4156 vec2 offsetSize = texelSize * outlineWidth * pixelRatio; 4157 4158 vec2 uvSamples[9]; 4159 vec4 normalSamples[9]; 4160 4161 uvSamples[0] = uv + vec2( -offsetSize.x, -offsetSize.y) + (vogelDiskSample(0, 9, temporalAngle) * texelSize); 4162 uvSamples[1] = uv + vec2(0.0, -offsetSize.y) + (vogelDiskSample(1, 9, temporalAngle) * texelSize); 4163 uvSamples[2] = uv + vec2( offsetSize.x, -offsetSize.y) + (vogelDiskSample(2, 9, temporalAngle) * texelSize);
4164 uvSamples[3] = uv + vec2( -offsetSize.x, 0.0) + (vogelDiskSample(3, 9, temporalAngle) * texelSize); 4165 uvSamples[4] = uv; 4166 uvSamples[5] = uv + vec2( offsetSize.x, 0.0) + (vogelDiskSample(5, 9, temporalAngle) * texelSize); 4167 uvSamples[6] = uv + vec2( -offsetSize.x, offsetSize.y) + (vogelDiskSample(6, 9, temporalAngle) * texelSize); 4168 uvSamples[7] = uv + vec2(0.0, offsetSize.y) + (vogelDiskSample(7, 9, temporalAngle) * texelSize); 4169 uvSamples[8] = uv + vec2( offsetSize.x, offsetSize.y) + (vogelDiskSample(8, 9, temporalAngle) * texelSize); 4170 4171 4172 normalSamples[0] = texture2D(t, uvSamples[0]); 4173 normalSamples[1] = texture2D(t, uvSamples[1]); 4174 normalSamples[2] = texture2D(t, uvSamples[2]); 4175 normalSamples[3] = texture2D(t, uvSamples[3]); 4176 normalSamples[4] = texture2D(t, uvSamples[4]); 4177 normalSamples[5] = texture2D(t, uvSamples[5]); 4178 normalSamples[6] = texture2D(t, uvSamples[6]); 4179 normalSamples[7] = texture2D(t, uvSamples[7]); 4180 normalSamples[8] = texture2D(t, uvSamples[8]); 4181 4182 float depthBias = 0.0001; 4183 // TODO(MAX): Can we somehow reduce the number of conditionals here with MATH?! 4184 if (normalSamples[0].a != vID && normalSamples[0].a != 0.0) { 4185 float depthAtSample = texture2D(d, uvSamples[0]).r + depthBias; 4186 if (gl_FragCoord.z > depthAtSample) { 4187 return 0.0; 4188 } 4189 } 4190 4191 if (normalSamples[1].a != vID && normalSamples[1].a != 0.0) { 4192 float depthAtSample = texture2D(d, uvSamples[1]).r + depthBias; 4193 if (gl_FragCoord.z > depthAtSample) { 4194 return 0.0; 4195 } 4196 } 4197 4198 if (normalSamples[2].a != vID && normalSamples[2].a != 0.0) { 4199 float depthAtSample = texture2D(d, uvSamples[2]).r + depthBias; 4200 if (gl_FragCoord.z > depthAtSample) { 4201 return 0.0; 4202 } 4203 } 4204 4205 if (normalSamples[3].a != vID && normalSamples[3].a != 0.0) { 4206 float depthAtSample = texture2D(d, uvSamples[3]).r + depthBias; 4207 if (gl_FragCoord.z > depthAtSample) { 4208 return 0.0; 4209 } 4210 } 4211 4212 4213 if (normalSamples[4].a != vID && normalSamples[4].a != 0.0) { 4214 float depthAtSample = texture2D(d, uvSamples[4]).r + depthBias; 4215 if (gl_FragCoord.z > depthAtSample) { 4216 return 0.0; 4217 } 4218 } 4219 4220 if (normalSamples[5].a != vID && normalSamples[5].a != 0.0) { 4221 float depthAtSample = texture2D(d, uvSamples[5]).r + depthBias; 4222 if (gl_FragCoord.z > depthAtSample) { 4223 return 0.0; 4224 } 4225 } 4226 4227 if (normalSamples[6].a != vID && normalSamples[6].a != 0.0) { 4228 float depthAtSample = texture2D(d, uvSamples[6]).r + depthBias; 4229 if (gl_FragCoord.z > depthAtSample) { 4230 return 0.0; 4231 } 4232 } 4233 4234 if (normalSamples[7].a != vID && normalSamples[7].a != 0.0) { 4235 float depthAtSample = texture2D(d, uvSamples[7]).r + depthBias; 4236 if (gl_FragCoord.z > depthAtSample) { 4237 return 0.0; 4238 } 4239 } 4240 4241 if (normalSamples[8].a != vID && normalSamples[8].a != 0.0) { 4242 float depthAtSample = texture2D(d, uvSamples[8]).r + depthBias; 4243 if (gl_FragCoord.z > depthAtSample) { 4244 return 0.0; 4245 } 4246 } 4247 4248 vec3 sobel_edge_h = normalSamples[2].rgb + (2.0*normalSamples[5].rgb) + normalSamples[8].rgb - (normalSamples[0].rgb + (2.0*normalSamples[3].rgb) + normalSamples[6].rgb); 4249 vec3 sobel_edge_v = normalSamples[0].rgb + (2.0*normalSamples[1].rgb) + normalSamples[2].rgb - (normalSamples[6].rgb + (2.0*normalSamples[7].rgb) + normalSamples[8].rgb); 4250 4251 float edgeNormal = sqrt(dot(sobel_edge_h, sobel_edge_h) + dot(sobel_edge_v, sobel_edge_v)); 4252 return edgeNormal; 4253} 4254`),{outline:new Sj(`vec3 outline(vec3 outlineColor, vec3 contourColor, float outlineWidth, float contourWidth, float outlineThreshold, float contourThreshold, float outlineSmoothing, float contourFrequency, vec3 contourDirection, bool positionalLines, vec2 resolution, sampler2D normalMap, sampler2D depthMap, float pixelRatio, bool compensation, float mask, float alpha, out float calpha) { 4255 vec3 result = outlineColor; 4256 float resultAlpha = 0.0; 4257 4258 vec3 N = normalize(vWNormal); 4259 vec2 nuv = (gl_FragCoord.xy / resolution); 4260 float sobelSample = compensation ? sobelSample(normalMap, depthMap, nuv, resolution, outlineWidth / 2., pixelRatio) : sobelSample(normalMap, depthMap, nuv, resolution, outlineWidth, pixelRatio); 4261 resultAlpha = smoothstep(outlineThreshold - outlineSmoothing, outlineThreshold + outlineSmoothing, sobelSample); 4262 4263 //resultAlpha = 1.0; 4264 //result = vec3(sobelSample); 4265 4266 float t = 1.0 - contourThreshold; 4267 if(positionalLines) { 4268 vec3 NDir = position * contourDirection; 4269 float NT = NDir.x + NDir.y + NDir.z; 4270 float f = fract(NT * contourFrequency * 0.01); 4271 float df = fwidth(NT * contourFrequency); 4272 4273 float g = smoothstep(df * (contourWidth * 0.01), df * (contourWidth * 0.01 * 2.0), f); 4274 if (g < 1.0 && resultAlpha == 0.0) { 4275 result = contourColor; 4276 resultAlpha = 1.0; 4277 } 4278 } 4279 else { 4280 vec3 NDir = N * contourDirection; 4281 float NT = NDir.x + NDir.y + NDir.z; 4282 float df = fwidth(NT * contourThreshold); 4283 float f = sin(NT * 1.0 * contourFrequency); 4284 float g = smoothstep(0.0, df * contourWidth, 1.0 - f); 4285 4286 if (df > (t * 0.5) && g < 1.0 && resultAlpha == 0.0) { 4287 result = contourColor; 4288 resultAlpha = 1.0 - g; 4289 } 4290 } 4291
4292 float lalpha = alpha * resultAlpha * mask; 4293 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 4294 accumAlpha += ( 1.0 - accumAlpha ) * lalpha; 4295 4296 return result; 4297 }`,[eV])});var _O=class extends SL{constructor(e,t,i,r,s,a,o,l,h,c,d,u,p,f,m,g,v,y){super("v3"),this.nodeType="Pattern",this.style=e,this.projection=t,this.axis=i,this.blending=r,this.offset=s,this.colorA=a,this.colorB=o,this.frequency=l,this.size=h,this.variation=c,this.smoothness=d,this.zigzag=u,this.rotation=p,this.vertical=f,this.horizontal=m,this.sides=g,this.isMask=y,this.alpha=v,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(!e.isShader("fragment"))return console.warn("PatterNode is not compatible with "+e.shader+" shader."),e.format("vec3(0.0)",this.getType(e),t);{let i;switch(e.require("position"),e.require("uv"),e.requires.uv=[!0],e.require("normal"),e.requires.normal=!0,e.addFragmentVariable(this.calpha,"float"),this.style.value){case 0:default:i="circle";break;case 1:i="ring";break;case 2:i="polygon";break;case 3:i="xcross";break;case 4:i="diamond";break;case 5:i="checkerboard";break;case 6:i="line";break;case 7:i="wave"}let r=`g${this.uuid.toString().replace(/-/g,"")}`,s=new Sj(`float hashwithoutsine12(vec2 p) 4298 { 4299 vec3 p3 = fract(vec3(p.xyx) * .1031); 4300 p3 += dot(p3, p3.yzx + 33.33); 4301 return fract((p3.x + p3.y) * p3.z); 4302 }`),a=new Sj(`vec2 rotate_uv(in vec2 uv, float a, bool repeat) 4303 { 4304 const float mid = 0.5; 4305 float radians = a * (PI / 180.0); 4306 vec2 rotated = vec2( 4307 cos(radians) * (uv.x - mid) + sin(radians) * (uv.y - mid) + mid, 4308 cos(radians) * (uv.y - mid) - sin(radians) * (uv.x - mid) + mid 4309 ); 4310 return repeat ? fract(rotated): rotated; 4311 }`),o="";if(4===this.projection.value){let e=2===this.style.value?`${i}(uv0, frequency, size, variation, smoothness_remapped, zigzag, rotation, sides)`:`${i}(uv0, frequency, size, variation, smoothness_remapped, zigzag, rotation)`,t=2===this.style.value?`${i}(uv1, frequency, size, variation, smoothness_remapped, zigzag, rotation, sides)`:`${i}(uv1, frequency, size, variation, smoothness_remapped, zigzag, rotation)`,r=2===this.style.value?`${i}(uv2, frequency, size, variation, smoothness_remapped, zigzag, rotation, sides)`:`${i}(uv2, frequency, size, variation, smoothness_remapped, zigzag, rotation)`;o=` 4312 vec3 p = position; 4313 float factor = 0.0125; 4314 vec2 uv0 = fract(p.xy * factor); 4315 vec2 uv1 = fract(p.zy * factor); 4316 vec2 uv2 = fract(p.xz * factor); 4317 4318 uv0 = rotate_uv(uv0 + offset, rotation, true); 4319 uv1 = rotate_uv(uv1 + offset, rotation, true); 4320 uv2 = rotate_uv(uv2 + offset, rotation, true); 4321 4322 float d0 = ${e}; 4323 float d1 = ${t}; 4324 float d2 = ${r}; 4325 4326 // Range from 3 to 128 seems to be good 4327 float exponent = (1.0 - blending) * 125.0 + 3.0; 4328 4329 vec3 n = vObjectNormal; 4330 vec3 weights = abs(normalize(n)); 4331 weights = pow(weights, vec3(exponent)); 4332 weights /= dot(weights, vec3(1.0)); 4333 d0 *= weights.z; 4334 d1 *= weights.x; 4335 d2 *= weights.y; 4336 float draw = d0 + d1 + d2; 4337 4338 vec2 custom_uv = uv0 * weights.z + uv1 * weights.x + uv2 * weights.y; 4339 `}else{let e=2===this.style.value?`${i}(custom_uv, frequency, size, variation, smoothness_remapped, zigzag, rotation, sides)`:`${i}(custom_uv, frequency, size, variation, smoothness_remapped, zigzag, rotation)`,t="";0===this.axis.value?t=`float radius = length(p); 4340 float theta = atan(p.y, p.z); 4341 float phi = acos(p.x / radius);`:1===this.axis.value?t=`float radius = length(p); 4342 float theta = atan(p.x, p.z); 4343 float phi = acos(p.y / radius);`:(this.axis.value,t=`float radius = length(p); 4344 float theta = atan(p.y, p.x); 4345 float phi = acos(p.z / radius);`);let r="";switch(this.projection.value){case 0:r="custom_uv = vUv.st;";break;case 1:case 3:break;case 2:r=` 4346 vec3 p = position; 4347 ${t} 4348 custom_uv = vec2(theta, phi); 4349 custom_uv /= PI; 4350 `}o=` 4351 vec2 custom_uv; 4352 ${r} 4353 4354 custom_uv += offset; 4355 custom_uv = fract(custom_uv); 4356 custom_uv = rotate_uv(custom_uv, rotation, true); 4357 4358 float draw = ${e}; 4359 `}let l=new Sj(`vec3 ${r}_pattern(vec3 normal, float blending, int style, vec2 offset, vec4 colorA, vec4 colorB, vec2 frequency, float size, float variation, float smoothness, float zigzag, float rotation, vec2 vertical, vec2 horizontal, int sides, bool isMask, float mask, float alpha, out float calpha) { 4360 const float TWO_PI = PI * 2.0; 4361 float smoothness_remapped = pow(smoothness, 5.0); 4362 4363 ${o} 4364 4365 // Construct final output color 4366 vec4 color = mix(colorA, colorB, draw); 4367 color.a = clamp(color.a, 0.0, 1.0); 4368 4369 // Apply cuts 4370 color.a *= 4371 step(vertical.x, custom_uv.y) * 4372 step(custom_uv.y, vertical.y); 4373 color.a *= 4374 step(horizontal.x, abs(custom_uv.x)) * 4375 step(abs(custom_uv.x), horizontal.y); 4376 4377 // Accumulate alpha
4378 float lalpha = alpha * clamp(color.a, 0.0, 1.0) * mask; 4379 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 4380 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 4381 4382 return clamp(color, 0.0, 1.0).rgb; 4383 }`,[a,s,_O.DrawFunctions.circle,_O.DrawFunctions.ring,_O.DrawFunctions.polygon,_O.DrawFunctions.cross,_O.DrawFunctions.diamond,_O.DrawFunctions.checkerboard,_O.DrawFunctions.line,_O.DrawFunctions.wave]),h=e.include(l),c=[];return c.push("normal"),c.push(this.blending.build(e,"f")),c.push(this.style.build(e,"i")),c.push(this.offset.build(e,"v2")),c.push(this.colorA.build(e,"v4")),c.push(this.colorB.build(e,"v4")),c.push(this.frequency.build(e,"v2")),c.push(this.size.build(e,"f")),c.push(this.variation.build(e,"f")),c.push(this.smoothness.build(e,"f")),c.push(this.zigzag.build(e,"f")),c.push(this.rotation.build(e,"f")),c.push(this.vertical.build(e,"v2")),c.push(this.horizontal.build(e,"v2")),c.push(this.sides.build(e,"i")),c.push(this.isMask.build(e,"b")),c.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),c.push(this.alpha.build(e,"f")),c.push(this.calpha),e.format(h+"("+c.join(",")+")",this.getType(e),t)}}};_O.DrawFunctions=(ej=new Sj(`float hashwithoutsine12(vec2 p) { 4384 vec3 p3 = fract(vec3(p.xyx) * 0.1031); 4385 p3 += dot(p3, p3.yzx + 33.33); 4386 return fract((p3.x + p3.y) * p3.z); 4387 }`),eG=new Sj(`vec2 tile_and_center(in vec2 uv, in vec2 frequency, in float variation, in float zigzag, in float rotation) { 4388 // Create tiles in UV-space 4389 uv *= frequency; 4390 4391 // Integer coords 4392 vec2 i = floor(uv); 4393 4394 // Offset every other row based on zigzag param, then compute fractional coords 4395 float row_offset = mod(i.y, 2.0); 4396 uv.x += row_offset * zigzag; 4397 vec2 f = fract(uv); 4398 4399 // Rotate the tile itself: 4400 // const float mid = 0.5; 4401 // f = vec2( 4402 // cos(rotation) * (f.x - mid) + sin(rotation) * (f.y - mid) + mid, 4403 // cos(rotation) * (f.y - mid) - sin(rotation) * (f.x - mid) + mid 4404 // ); 4405 // f = fract(f); 4406 4407 f = f * 2.0 - 1.0; 4408 4409 // Recompute integer coords after shifting - then, random value per tile 4410 i = floor(uv); 4411 float rand = (hashwithoutsine12(i) * 5.0 + 1.0); 4412 float jitter = mix(1.0, rand, variation); 4413 f *= jitter; 4414 4415 return f; 4416 }`,[ej]),eH=new Sj(`float circle(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4417 vec2 f = tile_and_center(uv, frequency, variation, zigzag, rotation); 4418 return smoothstep( 4419 -smoothness, 4420 smoothness, 4421 length(f) - size 4422 ); 4423 }`,[eG]),eW=new Sj(`float ring(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4424 vec2 f = tile_and_center(uv, frequency, variation, zigzag, rotation); 4425 4426 float d = length(f); 4427 const float inner_width = 0.5; 4428 4429 float outer = smoothstep(-smoothness, smoothness, d - size); 4430 float inner = smoothstep(-smoothness, smoothness, d - size * inner_width); 4431 return outer + (1.0 - inner); 4432 }`,[eG]),eq=new Sj(`float sdf_ngon(in vec2 p, in float r, in int n) { 4433 float an = (PI * 2.0) / float(n); 4434 float he = r * tan(0.5 * an); 4435 4436 // Rotate to first sector 4437 p = -p.yx; 4438 float bn = an * floor((atan(p.y, p.x) + 0.5 * an) / an); 4439 vec2 cs = vec2(cos(bn), sin(bn)); 4440 p = mat2(cs.x, -cs.y, cs.y, cs.x)*p; 4441 4442 // Side of polygon 4443 return length(p - vec2(r, clamp(p.y, -he, he))) * sign(p.x - r); 4444 } 4445 4446 float polygon(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation, in int sides) { 4447 vec2 f = tile_and_center(uv, frequency, variation, zigzag, rotation); 4448 return smoothstep(-smoothness, smoothness, sdf_ngon(f, size, sides)); 4449 }`,[eG]),eX=new Sj(`float sdf_cross(in vec2 p, in vec2 b, float r ) { 4450 p = abs(p);
4451 p = (p.y > p.x) ? p.yx : p.xy; 4452 vec2 q = p - b; 4453 float k = max(q.y, q.x); 4454 vec2 w = (k > 0.0) ? q : vec2(b.y - p.x, -k); 4455 return sign(k) * length(max(w, 0.0)) + r; 4456 } 4457 4458 // Avoid namespace conflicts 4459 float xcross(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4460 vec2 f = tile_and_center(uv, frequency, variation, zigzag, rotation); 4461 return smoothstep(-smoothness, smoothness, sdf_cross(f, vec2(size, size * 0.25), smoothness)); 4462 }`,[eG]),eY=new Sj(`float ndot(vec2 a, vec2 b) { 4463 return a.x*b.x - a.y*b.y; 4464 } 4465 4466 float sdf_diamond(in vec2 p, in vec2 b) { 4467 p = abs(p); 4468 float h = clamp(ndot(b - 2.0 * p, b) / dot(b, b), -1.0, 1.0); 4469 float d = length(p - 0.5 * b * vec2(1.0 - h, 1.0 + h)); 4470 return d * sign(p.x * b.y + p.y * b.x - b.x * b.y); 4471 } 4472 4473 float diamond(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4474 vec2 f = tile_and_center(uv, frequency, variation, zigzag, rotation); 4475 return smoothstep(-smoothness, smoothness, sdf_diamond(f, vec2(size))); 4476 }`,[eG]),eQ=new Sj(`float checkerboard(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4477 uv *= frequency; 4478 vec2 i = floor(uv); 4479 4480 float offset = mod(i.y, 2.0); 4481 4482 uv.x += offset + zigzag * offset; 4483 float x = floor(uv.x); 4484 4485 return mod(x, 2.0); 4486 }`),eK=new Sj(`float line(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4487 vec2 f = tile_and_center(uv, frequency, 0.0, zigzag, rotation); 4488 4489 // Different approach for variation param here 4490 float row = floor(uv * frequency).y; 4491 float rand = hashwithoutsine12(vec2(row)); 4492 float s = mix(size, size * rand, variation); 4493 4494 return smoothstep( 4495 s - smoothness, 4496 s + smoothness, 4497 abs(f.y) 4498 ); 4499 }`,[eG]),{tileAndCenter:eG,circle:eH,ring:eW,polygon:eq,cross:eX,diamond:eY,checkerboard:eQ,line:eK,wave:new Sj(`// Uses bisection 4500 float udf_cos(in vec2 p, in float a, in float b, in float c, in float d) { 4501 // Convert all data to a primitive cosine wave 4502 p = c * (p - vec2(d, a)); 4503 4504 const float TWO_PI = PI * 2.0; 4505 4506 // Reduce to principal half cycle 4507 p.x = mod(p.x, TWO_PI); 4508 if (p.x > PI) { 4509 p.x = TWO_PI - p.x; 4510 } 4511 4512 // Find zero of derivative (minimize distance) 4513 float xa = 0.0; 4514 float xb = TWO_PI; 4515 4516 // 24 bit precision 4517 for (int i = 0; i < 24; i++) { 4518 float x = 0.5 * (xa + xb); 4519 float y = x - p.x + b * c * sin(x) * (p.y - b * c * cos(x)); 4520 if (y < 0.0) xa = x; 4521 else xb = x; 4522 } 4523 float x = 0.5 * (xa + xb); 4524 4525 // Compute distance 4526 vec2 q = vec2(x, b * c * cos(x)); 4527 return length(p - q) / c; 4528 } 4529 4530 float wave(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4531 float repeat = frequency.x; 4532 uv *= repeat; 4533 vec2 i = floor(uv); 4534 float row_offset = mod(i.y, 2.0); 4535 uv.x += row_offset * zigzag; 4536 vec2 f = vec2(uv.x, fract(uv.y)); 4537 4538 // Generalized cosine: y(x) = a + b * cos(cx + d) 4539 const float amplitude = 0.125; 4540 float wave_frequency = frequency.y * 0.1; 4541 float distance_estimate = udf_cos(f, 0.50, amplitude, wave_frequency * (2.0 * PI), 0.0); 4542 4543 // Different approach for variation param here 4544 float rand = hashwithoutsine12(vec2(i.y)); 4545 float s = mix(size, size * rand, variation); 4546 4547 return smoothstep(-smoothness, smoothness, distance_estimate - s * 0.5); 4548 }`)});var _R=class extends SL{constructor(e,t,i,r,s,a,o,l){super("v3"),this.nodeType="Rainbow",this.filmThickness=e,this.movement=t,this.wavelengths=i,this.noiseStrength=r,this.noiseScale=s,this.offset=a,this.isMask=l,this.alpha=o,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(e.require("vWorldViewDir"),e.require("worldNormal"),!e.isShader("fragment"))return console.warn("RainbowNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.require("uv"),e.requires.uv=[!0],e.addFragmentVariable(this.calpha,"float");let i=e.include(_R.Nodes.rainbow),r=[];return r.push(this.filmThickness.build(e,"f")),r.push(this.movement.build(e,"f")),r.push(this.wavelengths.build(e,"v3")),r.push(this.noiseStrength.build(e,"f")),r.push(this.noiseScale.build(e,"f")),r.push(this.offset.build(e,"v3")),r.push(this.isMask.build(e,"b")),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_R.Nodes=(eZ=new Sj(`vec3 attenuation(vec3 wavelengths, float filmThickness, float movement, float noiseStrength, float noiseScale, vec3 offset) { 4549 float f = 0.0; 4550 4551 if (noiseStrength != 0.0) { 4552 vec3 st = position / noiseScale; 4553 float noise = simplexFast(1.6 * st + vec3(1.8, 1.5, 1.9) * simplexFast(st) + vec3(1.7, 9.2, 1.0)); 4554 f = noise * noiseStrength; 4555 } 4556 4557 vec3 waves = wavelengths * vec3(1.0, 0.8, 0.6) + 1.0; 4558 float angle = dot(normalize(vWorldViewDir + (offset * -0.001)), normalize(vWNormal)); 4559 4560 mediump vec3 color = cos((((filmThickness + f) / waves) * angle) + movement); 4561 return .5 + .5 * color; 4562 }`,[_P.simplexFast]),{rainbow:new Sj(`vec3 rainbow(float filmThickness, float movement, vec3 wavelengths, float noiseStrength, float noiseScale, vec3 offset, bool isMask, float mask, float alpha, out float calpha) { 4563 mediump vec3 res = clamp(attenuation(wavelengths, filmThickness, movement, noiseStrength, noiseScale, offset), 0.0, 2.0); 4564 4565 float rainbowContribution = clamp(res.r + res.g + res.b, 0.0, 1.0); 4566
4567 float lalpha = alpha * rainbowContribution * mask; 4568 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 4569 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 4570 4571 return res; 4572 }`,[eZ])});var _L=class extends SL{constructor(e,t,i,r,s,a,o,l,h,c){super("v3"),this.nodeType="Toon",this.positioning=e,this.colors=t,this.steps=i,this.source=r,this.isWorldSpace=s,this.noiseStrength=a,this.noiseScale=o,this.shadowColor=l,this.offset=h,this.alpha=c,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(e.require("worldNormal"),e.require("worldPosition"),!e.isShader("fragment"))return console.warn("ToonNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.define("COLORS_MAX",10),e.addFragmentVariable(this.calpha,"float");let i=e.include(_L.Nodes.toon),r=[];return r.push(this.positioning.build(e,"i")),r.push(this.colors.build(e,"v4[]")),r.push(this.steps.build(e,"f[]")),r.push(this.source.build(e,"v3")),r.push(this.isWorldSpace.build(e,"b")),r.push(this.noiseStrength.build(e,"f")),r.push(this.noiseScale.build(e,"f")),r.push(this.shadowColor.build(e,"v4")),r.push(this.offset.build(e,"v3")),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_L.Nodes=(eJ=new Sj(`float rand(float n) { 4573 return fract(sin(n) * 43758.5453123); 4574 }`),e$=new Sj(`float hash1(float p) { 4575 p = fract(p * 0.011); 4576 p *= p + 7.5; 4577 p *= p + p; 4578 return fract(p); 4579 }`),e0=new Sj(`float valueNoise(vec3 x) { 4580 const vec3 step = vec3(110, 241, 171); 4581 4582 vec3 i = floor(x); 4583 vec3 f = fract(x); 4584 4585 // For performance, compute the base input to a 1D hash from the integer part of the argument and the 4586 // incremental change to the 1D based on the 3D -> 1D wrapping 4587 float n = dot(i, step); 4588 4589 vec3 u = f * f * (3.0 - 2.0 * f); 4590 return mix(mix(mix( hash1(n + dot(step, vec3(0, 0, 0))), hash1(n + dot(step, vec3(1, 0, 0))), u.x), 4591 mix( hash1(n + dot(step, vec3(0, 1, 0))), hash1(n + dot(step, vec3(1, 1, 0))), u.x), u.y), 4592 mix(mix( hash1(n + dot(step, vec3(0, 0, 1))), hash1(n + dot(step, vec3(1, 0, 1))), u.x), 4593 mix( hash1(n + dot(step, vec3(0, 1, 1))), hash1(n + dot(step, vec3(1, 1, 1))), u.x), u.y), u.z); 4594 }`,[e$]),e1=new Sj(`vec3 hash3(vec3 x) { 4595 x = vec3(dot(x,vec3(127.1, 311.7, 74.7)), 4596 dot(x,vec3(269.5, 183.3, 246.1)), 4597 dot(x,vec3(113.5, 271.9, 124.6))); 4598 4599 return fract(sin(x)*43758.5453123); 4600 }`),e2=new Sj(`vec3 voronoiNoise(in vec3 x) 4601 { 4602 vec3 p = floor(x); 4603 vec3 f = fract(x); 4604 4605 float id = 0.0; 4606 vec2 res = vec2(100.0); 4607 4608 for(int k=-1; k<=1; k++) 4609 for(int j=-1; j<=1; j++) 4610 for(int i=-1; i<=1; i++) 4611 { 4612 vec3 b = vec3(float(i), float(j), float(k)); 4613 4614 // Comment out the "+ hash(p + b);" part below to get "square" cells 4615 vec3 r = vec3(b) - f + hash3(p + b); 4616 float d = dot(r, r); 4617 4618 if (d < res.x) 4619 { 4620 id = dot(p + b, vec3(1.0, 57.0, 113.0)); 4621 res = vec2(d, res.x); 4622 } 4623 else if (d < res.y) 4624 { 4625 res.y = d; 4626 } 4627 } 4628 4629 return vec3(sqrt(res), abs(id)); 4630 } 4631 `,[e1]),{toon:new Sj(`vec3 toon(int positioning, vec4 colors[COLORS_MAX], float steps[COLORS_MAX], vec3 source, bool isWorldSpace, float noiseStrength, float noiseScale, vec4 shadowColor, vec3 offset, float mask, float alpha, out float calpha) { 4632 float t = 0.0; 4633 float shadow = 1.0; 4634 4635 if (positioning == 0) { 4636 4637 // Can't do this mode if lighting is "none" 4638 #if (defined(PHONG) || defined(LAMBERT) || defined(STANDARD)) 4639 4640 // Algorithm from Chapter 10 of Graphics Shaders 4641 const vec3 weights = vec3(0.2125, 0.7154, 0.0721); 4642 vec3 lpos; 4643 vec3 l; 4644 float dproduct; 4645 4646 #if (NUM_POINT_LIGHTS > 0) 4647 4648 #if defined(USE_SHADOWMAP) && (NUM_POINT_LIGHT_SHADOWS > 0) 4649 PointLightShadow pointLightShadow; 4650 #endif 4651 4652 #pragma unroll_loop_start 4653 for (int i = 0; i < NUM_POINT_LIGHTS; i++) { 4654 // Light positions are in view-space for some reason? 4655 lpos = (inverse(viewMatrix) * vec4(pointLights[UNROLLED_LOOP_INDEX].position, 1.0
4655)).xyz; 4656 l = normalize(lpos - worldPosition); 4657 4658 dproduct = dot(l, normalize(worldNormal)) * 0.5 + 0.5; 4659 4660 // TODO: we want to use "intensity" but it isn't available in the shader code 4661 //dproduct += dot(pointLights[UNROLLED_LOOP_INDEX].color, weights); 4662 4663 t = max(t, dproduct); 4664 4665 // Accumulate shadow contribution 4666 #if defined(USE_SHADOWMAP) && (UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS) 4667 pointLightShadow = pointLightShadows[UNROLLED_LOOP_INDEX]; 4668 shadow *= getPointShadow( 4669 pointShadowMap[UNROLLED_LOOP_INDEX], 4670 pointLightShadow.shadowMapSize, 4671 pointLightShadow.shadowBias, 4672 pointLightShadow.shadowRadius, 4673 vPointShadowCoord[UNROLLED_LOOP_INDEX], 4674 pointLightShadow.shadowCameraNear, 4675 pointLightShadow.shadowCameraFar); 4676 #endif 4677 } 4678 #pragma unroll_loop_end 4679 4680 #endif 4681 4682 #if NUM_DIR_LIGHTS > 0 4683 4684 #if defined(USE_SHADOWMAP) && (NUM_DIR_LIGHT_SHADOWS > 0) 4685 DirectionalLightShadow directionalLightShadow; 4686 #endif 4687 4688 #pragma unroll_loop_start 4689 for (int i = 0; i < NUM_DIR_LIGHTS; i++) { 4690 // Use the direction vector for directional lights instead 4691 l = (inverse(viewMatrix) * vec4(directionalLights[UNROLLED_LOOP_INDEX].direction, 0.0)).xyz; 4692 4693 dproduct = dot(l, normalize(worldNormal)) * 0.5 + 0.5; 4694 t = max(t, dproduct); 4695 4696 // Accumulate shadow contribution 4697 #if defined(USE_SHADOWMAP) && (UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS) 4698 directionalLightShadow = directionalLightShadows[UNROLLED_LOOP_INDEX]; 4699 shadow *= getShadow( 4700 UNROLLED_LOOP_INDEX, 4701 directionalShadowMap[UNROLLED_LOOP_INDEX], 4702 directionalLightShadow.shadowMapSize, 4703 directionalLightShadow.shadowBias, 4704 directionalLightShadow.shadowRadius, 4705 vDirectionalShadowCoord[UNROLLED_LOOP_INDEX]); 4706 #endif 4707 } 4708 #pragma unroll_loop_end 4709 4710 #endif 4711 4712 #if NUM_SPOT_LIGHTS > 0 4713 4714 #if defined(USE_SHADOWMAP) && (NUM_SPOT_LIGHT_SHADOWS > 0) 4715 SpotLightShadow spotLightShadow; 4716 #endif 4717 4718 #pragma unroll_loop_start 4719 for (int i = 0; i < NUM_SPOT_LIGHTS; i++) { 4720 lpos = (inverse(viewMatrix) * vec4(spotLights[UNROLLED_LOOP_INDEX].position, 1.0)).xyz; 4721 l = normalize(lpos - worldPosition); 4722 4723 dproduct = dot(l, normalize(worldNormal)) * 0.5 + 0.5; 4724 t = max(t, dproduct); 4725 4726 // Accumulate shadow contribution 4727 #if defined(USE_SHADOWMAP) && (UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS) 4728 spotLightShadow = spotLightShadows[UNROLLED_LOOP_INDEX]; 4729 shadow *= getShadow( 4730 UNROLLED_LOOP_INDEX, 4731 spotShadowMap[UNROLLED_LOOP_INDEX], 4732 spotLightShadow.shadowMapSize, 4733 spotLightShadow.shadowBias, 4734 spotLightShadow.shadowRadius, 4735 vSpotLightCoord[UNROLLED_LOOP_INDEX]); 4736 #endif 4737 } 4738 #pragma unroll_loop_end 4739 4740 #endif 4741 4742 t = clamp(t, 0.0, 1.0); 4743 4744 #endif 4745 4746 } else if (positioning == 1) { 4747 4748 vec3 origin = mix(position, worldPosition, float(isWorldSpace)); 4749 vec3 direction = normalize(source - origin); 4750 t = dot(direction, normalize(worldNormal)) * 0.5 + 0.5; 4751 4752 } else { 4753 4754 vec3 origin = worldPosition; 4755 vec3 source = cameraPosition - offset; 4756 vec3 direction = normalize(source - origin); 4757 t = dot(direction, normalize(worldNormal)) * 0.5 + 0.5; 4758 4759 } 4760 4761 if (noiseStrength > 0.0) { 4762 // Distort with noise 4763 vec3 st = position / noiseScale; 4764 4765 // Voronoi "smooth" noise 4766 float noise = 1.0 - voronoiNoise(st).x; 4767 4768 // Voronoi cellular noise 4769 //float noise = 1.0 - rand(voronoiNoise(st).z); 4770 4771 // Position warp noise 4772 // vec3 offset = vec3( 4773 // simplexFast(st), 4774 // simplexFast(st + vec3(111.1, 143.89, 217.19)), 4775 // simplexFast(st + vec3(171.1, 247.89, 117.23)) 4776 // ); 4777 // st += offset; 4778 // float noise = valueNoise(st); 4779 4780 t += noise * noiseStrength; 4781 } 4782 4783 t = clamp(t, 0.0, 1.0); 4784 4785 // Compute ramp color 4786 float p; 4787 vec4 color = colors[0]; 4788 for (int i = 1; i < COLORS_MAX; i++) { 4789 p = clamp((t - steps[i-1]) / (steps[i] - steps[i-1]), 0.0, 1.0); 4790 color = mix(color, colors[i], smoothstep(0.0, 1.0, p)); 4791 } 4792 4793 // Incorporate custom shadow color 4794 if (positioning == 0) { 4795 4796 vec3 blendedShadow = mix(color.rgb, shadowColor.rgb, shadowColor.a); 4797 color.rgb = mix(blendedShadow, color.rgb, shadow); 4798 4799 } 4800 4801 // Accumulate alpha as usual
4802 float lalpha = alpha * color.a * mask; 4803 calpha = lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0); 4804 accumAlpha += (1.0 - accumAlpha) * lalpha; 4805 4806 return color.xyz; 4807 4808 }`,[_P.simplexFast,eJ,e0,e2])});var _B={textureBicubic:new Sj(`float w0( float a ) { 4809 return ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 ); 4810 } 4811 4812 float w1( float a ) { 4813 return ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 ); 4814 } 4815 4816 float w2( float a ){ 4817 return ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 ); 4818 } 4819 4820 float w3( float a ) { 4821 return ( 1.0 / 6.0 ) * ( a * a * a ); 4822 } 4823 4824 // g0 and g1 are the two amplitude functions 4825 float g0( float a ) { 4826 return w0( a ) + w1( a ); 4827 } 4828 4829 float g1( float a ) { 4830 return w2( a ) + w3( a ); 4831 } 4832 4833 // h0 and h1 are the two offset functions 4834 float h0( float a ) { 4835 return - 1.0 + w1( a ) / ( w0( a ) + w1( a ) ); 4836 } 4837 4838 float h1( float a ) { 4839 return 1.0 + w3( a ) / ( w2( a ) + w3( a ) ); 4840 } 4841 4842 vec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) { 4843 uv = uv * texelSize.zw + 0.5; 4844 4845 vec2 iuv = floor( uv ); 4846 vec2 fuv = fract( uv ); 4847 4848 float g0x = g0( fuv.x ); 4849 float g1x = g1( fuv.x ); 4850 float h0x = h0( fuv.x ); 4851 float h1x = h1( fuv.x ); 4852 float h0y = h0( fuv.y ); 4853 float h1y = h1( fuv.y ); 4854 4855 vec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy; 4856 vec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy; 4857 vec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy; 4858 vec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy; 4859 4860 return g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) + 4861 g1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) ); 4862 } 4863 4864 vec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) { 4865 vec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) ); 4866 vec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) ); 4867 vec2 fLodSizeInv = 1.0 / fLodSize; 4868 vec2 cLodSizeInv = 1.0 / cLodSize; 4869 vec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) ); 4870 vec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) ); 4871 return mix( fSample, cSample, fract( lod ) ); 4872 }`)},_z=class extends SL{constructor(e,t,i,r,s,a,o,l){super("v3"),this.nodeType="Transmission",this.thickness=e,this.ior=t,this.roughness=i,this.transmissionSamplerSize=r,this.transmissionSamplerMap=s,this.transmissionDepthMap=a,this.aspectRatio=o,this.alpha=l,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(e.extensions.shaderTextureLOD=!0,e.extensions.derivatives=!0,!e.isShader("fragment"))return console.warn("TransmissionNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.define("NUM_SAMPLES",6),e.define("BLUR_SLOD",Math.pow(2,_k.transmissionLod.value)),e.require("worldPosition"),e.requires.worldNormal=!0,e.requires.modelMatrix=!0,e.requires.projectionMatrix=!0,e.addFragmentVariable(this.calpha,"float");let i=e.include(_z.Nodes.transmission),r=[];return r.push(this.thickness.build(e,"f")),r.push(this.ior.build(e,"f")),r.push(this.roughness.build(e,"f")),r.push(this.transmissionSamplerSize.build(e,"v2")),r.push(this.transmissionSamplerMap.getTexture(e,"t")),r.push(this.transmissionDepthMap.getTexture(e,"t")),r.push(this.aspectRatio.build(e,"v2")),r.push("normal"),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_z.Nodes=(e3=new Sj(`vec3 blur(sampler2D sp, vec2 U, vec2 scale, float lod, sampler2D dm, vec2 unrefractedU, vec2 aspectRatio) { 4873 // Slightly modified version of this: 4874 // https://www.shadertoy.com/view/ltScRG 4875 4876 // Special case for blur == 0.0 4877 if (lod == 0.0) { 4878 #ifdef TEXTURE_LOD_EXT 4879 return texture2DLodEXT( sp, U, 0.0).rgb; 4880 #else 4881 return textureLod( sp, U, 0.0).rgb; 4882 #endif 4883 } 4884 4885 vec2 texelSize = vec2(1.0) / resolution; 4886 vec2 halton = haltonSequence[frameIndex]; 4887 float temporalOffset = getNoiseInterleavedGradient(gl_FragCoord.xy + halton); 4888 float temporalAngle = temporalOffset * PI2; 4889 vec3 res = vec3(0.0); 4890 vec2 uv = vec2(0.0); 4891 vec2 offset = vec2(0.0); 4892 vec2 vogelSample = vec2(0.0); 4893 for (int i = 0; i < NUM_SAMPLES; i++) { 4894 vogelSample = vogelDiskSample(i, NUM_SAMPLES, temporalAngle) * texelSize; 4895 offset = vogelSample * scale * (lod * 10.0); // TODO: used to be hardcoded to 20 4896 uv = U + offset; 4897 float opaqueDepth = unpackRGBAToDepth(textureLod(dm, uv, lod)); 4898 if (opaqueDepth != 0.0 && opaqueDepth < gl_FragCoord.z) { 4899 uv = unrefractedU; 4900 lod = lod > 4.0 ? lod : lod / 2.0; 4901 } 4902 res += textureLod(sp, uv, lod).rgb; 4903 } 4904 return res / float(NUM_SAMPLES); 4905 }`),e4=new Sj(`vec3 getVolumeTransmissionRay( vec3 n, vec3 v, float thickness, float ior, mat4 modelMatrix ) { 4906 // Direction of refracted light. 4907 vec3 refractionVector = refract( -v, n, 1.0 / ior ); 4908 4909 // Compute rotation-independant scaling of the model matrix. 4910 vec3 modelScale; 4911 modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) ); 4912 modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) ); 4913 modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) ); 4914 4915 // The thickness is specified in local space 4916 return normalize( refractionVector ) * thickness * modelScale; 4917 }`),e5=new Sj(`float applyIorToRoughness( float roughness, float ior ) { 4918 // Scale roughness with IOR so that an IOR of 1.0 results in no microfacet refraction and 4919 // an IOR of 1.5 results in the default amount of microfacet refraction. 4920 return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 ); 4921 }`),e6=new Sj(`vec3 getTransmissionSample( vec2 fragCoord, float roughness, float ior, vec2 transmissionSamplerSize, sampler2D transmissionSamplerMap, sampler2D transmissionDepthMap, vec2 unrefractedCoords, vec2 aspectRatio) { 4922 // Threejs exports do not pass a depth map to this shader, so we have to fallback to the "Threejs method of blurring" - see 4923 // also the code in convertTransmission.ts, which runs during export 4924 #ifdef IS_THREEJS_EXPORT 4925 float lod = log2(transmissionSamplerSize.x) * applyIorToRoughness(roughness / 5.0, ior); 4926 return textureBicubic(transmissionSamplerMap, fragCoord.xy, lod).rgb; 4927 #else 4928 float framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior ); 4929 float lod = applyIorToRoughness(roughness, ior); 4930 return blur(transmissionSamplerMap, fragCoord, vec2(lod), min(framebufferLod / 5.5, 8.5), transmissionDepthMap, unrefractedCoords, aspectRatio); 4931 #endif 4932 }`,[_B.textureBicubic,e5,e3]),e8=new Sj(`vec3 getIBLVolumeRefraction( vec3 n, vec3 v, float roughness, vec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness, vec2 transmissionSamplerSize, sampler2D transmissionSamplerMap, sampler2D transmissionDepthMap, vec2 aspectRatio ) { 4933 vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix ); 4934 vec3 refractedRayExit = position + transmissionRay; 4935 4936 // Project refracted vector on the framebuffer, while mapping to normalized device coordinates. 4937 vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 ); 4938 vec2 refractionCoords = ndcPos.xy / ndcPos.w; 4939 refractionCoords += 1.0; 4940 refractionCoords /= 2.0; 4941 4942 vec4 ndcPosUnrefracted = projMatrix * viewMatrix * vec4(position, 1.0 ); 4943 vec2 unrefractedCoords = ndcPosUnrefracted.xy / ndcPosUnrefracted.w; 4944 unrefractedCoords += 1.0; 4945 unrefractedCoords /= 2.0; 4946 4947 // Sample framebuffer to get pixel the refracted ray hits. 4948 return getTransmissionSample( refractionCoords, roughness, ior, transmissionSamplerSize, transmissionSamplerMap, transmissionDepthMap, unrefractedCoords, aspectRatio ); 4949 }`,[e6,e4]),{transmission:new Sj(`vec3 transmission(float thickness, float ior, float roughness, vec2 transmissionSamplerSize, sampler2D transmissionSamplerMap, sampler2D transmissionDepthMap, vec2 aspectRatio, vec3 normal, float mask, float alpha, out float calpha) { 4950 vec3 v = vec3(0.); 4951 if (isOrthographic) { 4952 v = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); 4953 } else { 4954 v = normalize(vWPosition - cameraPosition); 4955 } 4956 vec3 transmission = getIBLVolumeRefraction(vWNormal, -v, roughness, vWPosition, modelMatrix, viewMatrix, projectionMatrix, ior, thickness, transmissionSamplerSize, transmissionSamplerMap, transmissionDepthMap, aspectRatio ); 4957
4958 float lalpha = alpha * mask; 4959 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 4960 accumAlpha += ( 1.0 - accumAlpha ) * alpha; 4961 4962 return transmission; 4963 }`,[e8])});var _F=((e9=_F||{}).NOISE="noise",e9.MAP="map",e9),_N=class extends SL{constructor(e,t,i,r,s,a,o,l,h,c,d){super("v3"),this.displacementTypeIndex=new _c(0),this.nodeType="VertexDisplacement",this.intensity=e,this.movementOrTexture=t,"map"===Object.values(_F)[this.displacementTypeIndex.value]&&(this.mat=new _g(this.movementOrTexture.value.matrix)),this.cropOrOffset=i,this.scale=c,this.noiseFunctionIndex=d,this.voronoiStyle=r,this.smoothness=s,this.seed=a,this.highCut=o,this.lowCut=l,this.quality=h}generate(e,t){if(!e.isShader("vertex"))return console.warn("VertexDisplacementNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.define("USE_LAYER_DISPLACE");let i,r=[];switch(r.push("displaced_position"),r.push("displaced_normal"),Object.values(_F)[this.displacementTypeIndex.value]){case"map":i=e.include(_N.Nodes.map),r.push(this.movementOrTexture.getTexture(e,"t")),r.push("uv"),r.push(this.cropOrOffset.build(e,"f")),this.mat&&r.push(this.mat.build(e,"mat3"));break;case"noise":{let t=["simplexPrecise","simplexFractal","simplexAshima","fbm","perlin","voronoi"][this.noiseFunctionIndex.value],s=new Sj(`vec3 orthogonal(vec3 v) { 4964 return normalize(abs(v.x) > abs(v.z) ? vec3(-v.y, v.x, 0.0) : vec3(0.0, -v.z, v.y)); 4965 }`),a="voronoi"==t?` 4966 float v = ${t}((p + offset) * scale * 0.001 + neighbour_offset + (movement * 0.1), voronoiStyle, smoothness, seed, quality); 4967 v = remap(v, lowCut, highCut, 0.0, 1.0); 4968 v = smax(v, 0.0, smoothness * 0.25); 4969 v = smin(v, 1.0, smoothness * 0.25); 4970 4971 return p + n * v * intensity; 4972 `:` 4973 return p + n * ${t}((p + offset) * scale * 0.001 + neighbour_offset + (movement * 0.1)) * intensity; 4974 `,o=new Sj(`vec3 distorted(vec3 p, vec3 n, float scale, float intensity, vec3 offset, float neighbour_offset, float movement, int voronoiStyle, float smoothness, float seed, float highCut, float lowCut, int quality) { 4975 ${a} 4976 }`,[_P.simplexPrecise,_P.simplexFractal,_P.simplexAshima,_P.fbm,_P.perlin,_P.voronoi]),l=new Sj(`vec3 vertexDisplacementNoise(vec3 position, vec3 normal, float scale, vec3 offset, float movement, int voronoiStyle, float smoothness, float seed, float highCut, float lowCut, int quality, float intensity, out vec3 displaced_normal) { 4977 vec3 displaced_position = distorted(position, normal, scale, intensity, offset, neighbor_offset, movement, voronoiStyle, smoothness, seed, highCut, lowCut, quality); 4978 vec3 tangent1 = orthogonal(normal); 4979 vec3 tangent2 = normalize(cross(normal, tangent1)); 4980 4981 // TODO(Max): The distance to the neighbors was originally scaled by 0.1. 4982 // This caused some small oval/circular visual artifacts in the lighting. 4983 // For now, simply using neighbors further away betters the problem, 4984 // but we should figure out the underlying cause when we have some time. 4985 // Maybe its related to how we calculate the tangent and bitangent? 4986 vec3 nearby1 = position + tangent1; 4987 vec3 nearby2 = position + tangent2; 4988 vec3 distorted1 = distorted(nearby1, normal, scale, intensity, offset, neighbor_offset, movement, voronoiStyle, smoothness, seed, highCut, lowCut, quality); 4989 vec3 distorted2 = distorted(nearby2, normal, scale, intensity, offset, neighbor_offset, movement, voronoiStyle, smoothness, seed, highCut, lowCut, quality); 4990 displaced_normal = normalize(cross(distorted1 - displaced_position, distorted2 - displaced_position)); 4991 return displaced_position; 4992 }`,[o,s]);i=e.include(l),r.push(this.scale.build(e,"f")),r.push(this.cropOrOffset.build(e,"v3")),r.push(this.movementOrTexture.build(e,"f")),r.push(this.voronoiStyle.build(e,"i")),r.push(this.smoothness.build(e,"f")),r.push(this.seed.build(e,"f")),r.push(this.highCut.build(e,"f")),r.push(this.lowCut.build(e,"f")),r.push(this.qual
4992ity.build(e,"i"))}}return r.push(this.intensity.build(e,"f")),r.push("displaced_normal"),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_N.Nodes=(e7=new Sj(`vec3 orthogonal(vec3 v) { 4993 return normalize(abs(v.x) > abs(v.z) ? vec3(-v.y, v.x, 0.0) : vec3(0.0, -v.z, v.y)); 4994 }`),te=new Sj(`float displacementMapTexture(sampler2D tex, float crop, vec2 uv, mat3 mat, vec2 offset) { 4995 vec2 uvs = (mat * vec3(uv * 2.0 - 1.0, 1.0) / 2.0 + 0.5).xy + offset; 4996 vec4 tmp = texture2D(tex, uvs); 4997 vec3 col = tmp.rgb; 4998 if (crop > 0.5) { 4999 if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 ) { 5000 return 0.0; 5001 } 5002 } 5003 return col.r; 5004 }`),{map:new Sj(`vec3 vertexDisplacementMap(vec3 position, vec3 normal, sampler2D tex, vec2 uv, float crop, mat3 mat, float intensity, out vec3 displaced_normal) { 5005 vec3 displaced_position = position + normal * displacementMapTexture(tex, crop, uv, mat, vec2(0.0)) * intensity; 5006 vec3 tangent1 = normalize(orthogonal(normal)); 5007 vec3 tangent2 = normalize(cross(normal, tangent1)); 5008 vec3 nearby1 = position + tangent1 * 0.1; 5009 vec3 nearby2 = position + tangent2 * 0.1; 5010 vec3 distorted1 = nearby1 + normal * displacementMapTexture(tex, crop, uv, mat, vec2(neighbor_offset)) * intensity; 5011 vec3 distorted2 = nearby2 + normal * displacementMapTexture(tex, crop, uv, mat, vec2(neighbor_offset)) * intensity; 5012 displaced_normal = normalize(cross(distorted1 - displaced_position, distorted2 - displaced_position)); 5013 return displaced_position; 5014 }`,[e7,te])});var _k={normalRenderTarget:new SZ,normalRenderTargetDepth:new SZ,transmissionRenderTarget:new SZ,aspectRatio:new Sz,transmissionSize:new Sz(2048,2048),transmissionRenderTargetDepth:new SZ,aoRenderTarget:new SZ,aoEnabled:new _d,pixelRatioNode:new SJ(1),resolution:new Sz,penumbraSize:new _u(5,.5),frameIndex:new _c(0),transmissionLod:new _c(2)};for(let e of Object.values(_k))e.isRenderGlobal=!0;var _U,_V,_j,_G,_H,_W={skiaWasmUrl:"https://unpkg.com/@splinetool/[email protected]/build/ui.wasm"},_q=class extends SI{constructor(){super("basic"),this.nodeType="Basic",this.color=new _h(5526619),this.shadingAlpha=new SJ(1),this.shadingBlend=new _c(0),this.previousModelViewMatrix=new _v,this.previouseProjectionMatrix=new _v}get category(){return"phong"}generate(e){let t;if(e.isShader("vertex")){let i=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform({frameIndex:_k.frameIndex}),e.mergeUniform({resolution:_k.resolution}),e.mergeUniform({previousModelViewMatrix:this.previousModelViewMatrix}),e.mergeUniform({previousProjectionMatrix:this.previouseProjectionMatrix}),e.mergeUniform(r2.merge([su.fog])),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","#include <fog_pars_vertex>","#include <skinning_pars_vertex>","#include <normal_pars_vertex>","#include <morphtarget_pars_vertex>"].join(` 5015`));let r=["#include <beginnormal_vertex>","#include <morphnormal_vertex>",` 5016 #include <skinbase_vertex> 5017 #include <skinnormal_vertex> 5018 #if !defined( USE_LAYER_DISPLACE ) 5019 #include <defaultnormal_vertex> 5020 #endif 5021 5022 vec3 displaced_position = position; 5023 vec3 displaced_normal = normal; 5024 5025 #if defined( USE_LAYER_DISPLACE ) 5026 vec3 transformed; 5027 vec3 transformedNormal; 5028 #endif 5029 `,"#include <normal_vertex>",` 5030 #if !defined( USE_LAYER_DISPLACE ) 5031 #include <begin_vertex> 5032 #endif /* !USE_LAYER_DISPLACE */ 5033 `];i&&r.push(i.code,i.result?"displaced_position = "+i.result+";
5033":""),r.push("transformed = displaced_position;","#include <morphtarget_vertex>","#include <skinning_vertex>","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED"," vNormal = transformedNormal;","#endif"),r.push("#include <project_vertex>","#include <fog_vertex>","#include <clipping_planes_vertex>"," vViewPosition = - mvPosition.xyz;","#include <worldpos_vertex>"),r.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),t=r.join(` 5034`)}else{void 0===this.color&&(this.color=new _h(5526619)),this.color.analyze(e,{slot:"color"}),this.alpha&&this.alpha.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"});let i=this.color.flow(e,"c",{slot:"color"}),r=this.alpha?this.alpha.flow(e,"f"):void 0,s=this.alphaOverride?this.alphaOverride.flow(e,"f"):void 0,a=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0;e.requires.transparent=void 0!==r,e.addParsCode(["varying vec3 vWPosition;","#include <fog_pars_fragment>","#include <dithering_pars_fragment>","varying vec3 vViewPosition;","#include <normal_pars_fragment>"].join(` 5035`));let o=["#include <normal_fragment_begin>",i.code];r&&o.push(r.code,"#ifdef ALPHATEST"," if ( "+r.result+" <= ALPHATEST ) discard;","#endif"),a?o.push(a.code,`vec3 outgoingLight = ${i.result};`,`vec3 finalColor = spe_blend(outgoingLight, ${a.result}, 1.0, SPE_BLENDING_NORMAL);`):o.push(`vec3 finalColor = ${i.result};`);let l="1.0";this.mask&&(this.mask.analyze(e),l=`luminance(${this.mask.flow(e,"v3").result})`),r?o.push(`gl_FragColor = vec4( finalColor, accumAlpha * ${r.result} * ${l} );`):o.push("gl_FragColor = vec4("+i.result+", 1.0 );"),s&&o.push(`gl_FragColor.a *= ${s.result};`),o.push("#include <fog_fragment>","#include <dithering_fragment>"),t=o.join(` 5036`)}return t}},_X=class extends SI{constructor(){super("lambert"),this.nodeType="Lambert",this.color=new _h(5526619),this.emissive=new _h(0),this.emissiveIntensity=new SJ(1),this.previousModelViewMatrix=new _v,this.previouseProjectionMatrix=new _v,this.shadingAlpha=new SJ(1),this.shadingBlend=new _c(0),this.occlusion=new _d(!0)}get category(){return"lambert"}build(e){let t;if(e.define("LAMBERT"),e.requires.lights=!0,e.extensions.derivatives=!0,e.isShader("vertex")){let i=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform({frameIndex:_k.frameIndex}),e.mergeUniform({resolution:_k.resolution}),e.mergeUniform({previousModelViewMatrix:this.previousModelViewMatrix}),e.mergeUniform({previousProjectionMatrix:this.previouseProjectionMatrix}),e.mergeUniform(r2.merge([su.fog,su.lights])),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","varying vec3 vLightFront;","varying vec3 vIndirectFront;","#ifndef DOUBLE_SIDED"," #define DOUBLE_SIDED","#endif","#ifdef DOUBLE_SIDED"," varying vec3 vLightBack;"," varying vec3 vIndirectBack;","#endif","#include <bsdfs>","#include <lights_pars_begin>","#include <color_pars_vertex>","#include <fog_pars_vertex>","#include <skinning_pars_vertex>","#include <normal_pars_vertex>","#include <morphtarget_pars_vertex>","#include <shadowmap_pars_vertex>","#include <clipping_planes_pars_vertex>"].join(` 5037`));let r=["#include <beginnormal_vertex>","#include <morphnormal_vertex>",` 5038 #include <skinbase_vertex> 5039 #include <skinnormal_vertex> 5040 #ifndef USE_LAYER_DISPLACE 5041 #include <defaultnormal_vertex> 5042 #endif 5043 5044 vec3 displaced_position = position; 5045 vec3 displaced_normal = objectNormal; 5046 5047 #ifdef USE_LAYER_DISPLACE 5048 vec3 transformed; 5049 vec3 transformedNormal; 5050 #endif 5051 `,"#include <normal_vertex>",` 5052 #ifndef USE_LAYER_DISPLACE 5053 #include <begin_vertex> 5054 #endif 5055 `];i&&r.push(i.code,i.result?"displaced_position = "+i.result+";
5055":""),r.push("transformed = displaced_position;","#include <morphtarget_vertex>","#include <skinning_vertex>","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED"," vNormal = transformedNormal;","#endif"),r.push(" #include <project_vertex>"," #include <clipping_planes_vertex>"," vViewPosition = - mvPosition.xyz;"," #include <worldpos_vertex>",` 5056 vec3 diffuse = vec3( 1.0 ); 5057 GeometricContext geometry; 5058 geometry.position = mvPosition.xyz; 5059 geometry.normal = normalize( transformedNormal ); 5060 geometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz ); 5061 `),r.push(` 5062 GeometricContext backGeometry; 5063 backGeometry.position = geometry.position; 5064 backGeometry.normal = -geometry.normal; 5065 backGeometry.viewDir = geometry.viewDir; 5066 vLightFront = vec3( 0.0 ); 5067 vIndirectFront = vec3( 0.0 ); 5068 #ifdef DOUBLE_SIDED 5069 vLightBack = vec3( 0.0 ); 5070 vIndirectBack = vec3( 0.0 ); 5071 #endif 5072 IncidentLight directLight; 5073 float dotNL; 5074 vec3 directLightColor_Diffuse; 5075 vIndirectFront += getAmbientLightIrradiance( ambientLightColor ); 5076 vIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal ); 5077 #ifdef DOUBLE_SIDED 5078 vIndirectBack += getAmbientLightIrradiance( ambientLightColor ); 5079 vIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal ); 5080 #endif 5081 #if NUM_POINT_LIGHTS > 0 5082 #pragma unroll_loop_start 5083 for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) { 5084 getPointLightInfo( pointLights[ i ], geometry, directLight ); 5085 dotNL = dot( geometry.normal, directLight.direction ); 5086 directLightColor_Diffuse = directLight.color; 5087 vLightFront += saturate( dotNL ) * directLightColor_Diffuse; 5088 #ifdef DOUBLE_SIDED 5089 vLightBack += saturate( -dotNL ) * directLightColor_Diffuse; 5090 #endif 5091 } 5092 #pragma unroll_loop_end 5093 #endif 5094 #if NUM_SPOT_LIGHTS > 0 5095 #pragma unroll_loop_start 5096 for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) { 5097 getSpotLightInfo( spotLights[ i ], geometry, directLight ); 5098 dotNL = dot( geometry.normal, directLight.direction ); 5099 directLightColor_Diffuse = directLight.color; 5100 vLightFront += saturate( dotNL ) * directLightColor_Diffuse; 5101 #ifdef DOUBLE_SIDED 5102 vLightBack += saturate( -dotNL ) * directLightColor_Diffuse; 5103 #endif 5104 } 5105 #pragma unroll_loop_end 5106 #endif 5107 #if NUM_DIR_LIGHTS > 0 5108 #pragma unroll_loop_start 5109 for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { 5110 getDirectionalLightInfo( directionalLights[ i ], geometry, directLight ); 5111 dotNL = dot( geometry.normal, directLight.direction ); 5112 directLightColor_Diffuse = directLight.color; 5113 vLightFront += saturate( dotNL ) * directLightColor_Diffuse; 5114 #ifdef DOUBLE_SIDED 5115 vLightBack += saturate( -dotNL ) * directLightColor_Diffuse; 5116 #endif 5117 } 5118 #pragma unroll_loop_end 5119 #endif 5120 #if NUM_HEMI_LIGHTS > 0 5121 #pragma unroll_loop_start 5122 for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) { 5123 vIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal ); 5124 #ifdef DOUBLE_SIDED 5125 vIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal ); 5126 #endif 5127 } 5128 #pragma unroll_loop_end 5129 #endif 5130 `," #include <shadowmap_vertex>"," #include <fog_vertex>"),r.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),t=r.join(` 5131`)}else{e.mergeUniform({penumbraSize:_k.penumbraSize}),e.mergeUniform({frameIndex:_k.frameIndex}),e.mergeUniform({aoMap:_k.aoRenderTarget}),e.mergeUniform({aoEnabled:_k.aoEnabled}),void 0===this.color&&(this.color=new _h(5526619)),this.color.analyze(e,{slot:"color"}),this.shadingAlpha.analyze(e),this.shadingBlend.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"}),this.alpha&&this.alpha.analyze(e);let i=this.color.flow(e,"c",{slot:"color"}),r=this.emissive.flow(e,"c",{slot:"emissive"}),s=this.emissiveIntensity.flow(e,"f",{slot:"emissive"}),a=this.occlusion.flow(e,"b",{slot:"occlusion"}
vendor: 6,231 bytes, lines 5131-5197
5131),o=this.shadingAlpha.flow(e,"f"),l=this.shadingBlend.flow(e,"i"),h=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0,c=this.alpha?this.alpha.flow(e,"f"):void 0,d=this.alphaOverride?this.alphaOverride.flow(e,"f"):void 0;e.requires.transparent=void 0!==c,e.addParsCode(["uniform float penumbraSize[5];","uniform sampler2D aoMap;","uniform bool aoEnabled;","varying vec3 vViewPosition;","varying vec3 vWPosition;","varying vec3 vLightFront;","varying vec3 vIndirectFront;","#ifndef DOUBLE_SIDED"," #define DOUBLE_SIDED","#endif","#include <normal_pars_fragment>","#ifdef DOUBLE_SIDED"," varying vec3 vLightBack;"," varying vec3 vIndirectBack;","#endif","#include <bsdfs>","#include <lights_pars_begin>","#include <fog_pars_fragment>","#include <shadowmap_pars_fragment>","#include <shadowmask_pars_fragment>","#include <clipping_planes_pars_fragment>","#include <dithering_pars_fragment>"].join(` 5132`));let u=["#include <normal_fragment_begin>",` 5133 // NOTE: gl_FrontFacing alternative using face normal estimation. 5134 vec3 viewdx = dFdx(vViewPosition); 5135 vec3 viewdy = dFdy(vViewPosition); 5136 vec3 faceNormal = normalize(cross(viewdx, viewdy)); 5137 bool isFrontFacing = (dot(normal, faceNormal) >= 0.0); 5138 `,"#include <clipping_planes_fragment>"];u.push(i.code,"vec3 diffuseColor = "+i.result+";","ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );"),c&&u.push(c.code,"#ifdef ALPHATEST","if ( "+c.result+" <= ALPHATEST ) discard;","#endif"),u.push("#ifdef DOUBLE_SIDED"," reflectedLight.indirectDiffuse += ( isFrontFacing ) ? vIndirectFront : vIndirectBack;","#else"," reflectedLight.indirectDiffuse += vIndirectFront;","#endif","#include <lightmap_fragment>","reflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );","#ifdef DOUBLE_SIDED"," reflectedLight.directDiffuse = ( isFrontFacing ) ? vLightFront : vLightBack;","#else"," reflectedLight.directDiffuse = vLightFront;","#endif","reflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();"),r&&u.push(r.code,"reflectedLight.directDiffuse += "+r.result+" * "+s.result+";"),u.push("vec3 ao = aoEnabled && "+a.result+" ? tex2D(aoMap, gl_FragCoord.xy / resolution).rgb : vec3(1.0);","vec3 outgoingLight = (reflectedLight.directDiffuse + reflectedLight.indirectDiffuse) ;");let p="1.0";this.mask&&(this.mask.analyze(e),p=`luminance(${this.mask.flow(e,"v3").result})`),u.push(` 5139 if (outgoingLight != diffuseColor) { 5140 float lightAccu = clamp( length( reflectedLight.directSpecular + reflectedLight.indirectSpecular ), 0.0, 1.0 ); 5141 accumAlpha += ( 1.0 - accumAlpha ) * ${o.result} * ${p} * lightAccu; 5142 outgoingLight = spe_blend( diffuseColor, outgoingLight, ${o.result} * ${p}, ${l.result} ); 5143 5144 outgoingLight *= ao; 5145 } 5146 `),h&&u.push(h.code,`outgoingLight = spe_blend(outgoingLight, ${h.result}, 1.0, SPE_BLENDING_NORMAL);`),c?u.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${c.result} );`):u.push("gl_FragColor = vec4( outgoingLight, 1.0 );"),d&&u.push(`gl_FragColor.a *= ${d.result};`),u.push("#include <encodings_fragment>","#include <fog_fragment>","#include <dithering_fragment>"),t=u.join(` 5147`)}return t}},_Y={dHdxy:new Sj(`vec2 dHdxy(sampler2D bumpMap, vec2 bumpMapUv, float bumpScale) { 5148 5149 // Gradient of UVs w.r.t. X coordinate (in screen-space) 5150 vec2 dSTdx = dFdx(bumpMapUv); 5151 5152 // Gradient of UVs w.r.t. Y coordinate (in screen-space) 5153 vec2 dSTdy = dFdy(bumpMapUv); 5154 5155 // Forward differencing 5156 float Hll = bumpScale * luminance(texture(bumpMap, bumpMapUv).rgb); 5157 float dBx = bumpScale * luminance(texture(bumpMap, bumpMapUv + dSTdx).rgb) - Hll; 5158 float dBy = bumpScale * luminance(texture(bumpMap, bumpMapUv + dSTdy).rgb) - Hll; 5159 5160 return vec2( dBx, dBy ); 5161 }`),perturbNormalArb:new Sj(`vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) { 5162 vec3 vSigmaX = dFdx( surf_pos.xyz ); 5163 vec3 vSigmaY = dFdy( surf_pos.xyz ); 5164 vec3 vN = surf_norm; // normalized 5165 5166 vN = normalize(vN); 5167 5168 vec3 R1 = cross( vSigmaY, vN ); 5169 vec3 R2 = cross( vN, vSigmaX ); 5170 5171 R1 = normalize(R1); 5172 R2 = normalize(R2); 5173 5174 float fDet = dot( vSigmaX, R1 ) * faceDirection; 5175 5176 vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 ); 5177 return normalize( abs( fDet ) * vN - vGrad ); 5178 }`)},_Q=class extends SI{constructor(){super("phong"),this.nodeType="Phong",this.color=new _h(5526619),this.specular=new _h(1118481),this.shininess=new SJ(30),this.previousModelViewMatrix=new _v,this.previouseProjectionMatrix=new _v,this.shadingAlpha=new SJ(1),this.shadingBlend=new _c(0),this.occlusion=new _d(!0)}get category(){return"phong"}build(e){let t;if(e.define("PHONG"),e.requires.lights=!0,e.extensions.derivatives=!0,e.isShader("vertex")){let i=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform({frameIndex:_k.frameIndex}),e.mergeUniform({resolution:_k.resolution}),e.mergeUniform({previousModelViewMatrix:this.previousModelViewMatrix}),e.mergeUniform({previousProjectionMatrix:this.previouseProjectionMatrix}),e.mergeUniform(r2.merge([su.fog,su.lights])),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","#include <fog_pars_vertex>","#include <skinning_pars_vertex>","#include <normal_pars_vertex>","#include <morphtarget_pars_vertex>","#include <shadowmap_pars_vertex>","#include <clipping_planes_pars_vertex>"].join(` 5179`));let r=["#include <beginnormal_vertex>","#include <morphnormal_vertex>",` 5180 #include <skinbase_vertex> 5181 #include <skinnormal_vertex> 5182 #ifndef USE_LAYER_DISPLACE 5183 #include <defaultnormal_vertex> 5184 #endif 5185 5186 vec3 displaced_position = position; 5187 vec3 displaced_normal = objectNormal; 5188 5189 #ifdef USE_LAYER_DISPLACE 5190 vec3 transformed; 5191 vec3 transformedNormal; 5192 #endif 5193 `,"#include <normal_vertex>",` 5194 #ifndef USE_LAYER_DISPLACE 5195 #include <begin_vertex> 5196 #endif 5197 `];i&&r.push(i.code,i.result?"displaced_position = "+i.result+";
5197":""),r.push("transformed = displaced_position;","#include <morphtarget_vertex>","#include <skinning_vertex>","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED"," vNormal = transformedNormal;","#endif"),r.push(" #include <project_vertex>"," #include <clipping_planes_vertex>"," vViewPosition = - mvPosition.xyz;"," #include <worldpos_vertex>"," #include <shadowmap_vertex>"," #include <fog_vertex>"),r.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),t=r.join(` 5198`)}else{e.mergeUniform({penumbraSize:_k.penumbraSize}),e.mergeUniform({frameIndex:_k.frameIndex}),e.mergeUniform({aoMap:_k.aoRenderTarget}),e.mergeUniform({aoEnabled:_k.aoEnabled}),void 0===this.color&&(this.color=new _h(5526619)),this.color.analyze(e,{slot:"color"}),this.specular.analyze(e),this.shininess.analyze(e);let i=this.occlusion.flow(e,"b",{slot:"occlusion"});this.shadingAlpha.analyze(e),this.shadingBlend.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"}),this.alpha&&this.alpha.analyze(e);let r=this.color.flow(e,"c",{slot:"color"}),s=this.specular.flow(e,"c"),a=this.shininess.flow(e,"f"),o=this.shadingAlpha.flow(e,"f"),l=this.shadingBlend.flow(e,"i"),h=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0,c=this.alpha?this.alpha.flow(e,"f"):void 0,d=this.alphaOverride?this.alphaOverride.flow(e,"f"):void 0;e.requires.transparent=void 0!==c,e.addParsCode(["varying vec3 vWPosition;","uniform vec3 emissive;","uniform float penumbraSize[5];","uniform sampler2D aoMap;","uniform bool aoEnabled;","#include <normal_pars_fragment>","#include <fog_pars_fragment>","#include <bsdfs>","#include <lights_pars_begin>","#include <lights_phong_pars_fragment>","#include <shadowmap_pars_fragment>","#include <dithering_pars_fragment>"].join(` 5199`));let u=["#include <normal_fragment_begin>",` 5200 // NOTE: gl_FrontFacing alternative using face normal estimation. 5201 vec3 viewdx = dFdx(vViewPosition); 5202 vec3 viewdy = dFdy(vViewPosition); 5203 vec3 faceNormal = normalize(cross(viewdx,viewdy)); 5204 if (dot(normal, faceNormal) < 0.0) { 5205 normal *= -1.0; 5206 } 5207 `," BlinnPhongMaterial material;"];if(this.bumpMap){e.include(_Y.dHdxy),e.include(_Y.perturbNormalArb);let t=this.bumpMap.texture.flow(e,"t"),i=this.bumpMap.flow(e,"v3"),r=this.bumpMapIntensity?this.bumpMapIntensity.flow(e,"f").result:"1.0",s="";s=4===this.bumpMap.projection.value?` 5208 vec3 bumpNormal = vec3(0.0); 5209 { 5210 vec2 uv0 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs0; 5211 vec2 uv1 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs1; 5212 vec2 uv2 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs2; 5213 vec3 weights = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_triplanarWeights; 5214 5215 vec2 grad0 = dHdxy(${t.result}, uv0, ${r}); 5216 vec3 n0 = perturbNormalArb(-vViewPosition, normal, grad0, faceDirection); 5217 5218 vec2 grad1 = dHdxy(${t.result}, uv1, ${r}); 5219 vec3 n1 = perturbNormalArb(-vViewPosition, normal, grad1, faceDirection); 5220 5221 vec2 grad2 = dHdxy(${t.result}, uv2, ${r}); 5222 vec3 n2 = perturbNormalArb(-vViewPosition, normal, grad2, faceDirection); 5223 5224 bumpNormal = n0 * weights.z + n1 * weights.x + n2 * weights.y; 5225 bumpNormal = normalize(bumpNormal); 5226 } 5227 5228 normal = bumpNormal; 5229 `:` 5230 vec2 bumpMapCachedUv = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs; 5231 vec2 grad = dHdxy(${t.result}, bumpMapCachedUv, ${r}); 5232 normal = perturbNormalArb( - vViewPosition, normal, grad, faceDirection ); 5233 `,u.push(`// Call the Texture Layer's function once here so that it writes out its procedural UV coordinates 5234 ${i.result}; 5235 ${s} 5236 `)}u.push(r.code," vec3 diffuseColor = "+r.result+";"," ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );"," vec3 totalEmissiveRadiance = emissive;",s.code," vec3 specular = "+s.result+";",a.code," float shininess = max( 0.0001, "+a.result+" );"," float specularStrength = 1.0;"),c&&u.push(c.code,"#ifdef ALPHATEST","if ( "+c.result+" <= ALPHATEST ) discard;","#endif"),u.push("material.diffuseColor = diffuseColor;"),u.push("material.specularColor = specular;","material.specularShininess = shininess;","material.specularStrength = specularStrength;","#include <lights_fragment_begin>","#include <lights_fragment_end>"),u.push("vec3 ao = aoEnabled && "+i.result+" ? tex2D(aoMap, gl_FragCoord.xy / resolution).rgb : vec3(1.0);","vec3 outgoingLight = ((reflectedLight.directDiffuse + reflectedLight.indirectDiffuse)) + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;");let p="1.0";this.mask&&(this.mask.analyze(e),p=`luminance(${this.mask.flow(e,"v3").result})`),u.push(` 5237 if (outgoingLight != diffuseColor) { 5238 float lightAccu = clamp( length( reflectedLight.directSpecular + reflectedLight.indirectSpecular ), 0.0, 1.0 ); 5239 accumAlpha += ( 1.0 - accumAlpha ) * ${o.result} * ${p} * lightAccu; 5240 outgoingLight = spe_blend( diffuseColor, outgoingLight, ${o.result} * ${p}, ${l.result} ); 5241 5242 outgoingLight *= ao; 5243 } 5244 `),h&&u.push(h.code,`outgoingLight = spe_blend(outgoingLight, ${h.result}, 1.0, SPE_BLENDING_NORMAL);`),c?u.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${c.result});`):u.push("gl_FragColor = vec4( outgoingLight, 1.0 );"),d&&u.push(`gl_FragColor.a *= ${d.result};`),u.push("#include <encodings_fragment>","#include <fog_fragment>","#include <dithering_fragment>"),t=u.join(` 5245`)}return t}},_K=class extends SI{constructor(){super("standard"),this.nodeType="Standard",this.color=new _h(5526619),this.roughness=new SJ(.3),this.metalness=new SJ(0),this.reflectivity=new SJ(.5),this.previousModelViewMatrix=new _v,this.previouseProjectionMatrix=new _v,this.shadingAlp
vendor: 1,586 bytes, lines 5245-5264
5245ha=new SJ(1),this.shadingBlend=new _c(0),this.occlusion=new _d(!0)}get category(){return"physical"}build(e){let t;if(e.define("STANDARD"),e.requires.lights=!0,e.extensions.derivatives=!0,e.extensions.shaderTextureLOD=!0,e.isShader("vertex")){let i=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform({frameIndex:_k.frameIndex}),e.mergeUniform({resolution:_k.resolution}),e.mergeUniform({previousModelViewMatrix:this.previousModelViewMatrix}),e.mergeUniform({previousProjectionMatrix:this.previouseProjectionMatrix}),e.mergeUniform(r2.merge([su.fog,su.lights])),su.LTC_1&&(e.uniforms.ltc_1={value:void 0},e.uniforms.ltc_2={value:void 0}),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","#include <fog_pars_vertex>","#include <skinning_pars_vertex>","#include <normal_pars_vertex>","#include <morphtarget_pars_vertex>","#include <shadowmap_pars_vertex>","#include <clipping_planes_pars_vertex>"].join(` 5246`));let r=["#include <beginnormal_vertex>","#include <morphnormal_vertex>",` 5247 #include <skinbase_vertex> 5248 #include <skinnormal_vertex> 5249 #if !defined( USE_LAYER_DISPLACE ) 5250 #include <defaultnormal_vertex> 5251 #endif 5252 5253 vec3 displaced_position = position; 5254 vec3 displaced_normal = objectNormal; 5255 5256 #if defined( USE_LAYER_DISPLACE ) 5257 vec3 transformed; 5258 vec3 transformedNormal; 5259 #endif 5260 `,"#include <normal_vertex>",` 5261 #if !defined( USE_LAYER_DISPLACE ) 5262 #include <begin_vertex> 5263 #endif /* !USE_LAYER_DISPLACE */ 5264 `];i&&r.push(i.code,i.result?"displaced_position = "+i.result+";
5264":""),r.push("transformed = displaced_position;","#include <morphtarget_vertex>","#include <skinning_vertex>","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED"," vNormal = transformedNormal;","#endif"),r.push("#include <project_vertex>","#include <fog_vertex>","#include <clipping_planes_vertex>"," vViewPosition = - mvPosition.xyz;","#include <worldpos_vertex>","#include <shadowmap_vertex>"),r.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),t=r.join(` 5265`)}else{e.mergeUniform({penumbraSize:_k.penumbraSize}),e.mergeUniform({frameIndex:_k.frameIndex}),e.mergeUniform({aoMap:_k.aoRenderTarget}),e.mergeUniform({aoEnabled:_k.aoEnabled});let i={gamma:!0};void 0===this.color&&(this.color=new _h(5526619)),this.color.analyze(e,{slot:"color",context:i}),this.roughness.analyze(e),this.metalness.analyze(e);let r=this.occlusion.flow(e,"b",{slot:"occlusion"});this.shadingAlpha.analyze(e),this.shadingBlend.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"}),this.alpha&&this.alpha.analyze(e),this.reflectivity&&this.reflectivity.analyze(e);let s=this.color.flow(e,"c",{slot:"color",context:i}),a=this.roughness.flow(e,"f"),o=this.metalness.flow(e,"f"),l=this.shadingAlpha.flow(e,"f"),h=this.shadingBlend.flow(e,"i"),c=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0,d=this.alpha?this.alpha.flow(e,"f"):void 0,u=this.alphaOverride?this.alphaOverride.flow(e,"f"):void 0,p=this.reflectivity?this.reflectivity.flow(e,"f"):void 0;e.requires.transparent=void 0!==d,e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","uniform float penumbraSize[5];","uniform sampler2D aoMap;","uniform bool aoEnabled;","#include <normal_pars_fragment>","#include <dithering_pars_fragment>","#include <fog_pars_fragment>","#include <bsdfs>","#include <lights_pars_begin>","#include <lights_physical_pars_fragment>","#include <shadowmap_pars_fragment>"].join(` 5266`));let f=["#include <clipping_planes_fragment>"," #include <normal_fragment_begin>",` 5267 // NOTE: gl_FrontFacing alternative using face normal estimation. 5268 vec3 viewdx = dFdx(vViewPosition); 5269 vec3 viewdy = dFdy(vViewPosition); 5270 vec3 faceNormal = normalize(cross(viewdx,viewdy)); 5271 if (dot(normal, faceNormal) < 0.0) { 5272 normal *= -1.0; 5273 } 5274 `," PhysicalMaterial material;"," material.diffuseColor = vec3( 1.0 );"];if(this.bumpMap){e.include(_Y.dHdxy),e.include(_Y.perturbNormalArb);let t=this.bumpMap.texture.flow(e,"t"),i=this.bumpMap.flow(e,"v3"),r=this.bumpMapIntensity?this.bumpMapIntensity.flow(e,"f").result:"1.0",s="";s=4===this.bumpMap.projection.value?` 5275 vec3 bumpNormal = vec3(0.0); 5276 { 5277 vec2 uv0 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs0; 5278 vec2 uv1 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs1; 5279 vec2 uv2 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs2; 5280 vec3 weights = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_triplanarWeights; 5281 5282 vec2 grad0 = dHdxy(${t.result}, uv0, ${r}); 5283 vec3 n0 = perturbNormalArb(-vViewPosition, normal, grad0, faceDirection); 5284 5285 vec2 grad1 = dHdxy(${t.result}, uv1, ${r}); 5286 vec3 n1 = perturbNormalArb(-vViewPosition, normal, grad1, faceDirection); 5287 5288 vec2 grad2 = dHdxy(${t.result}, uv2, ${r}); 5289 vec3 n2 = perturbNormalArb(-vViewPosition, normal, grad2, faceDirection); 5290 5291 bumpNormal = n0 * weights.z + n1 * weights.x + n2 * weights.y; 5292 bumpNormal = normalize(bumpNormal); 5293 } 5294 5295 normal = bumpNormal; 5296 `:` 5297 vec2 bumpMapCachedUv = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs; 5298 vec2 grad = dHdxy(${t.result}, bumpMapCachedUv, ${r}); 5299 normal = perturbNormalArb( - vViewPosition, normal, grad, faceDirection ); 5300 `,f.push(`// Call the Texture Layer's function once here so that it writes out its procedural UV coordinates 5301 ${i.result}; 5302 ${s} 5303 `)}if(f.push(s.code," vec3 diffuseColor = "+s.result+";"," ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );",o.code," float metalnessFactor = "+o.result+";"),this.roughnessMap){let t=this.roughnessMap.texture.flow(e,"t"),i=this.roughnessMap.flow(e,"v3"),r="";r=4===this.roughnessMap.projection.value?` 5304 float roughnessChange = 1.0; 5305 { 5306 vec2 uv0 = g${this.roughnessMap.uuid.toString().replace(/-/g,"")}_writeUvs0; 5307 vec2 uv1 = g${this.roughnessMap.uuid.toString().replace(/-/g,"")}_writeUvs1; 5308 vec2 uv2 = g${this.roughnessMap.uuid.toString().replace(/-/g,"")}_writeUvs2; 5309 vec3 weights = g${this.roughnessMap.uuid.toString().replace(/-/g,"")}_triplanarWeights; 5310 5311 float r0 = luminance(texture(${t.result}, uv0).rgb) * roughnessScale; 5312 float r1 = luminance(texture(${t.result}, uv1).rgb) * roughnessScale; 5313 float r2 = luminance(texture(${t.result}, uv2).rgb) * roughnessScale; 5314 5315 roughnessChange = (r0 * weights.z + r1 * weights.x + r2 * weights.y); 5316 } 5317 float roughnessFactor = roughnessChange * ${a.result}; 5318 `:` 5319 vec2 roughnessMapCachedUv = g${this.roughnessMap.uuid.toString().replace(/-/g,"")}_writeUvs; 5320 5321 vec4 vals = texture(${t.result}, roughnessMapCachedUv); 5322 float roughnessFactor = luminance(vals.rgb) * ${a.result}; 5323 `,f.push(`// Call the Texture Layer's function once here so that it writes out its procedural UV coordinates 5324 ${i.result}; 5325 5326 const float roughnessScale = 1.0; 5327 5328 ${r} 5329 `)}else f.push(a.code," float roughnessFactor = "+a.result+";");d&&f.push(d.code,"#ifdef ALPHATEST"," if ( "+d.result+" <= ALPHATEST ) discard;","#endif"),f.push("vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );","float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );"),f.push("material.diffuseColor = diffuseColor * ( 1.0 - metalnessFactor );","material.roughness = max( roughnessFactor, 0.0525 );","material.roughness += geometryRoughness;","material.roughness = min( material.roughness, 1.0 );","material.roughness = clamp( roughnessFactor, 0.04, 1.0 );"),p?f.push(p.code,"material.specularColor = mix( vec3( 0.16 * pow2( "+p.result+" ) ), diffuseColor, metalnessFactor );"):f.push("material.specularColor = mix( vec3( 0.04 ), diffuseColor, metalnessFactor );"),f.push("#include <lights_fragment_begin>"),f.push("#include <lights_fragment_end>"),f.push("vec3 ao = aoEnabled && "+r.result+" ? tex2D(aoMap, gl_FragCoord.xy / resolution).rgb : vec3(1.0);","vec3 outgoingLight = ((reflectedLight.directDiffuse + reflectedLight.indirectDiffuse)) + reflectedLight.directSpecular + reflectedLight.indirectSpecular;");let m="1.0";this.mask&&(this.mask.analyze(e),m=`luminance(${this.mask.flow(e,"v3").result})`),f.push(` 5330 if (outgoingLight != diffuseColor) { 5331 float lightAccu = clamp( length( reflectedLight.directSpecular + reflectedLight.indirectSpecular ), 0.0, 1.0 ); 5332 accumAlpha += ( 1.0 - accumAlpha ) * ${l.result} * ${m} * lightAccu; 5333 outgoingLight = spe_blend( diffuseColor, outgoingLight, ${l.result} * ${m}, ${h.result} ); 5334 5335 outgoingLight *= ao; 5336 } 5337 `),c&&f.push(c.code,`outgoingLight = spe_blend(outgoingLight, ${c.result}, 1.0, SPE_BLENDING_NORMAL);`),d?f.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${d.result} );`):f.push("gl_FragColor = vec4( outgoingLight, 1.0 );
5337"),u&&f.push(`gl_FragColor.a *= ${u.result};`),f.push("#include <encodings_fragment>","#include <fog_fragment>","#include <dithering_fragment>"),t=f.join(` 5338`)}return t}},_Z=class extends SI{constructor(){super("toon"),this.nodeType="Toon",this.color=new _h(5526619),this.specular=new _h(1118481),this.shininess=new SJ(30),this.previousModelViewMatrix=new _v,this.previouseProjectionMatrix=new _v,this.shadingAlpha=new SJ(1),this.shadingBlend=new _c(0)}get category(){return"toon"}build(e){let t;if(e.define("TOON"),e.requires.lights=!0,e.extensions.derivatives=!0,e.isShader("vertex")){let i=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform({frameIndex:_k.frameIndex}),e.mergeUniform({resolution:_k.resolution}),e.mergeUniform({previousModelViewMatrix:this.previousModelViewMatrix}),e.mergeUniform({previousProjectionMatrix:this.previouseProjectionMatrix}),e.mergeUniform(r2.merge([su.fog,su.lights])),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","#include <fog_pars_vertex>","#include <skinning_pars_vertex>","#include <normal_pars_vertex>","#include <morphtarget_pars_vertex>","#include <shadowmap_pars_vertex>","#include <clipping_planes_pars_vertex>"].join(` 5339`));let r=["#include <beginnormal_vertex>","#include <morphnormal_vertex>",` 5340 #include <skinbase_vertex> 5341 #include <skinnormal_vertex> 5342 #ifndef USE_LAYER_DISPLACE 5343 #include <defaultnormal_vertex> 5344 #endif 5345 5346 vec3 displaced_position = position; 5347 vec3 displaced_normal = objectNormal; 5348 5349 #ifdef USE_LAYER_DISPLACE 5350 vec3 transformed; 5351 vec3 transformedNormal; 5352 #endif 5353 `,"#include <normal_vertex>",` 5354 #ifndef USE_LAYER_DISPLACE 5355 #include <begin_vertex> 5356 #endif 5357 `];i&&r.push(i.code,i.result?"displaced_position = "+i.result+";
5357":""),r.push("transformed = displaced_position;","#include <morphtarget_vertex>","#include <skinning_vertex>","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED"," vNormal = transformedNormal;","#endif"),r.push(" #include <project_vertex>"," #include <fog_vertex>"," #include <clipping_planes_vertex>"," vViewPosition = - mvPosition.xyz;"," #include <worldpos_vertex>"," #include <shadowmap_vertex>"," #include <fog_vertex>"),r.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),t=r.join(` 5358`)}else{e.mergeUniform({penumbraSize:_k.penumbraSize}),e.mergeUniform({frameIndex:_k.frameIndex}),e.mergeUniform({aoMap:_k.aoRenderTarget}),e.mergeUniform({aoEnabled:_k.aoEnabled}),void 0===this.color&&(this.color=new _h(5526619)),this.color.analyze(e,{slot:"color"}),this.specular.analyze(e),this.shininess.analyze(e),this.shadingAlpha.analyze(e),this.shadingBlend.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"}),this.alpha&&this.alpha.analyze(e);let i=this.color.flow(e,"c",{slot:"color"}),r=this.specular.flow(e,"c"),s=this.shininess.flow(e,"f"),a=this.shadingAlpha.flow(e,"f"),o=this.shadingBlend.flow(e,"i"),l=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0,h=this.alpha?this.alpha.flow(e,"f"):void 0,c=this.alphaOverride?this.alphaOverride.flow(e,"f"):void 0;e.requires.transparent=void 0!==h,e.addParsCode(["uniform float penumbraSize[5];","uniform sampler2D aoMap;","uniform bool aoEnabled;","varying vec3 vWPosition;","#include <normal_pars_fragment>","#include <gradientmap_pars_fragment>","#include <fog_pars_fragment>","#include <bsdfs>","#include <lights_pars_begin>","#include <dithering_pars_fragment>",` 5359 varying vec3 vViewPosition; 5360 struct ToonMaterial { 5361 vec3 diffuseColor; 5362 vec3 specularColor; 5363 float specularShininess; 5364 float specularStrength; 5365 }; 5366 void RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { 5367 vec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color; 5368 5369 reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 5370 reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength; 5371 } 5372 void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { 5373 reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 5374 } 5375 #define RE_Direct RE_Direct_Toon 5376 #define RE_IndirectDiffuse RE_IndirectDiffuse_Toon 5377 #define Material_LightProbeLOD( material ) (0) 5378 `,"#include <shadowmap_pars_fragment>","#include <bumpmap_pars_fragment>","#include <normalmap_pars_fragment>"].join(` 5379`));let d=["#include <normal_fragment_begin>",` 5380 // NOTE: gl_FrontFacing alternative using face normal estimation. 5381 vec3 viewdx = dFdx(vViewPosition); 5382 vec3 viewdy = dFdy(vViewPosition); 5383 vec3 faceNormal = normalize(cross(viewdx,viewdy)); 5384 if (dot(normal, faceNormal) < 0.0) { 5385 normal *= -1.0; 5386 } 5387 `," ToonMaterial material;"];if(this.bumpMap){e.include(_Y.dHdxy),e.include(_Y.perturbNormalArb);let t=this.bumpMap.texture.flow(e,"t"),i=this.bumpMap.flow(e,"v3"),r=this.bumpMapIntensity?this.bumpMapIntensity.flow(e,"f").result:"1.0",s="";s=4===this.bumpMap.projection.value?` 5388 vec3 bumpNormal = vec3(0.0); 5389 { 5390 vec2 uv0 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs0; 5391 vec2 uv1 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs1; 5392 vec2 uv2 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs2; 5393 vec3 weights = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_triplanarWeights; 5394 5395 vec2 grad0 = dHdxy(${t.result}, uv0, ${r}); 5396 vec3 n0 = perturbNormalArb(-vViewPosition, normal, grad0, faceDirection); 5397 5398 vec2 grad1 = dHdxy(${t.result}, uv1, ${r});
5399 vec3 n1 = perturbNormalArb(-vViewPosition, normal, grad1, faceDirection); 5400 5401 vec2 grad2 = dHdxy(${t.result}, uv2, ${r}); 5402 vec3 n2 = perturbNormalArb(-vViewPosition, normal, grad2, faceDirection); 5403 5404 bumpNormal = n0 * weights.z + n1 * weights.x + n2 * weights.y; 5405 bumpNormal = normalize(bumpNormal); 5406 } 5407 5408 normal = bumpNormal; 5409 `:` 5410 vec2 bumpMapCachedUv = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs; 5411 vec2 grad = dHdxy(${t.result}, bumpMapCachedUv, ${r}); 5412 normal = perturbNormalArb( - vViewPosition, normal, grad, faceDirection ); 5413 `,d.push(`// Call the Texture Layer's function once here so that it writes out its procedural UV coordinates 5414 ${i.result}; 5415 ${s} 5416 `)}d.push(i.code," vec3 diffuseColor = "+i.result+";"," ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );",r.code," vec3 specular = "+r.result+";",s.code," float shininess = max( 0.0001, "+s.result+" );"," float specularStrength = 1.0;"),h&&d.push(h.code,"#ifdef ALPHATEST","if ( "+h.result+" <= ALPHATEST ) discard;","#endif"),d.push("material.diffuseColor = diffuseColor;"),d.push("material.specularColor = specular;","material.specularShininess = shininess;","material.specularStrength = specularStrength;","#include <lights_fragment_begin>","#include <lights_fragment_end>"),d.push("vec3 ao = aoEnabled ? tex2D(aoMap, gl_FragCoord.xy / resolution).rgb : vec3(1.0);","vec3 outgoingLight = ((reflectedLight.directDiffuse + reflectedLight.indirectDiffuse) * ao) + reflectedLight.directSpecular;");let u="1.0";this.mask&&(this.mask.analyze(e),u=`luminance(${this.mask.flow(e,"v3").result})`),d.push(` 5417 if (outgoingLight != diffuseColor) { 5418 float lightAccu = clamp( length( reflectedLight.directSpecular + reflectedLight.indirectSpecular ), 0.0, 1.0 ); 5419 accumAlpha += ( 1.0 - accumAlpha ) * ${a.result} * ${u} * lightAccu; 5420 outgoingLight = spe_blend( diffuseColor, outgoingLight, ${a.result} * ${u}, ${o.result} ); 5421 } 5422 `),l&&d.push(l.code,`outgoingLight = spe_blend(outgoingLight, ${l.result}, 1.0, SPE_BLENDING_NORMAL);`),h?d.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${h.result} );`):d.push("gl_FragColor = vec4( outgoingLight, 1.0 );"),c&&d.push(`gl_FragColor.a *= ${c.result};`),d.push("#include <encodings_fragment>","#include <fog_fragment>","#include <dithering_fragment>"),t=d.join(` 5423`)}return t}},_J=class{constructor(e=1e4){this.timeout=e,this.cache=new Map,this.head={data:null,time:0,src:null,next:null,prev:null},this.tail={data:null,time:1/0,src:null,next:null,prev:null},this.hasClean=!1,this.head.next=this.tail,this.tail.prev=this.head}log(...e){}remove(e){let t=this.cache.get(e);t&&(this.dispose(e,t.data),this.cache.delete(e),t.prev.next=t.next,t.next.prev=t.prev)}scheduleCleanup(){this.hasClean||(this.log("scheduled cleanup"),this.hasClean=!0,setTimeout(()=>{this.hasClean=!1,this.log("cleaning");let e=Date.now(),t=this.head.next;for(;t.time<e-this.timeout;)this.dispose(t.src,t.data),this.cache.delete(t.src),(t=t.next).prev=this.head,this.head.next=t;this.head.next!==this.tail?this.scheduleCleanup():this.log("no more cleanup")},this.timeout+1e3))}has(e){return this.cache.get(e)?.data}load(e){let t=Date.now(),i=this.cache.get(e);return void 0===i?(i={data:this.create(e),src:e,time:t,next:null,prev:null},this.cache.set(e,i)):(i.time=t,i.prev.next=i.next,i.next.prev=i.prev),i.prev=this.tail.prev,i.next=this.tail,this.tail.prev.next=i,this.tail.prev=i,this.scheduleCleanup(),i.data}},_$=class extends _J{create(e){return URL.createObjectURL(new Blob([e]))}dispose(e,t){URL.revokeObjectURL(t)}},_0=class{constructor(e,t){this.data=e,this.cache=t,this.refCount=0}deref(){this.refCount,this.refCount-=1,0===this.refCount&&(this.cache.remove(this),this.dispose())}dispose(){this.refCount}},_1=class{constructor(){this.cache=new Map}remove(e){this.cache.delete(e.data)}load(e){let t=this.cache.get(e);return void 0===t&&(t=this.create(e),this.cache.set(e,t)),t.refCount+=1,t}},_2=class extends _0{constructor(e,t){super(e,t.imageHolderCache),this.data=e,this.shared=t,this.loaded=!1,this.isVideo=!1,this.isBuffer=!1,this._cache={1e3:{},1001:{},1002:{}},this.isVideo="video"===e.type,this.isBuffer=!0===e.isWebGLRenderTarget,this.loadPromise=this.updateSrc(this.isBuffer?e:e.data)}async updateSrc(e){if(typeof document>"u")return;this.disposeTextures(),this.loaded=!1;let t=()=>{for(let e of(this.loaded=!0,Object.values(this._cache)))for(let t of Object.values(e))for(let e of Object.values(t))e&&(e.image=this.img,e.needsUpdate=!0);this.shared.requestRender()};if(this.isBuffer)this.img=e,this.loaded=!0;else if(this.isVideo){if(this.img=document.createElement("video"),this.img.preload="auto",this.img.playsInl
5423ine=!0,this.img.currentTime=.01,"string"!=typeof e){let t;var i=new FileReader;i.readAsDataURL(new Blob([e],{type:"video/mp4"})),await new Promise(e=>{i.onloadend=i=>{t=i.target?.result,e(null)}}),this.img.src=t}else this.img.src=e;this.img.onloadeddata=()=>{t()}}else this.img=new Image,this.img.src="string"==typeof e?e:(_H||(_H=new _$),_H.load(e)),this.img.onload=t,await new Promise(e=>{this.img.onload=()=>{t(),e(null)}})}getTexture(e,t=1008,i=1006){let r=this._cache[e]?.[t]?.[i];if(r)return r;{let r;return r=this.isBuffer?this.img.texture:this.isVideo?new nq(this.img,void 0,e,e):new ih(this.img,void 0,e,e,i,t),this.loaded&&(r.needsUpdate=!0),void 0===this._cache[e]&&(this._cache[e]={}),void 0===this._cache[e][t]&&(this._cache[e][t]={}),this._cache[e][t][i]=r,r}}setNeedsUpdate(e){for(let t of Object.values(this._cache))for(let i of Object.values(t))for(let t of Object.values(i))t&&(t.needsUpdate=e)}disposeTextures(){for(let[e,t]of Object.entries(this._cache))for(let[i,r]of Object.entries(t))for(let[t,s]of Object.entries(r))s?.dispose(),void 0!==this._cache[e]&&void 0!==this._cache[e][i]&&(this._cache[e][i][t]=void 0)}dispose(){super.dispose(),this.disposeTextures()}},_3=class extends _2{},_4={year:0,month:1,day:2,hour:3,minute:4,second:5},_5={};function _6(e,t,i,r,s,a,o){var l=new Date(0);return l.setUTCFullYear(e,t,i),l.setUTCHours(r,s,a,o),l}var _8={timezoneZ:/^(Z)$/,timezoneHH:/^([+-]\d{2})$/,timezoneHHMM:/^([+-]\d{2}):?(\d{2})$/};function _9(e,t,i){if(!e||(r=_8.timezoneZ.exec(e)))return 0;if(r=_8.timezoneHH.exec(e))return Ae(a=parseInt(r[1],10))?-(36e5*a):NaN;if(r=_8.timezoneHHMM.exec(e)){a=parseInt(r[1],10);var r,s,a,o=parseInt(r[2],10);return Ae(a,o)?(s=36e5*Math.abs(a)+6e4*o,a>0?-s:s):NaN}if(function(e){if(At[e])return!0;try{return new Intl.DateTimeFormat(void 0,{timeZone:e}),At[e]=!0,!0}catch{return!1}}(e)){t=new Date(t||Date.now());var l,h=_7(i?t:_6((l=t).getFullYear(),l.getMonth(),l.getDate(),l.getHours(),l.getMinutes(),l.getSeconds(),l.getMilliseconds()),e);return-(i?h:function(e,t,i){var r=e.getTime()-t,s=_7(new Date(r),i);if(t===s)return t;var a=_7(new Date(r-=s-t),i);return s===a?s:Math.max(s,a)}(t,h,e))}return NaN}function _7(e,t){var i,r,s,a=(s=function(e){if(!_5[e]){var t=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:"America/New_York",year:"numeric",month:"numeric",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date("2014-06-25T04:00:00.123Z"));_5[e]="06/25/2014, 00:00:00"===t||"‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00"===t?new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:e,year:"numeric",month:"numeric",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):new Intl.DateTimeFormat("en-US",{hourCycle:"h23",timeZone:e,year:"numeric",month:"numeric",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}return _5[e]}(t)).formatToParts?function(e,t){try{for(var i=e.formatToParts(t),r=[],s=0;s<i.length;s++){var a=_4[i[s].type];a>=0&&(r[a]=parseInt(i[s].value,10))}return r}catch(e){if(e instanceof RangeError)return[NaN];throw e}}(s,e):(i=s.format(e).replace(/\u200E/g,""),[(r=/(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(i))[3],r[1],r[2],r[4],r[5],r[6]]),o=_6(a[0],a[1]-1,a[2],a[3]%24,a[4],a[5],0).getTime(),l=e.getTime(),h=l%1e3;return o-(l-=h>=0?h:1e3+h)}function Ae(e,t){return -23<=e&&e<=23&&(null==t||0<=t&&t<=59)}var At={},Ai=tw(tM(),1),Ar=tw(tE(),1),As={dateTimePattern:/^([0-9W+-]+)(T| )(.*)/,datePattern:/^([0-9W+-]+)(.*)/,YY:/^(\d{2})$/,YYY:[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],YYYY:/^(\d{4})/,YYYYY:[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],MM:/^-(\d{2})$/,DDD:/^-?(\d{3})$/,MMDD:/^-?(\d{2})-?(\d{2})$/,Www:/^-?W(\d{2})$/,WwwD:/^-?W(\d{2})-?(\d{1})$/,HH:/^(\d{2}([.,]\d*)?)$/,HHMM:/^(\d{2}):?(\d{2}([.,]\d*)?)$/,HHMMSS:/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,timeZone:/(Z|[+-]\d{2}(?::?\d{2})?| UTC| [a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?)$/};function Aa(e,t,i){t=t||0,i=i||0;var r=new Date(0);r.setUTCFullYear(e,0,4);var s=7*t+i+1-(r.getUTCDay()||7);return r.setUTCDate(r.getUTCDate()+s),r}var An=[31,28,31,30,31,30,31,31,30,31,30,31],Ao=[31,29,31,30,31,30,31,31,30,31,30,31];function Al(e){return e%400==0||e%4==0&&e%100!=0}function Ah(e,t,i){if(t<0||t>11)return!1;if(null!=i){if(i<1)return!1;var r=Al(e);
5423if(r&&i>Ao[t]||!r&&i>An[t])return!1}return!0}function Ac(e,t,i){return!(t<0||t>52||null!=i&&(i<0||i>6))}function Ad(e,t,i){return!(null!=e&&(e<0||e>=25)||null!=t&&(t<0||t>=60)||null!=i&&(i<0||i>=60))}function Au(e,t){return t.color(e)}function Ap(e=new Date,t){var i,r,s,a,o,l;let h,c,d=t.format,u=e.getSeconds(),p=e;t&&null!==t.timeZone&&(i=new Date,r=t.timeZone,s=function(e,t){if(arguments.length<1)throw TypeError("1 argument required, but only "+arguments.length+" present");if(null===e)return new Date(NaN);var i=t||{},r=null==i.additionalDigits?2:(0,Ai.default)(i.additionalDigits);if(2!==r&&1!==r&&0!==r)throw RangeError("additionalDigits must be 0, 1 or 2");if(e instanceof Date||"object"==typeof e&&"[object Date]"===Object.prototype.toString.call(e))return new Date(e.getTime());if("number"==typeof e||"[object Number]"===Object.prototype.toString.call(e))return new Date(e);if(!("string"==typeof e||"[object String]"===Object.prototype.toString.call(e)))return new Date(NaN);var s=function(e){var t,i={},r=As.dateTimePattern.exec(e);if(r?(i.date=r[1],t=r[3]):(r=As.datePattern.exec(e))?(i.date=r[1],t=r[2]):(i.date=null,t=e),t){var s=As.timeZone.exec(t);s?(i.time=t.replace(s[1],""),i.timeZone=s[1].trim()):i.time=t}return i}(e),a=function(e,t){var i,r=As.YYY[t],s=As.YYYYY[t];if(i=As.YYYY.exec(e)||s.exec(e)){var a=i[1];return{year:parseInt(a,10),restDateString:e.slice(a.length)}}if(i=As.YY.exec(e)||r.exec(e)){var o=i[1];return{year:100*parseInt(o,10),restDateString:e.slice(o.length)}}return{year:null}}(s.date,r),o=a.year,l=function(e,t){if(null===t)return null;if(0===e.length)return(r=new Date(0)).setUTCFullYear(t),r;if(i=As.MM.exec(e))return r=new Date(0),Ah(t,s=parseInt(i[1],10)-1)?(r.setUTCFullYear(t,s),r):new Date(NaN);if(i=As.DDD.exec(e)){r=new Date(0);var i,r,s,a,o=parseInt(i[1],10);return!function(e,t){if(t<1)return!1;var i=Al(e);return!(i&&t>366||!i&&t>365)}(t,o)?new Date(NaN):(r.setUTCFullYear(t,0,o),r)}if(i=As.MMDD.exec(e)){r=new Date(0),s=parseInt(i[1],10)-1;var l=parseInt(i[2],10);return Ah(t,s,l)?(r.setUTCFullYear(t,s,l),r):new Date(NaN)}if(i=As.Www.exec(e))return Ac(t,a=parseInt(i[1],10)-1)?Aa(t,a):new Date(NaN);if(i=As.WwwD.exec(e)){a=parseInt(i[1],10)-1;var h=parseInt(i[2],10)-1;return Ac(t,a,h)?Aa(t,a,h):new Date(NaN)}return null}(a.restDateString,o);if(isNaN(l)||!l)return new Date(NaN);var h,c=l.getTime(),d=0;if(s.time&&isNaN(d=function(e){var t,i,r;if(t=As.HH.exec(e))return Ad(i=parseFloat(t[1].replace(",",".")))?i%24*36e5:NaN;if(t=As.HHMM.exec(e))return Ad(i=parseInt(t[1],10),r=parseFloat(t[2].replace(",",".")))?i%24*36e5+6e4*r:NaN;if(t=As.HHMMSS.exec(e)){i=parseInt(t[1],10),r=parseInt(t[2],10);var s=parseFloat(t[3].replace(",","."));return Ad(i,r,s)?i%24*36e5+6e4*r+1e3*s:NaN}return null}(s.time)))return new Date(NaN);if(s.timeZone||i.timeZone){if(isNaN(h=_9(s.timeZone||i.timeZone,new Date(c+d))))return new Date(NaN)}else h=(0,Ar.default)(new Date(c+d)),h=(0,Ar.default)(new Date(c+d+h));return new Date(c+d+h)}(i,void 0),a=_9(r,s,!0),o=new Date(s.getTime()-a),(l=new Date(0)).setFullYear(o.getUTCFullYear(),o.getUTCMonth(),o.getUTCDate()),l.setHours(o.getUTCHours(),o.getUTCMinutes(),o.getUTCSeconds(),o.getUTCMilliseconds()),p=l);let f=p.getHours(),m=p.getMinutes(),g;"12ampm"===t.format12h24h&&(g=f>=12?"PM":"AM");let v=f;switch("24"!==t.format12h24h&&0==(v=f%12)&&(v=12),d){case"HH:mm:ss":h=[v,m,u];break;case"HH:mm":h=[v,m];break;case"HH":h=[v],g=void 0;break;case"mm":h=[m],g=void 0;break;case"ss":h=[u],g=void 0;break;case"year":c=p.getFullYear();break;case"month":c=p.getMonth()+1;break;case"dayOfYear":c=Math.floor((p.getTime()-new Date(p.getFullYear(),0,0).getTime())/864e5);break;case"dayOfMonth":c=p.getDate();break;case"secondOfDay":c=3600*f+60*m+u;break;default:console.error("Unknown time format",d),c=0}return void 0!==h?{textValue:h,suffix:g}:c}function Af(e,t){let{alpha:i,mode:r,isMask:s}=e,a="string"==typeof i?(Number(t.getVariable(i))??100)/100:i;return{type:e.type,alpha:a,mode:r,isMask:s}}var Am=class extends SN{},Ag={noise:["noiseType"],texture:["projection","axis","side"],video:["projection","axis","side"],displace:["noiseType"],light:["roughnessMap","bumpMap"],depth:["smooth","isWorldSpace","gradientType","isVector"],pattern:["style","projection","axis"]},Av={depth:["colors"]};function Ay(e,t,i){let r=i.uniforms[`f${i.id}_texture`];if(!r)return!1;
5423if("image"in e){let i=e.image,s=t.image(i);r.image instanceof _3||r.image.deref(),r.image=s}if("video"in e){let i=e.video,s=t.video(i);r.image instanceof _3||r.image.deref(),r.image=s}if("wrapping"in e&&(r.wrap=e.wrapping),"minFilter"in e&&(r.minFilter=e.minFilter),"magFilter"in e&&(r.magFilter=e.magFilter),"rotation"in e&&i.uniforms[`f${i.id}_rotation`])return i.uniforms[`f${i.id}_rotation`].value=(e.rotation??0)*tY.DEG2RAD,!1;if("repeat"in e||"offset"in e||"rotation"in e){let t=i.uniforms[`f${i.id}_mat`];"repeat"in e&&(t.repeat=e.repeat),"offset"in e&&(t.offset=e.offset),"rotation"in e&&(t.rotation=e.rotation??0),t.updateMatrix()}return!1}var Ax=(e,t,i)=>Math.max(0,Math.min(1,Number(t.getVariable("number"==typeof e?100*e:e,i)??100)/100))??1,Ab=class{constructor(e,t,i,r,s){for(let s in this.id=e,this.uuid=t,this.data=i,this.uniforms={},r)this.uniforms[`f${this.id}_${s}`]=r[s];for(let e in i)AM(e,this,i,s)}get type(){return this.data.type}static create(e,t,i,r){if("light"===i.type)return A_.createLightLayer(e,t,i,r);if("texture"===i.type||"video"===i.type){let s="texture"===i.type?r.uiBuffer(i.texture.image)??r.image(i.texture.image):r.video(i.texture.video),a=new _m(s,i.texture.wrapping,i.texture.minFilter??1008,i.texture.magFilter??1006),o=new _f(s),l=new _x(i.texture.repeat,i.texture.offset,i.texture.rotation??0),h=new SJ(i.crop?1:0),c=new _c(i.projection??0),d=new _c(["x","y","z"].indexOf(i.axis)??0),u=new _c(i.side??0),p=new Sz(i.size?new tQ(i.size[0],i.size[1]):new tQ(100,100)),f=new SJ(i.blending??0),m=new SJ(Ax(i.alpha,r)),g=new _c(i.mode??0),v=new _d(i.isMask??!1),y=new _A(a,o,h,c,d,u,p,f,l,m,g,v),x=new SK(y.calpha,"f");return new Aw(e,t,i,{texture:a,textureSize:o,crop:h,projection:c,axis:d,side:u,size:p,blending:f,mat:l,alpha:m,mode:g,isMask:v},y,g,x,v,r)}if("matcap"===i.type){let s=new _m(r.image(i.texture.image),i.texture.wrapping,i.texture.minFilter??1008,i.texture.magFilter??1006),a=new SJ(Ax(i.alpha,r)),o=new _c(i.mode??0),l=new _d(i.isMask??!1),h=new SJ((i.texture.rotation??0)*tY.DEG2RAD),c=new _T(s,a,o,l,h),d=new SK(c.calpha,"f");return new Aw(e,t,i,{texture:s,alpha:a,mode:o,isMask:l,rotation:h},c,o,d,l,r)}if("displace"!==i.type){let s;return s=function(e,t){switch(e.type){case"fresnel":return function(e,t){let{bias:i,scale:r,intensity:s,factor:a,color:o}=e;return{...Af(e,t),color:Au(o,t),bias:i,scale:r,intensity:s,factor:a}}(e,t);case"gradient":return function(e,t){let{gradientType:i,smooth:r,colors:s,steps:a,angle:o,offset:l,morph:h}=e;return{...Af(e,t),gradientType:i,smooth:r,colors:s.map(e=>new ic(e[0],e[1],e[2],e[3])),num:s.length,steps:a,offset:new tQ(...l),morph:new tQ(...h),angle:o}}(e,t);case"depth":return function(e,t){let{gradientType:i,near:r,far:s,isVector:a,isWorldSpace:o,origin:l,direction:h,colors:c,steps:d,smooth:u}=e;return{...Af(e,t),gradientType:i,near:r,far:s,isVector:a,isWorldSpace:o,origin:new iv(...l),direction:h?new iv(...h):new iv(1,0,0),colors:c.map(e=>void 0!==e?new ic(e[0],e[1],e[2],e[3]):new ic(0,0,0,0)),steps:d.slice(0,c.length),smooth:u}}(e,t);case"normal":return function(e,t){let{cnormal:i}=e;return{...Af(e,t),cnormal:new iv(i[0],i[1],i[2])}}(e,t);case"noise":return{...Af(e,t),scale:e.scale,move:e.move,fA:new tQ(...e.fA),fB:new tQ(...e.fB),size:new iv(...e.size),distortion:new tQ(...e.distortion),colorA:Au(e.colorA,t),colorB:Au(e.colorB,t),colorC:Au(e.colorC,t),colorD:Au(e.colorD,t),noiseType:e.noiseType,voronoiStyle:e.voronoiStyle,highCut:e.highCut,lowCut:e.lowCut,smoothness:e.smoothness,seed:e.seed,quality:e.quality};case"rainbow":return{...Af(e,t),filmThickness:e.filmThickness,movement:e.movement,wavelengths:new iv(...e.wavelengths),noiseStrength:e.noiseStrength,noiseScale:e.noiseScale,offset:new iv(...e.offset)};case"toon":return{...Af(e,t),positioning:e.positioning,colors:e.colors.map(e=>new ic(e[0],e[1],e[2],e[3])),num:e.colors.length,steps:e.steps,source:new iv(...e.source),isWorldSpace:e.isWorldSpace,noiseStrength:e.noiseStrength,noiseScale:e.noiseScale,shadowColor:Au(e.shadowColor,t),offset:new iv(...e.offset)};case"outline":return{...Af(e,t),outlineColor:Au(e.outlineColor,t),contourColor:Au(e.contourColor,t),outlineWidth:e.outlineWidth,contourWidth:e.contourWidth,outlineThreshold:e.outlineThreshold,contourThreshold:e.contourThreshold,outlineSmoothing:e.outlineSmoothing,contourFrequency:e.contourFrequency,contourDirection:new iv(...e.contourDirection),positionalLines:e.positionalLines,compensation:e.compensation};case"transmission":return{...Af(e,t),thickness:e.thickness,ior:e.ior,roughness:e.roughness};case"color":return{...Af(e,t),color:Au(e.color,t)};case"pattern":return{...Af(e,t),style:e.style,projection:e.projection,axis:e.axis,blending:e.blending,offset:new tQ(...e.offset),colorA:Au(e.colorA,t),colorB:Au(e.colorB,t),frequency:new tQ(...e.frequency),size:e.size,variation:e.variation,smoothness:e.smoothness,zigzag:e.zigzag,rotation:e.rotation,vertical:new tQ(...e.vertical),horizontal:new tQ(...e.horizontal),sides:e.sides}}}(i,r),function(e,t,i,r,s){switch(e.type){case"color":{let a=new _h(r.color??5526619),o=AA(r),l=new _S(a,o.alpha),h=new SK(l.calpha,"f");return new Aw(t,i,e,{color:a,...o},l,o.mode,h,o.isMask,s)}case"fresnel":{let a=new _h(r.color??16777215),o=new SJ(r.bias??.1),l=new SJ(r.scale??1),h=new SJ(r.intensity??2),c=new SJ(r.factor??1),d=AA(r),u=new _E(a,o,l,h,c,d.alpha,d.mode,d.isMask),p=new SK(u.calpha,"f");return new Aw(t,i,e,{color:a,bias:o,scale:l,intensity:h,factor:c,...d},u,d.mode,p,d.isMask,s)}case"rainbow":{let a=new SJ(r.filmThickness??30),o=new SJ(r.movement??0
5423),l=new SF(r.wavelengths??new iv(0,0,0)),h=new SJ(r.noiseStrength??0),c=new SJ(r.noiseScale??1),d=new SF(r.offset??new iv(0,0,0)),u=AA(r),p=new _R(a,o,l,h,c,d,u.alpha,u.isMask),f=new SK(p.calpha,"f");return new Aw(t,i,e,{filmThickness:a,movement:o,wavelengths:l,noiseStrength:h,noiseScale:c,offset:d,...u},p,u.mode,f,u.isMask,s)}case"transmission":{let a=new SJ(r.thickness??10),o=new SJ(r.ior??1.5),l=new SJ(r.roughness??.5),h=_k.transmissionSize,c=_k.transmissionRenderTarget,d=_k.transmissionRenderTargetDepth,u=window.innerWidth,p=window.innerHeight,f=u>=p?new Sz(p/u,1):new Sz(1,u/p),m=AA(r),g=new _z(a,o,l,h,c,d,f,m.alpha),v=new SK(g.calpha,"f");return new Aw(t,i,e,{thickness:a,ior:o,roughness:l,aspectRatio:f,...m},g,m.mode,v,m.isMask,s)}case"toon":{let a,o=new _c(r.positioning??0),l;r.colors?l=new _b(r.colors.length,r.colors):(l=new _b(10,new ic(0,0,0,1))).value[1]=new ic(1,1,1,1),r.steps?a=new _u(r.steps.length,r.steps):(a=new _u(10,1)).value[0]=0;let h=new SF(r.source??new iv(0,0,0)),c=new _d(r.isWorldSpace??!0),d=new SJ(r.noiseStrength??0),u=new SJ(r.noiseScale??1),p=new Sk(r.shadowColor),f=new SF(r.offset??new iv(0,0,0)),m=AA(r),g=new _L(o,l,a,h,c,d,u,p,f,m.alpha),v=new SK(g.calpha,"f");return new Aw(t,i,e,{positioning:o,colors:l,steps:a,source:h,isWorldSpace:c,noiseStrength:d,noiseScale:u,shadowColor:p,offset:f,...m},g,m.mode,v,m.isMask,s)}case"outline":{let a=new _h(r.outlineColor??16777215),o=new _h(r.contourColor??16777215),l=new SJ(r.outlineWidth??.1),h=new SJ(r.contourWidth??.1),c=new SJ(r.outlineThreshold??.1),d=new SJ(r.contourThreshold??.1),u=new SJ(r.outlineSmoothing??.1),p=new SJ(r.contourFrequency??.1),f=new SF(r.contourDirection??new iv(0,1,0)),m=new _d(r.positionalLines??!1),g=new _d(r.compensation??!0),v=_k.normalRenderTarget,y=_k.normalRenderTargetDepth,x=_k.pixelRatioNode,b=_k.resolution,w=AA(r),S=new _I(a,o,l,h,c,d,u,p,f,m,g,b,v,y,x,w.alpha),_=new SK(S.calpha,"f");return new Aw(t,i,e,{outlineColor:a,contourColor:o,outlineWidth:l,contourWidth:h,outlineThreshold:c,contourThreshold:d,outlineSmoothing:u,contourFrequency:p,contourDirection:f,positionalLines:m,compensation:g,...w},S,w.mode,_,w.isMask,s)}case"depth":{let a,o=new _c(r.gradientType??0),l=new _d(r.smooth??!1),h=new SJ(r.near??50),c=new SJ(r.far??200),d=new SJ(r.isVector??1),u=new SJ(r.isWorldSpace??0),p=new SF(r.origin??new iv),f=new SF(r.direction??new iv),m;r.colors?m=new _b(r.colors.length,r.colors):(m=new _b(2,new ic(0,0,0,1))).value[1]=new ic(1,1,1,1),r.steps?a=new _u(r.steps.length,r.steps):(a=new _u(2,1)).value[0]=0;let g=AA(r),v=new _M(o,l,h,c,d,u,p,f,m,a,g.alpha,g.isMask),y=new SK(v.calpha,"f");return new Aw(t,i,e,{gradientType:o,smooth:l,near:h,far:c,isVector:d,isWorldSpace:u,origin:p,direction:f,colors:m,steps:a,...g},v,g.mode,y,g.isMask,s)}case"noise":{let a=new SJ(r.scale??1),o=new SF(r.size??new iv(100,100,100)),l=new SJ(r.move??1),h=new Sz(r.fA??new tQ(1.7,9.2)),c=new Sz(r.fB??new tQ(8.3,2.8)),d=new Sz(r.distortion??new tQ(1,1)),u=new Sk(r.colorA),p=new Sk(r.colorB),f=new Sk(r.colorC),m=new Sk(r.colorD),g=new _c(r.noiseType??0),v=new _c(r.voronoiStyle??0),y=new SJ(r.highCut??1),x=new SJ(r.lowCut??0),b=new SJ(r.smoothness??.5),w=new SJ(r.seed??.5),S=new _c(r.quality??1),_=AA(r),A=new _D(a,o,l,h,c,d,u,p,f,m,_.alpha,g,_.isMask,v,y,x,b,w,S),M=new SK(A.calpha,"f");return new Aw(t,i,e,{scale:a,size:o,move:l,fA:h,fB:c,distortion:d,colorA:u,colorB:p,colorC:f,colorD:m,noiseType:g,..._,voronoiStyle:v,highCut:y,lowCut:x,smoothness:b,seed:w,quality:S},A,_.mode,M,_.isMask,s)}case"normal":{let a=new SF(r.cnormal??new iv(1,1,1)),o=AA(r),l=new __(a,o.alpha),h=new SK(l.calpha,"f");return new Aw(t,i,e,{cnormal:a,...o},l,o.mode,h,o.isMask,s)}case"gradient":{let a,o=new _c(r.gradientType??0),l=new _d(r.smooth??!1),h;r.colors?h=new _b(r.colors.length,r.colors):(h=new _b(10,new ic(0,0,0,1))).value[1]=new ic(1,1,1,1),r.steps?a=new _u(r.steps.length,r.steps):(a=new _u(10,1)).value[0]=0;let c=new Sz(r.offset??new tQ(0,0)),d=new Sz(r.morph??new tQ(0,0)),u=new SJ(r.angle??0),p=AA(r),f=new _C(o,l,h,a,c,d,u,p.alpha,p.isMask),m=new SK(f.calpha,"f");return new Aw(t,i,e,{gradientType:o,smooth:l,colors:h,steps:a,offset:c,morph:d,angle:u,...p},f,p.mode,m,p.isMask,s)}
5423case"pattern":{let a=new _c(r.style??0),o=new _c(r.projection??0),l=new _c(["x","y","z"].indexOf(r.axis)??0),h=new SJ(r.blending??0),c=new Sz(r.offset??new tQ(0,0)),d=new Sk(r.colorA),u=new Sk(r.colorB),p=new Sz(r.frequency??new tQ(10,10)),f=new SJ(r.size??.5),m=new SJ(r.variation??0),g=new SJ(r.smoothness??.5),v=new SJ(r.zigzag??0),y=new SJ(r.rotation??0),x=new Sz(r.vertical??new tQ(0,1)),b=new Sz(r.horizontal??new tQ(0,1)),w=new _c(r.sides??6),S=AA(r),_=new _O(a,o,l,h,c,d,u,p,f,m,g,v,y,x,b,w,S.alpha,S.isMask),A=new SK(_.calpha,"f");return new Aw(t,i,e,{style:a,projection:o,axis:l,blending:h,offset:c,colorA:d,colorB:u,frequency:p,size:f,variation:m,smoothness:g,zigzag:v,rotation:y,vertical:x,horizontal:b,sides:w,...S},_,S.mode,A,S.isMask,s)}default:{let a=new _h(1,0,0,1),o=AA(r),l=new _S(a,o.alpha),h=new SK(l.calpha,"f");return new Aw(t,i,e,{color:a,...o},l,o.mode,h,o.isMask,s)}}}(i,e,t,s,r)}if("noise"===i.displacementType){let s=new SF(new iv(...i.offset)),a=new SJ(i.scale??10),o=new SJ(i.intensity??8),l=new SJ(i.movement??1),h=new _c(i.noiseType??0),c=new _c(i.voronoiStyle??0),d=new SJ(i.smoothness??.5),u=new SJ(i.seed??0),p=new SJ(i.highCut??1),f=new SJ(i.lowCut??0),m=new _c(i.quality??1),g=new _N(o,l,s,c,d,u,p,f,m,a,h);return new AS(e,t,i,{offset:s,scale:a,intensity:o,movement:l,noiseType:h,voronoiStyle:c,smoothness:d,seed:u,highCut:p,lowCut:f,quality:m},g,r)}throw Error()}updateByOp(e,t,i){if(void 0===e.path[0]){if(0===e.type)return"type"in e.props||"category"in e.props||"visible"in e.props||"noiseType"in e.props?(i.scene.markNeedsUpdateRendererDirty(),!0):function(e,t,i,r){let s=!1;for(let[a,o]of Object.entries(e)){if("bumpMap"===a||"roughnessMap"===a){s=!0;continue}if(!a||void 0===o)continue;if(AM(a,i,r,t)){"visible"===a&&"light"===i.type&&(s=!0);continue}i.visible=r.visible;let e=i.uniforms[`f${i.id}_${a}`];if(e&&!(e instanceof _p))switch(s=s||function(e,t,i){if("isMask"===t)return!0;let r=Ag[e.type],s=Av[e.type];if(void 0!==s){let r=e.color;if(s.includes(t)){let e=r[t]?.value?.length;if(void 0!==e&&e!==i.length)return!0}}return void 0!==r&&r.includes(t)}(i,a,o),e.constructor){case _h:if("string"==typeof o){let i=t.getColor(o);i&&(e.value=i);break}e.value instanceof Am?e.value=new SN(o.r,o.g,o.b,o.a):e.setRGBA(o);break;case Sk:if("string"==typeof o){let i=t.getColor(o);i&&(e.value=i);break}e.value instanceof Am?e.value=new SN(o.r,o.g,o.b,o.a):e.value.setRGBA(o.r,o.g,o.b,o.a);break;case Sz:e.value.setX(o[0]),e.value.setY(o[1]);break;case SF:e.value.setX(o[0]),e.value.setY(o[1]),e.value.setZ(o[2]);break;case SZ:Ay(o,t,i);break;case _b:e.value=o.map(e=>new ic(...e));break;default:e.value=o}}return s}(e.props,i.shared,this,t)}else if("texture"===e.path[0])return!("texture"in t)&&!("video"in t)||Ay(e.props,i.shared,this);return!1}dispose(){let e;if("texture"===(e=this instanceof Ab?this.type:this)||"video"===e||"displace_map"===e||"matcap"===e){let e=this.uniforms[`f${this.id}_texture`];if(!e)return!1;e.image instanceof _3||e.image.deref()}}hasValueByKey(e){return void 0!==this.uniforms[e]}hasValue(e){return this.hasValueByKey(`f${this.id}_${e}`)}setValue(e,t){let i=`f${this.id}_${e}`;this.hasValueByKey(i)&&void 0!==t&&(this.uniforms[i].value=t)}getNode(e){let t=`f${this.id}_${e}`;if(this.hasValueByKey(t))return this.uniforms[t]}getValue(e){let t=`f${this.id}_${e}`;if(this.hasValueByKey(t))return this.uniforms[t].value}getName(e){let t=/f\d+_(.*)/.exec(e);if(t&&t.length>1)return t[1];console.log(`Layer.getName: error ${e}`)}getNames(){let e=[];for(let t in this.uniforms){let i=this.getName(t);i&&e.push(i)}return e}},Aw=class extends Ab{constructor(e,t,i,r,s,a,o,l,h){super(e,t,i,r,h),this.params=r,this.color=s,this.mode=a,this.alpha=o,this.isMask=l}},AS=class extends Ab{constructor(e,t,i,r,s,a){super(e,t,i,r,a),this.position=s}},A_=class extends Ab{constructor(e,t,i,r,s,a){super(e,t,i,s,a),this.node=r}static createLightLayer(e,t,i,r){let s,a=new SJ(Ax(i.alpha,r)),o=new _c(i.mode),l=new SJ(i.bumpMapIntensity),h=new SJ(Ax(i.alphaOverride,r)),c;if(i.visible){if("lambert"===i.category){s=new _X;let e=new _h(r.color(i.emissive)??0),t=new _d(i.occlusion??!0);c={emissive:e,occlusion:t},s.emissive=e,s.occlusion=t}else if("toon"===i.category){s=new _Z;let e=new SJ(i.shininess??30),t=new _h(r.color(i.specular)??1118481);c={shininess:e,specular:t},s.shininess=e,s.specular=t}else if("physical"===i.category){s=new _K;let e=new SJ(i.roughness??.3),t=new SJ(i.metalness??0),r=new SJ(i.reflectivity??.5),a=new _d(i.occlusion??!0);c={roughness:e,metalness:t,reflectivity:r,occlusion:a},s.roughness=e,s.metalness=t,s.reflectivity=r,s.occlusion=a}else{s=new _Q;let e=new SJ(i.shininess??30),t=new _h(void 0!==i.specular?r.color(i.specular)??1118481:1118481),a=new _d(i.occlusion??!0);c={shininess:e,specular:t,occlusion:a},s.shininess=e,s.specular=t,s.occlusion=a}}else s=new _q,c={};
5423return s.alpha=new SJ(1),s.shadingAlpha=a,s.shadingBlend=o,s.bumpMapIntensity=l,s.alphaOverride=h,c.alpha=s.shadingAlpha,c.mode=s.shadingBlend,c.bumpMapIntensity=s.bumpMapIntensity,c.alphaOverride=s.alphaOverride,new A_(e,t,i,s,c,r)}get category(){return this.node.category}};function AA(e){return{alpha:new SJ(e.alpha??1),mode:new _c(e.mode??0),isMask:new _d(e.isMask??!1)}}function AM(e,t,i,r){if("displace"===i.type&&("intensity"===e||"visible"===e)){let e=t.uniforms[`f${t.id}_intensity`];return e?(e.value=i.intensity*(i.visible?1:0),e):void 0}if("displace"!==i.type&&("alpha"===e||"visible"===e)){let s=t.uniforms[`f${t.id}_alpha`];if(!s)return;if(s.value=Ax(i.alpha,r)*(i.visible?1:0),"outline"===i.type&&"visible"===e){let e=t.uniforms[`f${t.id}_compensation`];e&&(e.value=i.compensation&&i.visible)}return s}}function AE(e,t){let i=0,r=e.layers.find(e=>"light"===e.data.type);if(r){let e=r.data,i=Number(t.getVariable(e.alphaOverride));if(("string"==typeof e.alphaOverride?i/100:e.alphaOverride)<1)return!0}for(let r of e.layers){if("displace"!==r.data.type&&r.data.isMask)return!0;if("displace"!==r.data.type&&"alpha"in r.data&&"light"!==r.data.type&&"fresnel"!==r.data.type&&"texture"!==r.data.type&&"matcap"!==r.data.type&&"rainbow"!==r.data.type&&"outline"!==r.data.type&&"pattern"!==r.data.type){let e=r.data.visible?r.data.alpha:0;if("string"==typeof e&&(e=Math.max(0,Math.min(1,Number(t.getVariable(e)??100)/100))),1===e&&"depth"===r.data.type||"gradient"===r.data.type){for(let t of r.data.colors)if(t[3]<1){e=t[3];break}}else if(1===e&&"noise"===r.data.type){let i=Math.min(t.color(r.data.colorA).a,Math.min(t.color(r.data.colorB).a,Math.min(t.color(r.data.colorC).a,t.color(r.data.colorD).a)));i<1&&(e=i)}i+=(1-i)*e}}return i<1}var AC=class extends r5{constructor(){super(void 0),this.flatShading=!1,this.needsJitter=!0,this.shadersPatchedForShapeBlend=!1,this.nodeContextUuid=0,this.fog=!0,this.dithering=!0,this.vertexColors=!0,this.transparent=!0}customProgramCacheKey(){return""}},AT=class extends AC{constructor(e,t,i,r){super(),this.flatShading=e,this.side=t,this.wireframe=i,this.root=r}updateAfterBuild(){let e=this.root;this.lights=e.lights,this.vertexShader=e.vertexShader,this.fragmentShader=e.fragmentShader,Object.assign(this.defines,e.defines),Object.assign(this.uniforms,e.uniforms),this.extensions=e.extensions,this.transparent=e.transparent,this.cacheKey=e.customProgramCacheKey()+"flat"+this.flatShading+this.side}onBeforeCompile(e,t){this.root.onBeforeCompile(e)}get data(){return this.root.data}get category(){return this.root.category}get hasAO(){return this.root.hasAO}getFlavor(e,t,i,r){return this.root.getFlavor(e,t,i,r)}get layers(){return this.root.layers}get fragment(){return this.root.fragment}getLayersOfType(e){return this.root.getLayersOfType(e)}getLayerByUuid(e){return this.root.getLayerByUuid(e)}updateByOp(e,t,i){this.root.updateByOp(e,t,i)}nodeMaterialDispose(){this.root.nodeMaterialDispose()}},AP=class extends AC{constructor(e,t,i=!0){super(),this.data=e,this.allowVariableSaves=i,this.layerIdGen=0,this.flavors=[],this.masks={},this.type="NodeMaterial",this.updaters=[],this.needsJitter=t.shared.needsJitter,SI.startContext(this),this.reset0(e,t),SI.endContext(this)}get nodeMaterial(){return this}getFlavor(e,t,i,r){let s=i?6:(e?3:0)+t;if(0===(s+=((r?.resolutionLevel??0)-(r?.useChildrenColors?4:0))*7))return this;void 0===this.flavors&&(this.flavors=[]),s-=1;let a=this.flavors[s];return void 0===a&&((a=new AT(e,t,i,this)).needsJitter=this.needsJitter,this.flavors[s]=a,a.flatShading=e,a.side=t,a.updateAfterBuild(),r&&(a.defines.SHAPEBLEND=r.resolutionLevel,a.defines.SHAPEBLEND_C=r.useChildrenColors?1:0)),a}get fragment(){return this.lightLayer.node}get category(){return this.lightLayer.category}get hasAO(){return this.lightLayer.getNode("occlusion")?.value??!1}reset(e,t,i=!1){SI.startContext(this),(this.data!==e||i)&&this.reset0(e,t),SI.endContext(this)}reset0(e,t){this.data=e;let i=e.layers??vk.defaultTwoLayerData("phong").layers;try{this.layers=i.map(e=>Ab.create(this.layerIdGen++,e.id,e.data,t.shared))}catch{this.layers=[]}this.layers.reverse(),this.name=e.name??"Untitled Material",this.onUpdate(t.shared),this.transparent=AE(e,t.shared),this.saveVariableLocations(t)}onVariableUpdate(e,t,i){if("alphaOverride"===e[0])this.transparent=AE(this.data,i.shared),this.lightLayer.setValue("alphaOverride",Math.max(0,Math.min(Number(t)/100,1)));else if("layer"===e[0]){let r=e[1],s=e[2];if(r&&s){let e=this.layers.find(e=>e.uuid===r);e?.hasValue(s)&&("alpha"===s?(this.transparent=AE(this.data,i.shared),e.setValue(s,Math.max(0,Math.min(Number(t)/100,1)))):e.setValue(s,t))}}}saveVariableLocations(e){if(!this.allowVariableSaves)return;let t=this.data.layers.find(e=>"light"===e.data.type);t&&e.shared.getVariable(t.data.alphaOverride,["material",this.uuid,"alphaOverride"]),this.data.layers.forEac
vendor: 4,368 bytes, line 5423
5423h(t=>{"alpha"in t.data&&"string"==typeof t.data.alpha&&e.shared.getVariable(t.data.alpha,["material",this.uuid,"layer",t.id,"alpha"])})}getLayersOfType(e){return this.layers.filter(t=>t.type===e)}getLayerByUuid(e){return this.layers.find(t=>t.uuid===e)}onUpdate(e){for(let t of(this.lightLayer=this.layers.find(e=>e instanceof A_),void 0===this.lightLayer&&(this.lightLayer=new A_(0,"",{...gM.defaultData("light","phong"),visible:!1},new _q,{},e)),this.dispose(),this.flavors))t&&t.dispose();this.applyTextureMaps(),this.applyMasks(),this.blendColors(),this.blendAfterColors(),this.blendPositions(),this.build(),this.nodeContextUuid=0}applyTextureMaps(){let e=this.layers.find(e=>e instanceof A_);if(!e)return;let t=e.data,i=t.bumpMap,r=t.roughnessMap;e.node.bumpMap=void 0,e.node.roughnessMap=void 0;for(let t=0;t<this.layers.length;++t){let s=this.layers[t];s instanceof Aw&&s.color instanceof _A&&(s.uuid===i&&(e.node.bumpMap=s.color),s.uuid===r&&(e.node.roughnessMap=s.color))}}updateByOp(e,t,i){if(SI.startContext(this),void 0!==t?this.data=t:t=this.data,this.transparent=AE(t,i.shared),"layers"===e.path[0]){let r=i.shared,s=e.path[1];if(void 0===s)i.scene.markNeedsUpdateRendererDirty(),this.reset0(t,i);else{0===e.type&&void 0!==e.props.occlusion&&i.scene.markNeedsUpdateRendererDirty();let a=this.layers.find(e=>e.uuid===s);if(a){let o=t.layers.data(s),l;0===e.type&&("alpha"in e.props||"alphaOverride"in e.props)&&(l="alpha"in e.props?{...e.props,alpha:Ax(e.props.alpha,r,["material",this.uuid,"layer",s,"alpha"])}:{...e.props,alphaOverride:Ax(e.props.alphaOverride,r,["material",this.uuid,"alphaOverride"])}),a.updateByOp({...e,...l?{props:l}:{},path:e.path.slice(2)},o,i)&&this.reset0(t,i)}}}else this.reset0(t,i);SI.endContext(this)}applyMasks(){for(let e=0;e<this.layers.length;++e){let t=this.layers[e];t instanceof Aw?t.color.mask=void 0:t instanceof A_&&(t.node.mask=void 0)}for(let e=0;e<this.layers.length;++e){let t=this.layers[e];if(t instanceof Aw&&t.isMask.value&&t.data.visible&&e>0){let i=e-1,r=this.layers[i];r instanceof A_?r.node.mask=new S0(t.color,t.alpha,S0.MUL):r instanceof Aw&&(r.isMask.value||(r.color.mask=new S0(t.color,t.alpha,S0.MUL)))}}}blendColors(){let e=this.layers.findIndex(e=>e instanceof Aw),t=this.layers.findIndex(e=>e instanceof A_);if(-1!==e&&e<t){let i=this.layers[e].color;for(let r=e+1;r<t;++r){let e=this.layers[r];if(e instanceof Aw){if(e.isMask.value)continue;i=new _w(i,e.color,e.alpha,e.mode)}}this.fragment.color=i}else this.fragment.color=void 0}blendAfterColors(){let e=new SK("outgoingLight","f"),t=this.layers.findIndex(e=>e instanceof A_);if(this.layers.length>t+1){for(let i=t+1;i<this.layers.length;++i){let t=this.layers[i];if(t instanceof Aw){if(t.isMask.value)continue;e=new _w(e,t.color,t.alpha,t.mode)}}this.fragment.afterColor=e}else this.fragment.afterColor=void 0}blendPositions(){let e=this.layers.filter(e=>e instanceof AS);if(e.length>0){let t=e[0].position;for(let i=1;i<e.length;++i)e[i]&&(t=new S0(t,e[i].position,S0.ADD),t=new S0(t,new SJ(.5).setReadonly(!0),S0.MUL));this.fragment.position=t}else this.fragment.position=void 0}getDefines(){return this.defines}getUniforms(){return this.uniforms}getVertexShader(){return this.vertexShader}getFragmentShader(){return this.fragmentShader}onBeforeCompile(e){this.shapeBlendhack&&this.shapeBlendhack(this),e.uniforms=this.uniforms,e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e.extensionDerivatives=!0===this.extensions.derivatives,e.extensionFragDepth=!0===this.extensions.fragDepth,e.extensionDrawBuffers=!0===this.extensions.drawBuffers,e.extensionShaderTextureLOD=!0===this.extensions.shaderTextureLOD}clampUniformsForPreview(e,t){let i=(e,t,i)=>Math.min(Math.max(e,t),i);for(let r of this.layers)if("displace"===r.type){let s=i(r.uniforms[`f${r.id}_intensity`].value,e,t);r.uniforms[`f${r.id}_intensity`].value=s}}updateFrame(e){for(let t=0;t<this.updaters.length;++t)e.updateNode(this.updaters[t])}build(){let e=new _l;for(let t of(e.needsJitter=this.needsJitter,this.lights=this.lightLayer.data.visible,e.build(this.fragment,this.fragment),this.vertexShader=e.getCode("vertex"),this.fragmentShader=e.getCode("fragment"),this.defines=e.defines,this.uniforms=e.uniforms,this.extensions=e.extensions,this.updaters=e.updaters,this.flavors))t&&t.updateAfterBuild();return this.shadersPatchedForShapeBlend=!1,this}
5423nodeMaterialDispose(){for(let e of(this.layers.forEach(e=>e.dispose()),super.dispose(),this.flavors))e&&e.dispose()}assetsLoaded(){for(let e of this.layers)if(e instanceof Aw){let t=e.params.texture;if(t instanceof _m&&!t.image.loaded)return!1}return!0}};Object.defineProperties(AC.prototype,{properties:{get:function(){return this.fragment.properties}}});var AD,AI=class extends AP{constructor(e,t,i){super(e,t,!1),this.uuid=i,this.allowVariableSaves=!0,this.saveVariableLocations(t)}},AO=new Map,AR=new Promise(e=>{AD=e}),AL=!1;AR.then(e=>Az=e);var AB,Az,AF,AN=class{constructor({src:e,volume:t,delay:i,loop:r}){let s;this._volume=1,this.delay=0,this._loop=1,this.loopsRemaining=0,this._status="stopped",this.onEnd=()=>{this.loopsRemaining===1/0?this.replay():this.loopsRemaining>1?(this.replay(),this.loopsRemaining--):(this._status="stopped",this.loopsRemaining=this._loop)},s="string"==typeof e?{src:e}:{src:function(e){if("string"==typeof e)return e;let t=AO.get(e);return t||(t={url:URL.createObjectURL(new Blob([e]))},AO.set(e,t)),t.url}(e),format:"wav"},this.sound=new Az.Howl(s),this.sound.on("end",this.onEnd),this.src=e,void 0!==t&&(this.volume=t),void 0!==i&&(this.delay=i),void 0!==r&&(this.loop=r)}get status(){return this._status}get volume(){return this._volume}set volume(e){this._volume=e,this.sound.volume(e)}get loop(){return this._loop}set loop(e){this._loop=e,this.loopsRemaining=e}replay(){this.clearDelay(),this.delayTimerId=window.setTimeout(()=>{this.sound.play(),this.clearDelay()},this.delay)}fade(e,t=1e3){e?(this.sound.volume(this._volume),this.clearFade(),this.fadeTimerId=window.setTimeout(()=>{this.sound.fade(this._volume,0,t),this.clearFade()},e)):this.sound.fade(this._volume,0,t)}on(e,t,i){this.sound.on(e,t,i)}off(e,t,i){this.sound.off(e,t,i)}play(){"playing"===this._status||this.sound.playing()||("paused"===this._status?(0===this.sound.seek()?this.replay():this.sound.play(),this._status="playing"):"stopped"===this._status&&(this.replay(),this._status="playing"))}pause(){"playing"===this._status&&(this.sound.pause(),this.clearFade(),this.clearDelay(),this._status="paused")}stop(){this.sound.stop(),this.loopsRemaining=this._loop,this.clearFade(),this.clearDelay(),this._status="stopped"}clearFade(){this.fadeTimerId&&(clearTimeout(this.fadeTimerId),delete this.fadeTimerId)}clearDelay(){this.delayTimerId&&(clearTimeout(this.delayTimerId),delete this.delayTimerId)}dispose(e=!1){this.off(),this.stop(),this.clearFade(),this.clearDelay()}},Ak=class{constructor(){this.type="ShapePath",this.color=new ii,this.subPaths=[],this.currentPath=null}moveTo(e,t){return this.currentPath=new oa,this.subPaths.push(this.currentPath),this.currentPath.moveTo(e,t),this}lineTo(e,t){return this.currentPath?.lineTo(e,t),this}quadraticCurveTo(e,t,i,r){return this.currentPath?.quadraticCurveTo(e,t,i,r),this}bezierCurveTo(e,t,i,r,s,a){return this.currentPath?.bezierCurveTo(e,t,i,r,s,a),this}splineThru(e){return this.currentPath?.splineThru(e),this}toShapes(){let e={ORIGIN:0,DESTINATION:1,BETWEEN:2,LEFT:3,RIGHT:4,BEHIND:5,BEYOND:6},t={loc:e.ORIGIN,t:0};function i(i,r,s){let a,o=s.x-r.x,l=s.y-r.y,h=i.x-r.x,c=i.y-r.y,d=o*c-h*l;if(i.x===r.x&&i.y===r.y){t.loc=e.ORIGIN,t.t=0;return}if(i.x===s.x&&i.y===s.y){t.loc=e.DESTINATION,t.t=1;return}if(d<-Number.EPSILON){t.loc=e.LEFT;return}if(d>Number.EPSILON){t.loc=e.RIGHT;return}if(o*h<0||l*c<0){t.loc=e.BEHIND;return}if(Math.sqrt(o*o+l*l)<Math.sqrt(h*h+c*c)){t.loc=e.BEYOND;return}a=0!==o?h/o:c/l,t.loc=e.BETWEEN,t.t=a}let r=0,s=999999999,a=-999999999,o=[];this.subPaths.forEach(e=>{let t=e.getPoints(),i=-999999999,l=999999999,h=-999999999,c=999999999;for(let e=0;e<t.length;e++){let r=t[e];r.y>i&&(i=r.y),r.y<l&&(l=r.y),r.x>h&&(h=r.x),r.x<c&&(c=r.x)}a<=h&&(a=h+1),s>=c&&(s=c-1),t.length&&o.push({curves:e.curves,points:t,isCW:oT.isClockWise(t),identifier:r++,boundingBox:new lz(new tQ(c,l),new tQ(h,i))})});let l=o.map(r=>(function(r,s,a,o,l){(null==l||""===l)&&(l="nonzero");let h=new tQ;r.boundingBox.getCenter(h);let c=function(r,s,a){let o=new tQ;s.getCenter(o);let l=[];return a.forEach(s=>{s.boundingBox.containsPoint(o)&&(function(r,s){let a=[],o=[];for(let l=1;l<r.length;l++){let h=r[l-1],c=r[l];for(let r=1;r<s.length;r++){let l=function(r,s,a,o){let l=r.x,h=s.x,c=a.x,d=o.x,u=r.y,p=s.y,f=a.y,m=o.y,g=(d-c)*(u-f)-(m-f)*(l-c),v=(m-f)*(h-l)-(d-c)*(p-u),y=g/v,x=((h-l)*(u-f)-(p-u)*(l-c))/v;if(0===v&&0!==g||y<=0||y>=1||x<0||x>1)return null;if(0===g&&0===v){for(let c=0;c<2;c++)if(i(0===c?a:o,r,s),t.loc===e.ORIGIN){let e=0===c?a:o;return{x:e.x,y:e.y,t:t.t}}else if(t.loc===e.BETWEEN)return{x:+(l+t.t*(h-l)).toPrecision(10),y:+(u+t.t*(p-u)).toPrecision(10),t:t.t};return null}for(let l=0;l<2;l++)if(i(0===l?a:o,r,s),t.loc===e.ORIGIN){let e=0===l?a:o;return{x:e.x,y:e.y,t:t.t}}return{x:+(l+y*(h-l)).toPrecision(10),y:+(u+y*(p-u)).toPrecision(10),t:y}}(h,c,s[r-1],s[r]);null!==l&&void 0===a.find(e=>e.t<=l.t+Number.EPSILON&&e.t>=l.t-Number.EPSILON)&&(a.push(l),o.push(new tQ(l.x,l.y)))}}return o}
5423)(r,s.points).forEach(e=>{l.push({identifier:s.identifier,isCW:s.isCW,point:e})})}),l.sort((e,t)=>e.point.x-t.point.x),l}([new tQ(a,h.y),new tQ(o,h.y)],r.boundingBox,s);c.sort((e,t)=>e.point.x-t.point.x);let d=[],u=[];c.forEach(e=>{e.identifier===r.identifier?d.push(e):u.push(e)});let p=d[0].point.x,f=[],m=0;for(;m<u.length&&u[m].point.x<p;)f.length>0&&f[f.length-1]===u[m].identifier?f.pop():f.push(u[m].identifier),m++;if(f.push(r.identifier),"evenodd"===l){let e=f.length%2==0,t=f[f.length-2];return{identifier:r.identifier,isHole:e,for:t}}if("nonzero"===l){let e=!0,t=null,i=null;for(let r=0;r<f.length;r++){let a=f[r];s[a]&&(e?(i=s[a].isCW,e=!1,t=a):i!==s[a].isCW&&(i=s[a].isCW,e=!0))}return{identifier:r.identifier,isHole:e,for:t}}console.warn('fill-rule: "'+l+'" is currently not implemented.')})(r,o,s,a,this.userData?.style.fillRule)),h=[];return o.forEach(e=>{let t=l[e.identifier];if(t&&!t.isHole){let t=new od;t.curves=e.curves,l.filter(t=>t?.isHole&&t.for===e.identifier).forEach(e=>{if(e){let i=o[e.identifier],r=new oa;r.curves=i.curves,t.holes.push(r)}}),h.push(t)}}),h}},AU=!1,AV=new Promise(e=>{AF=e}),Aj=!1;async function AG(e){return await (await fetch(e)).arrayBuffer()}var AH=new class{async load(e,t,i=()=>{}){let{load:r}=await AV;r(e,(e,r)=>{e||!r?i(e??"Something went wrong"):t(r)})}async parse(e){let{parse:t,Bidi:i}=await AV;try{let r=t(e),s=new i;return s.registerModifier("glyphIndex",null,e=>r.charToGlyphIndex(e.char)),s.applyFeatures(r,r.defaultRenderOptions.features),{font:r,bidi:s}}catch(e){console.error(e)}}};async function AW(e){let t,i,r=!1;if(e.url?(t=await AG(e.url),i=e.url,r=e.url.startsWith("/")):e.data&&(t=e.data.buffer.slice(e.data.byteOffset,e.data.byteOffset+e.data.byteLength)),t){if(!AU)return{font:void 0,url:i,intercepted:r,arr:t,bidi:null};{let e=await AH.parse(t);if(e)return{font:e.font,url:i,intercepted:r,arr:t,bidi:e.bidi}}}}var Aq=class{constructor(e){this._arrayBuffer=new ArrayBuffer(1),this._isLoaded=!1,this._intercepted=!1,this._isUserFont=e.isUserFont??!1,this._loadingPromise=AW(e).then(e=>{e&&(this._arrayBuffer=e.arr,this._url=e.url,this.font=e.font,this._intercepted=e.intercepted,this._isLoaded=!0,this._bidi=e.bidi)})}update(e){this._isLoaded=!1,this._isUserFont=e.isUserFont??!1,this._loadingPromise=AW(e).then(e=>{e&&(this._arrayBuffer=e.arr,this._url=e.url,this.font=e.font,this._intercepted=e.intercepted,this._isLoaded=!0,this._bidi=e.bidi)})}get url(){return this._url}get intercepted(){return this._intercepted}get isLoaded(){return this._isLoaded}get loadingPromise(){return this._loadingPromise}reverseLigaturesTable(e,t,i){if(!this._bidi)return[];let r=this._bidi;r.getTextGlyphs(t);let s=r.tokenizer.tokens,a=[],o=0,l=i.length===s.length;for(let r=0;r<i.length;r++){let h=i[r].index,c=String.fromCharCode(i[r].unicode),d=s[o];if(d.state.glyphIndex===h||d.state.fina===h||d.state.medi===h||d.state.init===h||l)a.push({char:c,index:h,replacements:[d.state.glyphIndex],replacementChars:[d.char]}),o++;else{let i=d.char,r="",s=[d.state.glyphIndex],l=[],u=!1;for(;!u;)o++,i+=r=t.charAt(o),s.push(e.charToGlyphIndex(r)),1===(l=e.stringToGlyphs(i)).length&&l[0].index===h&&(u=!0),o>t.length&&(u=!0);a.push({char:c,index:h,replacements:s,replacementChars:Array.from(i)}),o++}}return a}generateShapes(e,t){if(!this._isLoaded)return;let i=this.font,r=t.fontSize/this.unitsPerEm,s=t.fontSize*t.lineHeight,a=e.map(e=>this.getTextWidth(e,t)),o=t.width,l=this.getCharWidth(` 5424`,t),h=1===t.horizontalAlign?l:0,c=this.computeSpaceWidthForLine(e,0,t),d=this.getLineInitialOffsetX(a[0],o,t.horizontalAlign,e[0],l),u=this.getLineInitialOffsetY(s,e.length,t.height,r,t.verticalAlign),p=[],f=e.map(e=>[]),m=e.map(e=>[]),g;for(let v=0;v<e.length;v++){let y=e[v],x={features:{liga:!0}},b=[];try{b=i.stringToGlyphs(y,x)}catch(e){console.warn(e)}d=this.getLineInitialOffsetX(a[v],o,t.horizontalAlign,y,l);let w=[];try{w=this.reverseLigaturesTable(i,y,b)}catch(e){console.warn(e)}c=this.computeSpaceWidthForLine(e,v,t);for(let e=0;e<b.length;e++){let s=b[e],a=0===s.index?` 5425`:s.unicode?String.fromCharCode(s.unicode):void 0,o=w[e],l=0,y=0;0===e&&2===t.horizontalAlign&&void 0!==s.leftSideBearing&&(y=-s.leftSideBearing*r),g&&(l=i.getKerningValue(s,g)*r),d+=y+l;let x=0;if(a===` 5426`)x=h;else if(" "===a)x=c;else{let e=this.createPath(s,r,d,u,t);e&&(x=e.offsetX-(l+y),p.push(e.path))}if(1===o.replacements.length)m[v].push([d,u]),f[v].push(x);else{let e=o.replacements.map(e=>(i.glyphs.get(e).advanceWidth??0)*r),t=e.reduce((e,t)=>
5426e+=t,0),s=e.map(e=>e/t),a=d;for(let e=0;e<s.length;e++){let t=x*s[e];m[v].push([a,u]),f[v].push(t),a+=t}}d+=x,g=s}u-=s}let v=[];for(let e=0,t=p.length;e<t;e++)v.push(...p[e].toShapes());return{shapes:v,charWidths:f,lineWidths:a,charCoords:m}}get isUserFont(){return this._isUserFont}get arrayBuffer(){return this._arrayBuffer}get ascender(){return this.font?.ascender??0}get descender(){return this.font?.descender??0}get familyName(){return this.font?.names.fontFamily??""}get subfamilyName(){return this.font?.names.fontSubfamily??""}get unitsPerEm(){return this.font?.unitsPerEm??1}getLineInitialOffsetX(e,t,i,r,s){return(3===i||2===i)&&r.indexOf(` 5427`)>=0&&(e-=s),3===i?.5*t-.5*e:2===i?t-e:0}getLineInitialOffsetY(e,t,i,r,s){let a=t*e,o=Math.abs(this.ascender-this.descender)*r,l=-this.ascender*r-(e-o)/2;return 3===s?-(i-a-l):2===s?-(.5*i-.5*a-l):l}createPath(e,t,i,r,s){let a=e.getPath(i,-r,s.fontSize,{kerning:!1,letterSpacing:s.letterSpacing});if(!a){console.error('THREE.Font: character "'+e+'" does not exists in font family '+this.familyName+".");return}let o=new Ak,l=(e.advanceWidth??1)*t;if(e)for(let e of a.commands){let t=o.currentPath?.currentPoint;if(!(t&&"Z"!==e.type&&t.x===e.x&&-t.y===e.y))switch(e.type){case"M":o.moveTo(e.x,-e.y);break;case"L":o.lineTo(e.x,-e.y);break;case"Q":o.quadraticCurveTo(e.x1,-e.y1,e.x,-e.y);break;case"C":o.bezierCurveTo(e.x1,-e.y1,e.x2,-e.y2,e.x,-e.y)}}return o.subPaths.forEach(e=>{let t=function(e){if(e.length){let t=e[0];if(t instanceof n9)return t.v1;if(t instanceof n6||t instanceof oe)return t.v0}}(e.curves);void 0!==t&&e.currentPoint.distanceTo(t)>0&&e.lineTo(t.x,t.y)}),{offsetX:l+s.fontSize*s.letterSpacing,path:o}}getCharWidth(e,t){return this.font?.getAdvanceWidth(e,t.fontSize,{kerning:!0,letterSpacing:t.letterSpacing})??0}getTextWidth(e,t){return this.font?.getAdvanceWidth(e,t.fontSize,{kerning:!0,letterSpacing:t.letterSpacing})??0}computeSpaceWidthForLine(e,t,i){let r=this.getCharWidth(" ",i),s=e[t];if(s){let a=this.countSpaces(s.trimEnd());if(4===i.horizontalAlign&&t<e.length-1&&a)return(i.width-(this.getTextWidth(s,i)-a*r))/a}return r}countSpaces(e){return(e.match(/ /g)||[]).length}},AX=class{constructor(){this.objects=new Map,this.unreachable=new Set}getCached(e){return this.objects.get(e)}get size(){return this.objects.size}get(e,t,i){let r=this.objects.get(e);return void 0===r?(r=this.createObject(e,t,i),this.objects.set(e,r)):r.isShared=!0,r}forceDelete(e){let t=this.objects.get(e);t&&(this.disposeObject(t),this.objects.delete(e))}mutateIfUnique(e,t){let i=this.objects.get(e);if(i&&!0!==i.isShared)return this.objects.delete(e),this.objects.set(t,i),i}startGc(){this.unreachable=new Set(this.objects.keys())}markAsReachable(e,t){t===this.objects.get(e)&&this.unreachable.delete(e)}endGc(){this.unreachable.forEach(e=>{this.disposeObject(this.objects.get(e)),this.objects.delete(e)}),this.unreachable.clear()}dispose(){this.objects.forEach(e=>{this.disposeObject(e)}),this.objects.clear()}},AY=class extends AX{constructor(e){super(),this.flatShading=e}disposeObject(e){e.dispose()}createObject(e,t,i){let r=w4(e,t,this.flatShading,i);return r.computeBoundingSphere(),r}},AQ={markNeedsUpdateRendererDirty:()=>{}},AK=class{constructor(e,t){this.id=e,this.userWebhook=t,this.result=void 0,this._connected=!1,this.emitter=wR(),this.reconnectWaitFor=1e3,this._onError=e=>{this.eventSource?.removeEventListener("message",this._onMessage),this.eventSource?.removeEventListener("error",this._onError),this.eventSource?.removeEventListener("open",this._onConnected),this._scheduleReconnect()},this._onConnected=e=>{clearTimeout(this.scheduledReconnectHandle),this.reconnectWaitFor=1e3,this._connected=!0},this._onDisconnected=()=>{clearTimeout(this.scheduledReconnectHandle),this.reconnectWaitFor=1e3,this._connected=!1},this._onMessage=e=>{let t=e.data,i;try{i=JSON.parse(t)}catch(e){console.error("Error parsing webhook message",e)}if(i){let e=!1;this.userWebhook.parametersSchemas.forEach(({data:t})=>{var r,s;let a;void 0!==i[t.name]&&(r=i[t.name],s=t.type,a=typeof r,("string"===s||"number"===s)&&a===s||"boolean"===s&&("true"===r||"false"===r||!0===r||!1===r)||"image"===s&&"string"===a&&r.startsWith("http"))&&(void 0===this.result&&(this.result={}),this.result[t.name]=i[t.name],e=!0)}),e&&this.emitter.emit("message",{userWebhookId:this.id})}}}connect(){clearTimeout(this.scheduledReconnectHandle),this.userWebhook.url&&(this.eventSource=new EventSource("https://hooks.spline.design/events?hashFile="+this.userWebhook.url),this.eventSource.addEventListener("message",this._onMessage),this.eventSource.addEventListener("error",this._onError),this.eventSource.addEventListener("open",this._onConnected))}disconnect(){this.eventSource?.removeEventListener("message",this._onMessage),this.eventSource?.removeEventListener("error",this._onError),this.eventSource?.removeEventListener("open",this._onConnected),this.eventSource?.close(),this._onDisconnected(),clearTimeout(this.scheduledReconnectHandle)}_scheduleReconnect(){this.reconnectWaitFor*=2,this.reconnectWaitFor>512e3&&(this.reconnectWaitFor=512e3),clearTimeout(this.scheduledReconnectHandle),this.scheduledReconnectHandle=setTimeout(()=>{this.scheduledReconnectHandle=void 0,this.connect()},this.reconnectWaitFor)}update(e){this.userWebhook=e}dispose(){this._connected&&this.disconnect()}get connected(){return this._connected}on(e,t){this.emitter.on(e,t)}off(e,t){this.emitter.off(e,t)}getParametersKeys(){return this.userWebhook.parametersSchemas.map(e=>e.data.name)}getParameterValue(e){if(this.getParametersKeys().includes(e)){if(this.result)return this.result?.[e];for(let t of this.userWebhook.parametersSchemas)if(t.data.name===e)return yf.defaultParameterValueByType(t.data.type)}}},AZ=globalThis.atob,AJ=globalThis.btoa,A$=class{static floatTo16BitPCM(e){let t=new ArrayBuffer(2*e.length),i=new DataView(t),r=0;for(let t=0;t<e.length;t++,r+=2){let s=Math.max(-1,Math.min(1,e[t]));i.setInt16(r,s<0?32768*s:32767*s,!0)}return t}static base64ToArrayBuffer(e){let t=AZ(e),i=t.length,r=new Uint8Array(i);for(let e=0;e<i;e++)r[e]=t.charCodeAt(e);return r.buffer}static arrayBufferToBase64(e){e instanceof Float32Array?e=this.floatTo16BitPCM(e):e instanceof Int16Array&&(e=e.buffer);let t="",i=new Uint8Array(e);for(let e=0;e<i.length;e+=32768){let r=i.subarray(e,e+32768);t+=String.fromCharCode.apply(null,r)}return AJ(t)}static mergeInt16Arrays(e,t){if(e instanceof ArrayBuffer&&(e=new Int16Array(e)),t instanceof ArrayBuffer&&(t=new Int16Array(t)),!(e instanceof Int16Array)||
5427!(t instanceof Int16Array))throw Error("Both items must be Int16Array");let i=new Int16Array(e.length+t.length);for(let t=0;t<e.length;t++)i[t]=e[t];for(let r=0;r<t.length;r++)i[e.length+r]=t[r];return i}static generateId(e,t=21){let i="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",r=Array(t-e.length).fill(0).map(e=>i[Math.floor(Math.random()*i.length)]).join("");return`${e}${r}`}},A0=e=>new Promise(t=>setTimeout(()=>t(),e)),A1=class{constructor(){this.eventHandlers={},this.nextEventHandlers={}}clearEventHandlers(){return this.eventHandlers={},this.nextEventHandlers={},!0}on(e,t){return this.eventHandlers[e]=this.eventHandlers[e]||[],this.eventHandlers[e].push(t),t}onNext(e,t){return this.nextEventHandlers[e]=this.nextEventHandlers[e]||[],this.nextEventHandlers[e].push(t),t}off(e,t){let i=this.eventHandlers[e]||[];if(t){let r=i.indexOf(t);if(-1===r)throw Error(`Could not turn off specified event listener for "${e}": not found as a listener`);i.splice(r,1)}else delete this.eventHandlers[e];return!0}offNext(e,t){let i=this.nextEventHandlers[e]||[];if(t){let r=i.indexOf(t);if(-1===r)throw Error(`Could not turn off specified next event listener for "${e}": not found as a listener`);i.splice(r,1)}else delete this.nextEventHandlers[e];return!0}async waitForNext(e,t=null){let i=Date.now(),r;for(this.onNext(e,e=>r=e);!r;){if(t&&Date.now()-i>t)return null;await A0(1)}return r}dispatch(e,t){for(let i of[].concat(this.eventHandlers[e]||[]))i(t);for(let i of[].concat(this.nextEventHandlers[e]||[]))i(t);return delete this.nextEventHandlers[e],!0}},A2=class extends A1{constructor({url:e,apiKey:t,dangerouslyAllowAPIKeyInBrowser:i,debug:r}={}){if(super(),this.defaultUrl="wss://api.openai.com/v1/realtime",this.url=e||this.defaultUrl,this.apiKey=t||null,this.debug=!!r,this.ws=null,globalThis.document&&this.apiKey&&!i)throw Error('Can not provide API key in the browser without "dangerouslyAllowAPIKeyInBrowser" set to true')}isConnected(){return!!this.ws}log(...e){let t=[`[Websocket/${new Date().toISOString()}]`].concat(e).map(e=>"object"==typeof e&&null!==e?JSON.stringify(e,null,2):e);
5427return this.debug&&console.log(...t),!0}async connect({model:e}={model:"gpt-4o-realtime-preview-2024-10-01"}){if(this.apiKey||this.url!==this.defaultUrl||console.warn(`No apiKey provided for connection to "${this.url}"`),this.isConnected())throw Error("Already connected");if(globalThis.document){this.apiKey&&console.warn("Warning: Connecting using API key in the browser, this is not recommended");let t=new globalThis.WebSocket(`${this.url}${e?`?model=${e}`:""}`,["realtime",`openai-insecure-api-key.${this.apiKey}`,"openai-beta.realtime-v1"]);return t.addEventListener("message",e=>{let t=JSON.parse(e.data);this.receive(t.type,t)}),new Promise((e,i)=>{let r=()=>{this.disconnect(t),i(Error(`Could not connect to "${this.url}"`))};t.addEventListener("error",r),t.addEventListener("open",()=>{this.log(`Connected to "${this.url}"`),t.removeEventListener("error",r),t.addEventListener("error",()=>{this.disconnect(t),this.log(`Error, disconnected from "${this.url}"`),this.dispatch("close",{error:!0})}),t.addEventListener("close",()=>{this.disconnect(t),this.log(`Disconnected from "${this.url}"`),this.dispatch("close",{error:!1})}),this.ws=t,e(!0)})})}}disconnect(e){if(!e||this.ws===e)return this.ws&&this.ws.close(),this.ws=null,!0}receive(e,t){return this.log("received:",e,t),this.dispatch(`server.${e}`,t),this.dispatch("server.*",t),!0}send(e,t){if(!this.isConnected())throw Error("RealtimeAPI is not connected");if("object"!=typeof(t=t||{}))throw Error("data must be an object");let i={event_id:A$.generateId("evt_"),type:e,...t};return this.dispatch(`client.${e}`,i),this.dispatch("client.*",i),this.log("sent:",e,i),this.ws.send(JSON.stringify(i)),!0}},A3=class{constructor(){tS(this,"defaultFrequency",24e3),tS(this,"EventProcessors",{"conversation.item.created":e=>{let{item:t}=e,i=JSON.parse(JSON.stringify(t));if(this.itemLookup[i.id]||(this.itemLookup[i.id]=i,this.items.push(i)),i.formatted={},i.formatted.audio=new Int16Array(0),i.formatted.text="",i.formatted.transcript="",this.queuedSpeechItems[i.id]&&(i.formatted.audio=this.queuedSpeechItems[i.id].audio,delete this.queuedSpeechItems[i.id]),i.content)for(let e of i.content.filter(e=>["text","input_text"].includes(e.type)))i.formatted.text+=e.text;return this.queuedTranscriptItems[i.id]&&(i.formatted.transcript=this.queuedTranscriptItems.transcript,delete this.queuedTranscriptItems[i.id]),"message"===i.type?"user"===i.role?(i.status="completed",this.queuedInputAudio&&(i.formatted.audio=this.queuedInputAudio,this.queuedInputAudio=null)):i.status="in_progress":"function_call"===i.type?(i.formatted.tool={type:"function",name:i.name,call_id:i.call_id,arguments:""},i.status="in_progress"):"function_call_output"===i.type&&(i.status="completed",i.formatted.output=i.output),{item:i,delta:null}},"conversation.item.truncated":e=>{let{item_id:t,audio_end_ms:i}=e,r=this.itemLookup[t];if(!r)throw Error(`item.truncated: Item "${t}" not found`);let s=Math.floor(i*this.defaultFrequency/1e3);return r.formatted.transcript="",r.formatted.audio=r.formatted.audio.slice(0,s),{item:r,delta:null}},"conversation.item.deleted":e=>{let{item_id:t}=e,i=this.itemLookup[t];if(!i)throw Error(`item.deleted: Item "${t}" not found`);delete this.itemLookup[i.id];let r=this.items.indexOf(i);return r>-1&&this.items.splice(r,1),{item:i,delta:null}},"conversation.item.input_audio_transcription.completed":e=>{let{item_id:t,content_index:i,transcript:r}=e,s=this.itemLookup[t],a=r||" ";return s?(s.content[i].transcript=r,s.formatted.transcript=a,{item:s,delta:{transcript:r}}):(this.queuedTranscriptItems[t]={transcript:a},{item:null,delta:null})},"input_audio_buffer.speech_started":e=>{let{item_id:t,audio_start_ms:i}=e;return this.queuedSpeechItems[t]={audio_start_ms:i},{item:null,delta:null}},"input_audio_buffer.speech_stopped":(e,t)=>{let{item_id:i,audio_end_ms:r}=e;this.queuedSpeechItems[i]||(this.queuedSpeechItems[i]={audio_start_ms:r});let s=this.queuedSpeechItems[i];if(s.audio_end_ms=r,t){let e=Math.floor(s.audio_start_ms*this.defaultFrequency/1e3),i=Math.floor(s.audio_end_ms*this.defaultFrequency/1e3);s.audio=t.slice(e,i)}return{item:null,delta:null}},"response.created":e=>{let{response:t}=e;return this.responseLookup[t.id]||(this.responseLookup[t.id]=t,this.responses.push(t)),{item:null,delta:null}},"response.output_item.added":e=>{let{response_id:t,item:i}=e,r=this.responseLookup[t];if(!r)throw Error(`response.output_item.added: Response "${t}" not found`);return r.output.push(i.id),{item:null,delta:null}},"response.output_item.done":e=>{let{item:t}=e;if(!t)throw Error('response.output_item.done: Missing "item"');let i=this.itemLookup[t.id];if(!i)throw Error(`response.output_item.done: Item "${t.id}" not found`);return i.status=t.status,{item:i,delta:null}},"response.content_part.added":e=>{let{item_id:t,part:i}
5427=e,r=this.itemLookup[t];if(!r)throw Error(`response.content_part.added: Item "${t}" not found`);return r.content.push(i),{item:r,delta:null}},"response.audio_transcript.delta":e=>{let{item_id:t,content_index:i,delta:r}=e,s=this.itemLookup[t];if(!s)throw Error(`response.audio_transcript.delta: Item "${t}" not found`);return s.content[i].transcript+=r,s.formatted.transcript+=r,{item:s,delta:{transcript:r}}},"response.audio.delta":e=>{let{item_id:t,content_index:i,delta:r}=e,s=this.itemLookup[t];if(!s)throw Error(`response.audio.delta: Item "${t}" not found`);let a=new Int16Array(A$.base64ToArrayBuffer(r));return s.formatted.audio=A$.mergeInt16Arrays(s.formatted.audio,a),{item:s,delta:{audio:a}}},"response.text.delta":e=>{let{item_id:t,content_index:i,delta:r}=e,s=this.itemLookup[t];if(!s)throw Error(`response.text.delta: Item "${t}" not found`);return s.content[i].text+=r,s.formatted.text+=r,{item:s,delta:{text:r}}},"response.function_call_arguments.delta":e=>{let{item_id:t,delta:i}=e,r=this.itemLookup[t];if(!r)throw Error(`response.function_call_arguments.delta: Item "${t}" not found`);return r.arguments+=i,r.formatted.tool.arguments+=i,{item:r,delta:{arguments:i}}}}),this.clear()}clear(){return this.itemLookup={},this.items=[],this.responseLookup={},this.responses=[],this.queuedSpeechItems={},this.queuedTranscriptItems={},this.queuedInputAudio=null,!0}queueInputAudio(e){return this.queuedInputAudio=e,e}processEvent(e,...t){if(!e.event_id)throw console.error(e),Error('Missing "event_id" on event');if(!e.type)throw console.error(e),Error('Missing "type" on event');let i=this.EventProcessors[e.type];if(!i)throw Error(`Missing conversation event processor for "${e.type}"`);return i.call(this,e,...t)}getItem(e){return this.itemLookup[e]||null}getItems(){return this.items.slice()}},A4=class extends A1{constructor({url:e,apiKey:t,dangerouslyAllowAPIKeyInBrowser:i,debug:r}={}){super(),this.defaultSessionConfig={modalities:["text","audio"],instructions:"",voice:"alloy",input_audio_format:"pcm16",output_audio_format:"pcm16",input_audio_transcription:null,turn_detection:null,tools:[],tool_choice:"auto",temperature:.8,max_response_output_tokens:4096},this.sessionConfig={},this.transcriptionModels=[{model:"whisper-1"}],this.defaultServerVadConfig={type:"server_vad",threshold:.5,prefix_padding_ms:300,silence_duration_ms:200},this.realtime=new A2({url:e,apiKey:t,dangerouslyAllowAPIKeyInBrowser:i,debug:r}),this.conversation=new A3,this._resetConfig(),this._addAPIEventHandlers()}_resetConfig(){return this.sessionCreated=!1,this.tools={},this.sessionConfig=JSON.parse(JSON.stringify(this.defaultSessionConfig)),this.inputAudioBuffer=new Int16Array(0),!0}_addAPIEventHandlers(){this.realtime.on("client.*",e=>{let t={time:new Date().toISOString(),source:"client",event:e};this.dispatch("realtime.event",t)}),this.realtime.on("server.*",e=>{let t={time:new Date().toISOString(),source:"server",event:e};this.dispatch("realtime.event",t)}),this.realtime.on("server.session.created",()=>this.sessionCreated=!0);let e=(e,...t)=>{let{item:i,delta:r}=this.conversation.processEvent(e,...t);return{item:i,delta:r}},t=(t,...i)=>{let{item:r,delta:s}=e(t,...i);return r&&this.dispatch("conversation.updated",{item:r,delta:s}),{item:r,delta:s}},i=async e=>{try{let t=JSON.parse(e.arguments),i=this.tools[e.name];if(!i)throw Error(`Tool "${e.name}" has not been added`);let r=await i.handler(t);this.realtime.send("conversation.item.create",{item:{type:"function_call_output",call_id:e.call_id,output:JSON.stringify(r)}})}catch(t){this.realtime.send("conversation.item.create",{item:{type:"function_call_output",call_id:e.call_id,output:JSON.stringify({error:t.message})}})}this.createResponse()};return this.realtime.on("server.response.created",e),this.realtime.on("server.response.output_item.added",e),this.realtime.on("server.response.content_part.added",e),this.realtime.on("server.input_audio_buffer.speech_started",t=>{e(t),this.dispatch("conversation.interrupted")}),this.realtime.on("server.input_audio_buffer.speech_stopped",t=>e(t,this.inputAudioBuffer)),this.realtime.on("server.conversation.item.created",e=>{let{item:i}=t(e);this.dispatch("conversation.item.appended",{item:i}),"completed"===i.status&&this.dispatch("conversation.item.completed",{item:i})}),this.realtime.on("server.conversation.item.truncated",t),this.realtime.on("server.conversation.item.deleted",t),this.realtime.on("server.conversation.item.input_audio_transcription.completed",t),this.realtime.on("server.response.audio_transcript.delta",t),this.realtime.on("server.response.audio.delta",t),this.realtime.on("server.response.text.delta",t),this.realtime.on("server.response.function_call_arguments.delta",t),this.realtime.on("server.response.output_item.done",async e=>{let{item:r}=t(e);"completed"===r.status&&this.dispatch("conversation.item.completed",{item:r}),r.formatted.tool&&i(r.formatted.tool)}),!0}isConnected(){return this.realtime.isConnected()}reset(){return this.disconnect(),this.clearEventHandlers(),this.realtime.clearEventHandlers(),this._resetConfig(),this._addAPIEventHandlers(),!0}async connect(){if(this.isConnected())throw Error("Already connected, use .disconnect() first");return await this.realtime.connect(),this.updateSession(),!0}async waitForSessionCreated(){if(!this.isConnected())throw Error("Not connected, use .connect() first");for(;!this.sessionCreated;)await new Promise(e=>setTimeout(()=>e(),1));return!0}disconnect(){this.sessionCreated=!1,this.realtime.isConnected()&&this.realtime.disconnect(),this.conversation.clear()}getTurnDetectionType(){return this.sessionConfig.turn_detection?.type||null}addTool(e,t){if(!e?.name)throw Error("Missing tool name in definition");let i=e?.name;if(this.tools[i])throw Error(`Tool "${i}" already added. Please use .removeTool("${i}") before trying to add again.`);if("function"!=typeof t)throw Error(`Tool "${i}" handler must be a function`);return this.tools[i]={definition:e,handler:t},this.updateSession(),this.tools[i]}removeTool(e){if(!this.tools[e])throw Error(`Tool "${e}" does not exist, can not be removed.`);return delete this.tools[e],!0}deleteItem(e){return this.realtime.send("conversation.item.delete",{item_id:e}),!0}updateSession({modalities:e,instructions:t,voice:i,input_audio_format:r,output_audio_format:s,input_audio_transcription:a,turn_detection:o,tools:l,tool_choice:h,temperature:c,max_response_output_tokens:d}={}){void 0!==e&&(this.sessionConfig.modalities=e),void 0!==t&&(this.sessionConfig.instructions=t),void 0!==i&&(this.sessionConfig.voice=i),void 0!==r&&(this.sessionConfig.input_audio_format=r),void 0!==s&&(this.sessionConfig.output_audio_format=s),void 0!==a&&(this.sessionConfig.input_audio_transcription=a),void 0!==o&&(this.sessionConfig.turn_detection=o),void 0!==l&&(this.sessionConfig.tools=l),void 0!==h&&(this.sessionConfig.tool_choice=h),void 0!==c&&(this.sessionConfig.temperature=c),void 0!==d&&(this.sessionConfig.max_response_output_tokens=d);let u=[].concat((l||[]).map(e=>{let t={type:"function",...e};if(this.tools[t?.name])throw Error(`Tool "${t?.name}" has already been defined`);return t}),Object.keys(this.tools).map(e=>({type:"function",...this.tools[e].definition}))),p={...this.sessionConfig};return p.tools=u,this.realtime.isConnected()&&this.realtime.send("session.update",{session:p}),!0}sendUserMessageContent(e=[]){if(e.length){for(let t of e)"input_audio"===t.type&&(t.audio instanceof ArrayBuffer||t.audio instanceof Int16Array)&&(t.audio=A$.arrayBufferToBase64(t.audio));this.realtime.send("conversation.item.create",{item:{type:"message",role:"user",content:e}})}return this.createResponse(),!0}appendInputAudio(e){return e.byteLength>0&&(this.realtime.send("input_audio_buffer.append",{audio:A$.arrayBufferToBase64(e)}),this.inputAudioBuffer=A$.mergeInt16Arrays(this.inputAudioBuffer,e)),!0}createResponse(){return null===this.getTurnDetectionType()&&this.inputAudioBuffer.byteLength>0&&(this.realtime.send("input_audio_buffer.commit"),this.conversation.queueInputAudio(this.inputAudioBuffer),this.inputAudioBuffer=new Int16Array(0)),this.realtime.send("response.create"),!0}cancelResponse(e,t=0){if(!e)return this.realtime.send("response.cancel"),{item:null};if(e){let i=this.conversation.getItem(e);if(!i)throw Error(`Could not find item "${e}"`);
5427if("message"!==i.type)throw Error('Can only cancelResponse messages with type "message"');if("assistant"!==i.role)throw Error('Can only cancelResponse messages with role "assistant"');this.realtime.send("response.cancel");let r=i.content.findIndex(e=>"audio"===e.type);if(-1===r)throw Error("Could not find audio on item to cancel");return this.realtime.send("conversation.item.truncate",{item_id:e,content_index:r,audio_end_ms:Math.floor(t/this.conversation.defaultFrequency*1e3)}),{item:i}}}async waitForNextItem(){let{item:e}=await this.waitForNext("conversation.item.appended");return{item:e}}async waitForNextCompletedItem(){let{item:e}=await this.waitForNext("conversation.item.completed");return{item:e}}},A5=new Blob([` 5428class AudioProcessor extends AudioWorkletProcessor { 5429 5430 constructor() { 5431 super(); 5432 this.port.onmessage = this.receive.bind(this); 5433 this.initialize(); 5434 } 5435 5436 initialize() { 5437 this.foundAudio = false; 5438 this.recording = false; 5439 this.chunks = []; 5440 } 5441 5442 /** 5443 * Concatenates sampled chunks into channels 5444 * Format is chunk[Left[], Right[]] 5445 */ 5446 readChannelData(chunks, channel = -1, maxChannels = 9) { 5447 let channelLimit; 5448 if (channel !== -1) { 5449 if (chunks[0] && chunks[0].length - 1 < channel) { 5450 throw new Error( 5451 \`Channel \${channel} out of range: max \${chunks[0].length}\` 5452 ); 5453 } 5454 channelLimit = channel + 1; 5455 } else { 5456 channel = 0; 5457 channelLimit = Math.min(chunks[0] ? chunks[0].length : 1, maxChannels); 5458 } 5459 const channels = []; 5460 for (let n = channel; n < channelLimit; n++) { 5461 const length = chunks.reduce((sum, chunk) => { 5462 return sum + chunk[n].length; 5463 }, 0); 5464 const buffers = chunks.map((chunk) => chunk[n]); 5465 const result = new Float32Array(length); 5466 let offset = 0; 5467 for (let i = 0; i < buffers.length; i++) { 5468 result.set(buffers[i], offset); 5469 offset += buffers[i].length; 5470 } 5471 channels[n] = result; 5472 } 5473 return channels; 5474 } 5475 5476 /** 5477 * Combines parallel audio data into correct format, 5478 * channels[Left[], Right[]] to float32Array[LRLRLRLR...] 5479 */ 5480 formatAudioData(channels) { 5481 if (channels.length === 1) { 5482 // Simple case is only one channel 5483 const float32Array = channels[0].slice(); 5484 const meanValues = channels[0].slice(); 5485 return { float32Array, meanValues }; 5486 } else { 5487 const float32Array = new Float32Array( 5488 channels[0].length * channels.length 5489 ); 5490 const meanValues = new Float32Array(channels[0].length); 5491 for (let i = 0; i < channels[0].length; i++) { 5492 const offset = i * channels.length; 5493 let meanValue = 0; 5494 for (let n = 0; n < channels.length; n++) { 5495 float32Array[offset + n] = channels[n][i]; 5496 meanValue += channels[n][i]; 5497 } 5498 meanValues[i] = meanValue / channels.length; 5499 } 5500 return { float32Array, meanValues }; 5501 } 5502 } 5503 5504 /** 5505 * Converts 32-bit float data to 16-bit integers 5506 */ 5507 floatTo16BitPCM(float32Array) { 5508 const buffer = new ArrayBuffer(float32Array.length * 2); 5509 const view = new DataView(buffer); 5510 let offset = 0; 5511 for (let i = 0; i < float32Array.length; i++, offset += 2) { 5512 let s = Math.max(-1, Math.min(1, float32Array[i])); 5513 view.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7fff, true); 5514 } 5515 return buffer; 5516 } 5517 5518 /** 5519 * Retrieves the most recent amplitude values from the audio stream 5520 * @param {number} channel 5521 */ 5522 getValues(channel = -1) { 5523 const channels = this.readChannelData(this.chunks, channel); 5524 const { meanValues } = this.formatAudioData(channels); 5525 return { meanValues, channels }; 5526 } 5527 5528 /** 5529 * Exports chunks as an audio/wav file 5530 */ 5531 export() { 5532 const channels = this.readChannelData(this.chunks); 5533 const { float32Array, meanValues } = this.formatAudioData(channels); 5534 const audioData = this.floatTo16BitPCM(float32Array); 5535 return { 5536 meanValues: meanValues, 5537 audio: { 5538 bitsPerSample: 16, 5539 channels: channels, 5540 data: audioData, 5541 }, 5542 }; 5543 } 5544 5545 receive(e) { 5546 const { event, id } = e.data; 5547 let receiptData = {}; 5548 switch (event) { 5549 case 'start': 5550 this.recording = true; 5551 break; 5552 case 'stop': 5553 this.recording = false;
5554 break; 5555 case 'clear': 5556 this.initialize(); 5557 break; 5558 case 'export': 5559 receiptData = this.export(); 5560 break; 5561 case 'read': 5562 receiptData = this.getValues(); 5563 break; 5564 default: 5565 break; 5566 } 5567 // Always send back receipt 5568 this.port.postMessage({ event: 'receipt', id, data: receiptData }); 5569 } 5570 5571 sendChunk(chunk) { 5572 const channels = this.readChannelData([chunk]); 5573 const { float32Array, meanValues } = this.formatAudioData(channels); 5574 const rawAudioData = this.floatTo16BitPCM(float32Array); 5575 const monoAudioData = this.floatTo16BitPCM(meanValues); 5576 this.port.postMessage({ 5577 event: 'chunk', 5578 data: { 5579 mono: monoAudioData, 5580 raw: rawAudioData, 5581 }, 5582 }); 5583 } 5584 5585 process(inputList, outputList, parameters) { 5586 // Copy input to output (e.g. speakers) 5587 // Note that this creates choppy sounds with Mac products 5588 const sourceLimit = Math.min(inputList.length, outputList.length); 5589 for (let inputNum = 0; inputNum < sourceLimit; inputNum++) { 5590 const input = inputList[inputNum]; 5591 const output = outputList[inputNum]; 5592 const channelCount = Math.min(input.length, output.length); 5593 for (let channelNum = 0; channelNum < channelCount; channelNum++) { 5594 input[channelNum].forEach((sample, i) => { 5595 output[channelNum][i] = sample; 5596 }); 5597 } 5598 } 5599 const inputs = inputList[0]; 5600 // There's latency at the beginning of a stream before recording starts 5601 // Make sure we actually receive audio data before we start storing chunks 5602 let sliceIndex = 0; 5603 if (!this.foundAudio) { 5604 for (const channel of inputs) { 5605 sliceIndex = 0; // reset for each channel 5606 if (this.foundAudio) { 5607 break; 5608 } 5609 if (channel) { 5610 for (const value of channel) { 5611 if (value !== 0) { 5612 // find only one non-zero entry in any channel 5613 this.foundAudio = true; 5614 break; 5615 } else { 5616 sliceIndex++; 5617 } 5618 } 5619 } 5620 } 5621 } 5622 if (inputs && inputs[0] && this.foundAudio && this.recording) { 5623 // We need to copy the TypedArray, because the \`process\` 5624 // internals will reuse the same buffer to hold each input 5625 const chunk = inputs.map((input) => input.slice(sliceIndex)); 5626 this.chunks.push(chunk); 5627 this.sendChunk(chunk); 5628 } 5629 return true; 5630 } 5631} 5632 5633registerProcessor('audio_processor', AudioProcessor); 5634`],{type:"application/javascript"}),A6=URL.createObjectURL(A5),A8=[4186.01,4434.92,4698.63,4978.03,5274.04,5587.65,5919.91,6271.93,6644.88,7040,7458.62,7902.13],A9=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"],A7=[],Me=[];for(let e=1;e<=8;e++)for(let t=0;t<A8.length;t++){let i=A8[t];A7.push(i/Math.pow(2,8-e)),Me.push(A9[t]+e)}var Mt=A7.filter((e,t)=>A7[t]>32&&A7[t]<2e3),Mi=Me.filter((e,t)=>A7[t]>32&&A7[t]<2e3),Mr=class{static getFrequencies(e,t,i,r="frequency",s=-100,a=-30){i||(i=new Float32Array(e.frequencyBinCount),e.getFloatFrequencyData(i));let o=1/i.length*(t/2),l,h,c;if("music"===r||"voice"===r){let e="voice"===r?Mt:A7,t=Array(e.length).fill(s);for(let r=0;r<i.length;r++){let s=r*o,a=i[r];for(let i=e.length-1;i>=0;i--)if(s>e[i]){t[i]=Math.max(t[i],a);break}}l=t,h="voice"===r?Mt:A7,c="voice"===r?Mi:Me}else c=(h=(l=Array.from(i)).map((e,t)=>o*t)).map(e=>`${e.toFixed(2)} Hz`);return{values:new Float32Array(l.map(e=>Math.max(0,Math.min((e-s)/(a-s),1)))),frequencies:h,labels:c}}constructor(e,t=null){if(this.fftResults=[],t){let{length:i,sampleRate:r}=t,s=new OfflineAudioContext({length:i,sampleRate:r}),a=s.createBufferSource();a.buffer=t;let o=s.createAnalyser();o.fftSize=8192,o.smoothingTimeConstant=.1,a.connect(o);let l=1/60,h=i/r,c=e=>{let t=l*e;t<h&&s.suspend(t).then(()=>{let t=new Float32Array(o.frequencyBinCount);o.getFloatFrequencyData(t),this.fftResults.push(t),c(e+1)}),1===e?s.startRendering():s.resume()};a.start(0),c(1),this.audio=e,this.context=s,this.analyser=o,this.sampleRate=r,this.audioBuffer=t}else{let t=new AudioContext,i=t.createMediaElementSource(e),r=t.createAnalyser();r.fftSize=8192,r.smoothingTimeConstant=.1,i.connect(r),r.connect(t.destination),this.audio=e,this.context=t,this.analyser=r,this.sampleRate=this.context.sampleRate,this.audioBuffer=null}}
5634getFrequencies(e="frequency",t=-100,i=-30){let r=null;if(this.audioBuffer&&this.fftResults.length){let e=Math.min(this.audio.currentTime/this.audio.duration*this.fftResults.length|0,this.fftResults.length-1);r=this.fftResults[e]}return Mr.getFrequencies(this.analyser,this.sampleRate,r,e,t,i)}async resumeIfSuspended(){return"suspended"===this.context.state&&await this.context.resume(),!0}},Ms=class{static floatTo16BitPCM(e){let t=new ArrayBuffer(2*e.length),i=new DataView(t),r=0;for(let t=0;t<e.length;t++,r+=2){let s=Math.max(-1,Math.min(1,e[t]));i.setInt16(r,s<0?32768*s:32767*s,!0)}return t}static mergeBuffers(e,t){let i=new Uint8Array(e.byteLength+t.byteLength);return i.set(new Uint8Array(e),0),i.set(new Uint8Array(t),e.byteLength),i.buffer}_packData(e,t){return[new Uint8Array([t,t>>8]),new Uint8Array([t,t>>8,t>>16,t>>24])][e]}pack(e,t){if(t?.bitsPerSample){if(t?.channels){if(!t?.data)throw Error('Missing "data"')}else throw Error('Missing "channels"')}else throw Error('Missing "bitsPerSample"');let{bitsPerSample:i,channels:r,data:s}=t,a=new Blob(["RIFF",this._packData(1,52),"WAVE","fmt ",this._packData(1,16),this._packData(0,1),this._packData(0,r.length),this._packData(1,e),this._packData(1,e*r.length*i/8),this._packData(0,r.length*i/8),this._packData(0,i),"data",this._packData(1,r[0].length*r.length*i/8),s],{type:"audio/mpeg"}),o=URL.createObjectURL(a);return{blob:a,url:o,channelCount:r.length,sampleRate:e,duration:s.byteLength/(r.length*e*2)}}},Ma=class{constructor({sampleRate:e=44100,outputToSpeakers:t=!1,debug:i=!1}={}){this.scriptSrc=A6,this.sampleRate=e,this.outputToSpeakers=t,this.debug=!!i,this._deviceChangeCallback=null,this._devices=[],this.stream=null,this.processor=null,this.source=null,this.node=null,this.recording=!1,this._lastEventId=0,this.eventReceipts={},this.eventTimeout=5e3,this._chunkProcessor=()=>{},this._chunkProcessorSize=void 0,this._chunkProcessorBuffer={raw:new ArrayBuffer(0),mono:new ArrayBuffer(0)}}static async decode(e,t=44100,i=-1){let r=new AudioContext({sampleRate:t}),s,a;if(e instanceof Blob){if(-1!==i)throw Error('Can not specify "fromSampleRate" when reading from Blob');a=e,s=await a.arrayBuffer()}else if(e instanceof ArrayBuffer){if(-1!==i)throw Error('Can not specify "fromSampleRate" when reading from ArrayBuffer');a=new Blob([s=e],{type:"audio/wav"})}else{let t,r;if(e instanceof Int16Array){r=e,t=new Float32Array(e.length);for(let i=0;i<e.length;i++)t[i]=e[i]/32768}else if(e instanceof Float32Array)t=e;else if(e instanceof Array)t=new Float32Array(e);else throw Error('"audioData" must be one of: Blob, Float32Arrray, Int16Array, ArrayBuffer, Array<number>');if(-1===i)throw Error('Must specify "fromSampleRate" when reading from Float32Array, In16Array or Array');if(i<3e3)throw Error('Minimum "fromSampleRate" is 3000 (3kHz)');r||(r=Ms.floatTo16BitPCM(t));let o={bitsPerSample:16,channels:[t],data:r};a=new Ms().pack(i,o).blob,s=await a.arrayBuffer()}let o=await r.decodeAudioData(s),l=o.getChannelData(0),h=URL.createObjectURL(a);return{blob:a,url:h,values:l,audioBuffer:o}}log(){return this.debug&&this.log(...arguments),!0}getSampleRate(){return this.sampleRate}getStatus(){return this.processor?this.recording?"recording":"paused":"ended"}async _event(e,t={},i=null){if(!(i=i||this.processor))throw Error("Can not send events without recording first");let r={event:e,id:this._lastEventId++,data:t};i.port.postMessage(r);let s=new Date().valueOf();for(;!this.eventReceipts[r.id];){if(new Date().valueOf()-s>this.eventTimeout)throw Error(`Timeout waiting for "${e}" event`);await new Promise(e=>setTimeout(()=>e(!0),1))}let a=this.eventReceipts[r.id];return delete this.eventReceipts[r.id],a}listenForDeviceChange(e){if(null===e&&this._deviceChangeCallback)navigator.mediaDevices.removeEventListener("devicechange",this._deviceChangeCallback),this._deviceChangeCallback=null;else if(null!==e){let t=0,i=[],r=e=>e.map(e=>e.deviceId).sort().join(","),s=async()=>{let s=++t,a=await this.listDevices();s===t&&r(i)!==r(a)&&(i=a,e(a.slice()))};navigator.mediaDevices.addEventListener("devicechange",s),s(),this._deviceChangeCallback=s}return!0}async requestPermission(){let e=await navigator.permissions.query({name:"microphone"});if("denied"===e.state)window.alert("You must grant microphone access to use this feature.");else if("prompt"===e.state)try{(await navigator.mediaDevices.getUserMedia({audio:!0}
5634)).getTracks().forEach(e=>e.stop())}catch{window.alert("You must grant microphone access to use this feature.")}return!0}async listDevices(){if(!navigator.mediaDevices||!("enumerateDevices"in navigator.mediaDevices))throw Error("Could not request user devices");await this.requestPermission();let e=(await navigator.mediaDevices.enumerateDevices()).filter(e=>"audioinput"===e.kind),t=e.findIndex(e=>"default"===e.deviceId),i=[];if(-1!==t){let r=e.splice(t,1)[0],s=e.findIndex(e=>e.groupId===r.groupId);-1!==s&&(r=e.splice(s,1)[0]),r.default=!0,i.push(r)}return i.concat(e)}async begin(e){if(this.processor)throw Error("Already connected: please call .end() to start a new session");if(!navigator.mediaDevices||!("getUserMedia"in navigator.mediaDevices))throw Error("Could not request user media");try{let t={audio:!0};e&&(t.audio={deviceId:{exact:e}}),this.stream=await navigator.mediaDevices.getUserMedia(t)}catch{throw Error("Could not start media stream")}let t=new AudioContext({sampleRate:this.sampleRate}),i=t.createMediaStreamSource(this.stream);try{await t.audioWorklet.addModule(this.scriptSrc)}catch(e){throw console.error(e),Error(`Could not add audioWorklet module: ${this.scriptSrc}`)}let r=new AudioWorkletNode(t,"audio_processor");r.port.onmessage=e=>{let{event:t,id:i,data:r}=e.data;if("receipt"===t)this.eventReceipts[i]=r;else if("chunk"===t){if(this._chunkProcessorSize){let e=this._chunkProcessorBuffer;this._chunkProcessorBuffer={raw:Ms.mergeBuffers(e.raw,r.raw),mono:Ms.mergeBuffers(e.mono,r.mono)},this._chunkProcessorBuffer.mono.byteLength>=this._chunkProcessorSize&&(this._chunkProcessor(this._chunkProcessorBuffer),this._chunkProcessorBuffer={raw:new ArrayBuffer(0),mono:new ArrayBuffer(0)})}else this._chunkProcessor(r)}};let s=i.connect(r),a=t.createAnalyser();return a.fftSize=8192,a.smoothingTimeConstant=.1,s.connect(a),this.outputToSpeakers&&(console.warn(`Warning: Output to speakers may affect sound quality, 5635especially due to system audio feedback preventative measures. 5636use only for debugging`),a.connect(t.destination)),this.source=i,this.node=s,this.analyser=a,this.processor=r,!0}getFrequencies(e="frequency",t=-100,i=-30){if(!this.processor)throw Error("Session ended: please call .begin() first");return Mr.getFrequencies(this.analyser,this.sampleRate,null,e,t,i)}async pause(){if(this.processor){if(!this.recording)throw Error("Already paused: please call .record() first")}else throw Error("Session ended: please call .begin() first");return this._chunkProcessorBuffer.raw.byteLength&&this._chunkProcessor(this._chunkProcessorBuffer),this.log("Pausing ..."),await this._event("stop"),this.recording=!1,!0}async record(e=()=>{},t=8192){if(this.processor){if(this.recording)throw Error("Already recording: please call .pause() first");if("function"!=typeof e)throw Error("chunkProcessor must be a function")}else throw Error("Session ended: please call .begin() first");return this._chunkProcessor=e,this._chunkProcessorSize=t,this._chunkProcessorBuffer={raw:new ArrayBuffer(0),mono:new ArrayBuffer(0)},this.log("Recording ..."),await this._event("start"),this.recording=!0,!0}async clear(){if(!this.processor)throw Error("Session ended: please call .begin() first");return await this._event("clear"),!0}async read(){if(!this.processor)throw Error("Session ended: please call .begin() first");return this.log("Reading ..."),await this._event("read")}async save(e=!1){if(!this.processor)throw Error("Session ended: please call .begin() first");if(!e&&this.recording)throw Error("Currently recording: please call .pause() first, or call .save(true) to force");this.log("Exporting ...");let t=await this._event("export");return new Ms().pack(this.sampleRate,t.audio)}async end(){if(!this.processor)throw Error("Session ended: please call .begin() first");let e=this.processor;this.log("Stopping ..."),await this._event("stop"),this.recording=!1,this.stream.getTracks().forEach(e=>e.stop()),this.log("Exporting ...");let t=await this._event("export",{},e);return this.processor.disconnect(),this.source.disconnect(),this.node.disconnect(),this.analyser.disconnect(),this.stream=null,this.processor=null,this.source=null,this.node=null,new Ms().pack(this.sampleRate,t.audio)}
5636async quit(){return this.listenForDeviceChange(null),this.processor&&await this.end(),!0}},Mn=new Blob([` 5637class StreamProcessor extends AudioWorkletProcessor { 5638 constructor() { 5639 super(); 5640 this.hasStarted = false; 5641 this.hasInterrupted = false; 5642 this.outputBuffers = []; 5643 this.bufferLength = 128; 5644 this.write = { buffer: new Float32Array(this.bufferLength), trackId: null }; 5645 this.writeOffset = 0; 5646 this.trackSampleOffsets = {}; 5647 this.port.onmessage = (event) => { 5648 if (event.data) { 5649 const payload = event.data; 5650 if (payload.event === 'write') { 5651 const int16Array = payload.buffer; 5652 const float32Array = new Float32Array(int16Array.length); 5653 for (let i = 0; i < int16Array.length; i++) { 5654 float32Array[i] = int16Array[i] / 0x8000; // Convert Int16 to Float32 5655 } 5656 this.writeData(float32Array, payload.trackId); 5657 } else if ( 5658 payload.event === 'offset' || 5659 payload.event === 'interrupt' 5660 ) { 5661 const requestId = payload.requestId; 5662 const trackId = this.write.trackId; 5663 const offset = this.trackSampleOffsets[trackId] || 0; 5664 this.port.postMessage({ 5665 event: 'offset', 5666 requestId, 5667 trackId, 5668 offset, 5669 }); 5670 if (payload.event === 'interrupt') { 5671 this.hasInterrupted = true; 5672 } 5673 } else { 5674 throw new Error(\`Unhandled event "\${payload.event}"\`); 5675 } 5676 } 5677 }; 5678 } 5679 5680 writeData(float32Array, trackId = null) { 5681 let { buffer } = this.write; 5682 let offset = this.writeOffset; 5683 for (let i = 0; i < float32Array.length; i++) { 5684 buffer[offset++] = float32Array[i]; 5685 if (offset >= buffer.length) { 5686 this.outputBuffers.push(this.write); 5687 this.write = { buffer: new Float32Array(this.bufferLength), trackId }; 5688 buffer = this.write.buffer; 5689 offset = 0; 5690 } 5691 } 5692 this.writeOffset = offset; 5693 return true; 5694 } 5695 5696 process(inputs, outputs, parameters) { 5697 const output = outputs[0]; 5698 const outputChannelData = output[0]; 5699 const outputBuffers = this.outputBuffers; 5700 if (this.hasInterrupted) { 5701 this.port.postMessage({ event: 'stop' }); 5702 return false; 5703 } else if (outputBuffers.length) { 5704 this.hasStarted = true; 5705 const { buffer, trackId } = outputBuffers.shift(); 5706 for (let i = 0; i < outputChannelData.length; i++) { 5707 outputChannelData[i] = buffer[i] || 0; 5708 } 5709 if (trackId) { 5710 this.trackSampleOffsets[trackId] = 5711 this.trackSampleOffsets[trackId] || 0; 5712 this.trackSampleOffsets[trackId] += buffer.length; 5713 } 5714 return true; 5715 } else if (this.hasStarted) { 5716 this.port.postMessage({ event: 'stop' }); 5717 return false; 5718 } else { 5719 return true; 5720 } 5721 } 5722} 5723 5724registerProcessor('stream_processor', StreamProcessor); 5725`],{type:"application/javascript"}),Mo=URL.createObjectURL(Mn),Ml=class{constructor({sampleRate:e=44100}={}){this.scriptSrc=Mo,this.sampleRate=e,this.context=null,this.stream=null,this.analyser=null,this.trackSampleOffsets={},this.interruptedTrackIds={}}async connect(){this.context=new AudioContext({sampleRate:this.sampleRate}),"suspended"===this.context.state&&await this.context.resume();try{await this.context.audioWorklet.addModule(this.scriptSrc)}catch(e){throw console.error(e),Error(`Could not add audioWorklet module: ${this.scriptSrc}`)}let e=this.context.createAnalyser();return e.fftSize=8192,e.smoothingTimeConstant=.1,this.analyser=e,!0}getFrequencies(e="frequency",t=-100,i=-30){if(!this.analyser)throw Error("Not connected, please call .connect() first");return Mr.getFrequencies(this.analyser,this.sampleRate,null,e,t,i)}_start(){let e=new AudioWorkletNode(this.context,"stream_processor");return e.connect(this.context.destination),e.port.onmessage=t=>{let{event:i}=t.data;if("stop"===i)e.disconnect(),this.stream=null;else if("offset"===i){let{requestId:e,trackId:i,offset:r}=t.data,s=r/this.sampleRate;this.trackSampleOffsets[e]={trackId:i,offset:r,currentTime:s}}},this.analyser.disconnect(),e.connect(this.analyser),this.stream=e,!0}add16BitPCM(e,t="default"){let i;if("string"!=typeof t)throw Error("trackId must be a string");if(!this.interruptedTrackIds[t]){if(this.stream||this._start(),e instanceof Int16Array)i=e;else if(e instanceof ArrayBuffer)i=new Int16Array(e);else throw Error("argument must be Int16Array or ArrayBuffer");return this.stream.port.postMessage({event:"write",buffer:i,trackId:t}),i}}async getTrackSampleOffset(e=!1){let t;if(!this.stream)return null;let i=crypto.randomUUID();for(this.stream.port.postMessage({event:e?"interrupt":"offset",requestId:i});!t;)t=this.trackSampleOffsets[i],await new Promise(e=>setTimeout(()=>e(),1));let{trackId:r}=t;return e&&r&&(this.interruptedTrackIds[r]=!0),t}async interrupt(){return this.getTrackSampleOffset(!0)}},Mh=()=>"https://relayserver.spline.design/",Mc=class{constructor(e,t,i){this.data=e,this.id=t,this.shared=i,this.items=[],this.isConnected=!1,this.rafId=0,this.emitter=wR(),this.voice=0,this.frequencies=new Float32Array([0]),this.onRealTimeEvent=({time:e,source:t,event:i})=>
5725{"server"===t&&"spline.ready"===i.type?this.onSessionCreated(i):"server"===t&&"session.created"===i.type&&(this.client.createResponse(),this.client.on("realtime.event",this.onRealTimeEvent))},this.onSessionCreated=async e=>{let t=Object.values(this.client.tools).map(e=>({type:"function",...e.definition}));this.client.realtime.send("spline.tools",{tools:t}),this.client.realtime.send("spline.connect",{}),await this.wavRecorder.record(e=>this.client.isConnected()&&this.client.appendInputAudio(e.mono))},this.animate=()=>{if(this.rafId=requestAnimationFrame(this.animate),this.isConnected){let e=this.wavStreamPlayer.analyser?this.wavStreamPlayer.getFrequencies("voice"):{values:new Float32Array([0])},t=e.values.reduce((e,t)=>e+t,0)/e.values.length;this.voice=t,this.frequencies=e.values,this.emitter.emit("voice",{value:t,frequencies:e.values})}},this.client=new A4({url:Mh()+"?uuidfile="+e.integration.hash}),this.wavRecorder=new Ma({sampleRate:24e3}),this.wavStreamPlayer=new Ml({sampleRate:24e3})}update(e){this.data=e,this.client=new A4({url:Mh()+"?uuidfile="+e.integration.hash})}setColorByName(e,t){let i=this.shared.getColorByName(e);if(i){let{id:e}=i,{r:r,g:s,b:a}=wT.hexStringToRgb(t)??{r:0,g:0,b:0};this.shared.updateColor(e,{r:r/255,g:s/255,b:a/255})}}connect(){if(this.isConnected)return;this.isConnected=!0,this.client.updateSession({turn_detection:{type:"server_vad"}}),this.client.addTool({name:"set_personality_color",description:"returns a color based on the voice personality of the ai assistant. This should be called by the voice assistant each time it is asks to speak differently. If a color cannot be associated to the personality, the color should be a neutral color.",parameters:{type:"object",properties:{color:{type:"string",description:"css hex color string, reflecting the personality"},personality:{type:"string",description:"the personality of the voice assistant"}},required:["color","personality"]}},({color:e})=>{this.setColorByName("Voice Assistant Color",e)});let e=this.shared.getVariablesNames().join(", ");this.client.addTool({name:"set_variable",description:"Sets a Spline variable value when asked by the user.",parameters:{type:"object",properties:{name:{type:"string",description:`The name of the variable that needs to be set. Here's a list of available variables: ${e}. It the variable does not exist, don't call the function and warn the user about it.`},value:{type:"string",description:"The new value for this variable, should always be a string even for number and boolean variables, assume that the value will be cast to the proper type afterwards."}},required:["name","value","type"]}},({name:e,value:t})=>{let i=this.shared.getVariableByName(e);if(i){let e=this.shared.getVariable(i.id),r;r="number"==typeof e?parseFloat(t):"boolean"==typeof e?"true"===t.toLowerCase():{textValue:t},this.shared.updateVariable(i.id,r)}});let t=this.shared.getColorNames().join(", ");this.client.addTool({name:"set_color",description:"Sets a Spline color asset value when asked by the user.",parameters:{type:"object",properties:{name:{type:"string",description:`The name of the color asset that needs to be set. Here's a list of available color assets: ${t}. It the color asset does not exist, don't call the function and warn the user about it.`},value:{type:"string",description:"css hex color string"}},required:["name","value"]}},({name:e,value:t})=>{this.setColorByName(e,t)});let i=this.shared.scene,r=[];i.traverseEntity(e=>{e.data.events.forEach(e=>{if("AIAssistantTrigger"===e.data.type){let{description:t}=e.data;r.push(t)}})}),this.client.addTool({name:"trigger_event",description:"Trigger an event by name, here are the available events, please match what the user is asking for to one of these if it applies, otherwise don't call the function and warn the user.",parameters:{type:"object",properties:{description:{type:"string",description:`The name of the event that needs to be triggered. Here's a list of available events: ${JSON.stringify(r)}.`},direction:{type:"string",description:"default is forward, but can be forward or backward. Always set to forward unless the user ask to reverse or cancel the event, then set to backward."}},required:["description","direction"]}},({description:e,direction:t})=>{this.emitter.emit("trigger_event",{description:e,direction:t})}),this.client.on("error",e=>console.error(e)),this.client.on("conversation.interrupted",async()=>{let e=await this.wavStreamPlayer.interrupt();if(e?.trackId){let{trackId:t,offset:i}=e;await this.client.cancelResponse(t,i)}}),this.client.on("conversation.updated",async({item:e,delta:t})=>{let i=this.client.conversation.getItems();if(t?.audio&&this.wavStreamPlayer.add16BitPCM(t.audio,e.id),"completed"===e.status&&e.formatted.audio?.length){let t=await Ma.decode(e.formatted.audio,24e3,24e3);e.formatted.file=t}this.items=i}),this.animate()}disconnect(){cancelAnimationFrame(this.rafId),this.voice=0,this.isConnected=!1}async start(){try{await this.wavRecorder.end()}catch{}await this.wavRecorder.begin(),this.client.on("realtime.event",this.onRealTimeEvent),await this.wavStreamPlayer.connect(),await this.client.connect()}async stop(){try{this.client.off("realtime.event",this.onRealTimeEvent)}catch(e){console.error(e)}this.client.disconnect(),await this.wavRecorder.end(),await this.wavStreamPlayer.interrupt()}computeAnalysisForListenerEvent(e){if("range"===e.analysis){let t=this.frequencies.slice(...e.analysisRange);return t.reduce((e,t)=>
5725e+t,0)/t.length}return"single"===e.analysis?this.frequencies[e.analysisSingle]:this.voice}on(e,t){this.emitter.on(e,t)}off(e,t){this.emitter.off(e,t)}};function Md(e){return"variable_"+e}var Mu=class extends _1{constructor(e){super(),this.shared=e}create(e){return new _2(e,this.shared)}},Mp=class{constructor(e,t={},i=!0,r=!1){if(this.data=e,this.needsJitter=i,this.enableLocalStorageForPersistentVariables=r,this.geometryCache=new AY(!0),this.geometryCache2=new AY(!1),this.imageHolderCache=new Mu(this),this.thisContext={scene:AQ,shared:this},this.deletedMaterial=new AI(vk.defaultTwoLayerData("phong"),this.thisContext,""),this.deletedImage=new _3(yM.emptyImage,this),this.deletedVideo=new _3(gS.defaultVideo,this),this.materials={},this.images={},this.uiBuffers={},this.videos={},this.colors={},this.audios={},this.particles={},this.fonts={},this.variables={},this.userAPIs={},this.userWebhooks={},this.mouseProperty=null,this.raycastProperty=null,this.requestRender=()=>{this._requestRender&&this._requestRender()},t.images)for(let[e,i]of Object.entries(t.images))this.addImage(e,i);if(t.videos)for(let[e,i]of Object.entries(t.videos))this.addVideo(e,i);if(t.audios)for(let[e,i]of Object.entries(t.audios))this.addAudio(e,i);if(t.particles)for(let[e,i]of Object.entries(t.particles))this.addParticle(e,i);this.reset(e)}setRequestRender(e){this._requestRender=e}getImageLoadPromises(){return Object.values(this.images).map(e=>e.loadPromise)}setEntityOpContext(e){this.entityOpContext=e}reset(e,t=!1){for(let{id:i,data:r}of(this.data=e,this.resetLib(e.lib),e.variables))this.addVariableHolder(i,r),t&&this.updateVariableHolder(i,r);for(let[t,i]of Object.entries(e.userAPIs))this.addUserAPI(t,i);for(let[t,i]of Object.entries(e.userWebhooks))this.addUserWebhook(t,i);for(let[t,i]of Object.entries(e.images))this.addImage(t,i);for(let[t,i]of Object.entries(e.videos))this.addVideo(t,i);for(let[t,i]of Object.entries(e.colors))this.addColor(t,i);for(let[t,i]of Object.entries(e.materials))this.addMaterial(t,i);for(let[t,i]of Object.entries(e.audios))this.addAudio(t,i);for(let[t,i]of Object.entries(e.particles))this.addParticle(t,i);for(let[t,i]of Object.entries(e.fonts))this.addFont(t,i)}addMaterial(e,t){if(this.materials[e]){let i=this.materials[e];i.reset(t,this.thisContext),i.dispose()}else{let i=new AI(t,this.thisContext,e);this.materials[e]=i}}deleteMaterial(e){this.materials[e]&&(this.materials[e].nodeMaterialDispose(),delete this.materials[e])}getMaterial(e){return this.materials[e]}getMaterialOrDeletedPlaceholder(e){return this.materials[e]??this.deletedMaterial}material(e){return"string"==typeof e?this.getMaterialOrDeletedPlaceholder(e):null==e?(console.error("material is undefined or null"),this.deletedMaterial):new AP(e,this.thisContext)}getMaterials(){return this.materials}addImage(e,t){return this.images[e]?(this.onColorOrImageUpdate&&this.onColorOrImageUpdate(),this.images[e].updateSrc(t.data),!0):(this.images[e]=new _3(t,this),!1)}deleteImage(e){let t=this.images[e];t&&(t.dispose(),delete this.images[e])}getDefaultImage(){return this.images.image_0}getImage(e){return this.images[e]??this.deletedImage}image(e){return"string"==typeof e?this.getImage(e):this.imageHolderCache.load(e)}addUIBuffer(e,t){return this.uiBuffers[e]?(this.onColorOrImageUpdate&&this.onColorOrImageUpdate(),this.uiBuffers[e].updateSrc(t),!0):(this.uiBuffers[e]=new _3(t,this),!1)}uiBuffer(e){return this.uiBuffers[e]}addVideo(e,t){return this.videos[e]?(this.videos[e].updateSrc(t.data),!0):(this.videos[e]=new _3(t,this),!1)}deleteVideo(e){let t=this.videos[e];t&&(t.dispose(),delete this.videos[e])}getVideo(e){return this.videos[e]??this.deletedVideo}video(e){return"string"==typeof e?this.getVideo(e):this.imageHolderCache.load(e)}addColor(e,t){return this.colors[e]?(this.onColorOrImageUpdate&&this.onColorOrImageUpdate(),"a"in t?this.colors[e].setRGBA(t.r,t.g,t.b,t.a):this.colors[e].setRGBA(t.r,t.g,t.b,1),!0):("a"in t?this.colors[e]=new Am(t.r,t.g,t.b,t.a):this.colors[e]=new Am(t.r,t.g,t.b,1),!1)}updateColor(e,t){if(this.colors[e]){this.onColorOrImageUpdate&&this.onColorOrImageUpdate();let i=this.colors[e];return this.colors[e].r=t.r??i.r,this.colors[e].g=t.g??i.g,this.colors[e].b=t.b??i.b,this.colors[e].a=t.a??i.a,!0}return!1}deleteColor(e){this.colors[e]&&delete this.colors[e]}getColor(e){return this.colors[e]}getColorNames(){return Object.values(this.data.colors).map(e=>e.name)}
vendor: 5,047 bytes, line 5725
5725getColorByName(e){for(let t in this.data.colors)if(this.data.colors[t].name===e)return{color:this.colors[t],id:t}}color(e){let t;if("string"!=typeof e)return"a"in e?new SN(e.r,e.g,e.b,e.a):new SN(e.r,e.g,e.b,1);{let i=this.getColor(e);i?t=i:(console.warn("Tried to create color layer params with a color key that does not exist in the assets manager"),t=new SN(0,0,0,0))}return t}addAudio(e,t){this.audios[e]=t}getAudio(e){let t=this.audios[e];if(t instanceof AN)return t;{let i=new AN({src:t.data});return this.audios[e]=i,i}}addParticle(e,t){this.particles[e]=t}getParticle(e){return this.particles[e]}deleteParticle(e){this.particles[e]&&delete this.particles[e]}deleteAudio(e){let t=this.audios[e];t&&(t instanceof AN&&t.dispose(),delete this.audios[e])}addFont(e,t){this.fonts[e]=new Aq(t),this.fonts[e].loadingPromise.then(()=>this.requestRender())}getFont(e){return this.fonts[e]}deleteFont(e){this.fonts[e]&&delete this.fonts[e]}dispose(){Object.keys(this.materials).forEach(e=>this.deleteMaterial(e)),this._requestRender=void 0,Object.values(this.audios).forEach(e=>{e instanceof AN&&e.dispose()}),this.audios={},this.particles={},this.geometryCache.dispose(),this.geometryCache2.dispose()}addVariableHolder(e,t){if(void 0===this.variables[e]){let i=t.value;if(this.enableLocalStorageForPersistentVariables&&t.persistent){let r=localStorage.getItem(Md(e));i=null!==r?JSON.parse(r):t.value}return this.variables[e]={value:i,locations:[],persistent:t.persistent},"dynamicVariableType"in t&&(this.variables[e].dynamicVariablePlayState="Playing",this.variables[e].dynamicVariableToggleIsForward=void 0),!0}return this.variables[e].value=t.value,!1}resetDynamicVariablePlayState(){for(let e in this.variables)void 0!==this.variables[e].dynamicVariablePlayState&&(this.variables[e].dynamicVariablePlayState="Playing",this.variables[e].dynamicVariableToggleIsForward=void 0)}updateVariableHolder(e,t){this.updateVariable(e,t.value)}updateVariable(e,t){if(void 0===this.variables[e])return!1;this.variables[e].value=t,this.enableLocalStorageForPersistentVariables&&this.variables[e].persistent&&localStorage.setItem(Md(e),JSON.stringify(t));let i=t;for(;"string"==typeof i;)i=this.variables[i].value;let r=this.entityOpContext.scene;for(let t=this.variables[e].locations.length-1;t>=0;t--){let s=this.variables[e].locations[t];if("material"===s[0]){let e=s[1],t=i,a={scene:r,shared:this},o=s.slice(2);r.traverseMaterial(i=>{let r=i.root??i;r.uuid===e&&r.onVariableUpdate(o,t,a)});let l=this.materials[e];l&&l.onVariableUpdate(o,t,a)}else{let a=r.find(s[0]);if(void 0===a){this.variables[e].locations.splice(t,1);continue}if("geometry"!==s[1]&&"particles"!==s[1]){for(let e=1;e<s.length-1;e++)a=a[s[e]];"rotation"===s[1]?a[s[s.length-1]]=i*tY.DEG2RAD:a[s[s.length-1]]=i}if("ParticleEmitter"===(a=r.find(s[0])).type&&a.updateVariableState(i,s),wQ.is(a)){if("position"===s[1]||"rotation"===s[1]||"scale"===s[1])a.onVariableUpdate();else if("geometry"===s[1]){let e=a;a.component&&(e=a.component);let t=e.dataPatched;e.chooseGeoemtryCache(this).forceDelete(t.geometry),e.createGeometryDelayed(this.entityOpContext),e.onVariableUpdate(!0),e.invalidateDownstreamBooleanData(),e.instances.forEach(e=>{let t=e.dataPatched;e.chooseGeoemtryCache(this).forceDelete(t.geometry),e.createGeometryDelayed(this.entityOpContext),e.onVariableUpdate(!0),e.invalidateDownstreamBooleanData()})}else"morphTargetInfluences"===s[1]&&a.updateMorphInfluences(s[2],i)}}}return this.requestRender(),!0}deleteVariable(e){this.variables[e]&&delete this.variables[e]}getVariable(e,t){if(Array.isArray(e)){if("mouse"===e[0])return this.mouseProperty?.[e[1]]??0;if("raycast"===e[0])return this.raycastProperty?.[e[1]]??0;let t=this.entityOpContext.scene.find(e[0]);if("width"===e[1]||"height"===e[1]||"depth"===e[1])return t.geometry.userData.parameters[e[1]];for(let i=1;i<e.length;i++)t=t[e[i]];return"rotation"===e[1]&&(t*=tY.RAD2DEG),t}for(let e in this.variables){if(void 0===t)break;let i=this.variables[e],r=i.locations?.findIndex(e=>p1.equal(e,t));void 0!==r&&-1!==r&&i.locations.splice(r,1)}if("string"!=typeof e)return e;{let i=e,r=e;do{if(r=i,void 0===this.variables[i])break;let e=this.variables[i].value;t&&void 0!==this.variables[r]&&this.variables[r].locations.push(t),i=e}while("string"==typeof i);return i}}getVariables(){return this.variables}getVariablesNames(){return this.data.variables.map(e=>e.data.name)}getVariableByName(e){for(let t of this.data.variables)if(t.data.name===e)return{variable:t.data,id:t.id}}getDynamicVariablePlayState(e){return this.variables[e]?.dynamicVariablePlayState}setDynamicVariablePlayState(e,t){void 0!==this.variables[e]&&(this.variables[e].dynamicVariablePlayState=t)}getDynamicVariableToggleIsForward(e){return this.variables[e]?.dynamicVariableToggleIsForward}setDynamicVariableToggleIsForward(e,t){void 0!==this.variables[e]&&(this.variables[e].dynamicVariableToggleIsForward=t)}resetLib(e){for(let[t,i]of Object.entries(e.images))this.addImage(t,i.asset);for(let[t,i]of Object.entries(e.audios))this.addAudio(t,i.asset);
5725for(let[t,i]of Object.entries(e.particles))this.addParticle(t,i.asset);for(let[t,i]of Object.entries(e.colors))this.addColor(t,i.asset);for(let[t,i]of Object.entries(e.fonts))this.addFont(t,i.asset);for(let[t,i]of Object.entries(e.materials))this.addMaterial(t,i.asset);for(let[t,i]of Object.entries(e.videos))this.addVideo(t,i.asset);for(let[t,i]of Object.entries(e.variables))this.addVariableHolder(t,i.asset)}updateLibByOp(e,t){"images"===e.path[0]?1===e.path.length&&1===e.type?this.addImage(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteImage(e.id):"videos"===e.path[0]?1===e.path.length&&1===e.type?this.addVideo(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteVideo(e.id):"audios"===e.path[0]?1===e.path.length&&1===e.type?this.addAudio(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteAudio(e.id):"particles"===e.path[0]?1===e.path.length&&1===e.type?this.addParticle(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteParticle(e.id):"colors"===e.path[0]?1===e.path.length&&1===e.type?this.addColor(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteColor(e.id):"materials"===e.path[0]?1===e.path.length&&1===e.type?this.addMaterial(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteMaterial(e.id):"fonts"===e.path[0]?1===e.path.length&&1===e.type?this.addFont(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteFont(e.id):"variables"===e.path[0]?1===e.path.length&&1===e.type?this.addVariableHolder(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteVariable(e.id):"components"===e.path[0]&&t.updateByLibOp(e,this)}updateByOp(e,t,i){if(this.data=t,"images"===e.path[0])2===e.path.length&&0===e.type?e.props.data&&this.getImage(e.path[1]).updateSrc(e.props.data):1===e.path.length&&1===e.type?this.addImage(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteImage(e.id);else if("videos"===e.path[0])2===e.path.length&&0===e.type?e.props.data&&this.getVideo(e.path[1]).updateSrc(e.props.data):1===e.path.length&&1===e.type?this.addVideo(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteVideo(e.id);else if("audios"===e.path[0])2===e.path.length&&0===e.type?e.props.data&&this.addAudio(e.path[1],t.audios[e.path[1]]):1===e.path.length&&1===e.type?this.addAudio(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteAudio(e.id);else if("particles"===e.path[0])2===e.path.length&&0===e.type?e.props.data&&this.addParticle(e.path[1],t.particles[e.path[1]]):1===e.path.length&&1===e.type?this.addParticle(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteParticle(e.id);else if("colors"===e.path[0])2===e.path.length&&0===e.type?this.updateColor(e.path[1],e.props):1===e.path.length&&1===e.type?this.addColor(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteColor(e.id);else if("materials"===e.path[0])1===e.path.length&&1===e.type?this.addMaterial(e.id,e.data):1===e.path.length&&2===e.type?this.deleteMaterial(e.id):e.path.length>1&&this.getMaterial(e.path[1]).updateByOp(p$.drop(e,2),t.materials[e.path[1]],{shared:this,scene:i});else if("fonts"===e.path[0])2===e.path.length&&0===e.type?this.updateFont(e.path[1],e,i):1===e.path.length&&1===e.type?this.addFont(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteFont(e.id);else if("variables"===e.path[0])2===e.path.length&&0===e.type?"value"in e.props?this.updateVariable(e.path[1],e.props.value):"persistent"in e.props&&(this.variables[e.path[1]].persistent=e.props.persistent):1===e.path.length&&4===e.type?this.addVariableHolder(e.id,e.data):1===e.path.length&&5===e.type&&this.deleteVariable(e.id);else if("userAPIs"===e.path[0]){if(1===e.path.length&&1===e.type)this.addUserAPI(e.id,e.data);else if(1===e.path.length&&2===e.type)this.deleteUserAPI(e.id);else if("string"==typeof e.path[1]){let i=t.userAPIs[e.path[1]];if(i){let t=0===e.type&&void 0===e.props.debounce,r=this.getUserAPI(e.path[1]);r instanceof Mc?r.update(i):r?.update(i,this,t)}}}else if("userWebhooks"===e.path[0]){if(1===e.path.length&&1===e.type)this.addUserWebhook(e.id,e.data);else if(1===e.path.length&&2===e.type)this.deleteUserWebhook(e.id);else if("string"==typeof e.path[1]){let i=t.userWebhooks[e.path[1]];i&&this.getUserWebhook(e.path[1])?.update(i)}}else"lib"===e.path[0]&&this.updateLibByOp(p$.drop(e,1),i)}updateFont(e,t,i){if(t.props.url){let r=this.getFont(e),s={...this.data.fonts[e],url:t.props.url};r.update(s),r.loadingPromise.then(()=>this.requestRender()),i.updateFont(e,this)}}addUserAPI(e,t){return this.userAPIs[e]?(this.userAPIs[e].update(t,this),!0):this.openAIRealtime?.id===e?(this.openAIRealtime.update(t),!0):(t.integration?.type==="VoiceAssistant"?this.openAIRealtime=new Mc(t,e,this):this.userAPIs[e]=new wL(e,t,this),!1)}getUserAPI(e){return this.openAIRealtime?.id===e?this.openAIRealtime:this.userAPIs[e]}getUserAPIs(){return this.userAPIs}deleteUserAPI(e){let t=this.userAPIs[e];t&&(t.dispose(),delete this.userAPIs[e])}addUserWebhook(e,t){return this.userWebhooks[e]?(this.userWebhooks[e].update(t),!0):(this.userWebhooks[e]=new AK(e,t),!1)}getUserWebhook(e){return this.userWebhooks[e]}getUserWebhooks(){return this.userWebhooks}deleteUserWebhook(e){let t=this.userWebhooks[e];t&&(t.dispose(),delete this.userWebhooks[e])}get scene(){return this.entityOpContext.scene}};
5725new Mp(yw.emptyData());var Mf=class extends SP{updateByPatchedOp(e,t,i){if(super.updateByPatchedOp(e,t,i),null!==function(e,t){let i=[];if(t.length!==e.length)return null;for(var r=0;r<e.length;){if("*"===t[r])i.push(e[r]);else if(e[r]!==t[r])return null;r+=1}return i}(e.path,["materials"])&&0===e.type&&Array.isArray(this.material))for(let[t,r]of Object.entries(e.props)){let e=i.shared.material(r);this.material[Number(t)]=e}else if(pX(e.path,["material"])&&this.material instanceof AC)"material"in t&&"string"!=typeof t.material&&this.material.updateByOp(p$.drop(e,1),t.material,i);else if(pX(e.path,["materials","*"])&&Array.isArray(this.material)){let r=e.path[1];if("materials"in t&&r<this.material.length){let s=t.materials[r];"string"!=typeof s&&this.material[r].updateByOp(p$.drop(e,2),s,i)}}}get needsAO(){return void 0!==this.material&&(Array.isArray(this.material)?this.material[0]:this.material).hasAO}updateState(e,t){let i;super.updateState(e,t),void 0!==e.castShadow&&(this.castShadow=e.castShadow),void 0!==e.receiveShadow&&(this.receiveShadow=e.receiveShadow);let r=this.dataPatched;if("Mesh"===this.dataPatched.type&&this.dataPatched.geometry.shapeBlendNode&&this.layers.set(9),"Mesh"===this.dataPatched.type&&"ShapeBlendGeometry"===this.dataPatched.geometry.type&&(i={resolutionLevel:this.dataPatched.geometry.resolutionLevel,useChildrenColors:this.dataPatched.geometry.useChildrenColors}),e.geometry?.type!=="NonParametricGeometry"&&"material"in e&&void 0!==e.material&&(this.disposeMaterial(),this.material=t.shared.material(e.material).getFlavor(r.flatShading,r.side,r.wireframe,i),t.scene.markNeedsUpdateRendererDirty()),(e.geometry?.type==="NonParametricGeometry"||"materials"in e)&&("materials"in e&&void 0!==e.materials?(this.disposeMaterial(),this.material=e.materials.map(e=>t.shared.material(e).getFlavor(r.flatShading,r.side,r.wireframe)),t.scene.markNeedsUpdateRendererDirty()):"material"in e&&void 0!==e.material&&(this.disposeMaterial(),this.material=[t.shared.material(e.material).getFlavor(r.flatShading,r.side,r.wireframe)],t.scene.markNeedsUpdateRendererDirty())),void 0!==e.flatShading||void 0!==e.wireframe||void 0!==e.side){if(Array.isArray(this.material))for(let e=0;e<this.material.length;e++)this.material[e]=this.material[e].getFlavor(r.flatShading,r.side,r.wireframe);else this.material=this.material.getFlavor(r.flatShading,r.side,r.wireframe,i)}}disposeMaterial(){this.material&&uJ(this.material).forEach(e=>{e instanceof AC&&(e instanceof AI||e.nodeMaterialDispose())})}dispose(){this.disposeMaterial(),super.dispose()}},Mm=new iv,Mg=new ic,Mv=new ic,My=new iv,Mx=new iX,Mb=class extends Mf{constructor(e,t,i){super(e,t),this.data=t,this.isSkinnedMesh=!1,this.localGeometry=void 0,t.bindMode&&t.bindMatrix&&(this.bindMode=t.bindMode,this.bindMatrix=new iX().fromArray(t.bindMatrix),this.bindMatrixInverse=new iX)}chooseGeoemtryCache(e){return e.geometryCache}markGeometryAsReachable(e){this.geometryCreateDeleyed instanceof rz&&this.chooseGeoemtryCache(e).markAsReachable(this.dataPatched.geometry,this.geometryCreateDeleyed)}get geometry(){if(void 0!==this.localGeometry)return this.localGeometry;if(this.geometryCreateDeleyed instanceof Mp){let e=this.geometryCreateDeleyed,t=this.chooseGeoemtryCache(e);this.geometryCreateDeleyed=t.get(this.dataPatched.geometry,e,this)}return this.geometryCreateDeleyed}set geometry(e){this.localGeometry=e}get is2DAndNoDepth(){let e=this.dataPatched.geometry;return vG.is2DParametricMesh(e.type)&&0===e.depth}get is2DType(){return vG.is2DParametricMesh(this.geometry.userData.type)}get isNonParametric(){return"NonParametricGeometry"===this.geometry.userData.type}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),pX(e.path,["geometry"])&&this.updateByPatchedOpGeometry(p$.drop(e,1),t.geometry,i)}removeInteractionGeometry(e){this.localGeometry?.dispose(),this.localGeometry=void 0}updateGeometryInteractions(e,t){this.invalidateDownstreamBooleanData();let i=this.data.geometry.type;if("NonParametricGeometry"===i||"SubdivGeometry"===i){let i,r,s;if(void 0===this.localGeometry){let i={...this.data.geometry,...e};this.localGeometry=w4(i,t,this.data.flatShading,this)}e.scaleBaked?[i,r,s]=e.scaleBaked:{width:i,height:r,depth:s}=e;let a=this.localGeometry.userData;void 0!==a.sxPrev&&w6(this.localGeometry.attributes,i/a.sxPrev,r/a.syPrev,s/a.szPrev),a.sxPrev=i,a.syPrev=r,a.szPrev=s}else{let i={...this.data.geometry,...e};this.localGeometry?.dispose(),this.localGeometry=w4(i,t,this.data.flatShading,this)}}refreshAttachedClonersInteractions(){for(let e of this.attachedSurfaceCloners
vendor: 8,056 bytes, line 5725
5725)e.update()}refreshAttachedCloners(e){for(let t of this.attachedSurfaceCloners)e.scene.addPendingUpdateCloner(t.object)}refreshAttachedPaths(e){for(let t of this.attachedPaths)e.scene.addPendingCommand(()=>t.updateShape())}createGeometryDelayed(e){this.geometryCreateDeleyed=e.shared,this.refreshAttachedCloners(e),this.refreshAttachedPaths(e)}updateByPatchedOpGeometry(e,t,i){let r=!1;0===e.type&&0===e.path.length&&Object.keys(e.props).includes("scaleBaked")&&this.geometryCreateDeleyed instanceof Ss&&this.chooseGeoemtryCache(i.shared).mutateIfUnique(this.geometryCreateDeleyed.data,t)===this.geometryCreateDeleyed&&(r=!0,this.geometryCreateDeleyed.mutateDirectlyScaleBaked(t,e.props.scaleBaked),this.refreshAttachedCloners(i),this.refreshAttachedPaths(i)),r||(i.scene?.markGeometryCacheDirty(),this.createGeometryDelayed(i)),this.resetBBoxNeedsUpdate(),this.invalidateDownstreamBooleanData()}updateGeometryOnStateUpdate(e,t){this.createGeometryDelayed(t)}updateState(e,t){void 0!==e.geometry&&this.updateGeometryOnStateUpdate(e.geometry,t);let i=e.morphTargetInfluences;if(i)for(let{data:{name:e,value:r}}of(this.updateMorphTargets(),this.geometry.morphTargetsRelative=!0,i))this.updateMorphInfluences(e,t.shared.getVariable(r,[this.uuid,"morphTargetInfluences",e]));super.updateState(e,t)}updateMorphInfluences(e,t){if(void 0===this.morphTargetDictionary)return;let i=this.morphTargetDictionary[e];void 0!==i&&(this.morphTargetInfluences[i]=t)}updateGeometryGroupsIfNeeded(){Array.isArray(this.material)&&0===this.geometry.groups.length&&this.geometry.addGroup(0,Math.max(this.geometry.getIndex()?.count??0,this.geometry.getAttribute("position").count),0)}updateEntityBoxSize(e,t){let i=this.geometry.userData.parameters;this.is2DType?e.set(0,0,.5*i.depth):this.isNonParametric?(e.setScalar(0),this.geometry.boundingSphere&&e.copy(this.geometry.boundingSphere.center),t.set(i.width,i.height,i.depth??0).multiplyScalar(.5)):i.centerOffset?e.fromArray(i.centerOffset):e.setScalar(0),t.set(i.width,i.height,i.depth??0).multiplyScalar(.5)}updateMatrixWorld(e){super.updateMatrixWorld(e),"attached"===this.bindMode?this.bindMatrixInverse.copy(this.matrixWorld).invert():"detached"===this.bindMode&&this.bindMatrixInverse.copy(this.bindMatrix).invert()}bind(e,t){this.skeleton=e,this.isSkinnedMesh=!0,void 0===t&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),t=this.matrixWorld),this.bindMatrix.copy(t),this.bindMatrixInverse.copy(t).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(e){let t=new ic,i=this.geometry.attributes.skinWeight;for(let e=0,r=i.count;e<r;e++){t.fromBufferAttribute(i,e);let r=1/t.manhattanLength();r!==1/0?t.multiplyScalar(r):t.set(1,0,0,0),i.setXYZW(e,t.x,t.y,t.z,t.w)}}boneTransform(e,t){let i=this.skeleton;if(void 0===i)return;let r=this.geometry;Mg.fromBufferAttribute(r.attributes.skinIndex,e),Mv.fromBufferAttribute(r.attributes.skinWeight,e),Mm.copy(t).applyMatrix4(this.bindMatrix),t.set(0,0,0);for(let e=0;e<4;e++){let r=Mv.getComponent(e);if(0!==r){let s=Mg.getComponent(e);Mx.multiplyMatrices(i.bones[s].matrixWorld,i.boneInverses[s]),t.addScaledVector(My.copy(Mm).applyMatrix4(Mx),r)}}return t.applyMatrix4(this.bindMatrixInverse)}};function Mw(e){if(Array.isArray(e.material)){for(let t of e.material)if(0===t.getLayersOfType("outline").length)return}else if(!(e.material instanceof AC)||0===e.material.getLayersOfType("outline").length)return;e instanceof Mb&&e.is2DAndNoDepth?function(e){if(e.geometry.attributes.extrudeNormals||!e.geometry.attributes.position)return;let t=e.geometry.attributes.position.array,i=new Float32Array(t.length),r=new iv;for(let e=0;e<t.length;e+=3)r.set(t[e],t[e+1],t[e+2]).normalize(),i[e]=r.x,i[e+1]=r.y,i[e+2]=r.z;e.geometry.setAttribute("extrudeNormal",new rT(i,3))}(e):function(e){if(e.geometry.attributes.extrudeNormal||!e.geometry.attributes.position||!e.geometry.attributes.normal)return;let t=new Map,i=e.geometry.attributes,r=i.position.array,s=i.normal.array,a=new Float32Array(r.length);for(let e=0;e<r.length;e+=3){let i=`${r[e]}_${r[e+1]}_${r[e+2]}`,a=new iv(s[e],s[e+1],s[e+2]);t.has(i)?t.get(i)?.normals.push(a):t.set(i,{normals:[a],result:new iv})}t.forEach((e,t)=>{for(let t of e.normals)e.result.add(t);e.result.divideScalar(e.normals.length)});for(let e=0;e<r.length;e+=3){let i=`${r[e]}_${r[e+1]}_${r[e+2]}`,s=t.get(i)?.result;s&&(a[e]=s.x,a[e+1]=s.y,a[e+2]=s.z)}e.geometry.setAttribute("extrudeNormal",new rT(a,3))}(e)}function MS(e){if(!e.geometry.attributes.position)return;let t=e.geometry.attributes.position.array,i=new Float32Array(t.length),r=parseInt(e.uuid.replace(/\D/g,"")),s=[tY.seededRandom(r),tY.seededRandom(r+1e4),tY.seededRandom(r+2e4)];for(let e=0;e<t.length;e++)i[e]=s[e%3];e.geometry.setAttribute("randomColor",new rM(i,3))}var M_=new ib,MA=new iv,MM=class extends Mb{constructor(e,t,i){super(e,t,i),this.data=t,this.hiddenMatrixOld=new iX,this.smoothShading=!0,this.skipReactionUpdate=!1}chooseGeoemtryCache(e){return this.dataPatched.flatShading?e.geometryCache:e.geometryCache2}get subdivPointerNew(){return void 0!==this.localGeometry?this.subdivPointer:this.geometry.ensureSubdivPointer()}get originalGeometryNew(){return void 0!==this.localGeometry?this.originalGeometry:this.geometry.originalGeometry}get phongAngle(){return this.data.geometry.phongAngle??45}updateEntityBoxSize(e,t){let i=this.geometry.userData.parameters;e.copy(this.originalGeometryNew.boundingSphere.center),t.set(i.width,i.height,i.depth??0).multiplyScalar(.5)}createGeometryByControls(e){if(!0===this.skipReactionUpdate)return;let t=this.localGeometry?.uuid,{originalGeometry:i,subdividedGeometry:r,subdivPointer:s}=Ss.build(e,this.subdivPointer,this.smoothShading,this.hasNonUniformScale?this.shearScale:void 0);this.subdivPointer=s,void 0!==i&&(this.originalGeometry?.dispose(),this.originalGeometry=i),void 0!==r&&(this.subdividedGeometry?.dispose(),this.subdividedGeometry=r??void 0),this.localGeometry=this.subdividedGeometry??this.originalGeometry,Mw(this),MS(this),this.calcBoundingBox(),t&&(this.localGeometry.uuid=t)}updateState(e,t){if(super.updateState(e,t),void 0!==e.flatShading){let i=this.material;this.material=Array.isArray(i)?i.map(e=>e.getFlavor(!1,e.side,e.wireframe)):i.getFlavor(!1,i.side,i.wireframe),this.smoothShading=!e.flatShading,this.createGeometryDelayed(t)}}updateMesh(e=!1){Ss.buildLevel(this.subdivPointer,!0,this.smoothShading?this.phongAngle:-1,this.originalGeometry,e&&this.hasNonUniformScale?this.shearScaleInv:void 0),this.subdividedGeometry&&Ss.buildLevel(this.subdivPointer,!1,this.smoothShading?this.phongAngle:-1,this.subdividedGeometry,e&&this.hasNonUniformScale?this.shearScaleInv:void 0)}updateTopology(){this.originalGeometry.dispose(),this.originalGeometry=Ss.buildLevel(this.subdivPointer,!0,this.smoothShading?this.phongAngle:-1),this.subdividedGeometry&&(this.subdividedGeometry.dispose(),this.subdividedGeometry=Ss.buildLevel(this.subdivPointer,!1,this.smoothShading?this.phongAngle:-1)),this.localGeometry=this.subdividedGeometry??this.originalGeometry}raycast(e,t){let i=this.localGeometry;this.localGeometry=this.originalGeometryNew,SP.prototype.raycast.call(this,e,t),this.localGeometry=i}activateSVDCompensation(){this.hasNonUniformScale&&(this.matrix.copy(this.matrixWorldRigid),this.hiddenMatrixOld.copy(this.hiddenMatrix),this.hiddenMatrix.copy(this.parent.matrixWorld).invert())}deactivateSVDCompensation(){this.hasNonUniformScale&&(this.updateMatrix(),this.hasNonUniformScale=void 0,this.hiddenMatrix.copy(this.hiddenMatrixOld))}calcBoundingBox(){let e=this.originalGeometry;null===e.boundingSphere&&(e.boundingSphere=new iN,this.subdividedGeometry&&(this.subdividedGeometry.boundingSphere=e.boundingSphere));let t=e.attributes.position,i=e.boundingSphere.center;M_.setFromBufferAttribute(t),M_.getCenter(i),e.boundingSphere.radius=i.distanceTo(M_.max),isNaN(e.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this),M_.getSize(MA),this.hasNonUniformScale&&MA.divi
5725de(this.scale);let r={width:MA.x,height:MA.y,depth:MA.z};return this.geometry.userData.parameters=r,r}updateBoundingSphere(e){let t=this.originalGeometry;M_.min.set(e[0],e[2],e[4]),M_.max.set(e[1],e[3],e[5]),this.hasNonUniformScale&&(M_.min.applyMatrix4(this.shearScaleInv),M_.max.applyMatrix4(this.shearScaleInv)),null===t.boundingSphere&&(t.boundingSphere=new iN);let i=t.boundingSphere.center;M_.getCenter(i),t.boundingSphere.radius=i.distanceTo(M_.max)}freeSubdivPointer(){this.subdivPointer&&(Ss.freeSubdivPointer(this.subdivPointer),this.subdivPointer=0),this.localGeometry=void 0,this.originalGeometry?.dispose(),this.subdividedGeometry?.dispose()}dispose(){super.dispose(),this.freeSubdivPointer()}updateByPatchedOpGeometry(e,t,i){super.updateByPatchedOpGeometry(e,t,i),this.localGeometry&&this.createGeometryByControls(t)}},ME={x:[1,0,0],"-x":[-1,0,0],y:[0,1,0],"-y":[0,-1,0],z:[0,0,1],"-z":[0,0,-1]},MC={polygon_center:0,edge:1,vertex:2},MT=(e,t)=>(i,r)=>t&&0!==i&&0!==e?e*r/100:0,MP=(e,t)=>{let i=Math.abs(t),r=-1*i;return(e- -1)*(i-r)/2+r},MD=new iv,MI=new iv,MO=new iv,MR=new iv;function ML(e,t){let i=MO.fromArray(e),r=MR.fromArray(t);MI.copy(r).sub(i);let s=MI.length();return MI.normalize().multiplyScalar(.5*s),MD.copy(i).add(MI).toArray()}var MB=new rx,Mz=new iv,MF=new iv,MN=new iv,Mk=e=>.5*(1-Math.cos(e*Math.PI)),MU=class{constructor(){this.perlin=Array(4096)}noise(e,t=0,i=0){if(null==this.perlin){this.perlin=Array(4096);for(let e=0;e<4096;e++)this.perlin[e]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),i<0&&(i=-i);let r=Math.floor(e),s=Math.floor(t),a=Math.floor(i),o=e-r,l=t-s,h=i-a,c,d,u=0,p=.5,f,m,g;for(let e=0;e<4;e++){let e=r+(s<<4)+(a<<8);c=Mk(o),d=Mk(l),f=this.perlin[4095&e],f+=c*(this.perlin[e+1&4095]-f),m=this.perlin[e+16&4095],m+=c*(this.perlin[e+16+1&4095]-m),f+=d*(m-f),e+=256,m=this.perlin[4095&e],m+=c*(this.perlin[e+1&4095]-m),g=this.perlin[e+16&4095],g+=c*(this.perlin[e+16+1&4095]-g),m+=d*(g-m),f+=Mk(h)*(m-f),u+=f*p,p*=.5,r<<=1,s<<=1,l*=2,a<<=1,h*=2,(o*=2)>=1&&(r++,o--),l>=1&&(s++,l--),h>=1&&(a++,h--)}return u}noiseSeed(e){let t,i;let r={setSeed(e){i=t=(e??4294967296*Math.random())>>>0},getSeed:()=>t,rand:()=>(i=(1664525*i+1013904223)%4294967296)/4294967296};r.setSeed(e),this.perlin=Array(4096);for(let e=0;e<4096;e++)this.perlin[e]=r.rand()}},MV=new iv,Mj=new iX,MG=new iq;function MH(e){let t=!1;return e.scene.objects.traverse((e,i)=>{"Mesh"===i.type&&("TextGeometry"===i.geometry.type||"InputGeometry"===i.geometry.type)&&(t=!0)}),t}var MW,Mq,MX,MY,MQ,MK=class extends Mb{constructor(e,t,i){super(e,t,i),this.data=t}get textGeometry(){return this.geometry}get charWidths(){return this.textGeometry.charWidths}get charCoords(){return this.textGeometry.charCoords}get wrappedText(){return this.textGeometry.wrappedText}get font(){return this.textGeometry.font}get initialOffsetY(){let e=this.dataPatched;return this.font?.getLineInitialOffsetY(this.lineHeight,this.wrappedText.length,e.geometry.height,this.fontScale,e.geometry.verticalAlign)??0}get fontScale(){let e=this.dataPatched;return this.font?e.geometry.fontSize/this.font.unitsPerEm:1}get AD(){return Math.abs(this.ascender-this.descender)}get ascender(){return(this.font?.ascender??1)*this.fontScale}get descender(){return(this.font?.descender??1)*this.fontScale}get lineHeight(){let e=this.dataPatched;return e.geometry.fontSize*e.geometry.lineHeight}raycast(e,t){let{matrixWorld:i}=this;if(!(isNaN(e.ray.origin.x)||0===this.scale.x||0===this.scale.y||0===this.scale.z)&&(Mj.copy(i).invert(),MG.copy(e.ray).applyMatrix4(Mj),MG.intersectBox(this.singleBBox,MV))){let r=MV.applyMatrix4(i),s=e.ray.origin.distanceTo(r);t.push({distance:s,point:r.clone(),object:this})}}},MZ=new iv,MJ=new iv;w1.then(e=>{MX=[(Mq=e).get_face_center,Mq.get_edge_midpoint,Mq.get_vertex_position],MY=[Mq.get_face_normal,Mq.get_edge_normal,Mq.get_vertex_normal],MQ=[Mq.face_count,Mq.edge_count,Mq.vertex_count]});var M$=new iX,M0=new iX,M1=new iv,M2=new iv,M3=new iv,M4=new iv,M5=new iv,M6=new iv,M8=class{constructor(e,t){this.data=e,this.is3D=t,this.perlin=new MU,"perlin"===e.noiseType?(this.perlin.noiseSeed(e.seed),t?this.noise=(e,t,i)=>this.perlin.noise(e,t,i):this.noise=e=>this.perlin.noise(e)):t?this.noise=function(e=Math.random){let t=xh(e),i=new Float64Array(t).map(e=>xl[e%12*3]),r=new Float64Array(t).map(e=>xl[e%12*3+1]),s=new Float64Array(t).map(e=>xl[e%12*3+2]);return function(e,a,o){let l,h,c,d,u=(e+a+o)*xs,p=xn(e+u),f=xn(a+u),m=xn(o+u),g=(p+f+m)*xa,v=e-(p-g),y=a-(f-g),x=o-(m-g),b,w,S,_,A,M;v>=y?y>=x?(b=1,w=0,S=0,_=1,A=1,M=0):(v>=x?(b=1,w=0,S=0):(b=0,w=0,S=1),_=1,A=0,M=1):y<x?(b=0,w=0,S=1,_=0,A=1,M=1):v<x?(b=0,w=1,S=0,_=0,A=1,M=1):(b=0,w=1,S=0,_=1,A=1,M=0);let E=v-b+xa,C=y-w+xa,T=x-S+xa,P=v-_+2*xa,D=y-A+2*xa,I=x-M+2*xa,O=v-1+3*xa,R=y-1+3*xa,L=x-1+3*xa,B=255&p,z=255&f,F=255&m,N=.6-v*v-y*y-x*x;if(N<0)l=0;else{let e=B+t[z+t[F]];N*=N,l=N*N*(i[e]*v+r[e]*y+s[e]*x)}let k=.6-E*E-C*C-T*T;if(k<0)h=0;else{let e=B+b+t[z+w+t[F+S]];k*=k,h=k*k*(i[e]*E+r[e]*C+s[e]*T)}let U=.6-P*P-D*D-I*I;if(U<0)c=0;else{let e=B+_+t[z+A+t[F+M]];U*=U,c=U*U*(i[e]*P+r[e]*D+s[e]*I)}let V=.6-O*O-R*R-L*L;if(V<0)d=0;else{let e=B+1+t[z+1+t[F+1]];V*=V,d=V*V*(i[e]*O+r[e]*R+s[e]*L)}return 32*(l+h+c+d)}}((0,xt.default)(e.seed)):this.noise=function(e=Math.random){let t=xh(e),i=new Float64Array(t).map(e=>xo[e%12*2]),r=new Float64Array(t).map(e=>xo[e%12*2+1]);return function(e,s){let a=0,o=0,l=0,h=(e+s)*xi,c=xn(e+h),d=xn(s+h),u=(c+d)*xr,p=e-(c-u),f=s-(d-u),m,g;p>
5725f?(m=1,g=0):(m=0,g=1);let v=p-m+xr,y=f-g+xr,x=p-1+2*xr,b=f-1+2*xr,w=255&c,S=255&d,_=.5-p*p-f*f;if(_>=0){let e=w+t[S],s=i[e],o=r[e];_*=_,a=_*_*(s*p+o*f)}let A=.5-v*v-y*y;if(A>=0){let e=w+m+t[S+g],s=i[e],a=r[e];A*=A,o=A*A*(s*v+a*y)}let M=.5-x*x-b*b;if(M>=0){let e=w+1+t[S+1],s=i[e],a=r[e];M*=M,l=M*M*(s*x+a*b)}return 70*(a+o+l)}}((0,xt.default)(e.seed))}},M9=class extends xv(rl){constructor(e,t){super(),this.parameters=t,this.objectForSample=void 0,this._pendingMediaLoad=!1,this.random=null,this.object=e}resetOnMove(){this.removeFromParent(),this.parent=null}expandClones(e){if(null===this.parent)this.updateState(this.parameters,e);else for(let e of this.children)e instanceof xb&&e.expand()}invalidateTransform(e){this.matrixWorldNeedsUpdate=!0,this.traverse(t=>{t instanceof xb&&t.object===e&&(t.matrixWorldNeedsUpdate=!0)})}onObjUpdateMatrix(){"toObject"!==this.parameters.type&&(this.matrixWorldNeedsUpdate=!0)}update(){switch(this._updateCount(),this.parameters.type){case"radial":this._updateRadial(this.parameters);break;case"linear":this._updateLinear(this.parameters);break;case"grid":this._updateGrid(this.parameters);break;case"toObject":this._updateToObject(this.parameters)}for(let e of this.children)e.updateMatrix(),e.hasNonUniformScale&&(e.updateMatrixWorld(),e.updateMatrixWorldSVD())}_updateCount(e){let t;if(t=void 0!==e?e:"grid"===this.parameters.type?Math.round(this.parameters.grid.count[0])*Math.round(this.parameters.grid.count[1])*Math.round(this.parameters.grid.count[2]):this.parameters.count,"toObject"===this.parameters.type){if(this.parameters.toObject.object){if(void 0===e&&"random"!==this.parameters.toObject.spreadType)return}else t=0}if("toObject"===this.parameters.type&&this.objectForSample){let e=this.children;if(e.length===t)return;if(e.length<t)for(let i=0,r=t-e.length;i<r;++i){let e=new xb(this.object);e.expand(),this.add(e)}else for(let i=0,r=e.length-t;i<r;++i)this.remove(e[i])}else{if(this.children.length===t)return;if(this.children.length<t)for(let e=0,i=t-this.children.length;e<i;++e){let e=new xb(this.object);e.expand(),this.add(e)}else for(let e=0,i=this.children.length-t;e<i;++e)this.remove(this.children[e])}}getRandom(e,t=!1){return(null===this.random||this.random.data.seed!==e.seed||this.random.is3D!==t)&&(this.random=new M8(e,t)),this.random}_updateRadial(e){let t=e.radial,i=t.start*tY.DEG2RAD,r=i-t.end*tY.DEG2RAD,s=new i3(t.rotation[0],t.rotation[1],t.rotation[2]),a;switch(t.axis){case"z":a=new iv(0,0,1);break;case"y":a=new iv(0,1,0);break;default:a=new iv(1,0,0)}let o=e.randomnessObject??gu.defaultData([1,1,1]).randomnessObject,l=this.getRandom(o),h=MT(o.strength,this.parameters.randomness);for(let[c,d]of this.children.entries()){let u=o.freqScale/10*c+o.movement,p=l.noise(u,u,u),f=c+1;d.scale.x=t.scale[0]+h(f,MP(p,o.scale[0]))||1e-4,d.scale.y=t.scale[1]+h(f,MP(p,o.scale[1]))||1e-4,d.scale.z=t.scale[2]+h(f,MP(p,o.scale[2]))||1e-4,d.position.setScalar(0);let m=r/e.count*c-i;switch(t.axis){case"x":d.rotation.set(0,m,0);break;case"y":d.rotation.set(0,0,m);break;case"z":d.rotation.set(m,0,0)}d.translateOnAxis(a,t.radius),d.position.x+=t.position[0]+h(f,MP(p,o.position[0])),d.position.y+=t.position[1]+h(f,MP(p,o.position[1])),d.position.z+=t.position[2]+h(f,MP(p,o.position[2]));let g=h(f,MP(p,o.rotation[0])),v=h(f,MP(p,o.rotation[1])),y=h(f,MP(p,o.rotation[2]));!0===t.alignment?(d.rotation.x+=s.x+g,d.rotation.y+=s.y+v,d.rotation.z+=s.z+y):d.rotation.set(s.x+g,s.y+v,s.z+y)}}_updateLinear(e){if("linear"!==e.type)throw Error();let t=e.linear,i=new i3(t.rotation[0],t.rotation[1],t.rotation[2]),r=e.randomnessObject??gu.defaultData([1,1,1]).randomnessObject,s=this.getRandom(r),a=MT(r.strength,this.parameters.randomness);for(let[e,o]of this.children.entries()){let l=r.freqScale/10*e+r.movement,h=s.noise(l,l,l),c=e+1,d=a(c,MP(h,r.rotation[0])),u=a(c,MP(h,r.rotation[1])),p=a(c,MP(h,r.rotation[2]));o.scale.x=1+(t.scale[0]-1)*e+a(c,MP(h,r.scale[0]))||1e-4,o.scale.y=1+(t.scale[1]-1)*e+a(c,MP(h,r.scale[1]))||1e-4,o.scale.z=1+(t.scale[2]-1)*e+a(c,MP(h,r.scale[2]))||1e-4,o.rotation.x=i.x*e+d,o.rotation.y=i.y*e+u,o.rotation.z=i.z*e+p,o.position.x=t.position[0]*e+a(c,MP(h,r.position[0])),o.position.y=t.position[1]*e+a(c,MP(h,r.position[1])),o.position.z=t.position[2]*e+a(c,MP(h,r.position[2]))}}_updateGrid(e){let t=0,i=e.grid,r=e.randomnessObject??gu.defaultData([1,1,1]).randomnessObject,s=this.getRandom(r,!0),a=MT(r.strength,this.parameters.randomness);if(!0===i.useCenter){let e={x:i.count[0]%2==0?2:1,y:i.count[1]%2==0?2:1,z:i.count[2]%2==0?2:1},o=new iv(i.size[0]*(i.count[0]-e.x)*.5,i.size[1]*(i.count[1]-e.y)*.5,i.size[2]*(i.count[2]-e.z)*.5);for(let e=0;e<i.count[0];e++)for(let l=0;l<i.count[1];l++)for(let h=0;h<i.count[2];h++){let c=s.noise(r.freqScale/10*(e+1)+r.movement,r.freqScale/10*(l+1)+r.movement,r.freqScale/10*(h+1)+r.movement),d=this.children[t++];
5725d.scale.x=1+a(t,MP(c,r.scale[0]))||1e-4,d.scale.y=1+a(t,MP(c,r.scale[1]))||1e-4,d.scale.z=1+a(t,MP(c,r.scale[2]))||1e-4;let u=a(t,MP(c,r.rotation[0])),p=a(t,MP(c,r.rotation[1])),f=a(t,MP(c,r.rotation[2]));d.rotation.set(u,p,f),d.position.x=i.size[0]*e-o.x+a(t,MP(c,r.position[0])),d.position.y=i.size[1]*l-o.y+a(t,MP(c,r.position[1])),d.position.z=i.size[2]*h-o.z+a(t,MP(c,r.position[2]))}}else for(let e=0;e<i.count[0];e++)for(let o=0;o<i.count[1];o++)for(let l=0;l<i.count[2];l++){let h=s.noise(r.freqScale/10*(e+1)+r.movement,r.freqScale/10*(o+1)+r.movement,r.freqScale/10*(l+1)+r.movement),c=this.children[t++];c.scale.x=1+a(t,MP(h,r.scale[0]))||1e-4,c.scale.y=1+a(t,MP(h,r.scale[1]))||1e-4,c.scale.z=1+a(t,MP(h,r.scale[2]))||1e-4;let d=a(t,MP(h,r.rotation[0])),u=a(t,MP(h,r.rotation[1])),p=a(t,MP(h,r.rotation[2]));c.rotation.set(d,u,p),c.position.x=i.size[0]*e+a(t,MP(h,r.position[0])),c.position.y=-i.size[1]*o+a(t,MP(h,r.position[1])),c.position.z=-i.size[2]*l+a(t,MP(h,r.position[2]))}}_updateToObject(e){if("toObject"!==e.type)throw Error();let{toObject:t}=e,i=new i3(t.rotation[0],t.rotation[1],t.rotation[2]),r=e.randomnessObject??gu.defaultData([1,1,1]).randomnessObject,s=this.getRandom(r),a=MT(r.strength,this.parameters.randomness);if(!t.object){for(let[,e]of this.children.entries())e.position.set(0,0,0),e.scale.setScalar(1),e.rotation.set(0,0,0);this.objectForSample=void 0;return}if(!this.objectForSample)return;if(this.objectForSample instanceof MK){if(this.objectForSample.font?.isLoaded&&void 0!==this.objectForSample.geometry.attributes.position)this._pendingMediaLoad=!1;else{this._pendingMediaLoad=!0;return}}if(void 0===this.objectForSample.geometry&&this.objectForSample.isAncestorOf(this.object.uuid)){console.warn(`Oh no! The object "${this.object.name}" (${this.object.uuid}) seem to be a child/descendant of the object it's being cloned to. Please re-parent it so that they are siblings instead.`);return}let o=this.getSubdivData();if(o.length>0){let e=Math.round(o.length*t.count/100);this._updateCount(e)}else{let e=this.objectForSample.geometry.getAttribute("position");if(!e||isNaN(e.count)||0===e.count){console.warn(`Oh no! The object "${this.object.name}" (${this.object.uuid}) cannot be cloned on the surface of "${this.objectForSample.name}" (${this.objectForSample.uuid}) because the latter does not have a valid geometry.`);return}}this.objectForSample.updateMatrixWorld();let l=new xu(this.objectForSample).build(),h=ME[t.axis],c=this.children;for(let[e,d]of(l.setRandomGenerator((0,xt.default)(this.object.uuid+t.seed)),c.entries())){let c=r.freqScale/10*e+r.movement,u=s.noise(c,c,c),p=e+1,f=a(p,MP(u,r.rotation[0])),m=a(p,MP(u,r.rotation[1])),g=a(p,MP(u,r.rotation[2]));"random"===t.spreadType?l.sample(M3,M4):(o.length&&(M3.fromArray(o[e].pos),M4.fromArray(o[e].norm)),this.objectForSample instanceof MM&&M3.applyMatrix4(M$.copy(this.objectForSample.matrixWorld).invert())),M3.applyMatrix4(this.object.hiddenMatrix.clone().invert()),d.position.copy(M3),M1.fromArray(h);let v="normal"===t.align?M4:this.object.getWorldDirection(M6),y=M2.fromArray(t.position);M2.x+=a(p,MP(u,r.position[0])),M2.y+=a(p,MP(u,r.position[1])),M2.z+=a(p,MP(u,r.position[2]));let x=Math.acos(v.dot(M1)),b=M5.crossVectors(M1,v).normalize(),w=M0.makeRotationAxis(b,x),S=v.clone().cross(this.object.up).normalize(),_=S.clone().cross(v).normalize(),A=new iX().makeBasis(S,v,_),M=new iv(M1.y,M1.z,M1.x).normalize(),E=M.clone().cross(M1).normalize(),C=new iX().makeBasis(M,M1,E).invert(),T=new iX().multiplyMatrices(A,C);d.rotation.setFromRotationMatrix(T),y.applyMatrix4(w),d.position.add(y),d.rotation.x=d.rotation.x+i.x+f,d.rotation.y=d.rotation.y+i.y+m,d.rotation.z=d.rotation.z+i.z+g,d.scale.setScalar(1),d.scale.x=d.scale.x+t.scale[0]+a(p,MP(u,r.scale[0]))||1e-4,d.scale.y=d.scale.y+t.scale[1]+a(p,MP(u,r.scale[1]))||1e-4,d.scale.z=d.scale.z+t.scale[2]+a(p,MP(u,r.scale[2]))||1e-4,d.scale.multiply(this.object.scale),d.hiddenMatrix=this.object.hiddenMatrix}}getSubdivData(){if(!this.objectForSample)return[];let e=this.parameters.toObject.spreadType,t=new Map,i=(e,i)=>{let r=Math.round(1e4*e[0])+"_"+Math.round(1e4*e[1])+"_"+Math.round(1e4*e[2]),s=t.get(r);s?(s.pos[0]+=e[0],s.pos[1]+=e[1],s.pos[2]+=e[2],s.norm[0]+=i[0],s.norm[1]+=i[1],s.norm[2]+=i[2],s.c
5725ount+=1):t.set(r,{pos:[...e],norm:[...i],count:1})};if("random"===e)return[];if(this.objectForSample instanceof MM){let t=this.objectForSample,r=MC[e],s=MQ[r],a=MX[r],o=MY[r],l=s(t.subdivPointerNew);for(let e=0;e<=l-1;e++){let r=a(t.subdivPointerNew,e),s=o(t.subdivPointerNew,e);MZ.fromArray(r).applyMatrix4(t.matrixWorld),MJ.fromArray(s),i(MZ.toArray(),MJ.toArray())}}else(this.objectForSample.geometry.index?function(e){let t=[];for(let i=0;i<=e.index.count;i++)if(Mz.fromArray(e.index.array,3*i),MB.setFromAttributeAndIndices(e.attributes.position,Mz.x,Mz.y,Mz.z),MB.getNormal(MF),MB.getMidpoint(MN),!(isNaN(MN.x)||isNaN(MN.y)||isNaN(MN.z))){let{a:e,b:i,c:r}=MB,s=e.toArray(),a=i.toArray(),o=r.toArray(),l=e.distanceTo(i),h=i.distanceTo(r),c=r.distanceTo(e),d=ML(s,a),u=ML(a,o),p=ML(o,s),f=[l,h,c],m=Math.max(...f),g=f.filter(e=>Math.round(e)===Math.round(m)).length>1,v=[],y=MB.getMidpoint(MN).toArray();m!==l||g||(v=[u,p,p],y=d),m!==h||g||(v=[d,p,p],y=u),m!==c||g||(v=[d,u,u],y=p),g&&(v=[d,u,p]),t.push({vertices:[s,a,o],faceCenters:v,midpoint:y,norm:MB.getNormal(MF).toArray()})}return t}(this.objectForSample.geometry):function(e){let t=[],{position:i}=e.attributes;for(let e=0;e<i.count;e++){MB.setFromAttributeAndIndices(i,3*e,3*e+1,3*e+2),MB.getNormal(MF),MB.getMidpoint(MN);let r=MB.a.toArray(),s=MB.b.toArray(),a=MB.c.toArray();t.push({vertices:[r,s,a],faceCenters:[ML(r,s),ML(s,a),ML(a,r)],midpoint:MN.toArray(),norm:MF.toArray()})}return t}(this.objectForSample.geometry)).forEach((t,r)=>{"polygon_center"===e&&i(t.midpoint,t.norm),"vertex"===e&&(i(t.vertices[0],t.norm),i(t.vertices[1],t.norm),i(t.vertices[2],t.norm)),"edge"===e&&(i(t.faceCenters[0],t.norm),i(t.faceCenters[1],t.norm),i(t.faceCenters[2],t.norm))});let r=Array.from(t.values());for(let e of r)e.pos[0]/=e.count,e.pos[1]/=e.count,e.pos[2]/=e.count,e.norm[0]/=e.count,e.norm[1]/=e.count,e.norm[2]/=e.count;return r}updateState(e,t){if(this.parameters=uc(e),"toObject"!==this.parameters.type)(null===this.parent||this.parent!==this.object)&&(this.removeFromParent(),this.object.parent?.add(this),this.matrix=this.object.matrix,this.hiddenMatrix=this.object.hiddenMatrix,this.matrixWorldNeedsUpdate=!0,this.matrixAutoUpdate=!1);else if(null===this.parent||this.parent.uuid!==this.parameters.toObject.object){this.removeFromParent();let e=t.find(this.parameters.toObject.object);e instanceof SP?this.objectForSample=e:this.objectForSample=void 0,this.matrix=new iX,this.hiddenMatrix=new iX,this.matrixWorldNeedsUpdate=!0,this.matrixAutoUpdate=!1,e&&e.add(this)}this.update()}get pendingMediaLoad(){return this._pendingMediaLoad}},M7=e=>{var t;return(t=class extends e{}).geometryHelper=new rJ(30,30,30),t},Ee=new iq,Et=new iN,Ei=new iX,Er=(e,t,i,r,s=!1,a=e)=>{let o=a.matrixWorld;if(null===t.boundingSphere&&t.computeBoundingSphere(),Et.copy(t.boundingSphere),Et.applyMatrix4(o),!1===i.ray.intersectsSphere(Et)||(Ei.copy(o).invert(),Ee.copy(i.ray).applyMatrix4(Ei),null!==t.boundingBox&&!1===Ee.intersectsBox(t.boundingBox)))return;let l,h=t.index,c=t.attributes.position,d=t.drawRange,u;if(!1===s){let t=Math.max(0,d.start),s=Math.min(h.count,d.start+d.count);for(u=t;u<s;u+=3)if(l=function(e,t,i,r,s,a,o){let l=new iv,h=new iv,c=new iv,d=new iv,u=new iv;if(l.fromBufferAttribute(r,s),h.fromBufferAttribute(r,a),c.fromBufferAttribute(r,o),null===i.intersectTriangle(l,h,c,!1,d))return null;u.copy(d),u.applyMatrix4(e.matrixWorld);let p=t.ray.origin.distanceTo(u);return p<t.near||p>t.far?null:{faceIndex:1,distance:p,point:u.clone(),object:e}}(e,i,Ee,c,h.getX(u),h.getX(u+1),h.getX(u+2))){l.faceIndex=Math.floor(u/3),r.push(l);return}}else{let s=t.attributes.position,o=new iv,l=new iv,h=new iv,c=new iv,u=1/((a.scale.x+a.scale.y+a.scale.z)/3),p=u*u,f=Math.max(0,d.start),m=Math.min(s.count,d.start+d.count);for(let t=f,d=m-1;t<d;t+=2){if(o.fromBufferAttribute(s,t),l.fromBufferAttribute(s,t+1),Ee.distanceSqToSegment(o,l,c,h)>p)continue;c.applyMatrix4(a.matrixWorld);let d=i.ray.origin.distanceTo(c);d<i.near||d>i.far||r.push({distance:d,point:h.clone().applyMatrix4(a.matrixWorld),object:e})}}},Es=new iv,Ea=new r6,En=class extends nW{constructor(e){let t=new rz,i=new nz({color:16777215,vertexColors:!0,toneMapped:!1}),r=[],s=[],a={},o=new ii(15711266),l=new ii(15711266),h=new ii(2857471);function c(e,t,i){d(e,i),d(t,i)}function d(e,t){r.push(0,0,0),s.push(t.r,t.g,t.b),void 0===a[e]&&(a[e]=[]),a[e].push(r.length/3-1)}c("n1","n2",o),c("n2","n4",o),c("n4","n3",o),c("n3","n1",o),c("f1","f2",o),c("f2","f4",o),c("f4","f3",o),c("f3","f1",o),c("n1","f1",o),c("n2","f2",o),c("n3","f3",o),c("n4","f4",o),c("p","
5725n1",l),c("p","n2",l),c("p","n3",l),c("p","n4",l),c("u1","u2",h),c("u2","u3",h),c("u3","u1",h),t.setAttribute("position",new rT(r,3)),t.setAttribute("color",new rT(s,3)),super(t,i),this.type="CameraHelper",this.camera=e,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=e.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=a,this.update()}update(){let e=this.geometry,t=this.pointMap;Ea.projectionMatrixInverse.elements=[.5112609807824982,-0,-0,-0,-0,.41421356237309503,-0,-0,-0,-0,-0,-.099999,-0,-0,-1.0000000000000002,.100001],Eo("n1",t,e,Ea,-1,-1,.8),Eo("n2",t,e,Ea,1,-1,.8),Eo("n3",t,e,Ea,-1,1,.8),Eo("n4",t,e,Ea,1,1,.8),Eo("f1",t,e,Ea,-1,-1,.8),Eo("f2",t,e,Ea,1,-1,.8),Eo("f3",t,e,Ea,-1,1,.8),Eo("f4",t,e,Ea,1,1,.8),Eo("u1",t,e,Ea,.35,1.1,.8),Eo("u2",t,e,Ea,-.35,1.1,.8),Eo("u3",t,e,Ea,0,1.55,.8),e.getAttribute("position").needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}};function Eo(e,t,i,r,s,a,o){Es.set(s,a,o).unproject(r);let l=t[e];if(void 0!==l){let e=i.getAttribute("position");for(let t=0,i=l.length;t<i;t++)e.setXYZ(l[t],Es.x,Es.y,Es.z)}}var El=class extends M7(En){constructor(e){super(e),this.object=e,this.object=e,this.name=`CombinedCameraHelper: ${e.uuid}`}updateMatrixWorld(e){super.updateMatrixWorld(e),this.updateTarget()}updateTarget(){let e=this.object.getTarget();this.updateWorldMatrix(!0,!1),this.worldToLocal(e)}raycast(e,t){Er(this.object,this.geometry,e,t,!0)}};(TG||(TG={})).is=e=>"objectHelper"in e;var Eh=(e,t)=>class extends xk(e){constructor(){super(...arguments),this.objectHelper=new t(this),this.gizmos={}}get geometryHelper(){return t.geometryHelper}raycast(e,t){this.objectHelper.raycast(e,t)}showGizmos(){for(let e in this.gizmos){let t=this.gizmos[e];t instanceof lZ&&(t.visible=!0)}}updateEntityBoxSize(e,t){this.objectHelper.visible&&this.geometryHelper instanceof rJ?(e.setScalar(0),t.set(this.geometryHelper.parameters.width,this.geometryHelper.parameters.height,this.geometryHelper.parameters.height).multiplyScalar(.5)):super.updateEntityBoxSize(e,t)}hideGizmos(){for(let e in this.gizmos){let t=this.gizmos[e];t instanceof lZ&&(t.visible=!1)}}},Ec=new iv,Ed=new iv,Eu=new ig,Ep=new iv,Ef=new iv,Em=new iv,Eg=class extends Eh(r6,El){constructor(e="",t={...v7.defaultData,name:""}){super(),this._cameraType="OrthographicCamera",this.targetOffset=gd.DefaultTargetOffset,this.isUpVectorFlipped=!1,this.angleOffsetFromUp=0,this.wasMovedByUser=!1,this.wasMovedBySwitchCameraAction=!1,this.super_Entity(e,t),this.previousProjectionMatrix=new iX,this.matrixAutoUpdate=!0,this.width=window.innerWidth,this.height=window.innerHeight;let i=this.width,r=this.height;this.orthoCamera=new sw(-.5*i,.5*i,.5*r,-.5*r,-5e4,1e4),this.perspCamera=new r8(45,i/r,50,1e4),this.left=this.orthoCamera.left,this.right=this.orthoCamera.right,this.top=this.orthoCamera.top,this.bottom=this.orthoCamera.bottom,this.far=this.orthoCamera.far,this.view=this.orthoCamera.view,this.aspect=this.perspCamera.aspect,this.focus=this.perspCamera.focus,this.filmGauge=this.perspCamera.filmGauge,this.filmOffset=this.perspCamera.filmOffset,this.objectHelper.update()}get isPerspectiveCamera(){return"PerspectiveCamera"===this.cameraType}get isOrthographicCamera(){return!this.isPerspectiveCamera}get cameraType(){return this._cameraType}set fov(e){this.perspCamera.fov=e}get fov(){return this.perspCamera.fov}setNear(e,t){"PerspectiveCamera"===e?this.perspCamera.near=t:this.orthoCamera.near=t}setZoom(e,t){t>=0&&("PerspectiveCamera"===e?this.perspCamera.zoom=t:this.orthoCamera.zoom=t)}set cameraType(e){"PerspectiveCamera"===e?this.toPerspective():"OrthographicCamera"===e&&this.toOrthographic()}get near(){return"PerspectiveCamera"===this._cameraType?this.perspCamera.near:this.orthoCamera.near}set near(e){"PerspectiveCamera"===this._cameraType?this.perspCamera.near=e:this.orthoCamera.near=e}get zoom(){return"PerspectiveCamera"===this._cameraType?this.perspCamera.zoom:this.orthoCamera.zoom}set zoom(e){e>=0&&("PerspectiveCamera"===this._cameraType?this.perspCamera.zoom=e:this.orthoCamera.zoom=e)}lookAt(e,t,i){"number"==typeof e&&(e=new iv(e,t,i)),super.lookAt(e),this.getWorldPosition(Ec),this.targetOffset=Ec.distanceTo(e)}getTarget(e=new iv){return this.getWorldDirection(Ed),this.getWorldPosition(Ec),Ed.multiplyScalar(this.targetOffset),e.copy(Ec).add(Ed),e}getDistanceToTarget(){let e=this.getTarget();return this.getWorldPosition(Ec),Ec.distanceTo(e)}updateUp(){this.getWorldQuaternion(Eu),Ep.set(0,0,1).applyQuaternion(Eu),Ef.copy(rl.DEFAULT_UP),this.isUpVectorFlipped&&Ef.negate(),Ef.applyQuaternion(Eu),Em.copy(rl.DEFAULT_UP).projectOnPlane(Ep),this.angleOffsetFromUp=Em.angleTo(Ef),this.angleOffsetFromUp*=Em.cross(Ef).dot(Ep
vendor: 4,749 bytes, line 5725
5725)>=0?1:-1}updateTransformState(e,t){let i=super.updateTransformState(e,t);return void 0!==e.isUpVectorFlipped&&(this.isUpVectorFlipped=e.isUpVectorFlipped),this.updateUp(),i}getViewFrontToObject(e){let t=e.getWorldPosition(new iv),i=e.getWorldDirection(new iv).multiplyScalar(this.targetOffset);return{position:t.clone().add(i),target:t}}getViewToTarget(e){let t=this.getWorldDirection(new iv).multiplyScalar(this.targetOffset);return{position:e.clone().sub(t),target:e}}getViewToObject(e){let t=new iv;return e.getWorldPosition(t),this.getViewToTarget(t)}setViewplaneSize(e,t,i=!1){if(this.aspect=e/t,i){let i=e>t?this.aspect:1,r=e>t?1:this.aspect;this.left=-395*i,this.right=395*i,this.top=1/r*395,this.bottom=-(1/r*395)}else this.left=-(.5*e),this.right=.5*e,this.top=.5*t,this.bottom=-(.5*t);this.updateProjectionMatrix()}copyViewPlaneSize(e){this.aspect=e.aspect,this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.updateProjectionMatrix()}toOrthographic(){this.orthoCamera.left=this.left,this.orthoCamera.right=this.right,this.orthoCamera.top=this.top,this.orthoCamera.bottom=this.bottom,this.orthoCamera.view=this.view,this.orthoCamera.far=this.far,this.orthoCamera.updateProjectionMatrix(),this.projectionMatrix=this.orthoCamera.projectionMatrix,this.projectionMatrixInverse=this.orthoCamera.projectionMatrixInverse,this._cameraType="OrthographicCamera",this.objectHelper&&this.objectHelper.update()}toPerspective(){this.perspCamera.aspect=this.aspect,this.perspCamera.fov=this.fov,this.perspCamera.view=this.view,this.perspCamera.far=this.far,this.perspCamera.updateProjectionMatrix(),this.projectionMatrix=this.perspCamera.projectionMatrix,this.projectionMatrixInverse=this.perspCamera.projectionMatrixInverse,this._cameraType="PerspectiveCamera",this.objectHelper&&this.objectHelper.update()}setFocalLength(e){this.perspCamera.setFocalLength(e),this.toPerspective()}getFocalLength(){return this.perspCamera.getFocalLength()}getEffectiveFOV(){return this.perspCamera.getEffectiveFOV()}getFilmWidth(){return this.perspCamera.getFilmWidth()}getFilmHeight(){return this.perspCamera.getFilmHeight()}setViewOffset(e,t,i,r,s,a){"PerspectiveCamera"===this._cameraType?this.perspCamera.setViewOffset(e,t,i,r,s,a):this.orthoCamera.setViewOffset(e,t,i,r,s,a)}clearViewOffset(){"PerspectiveCamera"===this._cameraType?(this.perspCamera.clearViewOffset(),this.toPerspective()):(this.orthoCamera.clearViewOffset(),this.toOrthographic())}copyHistory(){this.previousProjectionMatrix&&this.previousProjectionMatrix.copy(this.projectionMatrix)}updateProjectionMatrix(){"PerspectiveCamera"===this._cameraType?this.toPerspective():"OrthographicCamera"===this._cameraType&&this.toOrthographic()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}copy(e,t){return super.copy(e,t),this.parent=e.parent,this.orthoCamera.copy(e.orthoCamera),this.perspCamera.copy(e.perspCamera),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.far=e.far,this.view=null===e.view?null:Object.assign({},e.view),this._cameraType=e._cameraType,this.aspect=e.aspect,this.fov=e.fov,this.focus=e.focus,this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this.targetOffset=e.targetOffset,this.updateProjectionMatrix(),this}toCameraState(e=[]){return uN({type:this.cameraType,far:this.far,orthographic:{near:this.orthoCamera.near,zoom:this.orthoCamera.zoom},perspective:{near:this.perspCamera.near,fov:this.perspCamera.fov,zoom:this.perspCamera.zoom},up:this.up.toArray(),targetOffset:this.targetOffset,isUpVectorFlipped:this.isUpVectorFlipped},e)}updateCameraSubtype(e,t){let i="perspective"===e?"PerspectiveCamera":"OrthographicCamera";void 0!==t.zoom&&this.setZoom(i,t.zoom),void 0!==t.near&&this.setNear(i,t.near),void 0!==t.fov&&"PerspectiveCamera"===i&&(this.fov=t.fov)}updateState(e,t){this.updateCameraState(e,t)}updateCameraState(e,t){this.updateState_Entity(e,t),void 0!==e.far&&(this.far=e.far),void 0!==e.orthographic&&this.updateCameraSubtype("orthographic",e.orthographic),void 0!==e.perspective&&this.updateCameraSubtype("perspective",e.perspective),void 0!==e.type&&(this.cameraType=e.type),void 0!==e.up&&this.up.fromArray(e.up),void 0!==e.targetOffset&&(this.targetOffset=e.targetOffset),void 0!==e.isUpVectorFlipped&&(this.isUpVectorFlipped=e.isUpVectorFlipped),this.updateProjectionMatrix()}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),1===e.path.length&&0===e.type&&this.updateCameraSubtype(e.path[0],e.props)}toState(e){return{...super.toState(e),...this.toCameraState(e),type:this.cameraType}}},Ev=new iX,Ey=new iX;function Ex(e){let t=!1;
5725return e.scene.objects.traverse((e,i)=>{i.geometry?.type==="BooleanGeometry"&&(t=!0)}),t}var Eb=class extends Mf{constructor(e,t,i){super(e,t),this.data=t,this.meshSetAddresses=[],this.needsTransformForDownstream=!1,this.geometry=new rz,this.onAfterRender=(e,t,i,r,s,a)=>{super.onAfterRender(e,t,i,r,s,a),this.recomputeBoolean()},this.geometry.userData.parameters={width:0,height:0,depth:0}}get booleanOp(){return this.data.geometry.operation}get phongAngle(){return this.data.geometry.phongAngle??45}get isLOD(){return this.recomputeBoolean(),!1}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),1===e.path.length&&"geometry"===e.path[0]&&0===e.type&&void 0!==e.props.operation&&(this.freeBooleanPointer(),this.resetBBoxNeedsUpdate())}freeBooleanPointer(){super.freeBooleanPointer(),this.geometry.dispose()}recomputeBoolean(e,t=!0){if(-1!==this.booleanMeshSetAddress&&!e)return;for(let i=0;i<this.children.length;i++){let r=this.children[i];r instanceof Eb&&!0===r.dataPatched.visible&&r.recomputeBoolean(!0===e,t)}this.meshSetAddresses=[];for(let i=0;i<this.children.length;i++){let r=this.children[i];if(r instanceof SP&&!0===r.dataPatched.visible&&r.geometry.attributes.position?.count>0&&r.geometry.drawRange.count>0&&0!==r.booleanMeshSetAddress){Ev.multiplyMatrices(r.hiddenMatrix,r.matrix);try{if(-1===r.booleanMeshSetAddress){if((r.geometry.index??r.geometry.getAttribute("position")).count/3<15e5&&(r.booleanMeshSetAddress=Su.getMeshSet(r.geometry,!0===e,t)),-1===r.booleanMeshSetAddress)return;Su.transformMeshSet(r.booleanMeshSetAddress,Ev),r.booleanMatrixInvOld.copy(Ev).invert(),r.booleanWasTransformed=!1}else r instanceof Eb&&!0===r.needsTransformForDownstream?(Su.transformMeshSet(r.booleanMeshSetAddress,Ev),r.needsTransformForDownstream=!1):!0===r.booleanWasTransformed&&(Su.transformMeshSet(r.booleanMeshSetAddress,Ey.multiplyMatrices(Ev,r.booleanMatrixInvOld)),r.booleanMatrixInvOld.copy(Ev).invert(),r.booleanWasTransformed=!1)}catch(e){console.error(e),r.booleanMeshSetAddress=0,r.geometry.userData.booleanOperationDidFail=!0;continue}!1===Su.hasOpenEdges(r.booleanMeshSetAddress)||i===this.children.length-1&&2===this.booleanOp?(this.meshSetAddresses.push(r.booleanMeshSetAddress),r.geometry.userData.booleanOperationDidFail=!1):r.geometry.userData.booleanOperationDidFail="openEdges"}}if(0===this.meshSetAddresses.length){this.geometry.setAttribute("position",new rT([],0)),this.geometry.setDrawRange(0,0);return}if(!0===e)return Su.calcBooleanTopological(this.meshSetAddresses,this.booleanOp);let i=this.geometry;i.dispose(),this.geometry=new rz,this.geometry.userData=i.userData,this.geometry.boundingSphere=i.boundingSphere;try{this.booleanMeshSetAddress=Su.calcBoolean(this.meshSetAddresses,this.booleanOp,this.geometry,this.phongAngle)}catch(e){this.booleanMeshSetAddress=0,this.geometry.userData.booleanOperationDidFail=!0,console.error(e)}this.booleanMatrixInvOld.copy(this.matrix).invert(),this.needsTransformForDownstream=!0,Mw(this),MS(this)}dispose(){super.dispose(),this.geometry.dispose()}};(TH||(TH={})).is=function(e){return wQ.is(e)&&e instanceof o7};var Ew=(e,t)=>class extends Eh(e,t){updateState_Light(e,t){this.updateState_Entity(e,t),void 0!==e.color&&(this.color=t.shared.color(e.color)),void 0!==e.intensity&&(this.intensity=e.intensity),void 0!==e.depth&&(this.shadow.camera.far=e.depth,this.shadow.needsUpdate=!0),void 0!==e.shadows&&(this.castShadow=e.shadows)}},ES=e=>e instanceof SP,E_=e=>null!==e&&e instanceof Eb,EA=e=>e instanceof Eg,EM=e=>TH.is(e),EE=e=>TG.is(e),EC=new iv(1,1,1),ET=new iv,EP=new iv,ED=new ig,EI=class extends M7(lJ){constructor(e,t=15){super(t),this.object=e,this.dummy=new nd,this.object.updateMatrixWorld(),this.name=`EmptyObjectHelper: ${e.uuid}`,this.matrix=this.dummy.matrixWorld,this.matrixAutoUpdate=!1,this.object.isBone&&(this.visible=!1)}raycast(e,t){Er(this.object,EI.geometryHelper,e,t,!1,this.dummy)}update(){}updateMatrix(){}updateMatrixWorld(e){this.object.matrixWorld.decompose(ET,ED,EP),this.matrix.compose(ET,ED,EC),super.updateMatrixWorld(e)}updateWorldMatrix(e,t){}},EO=class extends Eh(nd,EI){constructor(e,t){super(),this.super_Entity(e,t),this.objectHelper.update(
vendor: 16,384 bytes, lines 5725-5872
5725)}updateState(e,t){this.updateState_Entity(e,t),"buffer"in e&&1===Object.keys(e).length&&t.scene.reloadSplats()}},ER=class extends Eh(nd,EI){constructor(e,t,i){super(),this.super_Entity(e,t),this.context=i,this.objectHelper.update()}updateState(e,t){this.updateState_Entity(e,t)}},EL="varying vec2 vUv;void main(){vUv=position.xy*0.5+0.5;gl_Position=vec4(position.xy,1.0,1.0);}",EB=`#ifdef FRAMEBUFFER_PRECISION_HIGH 5726uniform mediump sampler2D inputBuffer; 5727#else 5728uniform lowp sampler2D inputBuffer; 5729#endif 5730uniform lowp sampler2D cocBuffer;uniform vec2 texelSize;uniform float scale;uniform vec4 kernel64[32];varying vec2 vUv;void main(){ 5731#ifdef FOREGROUND 5732vec2 CoCNearFar=texture2D(cocBuffer,vUv).rg;float CoC=CoCNearFar.r*scale; 5733#else 5734float CoC=texture2D(cocBuffer,vUv).g*scale; 5735#endif 5736if(CoC==0.0){gl_FragColor=texture2D(inputBuffer,vUv);}else{ 5737#ifdef FOREGROUND 5738vec2 step=texelSize*max(CoC,CoCNearFar.g*scale); 5739#else 5740vec2 step=texelSize*CoC; 5741#endif 5742vec4 acc=vec4(0.0);for(int i=0;i<32;++i){vec4 kernel=kernel64[i];vec2 uv=step*kernel.xy+vUv;acc+=texture2D(inputBuffer,uv);uv=step*kernel.zw+vUv;acc+=texture2D(inputBuffer,uv);}gl_FragColor=acc/64.0;}}`,Ez=class extends r5{constructor(e=!1,t=!1){super({name:"BokehMaterial",defines:{PASS:e?"2":"1"},uniforms:{kernel64:new lD(null),kernel16:new lD(null),inputBuffer:new lD(null),cocBuffer:new lD(null),texelSize:new lD(new tQ),scale:new lD(1)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:EB,vertexShader:EL}),this.toneMapped=!1,t&&(this.defines.FOREGROUND="1"),this.generateKernel()}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}set cocBuffer(e){this.uniforms.cocBuffer.value=e}setCoCBuffer(e){this.uniforms.cocBuffer.value=e}get scale(){return this.uniforms.scale.value}set scale(e){this.uniforms.scale.value=e}getScale(e){return this.uniforms.scale.value=e}setScale(e){this.uniforms.scale.value=e}generateKernel(){let e=new Float32Array(128),t=new Float32Array(32),i=0,r=0;for(let s=0;s<80;++s){let a=2.39996323*s,o=Math.sqrt(s)/Math.sqrt(80),l=o*Math.cos(a),h=o*Math.sin(a);s%5==0?(t[r++]=l,t[r++]=h):(e[i++]=l,e[i++]=h)}let s=[],a=[];for(let t=0;t<128;)s.push(new ic(e[t++],e[t++],e[t++],e[t++]));for(let e=0;e<32;)a.push(new ic(t[e++],t[e++],t[e++],t[e++]));this.uniforms.kernel64.value=s,this.uniforms.kernel16.value=a}setTexelSize(e,t){this.uniforms.texelSize.value.set(e,t)}setSize(e,t){this.uniforms.texelSize.value.set(1/e,1/t)}};function EF(e,t,i){return Math.min(Math.max((e+t)/(t-i),0),1)}var EN=`#include <common> 5743#include <packing> 5744#ifdef GL_FRAGMENT_PRECISION_HIGH 5745uniform highp sampler2D depthBuffer; 5746#else 5747uniform mediump sampler2D depthBuffer; 5748#endif 5749uniform float focusDistance;uniform float focusRange;uniform float cameraNear;uniform float cameraFar;varying vec2 vUv;float readDepth(const in vec2 uv){ 5750#if DEPTH_PACKING == 3201 5751return unpackRGBAToDepth(texture2D(depthBuffer,uv)); 5752#else 5753return texture2D(depthBuffer,uv).r; 5754#endif 5755}void main(){float depth=readDepth(vUv); 5756#ifdef PERSPECTIVE_CAMERA 5757float viewZ=perspectiveDepthToViewZ(depth,cameraNear,cameraFar);float linearDepth=viewZToOrthographicDepth(viewZ,cameraNear,cameraFar); 5758#else 5759float linearDepth=depth; 5760#endif 5761float signedDistance=linearDepth-focusDistance;float magnitude=smoothstep(0.0,focusRange,abs(signedDistance));gl_FragColor.rg=magnitude*vec2(step(signedDistance,0.0),step(0.0,signedDistance));}`,Ek=class extends r5{constructor(e){super({name:"CircleOfConfusionMaterial",defines:{DEPTH_PACKING:"0"},uniforms:{depthBuffer:new lD(null),focusDistance:new lD(0),focusRange:new lD(0),cameraNear:new lD(.3),cameraFar:new lD(1e3)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:EN,vertexShader:EL}),this.toneMapped=!1,this.uniforms.focalLength=this.uniforms.focusRange,this.adoptCameraSettings(e)}get near(){return this.uniforms.cameraNear.value}get far(){return this.uniforms.cameraFar.value}set depthBuffer(e){this.uniforms.depthBuffer.value=e}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=3200){this.depthBuffer=e,this.depthPacking=t}get focusDistance(){return this.uniforms.focusDistance.value}set focusDistance(e){this.uniforms.focusDistance.value=e}get worldFocusDistance(){var e;return-(this.focusDistance*((e=this.near)-this.far)-e)}set worldFocusDistance(e){this.focusDistance=EF(-e,this.near,this.far)}getFocusDistance(e){this.uniforms.focusDistance.value=e}setFocusDistance(e){this.uniforms.focusDistance.value=e}get focalLength(){return this.focusRange}set focalLength(e){this.focusRange=e}get focusRange(){return this.uniforms.focusRange.value}set focusRange(e){this.uniforms.focusRange.value=e}get worldFocusRange(){var e;return-(this.focusRange*((e=this.near)-this.far)-e)}set worldFocusRange(e){this.focusRange=EF(-e,this.near,this.far)}getFocalLength(e){return this.focusRange}setFocalLength(e){this.focusRange=e}adoptCameraSettings(e){e&&(this.uniforms.cameraNear.value=e.near,this.uniforms.cameraFar.value=e.far,e instanceof r8?this.defines.PERSPECTIVE_CAMERA="1":delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}},EU=`#include <common> 5762#include <dithering_pars_fragment> 5763#ifdef FRAMEBUFFER_PRECISION_HIGH 5764uniform mediump sampler2D inputBuffer; 5765#else 5766uniform lowp sampler2D inputBuffer; 5767#endif 5768varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec4 sum=texture2D(inputBuffer,vUv0);sum+=texture2D(inputBuffer,vUv1);sum+=texture2D(inputBuffer,vUv2);sum+=texture2D(inputBuffer,vUv3);gl_FragColor=sum*0.25; 5769#include <encodings_fragment> 5770#include <dithering_fragment> 5771}`,EV=class extends r5{constructor(e=new tQ){super({name:"KawaseBlurMaterial",uniforms:{inputBuffer:new lD(null),texelSize:new lD(new tQ),halfTexelSize:new lD(new tQ),kernel:new lD(0),scale:new lD(1)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:EU,vertexShader:"uniform vec2 texelSize;uniform vec2 halfTexelSize;uniform float kernel;uniform float scale;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec2 uv=position.xy*0.5+0.5;vec2 dUv=(texelSize*vec2(kernel)+halfTexelSize)*scale;vUv0=vec2(uv.x-dUv.x,uv.y+dUv.y);vUv1=vec2(uv.x+dUv.x,uv.y+dUv.y);vUv2=vec2(uv.x+dUv.x,uv.y-dUv.y);vUv3=vec2(uv.x-dUv.x,uv.y-dUv.y);gl_Position=vec4(position.xy,1.0,1.0);}"}),this.toneMapped=!1,this.setTexelSize(e.x,e.y)}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.inputBuffer=e}get scale(){return this.uniforms.scale.value}set scale(e){this.uniforms.scale.value=e}getScale(){return this.uniforms.scale.value}setScale(e){this.uniforms.scale.value=e}getKernel(){return null}get kernel(){return this.uniforms.kernel.value}set kernel(e){this.uniforms.kernel.value=e}setKernel(e){this.kernel=e}setTexelSize(e,t){this.uniforms.texelSize.value.set(e,t),this.uniforms.halfTexelSize.value.set(e,t).multiplyScalar(.5)}setSize(e,t){let i=this.uniforms;i.texelSize.value.set(1/e,1/t),i.halfTexelSize.value.copy(i.texelSize.value).multiplyScalar(.5)}},Ej=`#ifdef FRAMEBUFFER_PRECISION_HIGH 5772uniform mediump sampler2D inputBuffer; 5773#else 5774uniform lowp sampler2D inputBuffer; 5775#endif 5776uniform float opacity;varying vec2 vUv;void main(){vec4 texel=texture2D(inputBuffer,vUv);gl_FragColor=opacity*texel; 5777#include <encodings_fragment> 5778}`,EG=class extends r5{constructor(){super({name:"CopyMaterial",uniforms:{inputBuffer:new lD(null),opacity:new lD(1)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:Ej,vertexShader:EL}),this.toneMapped=!1}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}getOpacity(e){return this.uniforms.opacity.value}setOpacity(e){this.uniforms.opacity.value=e}},EH=`varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1; 5779#if THREE_REVISION < 143 5780#define luminance(v) linearToRelativeLuminance(v) 5781#endif 5782#if EDGE_DETECTION_MODE != 0 5783varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5; 5784#endif 5785#if EDGE_DETECTION_MODE == 1 5786#include <common> 5787#endif 5788#if EDGE_DETECTION_MODE == 0 || PREDICATION_MODE == 1 5789#ifdef GL_FRAGMENT_PRECISION_HIGH 5790uniform highp sampler2D depthBuffer; 5791#else 5792uniform mediump sampler2D depthBuffer; 5793#endif 5794float readDepth(const in vec2 uv){ 5795#if DEPTH_PACKING == 3201 5796return unpackRGBAToDepth(texture2D(depthBuffer,uv)); 5797#else 5798return texture2D(depthBuffer,uv).r; 5799#endif 5800}vec3 gatherNeighbors(){float p=readDepth(vUv);float pLeft=readDepth(vUv0);float pTop=readDepth(vUv1);return vec3(p,pLeft,pTop);} 5801#elif PREDICATION_MODE == 2 5802uniform sampler2D predicationBuffer;vec3 gatherNeighbors(){float p=texture2D(predicationBuffer,vUv).r;float pLeft=texture2D(predicationBuffer,vUv0).r;float pTop=texture2D(predicationBuffer,vUv1).r;return vec3(p,pLeft,pTop);} 5803#endif 5804#if PREDICATION_MODE != 0 5805vec2 calculatePredicatedThreshold(){vec3 neighbours=gatherNeighbors();vec2 delta=abs(neighbours.xx-neighbours.yz);vec2 edges=step(PREDICATION_THRESHOLD,delta);return PREDICATION_SCALE*EDGE_THRESHOLD*(1.0-PREDICATION_STRENGTH*edges);} 5806#endif 5807#if EDGE_DETECTION_MODE != 0 5808uniform sampler2D inputBuffer; 5809#endif 5810void main(){ 5811#if EDGE_DETECTION_MODE == 0 5812const vec2 threshold=vec2(DEPTH_THRESHOLD); 5813#elif PREDICATION_MODE != 0 5814vec2 threshold=calculatePredicatedThreshold(); 5815#else 5816const vec2 threshold=vec2(EDGE_THRESHOLD); 5817#endif 5818#if EDGE_DETECTION_MODE == 0 5819vec3 neighbors=gatherNeighbors();vec2 delta=abs(neighbors.xx-vec2(neighbors.y,neighbors.z));vec2 edges=step(threshold,delta);if(dot(edges,vec2(1.0))==0.0){discard;}gl_FragColor=vec4(edges,0.0,1.0); 5820#elif EDGE_DETECTION_MODE == 1 5821float l=luminance(texture2D(inputBuffer,vUv).rgb);float lLeft=luminance(texture2D(inputBuffer,vUv0).rgb);float lTop=luminance(texture2D(inputBuffer,vUv1).rgb);vec4 delta;delta.xy=abs(l-vec2(lLeft,lTop));vec2 edges=step(threshold,delta.xy);if(dot(edges,vec2(1.0))==0.0){discard;}float lRight=luminance(texture2D(inputBuffer,vUv2).rgb);float lBottom=luminance(texture2D(inputBuffer,vUv3).rgb);delta.zw=abs(l-vec2(lRight,lBottom));vec2 maxDelta=max(delta.xy,delta.zw);float lLeftLeft=luminance(texture2D(inputBuffer,vUv4).rgb);float lTopTop=luminance(texture2D(inputBuffer,vUv5).rgb);delta.zw=abs(vec2(lLeft,lTop)-vec2(lLeftLeft,lTopTop));maxDelta=max(maxDelta.xy,delta.zw);float finalDelta=max(maxDelta.x,maxDelta.y);edges.xy*=step(finalDelta,LOCAL_CONTRAST_ADAPTATION_FACTOR*delta.xy);gl_FragColor=vec4(edges,0.0,1.0); 5822#elif EDGE_DETECTION_MODE == 2 5823vec4 delta;vec3 c=texture2D(inputBuffer,vUv).rgb;vec3 cLeft=texture2D(inputBuffer,vUv0).rgb;vec3 t=abs(c-cLeft);delta.x=max(max(t.r,t.g),t.b);vec3 cTop=texture2D(inputBuffer,vUv1).rgb;t=abs(c-cTop);delta.y=max(max(t.r,t.g),t.b);vec2 edges=step(threshold,delta.xy);if(dot(edges,vec2(1.0))==0.0){discard;}vec3 cRight=texture2D(inputBuffer,vUv2).rgb;t=abs(c-cRight);delta.z=max(max(t.r,t.g),t.b);vec3 cBottom=texture2D(inputBuffer,vUv3).rgb;t=abs(c-cBottom);delta.w=max(max(t.r,t.g),t.b);vec2 maxDelta=max(delta.xy,delta.zw);vec3 cLeftLeft=texture2D(inputBuffer,vUv4).rgb;t=abs(c-cLeftLeft);delta.z=max(max(t.r,t.g),t.b);vec3 cTopTop=texture2D(inputBuffer,vUv5).rgb;t=abs(c-cTopTop);delta.w=max(max(t.r,t.g),t.b);maxDelta=max(maxDelta.xy,delta.zw);float finalDelta=max(maxDelta.x,maxDelta.y);edges*=step(finalDelta,LOCAL_CONTRAST_ADAPTATION_FACTOR*delta.xy);gl_FragColor=vec4(edges,0.0,1.0); 5824#endif 5825}`,EW=`uniform vec2 texelSize;varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1; 5826#if EDGE_DETECTION_MODE != 0 5827varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5; 5828#endif 5829void main(){vUv=position.xy*0.5+0.5;vUv0=vUv+texelSize*vec2(-1.0,0.0);vUv1=vUv+texelSize*vec2(0.0,-1.0); 5830#if EDGE_DETECTION_MODE != 0 5831vUv2=vUv+texelSize*vec2(1.0,0.0);vUv3=vUv+texelSize*vec2(0.0,1.0);vUv4=vUv+texelSize*vec2(-2.0,0.0);vUv5=vUv+texelSize*vec2(0.0,-2.0); 5832#endif 5833gl_Position=vec4(position.xy,1.0,1.0);}`,Eq=class extends r5{constructor(e=new tQ,t=2){super({name:"EdgeDetectionMaterial",defines:{THREE_REVISION:"149".replace(/\D+/g,""),LOCAL_CONTRAST_ADAPTATION_FACTOR:"2.0",EDGE_THRESHOLD:"0.1",DEPTH_THRESHOLD:"0.01",PREDICATION_MODE:"0",PREDICATION_THRESHOLD:"0.01",PREDICATION_SCALE:"2.0",PREDICATION_STRENGTH:"1.0",DEPTH_PACKING:"0"},uniforms:{inputBuffer:new lD(null),depthBuffer:new lD(null),predicationBuffer:new lD(null),texelSize:new lD(e)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:EH,vertexShader:EW}),this.toneMapped=!1,this.edgeDetectionMode=t}set depthBuffer(e){this.uniforms.depthBuffer.value=e}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=3200){this.depthBuffer=e,this.depthPacking=t}get edgeDetectionMode(){return Number(this.defines.EDGE_DETECTION_MODE)}set edgeDetectionMode(e){this.defines.EDGE_DETECTION_MODE=e.toFixed(0),this.needsUpdate=!0}getEdgeDetectionMode(){return this.edgeDetectionMode}setEdgeDetectionMode(e){this.edgeDetectionMode=e}get localContrastAdaptationFactor(){return Number(this.defines.LOCAL_CONTRAST_ADAPTATION_FACTOR)}set localContrastAdaptationFactor(e){this.defines.LOCAL_CONTRAST_ADAPTATION_FACTOR=e.toFixed("6"),this.needsUpdate=!0}getLocalContrastAdaptationFactor(){return this.localContrastAdaptationFactor}setLocalContrastAdaptationFactor(e){this.localContrastAdaptationFactor=e}get edgeDetectionThreshold(){return Number(this.defines.EDGE_THRESHOLD)}set edgeDetectionThreshold(e){this.defines.EDGE_THRESHOLD=e.toFixed("6"),this.defines.DEPTH_THRESHOLD=(.1*e).toFixed("6"),this.needsUpdate=!0}getEdgeDetectionThreshold(){return this.edgeDetectionThreshold}setEdgeDetectionThreshold(e){this.edgeDetectionThreshold=e}get predicationMode(){return Number(this.defines.PREDICATION_MODE)}set predicationMode(e){this.defines.PREDICATION_MODE=e.toFixed(0),this.needsUpdate=!0}getPredicationMode(){return this.predicationMode}setPredicationMode(e){this.predicationMode=e}set predicationBuffer(e){this.uniforms.predicationBuffer.value=e}setPredicationBuffer(e){this.uniforms.predicationBuffer.value=e}get predicationThreshold(){return Number(this.defines.PREDICATION_THRESHOLD)}set predicationThreshold(e){this.defines.PREDICATION_THRESHOLD=e.toFixed("6"),this.needsUpdate=!0}getPredicationThreshold(){return this.predicationThreshold}setPredicationThreshold(e){this.predicationThreshold=e}get predicationScale(){return Number(this.defines.PREDICATION_SCALE)}set predicationScale(e){this.defines.PREDICATION_SCALE=e.toFixed("6"),this.needsUpdate=!0}getPredicationScale(){return this.predicationScale}setPredicationScale(e){this.predicationScale=e}get predicationStrength(){return Number(this.defines.PREDICATION_STRENGTH)}set predicationStrength(e){this.defines.PREDICATION_STRENGTH=e.toFixed("6"),this.needsUpdate=!0}getPredicationStrength(){return this.predicationStrength}setPredicationStrength(e){this.predicationStrength=e}setSize(e,t){this.uniforms.texelSize.value.set(1/e,1/t)}},EX=`#include <common> 5834#include <packing> 5835#include <dithering_pars_fragment> 5836#define packFloatToRGBA(v) packDepthToRGBA(v) 5837#define unpackRGBAToFloat(v) unpackRGBAToDepth(v) 5838#ifdef FRAMEBUFFER_PRECISION_HIGH 5839uniform mediump sampler2D inputBuffer; 5840#else 5841uniform lowp sampler2D inputBuffer; 5842#endif 5843#ifdef GL_FRAGMENT_PRECISION_HIGH 5844uniform highp sampler2D depthBuffer; 5845#else 5846uniform mediump sampler2D depthBuffer; 5847#endif 5848uniform vec2 resolution;uniform vec2 texelSize;uniform float cameraNear;uniform float cameraFar;uniform float aspect;uniform float time;varying vec2 vUv; 5849#if THREE_REVISION < 143 5850#define luminance(v) linearToRelativeLuminance(v) 5851#endif 5852#if THREE_REVISION >= 137 5853vec4 sRGBToLinear(const in vec4 value){return vec4(mix(pow(value.rgb*0.9478672986+vec3(0.0521327014),vec3(2.4)),value.rgb*0.0773993808,vec3(lessThanEqual(value.rgb,vec3(0.04045)))),value.a);} 5854#endif 5855float readDepth(const in vec2 uv){ 5856#if DEPTH_PACKING == 3201 5857return unpackRGBAToDepth(texture2D(depthBuffer,uv)); 5858#else 5859return texture2D(depthBuffer,uv).r; 5860#endif 5861}float getViewZ(const in float depth){ 5862#ifdef PERSPECTIVE_CAMERA 5863return perspectiveDepthToViewZ(depth,cameraNear,cameraFar); 5864#else 5865return orthographicDepthToViewZ(depth,cameraNear,cameraFar); 5866#endif 5867}FRAGMENT_HEADvoid main(){FRAGMENT_MAIN_UVvec4 color0=texture2D(inputBuffer,UV);vec4 color1=vec4(0.0);FRAGMENT_MAIN_IMAGEgl_FragColor=color0; 5868#ifdef ENCODE_OUTPUT 5869#include <encodings_fragment> 5870#endif 5871#include <dithering_fragment> 5872}`,EY={FRAGMENT_HEAD:"FRAGMENT_HEAD",FRAGMENT_MAIN_UV:"FRAGMENT_MAIN_UV",FRAGMENT_MAIN_IMAGE:"FRAGMENT_MAIN_IMAGE",VERTEX_HEAD:"VERTEX_HEAD",VERTEX_MAIN_SUP
5872PORT:"VERTEX_MAIN_SUPPORT"},EQ=class extends r5{constructor(e,t,i,r,s=!1){super({name:"EffectMaterial",defines:{THREE_REVISION:"149".replace(/\D+/g,""),DEPTH_PACKING:"0",ENCODE_OUTPUT:"1"},uniforms:{inputBuffer:new lD(null),depthBuffer:new lD(null),resolution:new lD(new tQ),texelSize:new lD(new tQ),cameraNear:new lD(.3),cameraFar:new lD(1e3),aspect:new lD(1),time:new lD(0)},blending:0,depthWrite:!1,depthTest:!1,dithering:s}),this.toneMapped=!1,e&&this.setShaderParts(e),t&&this.setDefines(t),i&&this.setUniforms(i),this.adoptCameraSettings(r)}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}get depthBuffer(){return this.uniforms.depthBuffer.value}set depthBuffer(e){this.uniforms.depthBuffer.value=e}get depthPacking(){return Number(this.defines.DEPTH_PACKING)}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=3200){this.depthBuffer=e,this.depthPacking=t}setShaderParts(e){return this.fragmentShader=EX.replace(EY.FRAGMENT_HEAD,e.get(EY.FRAGMENT_HEAD)).replace(EY.FRAGMENT_MAIN_UV,e.get(EY.FRAGMENT_MAIN_UV)).replace(EY.FRAGMENT_MAIN_IMAGE,e.get(EY.FRAGMENT_MAIN_IMAGE)),this.vertexShader="uniform vec2 resolution;uniform vec2 texelSize;uniform float cameraNear;uniform float cameraFar;uniform float aspect;uniform float time;varying vec2 vUv;VERTEX_HEADvoid main(){vUv=position.xy*0.5+0.5;VERTEX_MAIN_SUPPORTgl_Position=vec4(position.xy,1.0,1.0);}".replace(EY.VERTEX_HEAD,e.get(EY.VERTEX_HEAD)).replace(EY.VERTEX_MAIN_SUPPORT,e.get(EY.VERTEX_MAIN_SUPPORT)),this.needsUpdate=!0,this}setDefines(e){for(let t of e.entries())this.defines[t[0]]=t[1];return this.needsUpdate=!0,this}setUniforms(e){for(let t of e.entries())this.uniforms[t[0]]=t[1];return this}setExtensions(e){for(let t of(this.extensions={},e))this.extensions[t]=!0;return this}get encodeOutput(){return void 0!==this.defines.ENCODE_OUTPUT}set encodeOutput(e){this.encodeOutput!==e&&(e?this.defines.ENCODE_OUTPUT="1":delete this.defines.ENCODE_OUTPUT,this.needsUpdate=!0)}isOutputEncodingEnabled(e){return this.encodeOutput}setOutputEncodingEnabled(e){this.encodeOutput=e}get time(){return this.uniforms.time.value}set time(e){this.uniforms.time.value=e}setDeltaTime(e){this.uniforms.time.value+=e}adoptCameraSettings(e){e&&(this.uniforms.cameraNear.value=e.near,this.uniforms.cameraFar.value=e.far,e instanceof r8?this.defines.PERSPECTIVE_CAMERA="1":delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}setSize(e,t){let i=this.uniforms;i.resolution.value.set(e,t),i.texelSize.value.set(1/e,1/t),i.aspect.value=e/t}static get Section(){return EY}},EK=`#include <common> 5873#if THREE_REVISION < 143 5874#define luminance(v) linearToRelativeLuminance(v) 5875#endif 5876#ifdef FRAMEBUFFER_PRECISION_HIGH 5877uniform mediump sampler2D inputBuffer; 5878#else 5879uniform lowp sampler2D inputBuffer; 5880#endif 5881#ifdef RANGE 5882uniform vec2 range; 5883#elif defined(THRESHOLD) 5884uniform float threshold;uniform float smoothing; 5885#endif 5886varying vec2 vUv;void main(){vec4 texel=texture2D(inputBuffer,vUv);float l=luminance(texel.rgb); 5887#ifdef RANGE 5888float low=step(range.x,l);float high=step(l,range.y);l*=low*high; 5889#elif defined(THRESHOLD) 5890l=smoothstep(threshold,threshold+smoothing,l); 5891#endif 5892#ifdef COLOR 5893gl_FragColor=vec4(texel.rgb*l,l); 5894#else 5895gl_FragColor=vec4(l); 5896#endif 5897}`,EZ=class extends r5{constructor(e=!1,t=null){super({name:"LuminanceMaterial",defines:{THREE_REVISION:"149".replace(/\D+/g,"")},uniforms:{inputBuffer:new lD(null),threshold:new lD(0),smoothing:new lD(1),range:new lD(null)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:EK,vertexShader:EL}),this.toneMapped=!1,this.colorOutput=e,this.luminanceRange=t}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}get threshold(){return this.uniforms.threshold.value}set threshold(e){this.smoothing>0||e>0?this.defines.THRESHOLD="1":delete this.defines.THRESHOLD,this.uniforms.threshold.value=e}getThreshold(){return this.threshold}setThreshold(e){this.threshold=e}get smoothing(){return this.uniforms.smoothing.value}set smoothing(e){this.threshold>0||e>0?this.defines.THRESHOLD="1":delete this.defines.THRESHOLD,this.uniforms.smoothing.value=e}getSmoothingFactor(){return this.smoothing}setSmoothingFactor(e){this.smoothing=e}get useThreshold(){return this.threshold>0||this.smoothing>0}set useThreshold(e){}get colorOutput(){return void 0!==this.defines.COLOR}set colorOutput(e){e?this.defines.COLOR="1":delete this.defines.COLOR,this.needsUpdate=!0}isColorOutputEnabled(e){return this.colorOutput}setColorOutputEnabled(e){this.colorOutput=e}get useRange(){return null!==this.luminanceRange}set useRange(e){this.luminanceRange=null}get luminanceRange(){return this.uniforms.range.value}set luminanceRange(e){null!==e?this.defines.RANGE="1":delete this.defines.RANGE,this.uniforms.range.value=e,this.needsUpdate=!0}getLuminanceRange(){return this.luminanceRange}setLuminanceRange(e){this.luminanceRange=e}},EJ=`#ifdef FRAMEBUFFER_PRECISION_HIGH 5898uniform mediump sampler2D inputBuffer; 5899#else 5900uniform lowp sampler2D inputBuffer; 5901#endif 5902#ifdef MASK_PRECISION_HIGH 5903uniform mediump sampler2D maskTexture; 5904#else 5905uniform lowp sampler2D maskTexture; 5906#endif 5907#if MASK_FUNCTION != 0 5908uniform float strength; 5909#endif 5910varying vec2 vUv;void main(){ 5911#if COLOR_CHANNEL == 0 5912float mask=texture2D(maskTexture,vUv).r; 5913#elif COLOR_CHANNEL == 1 5914float mask=texture2D(maskTexture,vUv).g; 5915#elif COLOR_CHANNEL == 2 5916float mask=texture2D(maskTexture,vUv).b; 5917#else 5918float mask=texture2D(maskTexture,vUv).a; 5919#endif 5920#if MASK_FUNCTION == 0 5921#ifdef INVERTED 5922mask=step(mask,0.0); 5923#else 5924mask=1.0-step(mask,0.0); 5925#endif 5926#else 5927mask=clamp(mask*strength,0.0,1.0); 5928#ifdef INVERTED 5929mask=1.0-mask; 5930#endif 5931#endif 5932#if MASK_FUNCTION == 2 5933gl_FragColor=vec4(mask*texture2D(inputBuffer,vUv).rgb,mask); 5934#else 5935gl_FragColor=mask*texture2D(inputBuffer,vUv); 5936#endif 5937}`,E$=class extends r5{constructor(e=null){super({name:"MaskMaterial",uniforms:{maskTexture:new lD(e),inputBuffer:new lD(null),strength:new lD(1)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:EJ,vertexShader:EL}),this.toneMapped=!1,this.setColorChannel(0),this.setMaskFunction(0)}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}set maskTexture(e){this.uniforms.maskTexture.value=e,delete this.defines.MASK_PRECISION_HIGH,1009!==e.type&&(this.defines.MASK_PRECISION_HIGH="1"),this.needsUpdate=!0}setMaskTexture(e){this.maskTexture=e}set colorChannel(e){this.defines.COLOR_CHANNEL=e.toFixed(0),this.needsUpdate=!0}setColorChannel(e){this.colorChannel=e}set maskFunction(e){this.defines.MASK_FUNCTION=e.toFixed(0),this.needsUpdate=!0}setMaskFunction(e){this.maskFunction=e}get inverted(){return void 0!==this.defines.INVERTED}set inverted(e){this.inverted&&!e?delete this.defines.INVERTED:e&&(this.defines.INVERTED="1"),this.needsUpdate=!0}isInverted(){return this.inverted}setInverted(e){this.inverted=e}get strength(){return this.uniforms.strength.value}set strength(e){this.uniforms.strength.value=e}getStrength(){return this.strength}setStrength(e){this.strength=e}},E0
vendor: 7,736 bytes, lines 5937-5962
5937=`#define sampleLevelZeroOffset(t, coord, offset) texture2D(t, coord + offset * texelSize) 5938#if __VERSION__ < 300 5939#define round(v) floor(v + 0.5) 5940#endif 5941#ifdef FRAMEBUFFER_PRECISION_HIGH 5942uniform mediump sampler2D inputBuffer; 5943#else 5944uniform lowp sampler2D inputBuffer; 5945#endif 5946uniform lowp sampler2D areaTexture;uniform lowp sampler2D searchTexture;uniform vec2 texelSize;uniform vec2 resolution;varying vec2 vUv;varying vec4 vOffset[3];varying vec2 vPixCoord;void movec(const in bvec2 c,inout vec2 variable,const in vec2 value){if(c.x){variable.x=value.x;}if(c.y){variable.y=value.y;}}void movec(const in bvec4 c,inout vec4 variable,const in vec4 value){movec(c.xy,variable.xy,value.xy);movec(c.zw,variable.zw,value.zw);}vec2 decodeDiagBilinearAccess(in vec2 e){e.r=e.r*abs(5.0*e.r-5.0*0.75);return round(e);}vec4 decodeDiagBilinearAccess(in vec4 e){e.rb=e.rb*abs(5.0*e.rb-5.0*0.75);return round(e);}vec2 searchDiag1(const in vec2 texCoord,const in vec2 dir,out vec2 e){vec4 coord=vec4(texCoord,-1.0,1.0);vec3 t=vec3(texelSize,1.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(coord.z<float(MAX_SEARCH_STEPS_DIAG_INT-1)&&coord.w>0.9)){break;}coord.xyz=t*vec3(dir,1.0)+coord.xyz;e=texture2D(inputBuffer,coord.xy).rg;coord.w=dot(e,vec2(0.5));}return coord.zw;}vec2 searchDiag2(const in vec2 texCoord,const in vec2 dir,out vec2 e){vec4 coord=vec4(texCoord,-1.0,1.0);coord.x+=0.25*texelSize.x;vec3 t=vec3(texelSize,1.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(coord.z<float(MAX_SEARCH_STEPS_DIAG_INT-1)&&coord.w>0.9)){break;}coord.xyz=t*vec3(dir,1.0)+coord.xyz;e=texture2D(inputBuffer,coord.xy).rg;e=decodeDiagBilinearAccess(e);coord.w=dot(e,vec2(0.5));}return coord.zw;}vec2 areaDiag(const in vec2 dist,const in vec2 e,const in float offset){vec2 texCoord=vec2(AREATEX_MAX_DISTANCE_DIAG,AREATEX_MAX_DISTANCE_DIAG)*e+dist;texCoord=AREATEX_PIXEL_SIZE*texCoord+0.5*AREATEX_PIXEL_SIZE;texCoord.x+=0.5;texCoord.y+=AREATEX_SUBTEX_SIZE*offset;return texture2D(areaTexture,texCoord).rg;}vec2 calculateDiagWeights(const in vec2 texCoord,const in vec2 e,const in vec4 subsampleIndices){vec2 weights=vec2(0.0);vec4 d;vec2 end;if(e.r>0.0){d.xz=searchDiag1(texCoord,vec2(-1.0,1.0),end);d.x+=float(end.y>0.9);}else{d.xz=vec2(0.0);}d.yw=searchDiag1(texCoord,vec2(1.0,-1.0),end);if(d.x+d.y>2.0){vec4 coords=vec4(-d.x+0.25,d.x,d.y,-d.y-0.25)*texelSize.xyxy+texCoord.xyxy;vec4 c;c.xy=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(-1,0)).rg;c.zw=sampleLevelZeroOffset(inputBuffer,coords.zw,vec2(1,0)).rg;c.yxwz=decodeDiagBilinearAccess(c.xyzw);vec2 cc=vec2(2.0)*c.xz+c.yw;movec(bvec2(step(0.9,d.zw)),cc,vec2(0.0));weights+=areaDiag(d.xy,cc,subsampleIndices.z);}d.xz=searchDiag2(texCoord,vec2(-1.0,-1.0),end);if(sampleLevelZeroOffset(inputBuffer,texCoord,vec2(1,0)).r>0.0){d.yw=searchDiag2(texCoord,vec2(1.0),end);d.y+=float(end.y>0.9);}else{d.yw=vec2(0.0);}if(d.x+d.y>2.0){vec4 coords=vec4(-d.x,-d.x,d.y,d.y)*texelSize.xyxy+texCoord.xyxy;vec4 c;c.x=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(-1,0)).g;c.y=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(0,-1)).r;c.zw=sampleLevelZeroOffset(inputBuffer,coords.zw,vec2(1,0)).gr;vec2 cc=vec2(2.0)*c.xz+c.yw;movec(bvec2(step(0.9,d.zw)),cc,vec2(0.0));weights+=areaDiag(d.xy,cc,subsampleIndices.w).gr;}return weights;}float searchLength(const in vec2 e,const in float offset){vec2 scale=SEARCHTEX_SIZE*vec2(0.5,-1.0);vec2 bias=SEARCHTEX_SIZE*vec2(offset,1.0);scale+=vec2(-1.0,1.0);bias+=vec2(0.5,-0.5);scale*=1.0/SEARCHTEX_PACKED_SIZE;bias*=1.0/SEARCHTEX_PACKED_SIZE;return texture2D(searchTexture,scale*e+bias).r;}float searchXLeft(in vec2 texCoord,const in float end){vec2 e=vec2(0.0,1.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(texCoord.x>end&&e.g>0.8281&&e.r==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(-2.0,0.0)*texelSize+texCoord;}float offset=-(255.0/127.0)*searchLength(e,0.0)+3.25;return texelSize.x*offset+texCoord.x;}float searchXRight(vec2 texCoord,const in float end){vec2 e=vec2(0.0,1.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(texCoord.x<end&&e.g>0.8281&&e.r==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(2.0,0.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e,0.5)+3.25;return-texelSize.x*offset+texCoord.x;}float searchYUp(vec2 texCoord,const in float end){vec2 e=vec2(1.0,0.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(texCoord.y>end&&e.r>0.8281&&e.g==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=-vec2(0.0,2.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e.gr,0.0)+3.25;return texelSize.y*offset+texCoord.y;}float searchYDown(vec2 texCoord,const in float end){vec2 e=vec2(1.0,0.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;i++){if(!(texCoord.y<end&&e.r>0.8281&&e.g==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(0.0,2.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e.gr,0.5)+3.25;return-texelSize.y*offset+texCoord.y;}vec2 area(const in vec2 dist,const in float e1,const in float e2,const in float offset){vec2 texCoord=vec2(AREATEX_MAX_DISTANCE)*round(4.0*vec2(e1,e2))+dist;texCoord=AREATEX_PIXEL_SIZE*texCoord+0.5*AREATEX_PIXEL_SIZE;texCoord.y=AREATEX_SUBTEX_SIZE*offset+texCoord.y;return texture2D(areaTexture,texCoord).rg;}void detectHorizontalCornerPattern(inout vec2 weights,const in vec4 texCoord,const in vec2 d){ 5947#if !defined(DISABLE_CORNER_DETECTION) 5948vec2 leftRight=step(d.xy,d.yx);vec2 rounding=(1.0-CORNER_ROUNDING_NORM)*leftRight;rounding/=leftRight.x+leftRight.y;vec2 factor=vec2(1.0);factor.x-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(0,1)).r;factor.x-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,1)).r;factor.y-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(0,-2)).r;factor.y-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,-2)).r;weights*=clamp(factor,0.0,1.0); 5949#endif 5950}void detectVerticalCornerPattern(inout vec2 weights,const in vec4 texCoord,const in vec2 d){ 5951#if !defined(DISABLE_CORNER_DETECTION) 5952vec2 leftRight=step(d.xy,d.yx);vec2 rounding=(1.0-CORNER_ROUNDING_NORM)*leftRight;rounding/=leftRight.x+leftRight.y;vec2 factor=vec2(1.0);factor.x-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(1,0)).g;factor.x-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,1)).g;factor.y-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(-2,0)).g;factor.y-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(-2,1)).g;weights*=clamp(factor,0.0,1.0); 5953#endif 5954}void main(){vec4 weights=vec4(0.0);vec4 subsampleIndices=vec4(0.0);vec2 e=texture2D(inputBuffer,vUv).rg;if(e.g>0.0){ 5955#if !defined(DISABLE_DIAG_DETECTION) 5956weights.rg=calculateDiagWeights(vUv,e,subsampleIndices);if(weights.r==-weights.g){ 5957#endif 5958vec2 d;vec3 coords;coords.x=searchXLeft(vOffset[0].xy,vOffset[2].x);coords.y=vOffset[1].y;d.x=coords.x;float e1=texture2D(inputBuffer,coords.xy).r;coords.z=searchXRight(vOffset[0].zw,vOffset[2].y);d.y=coords.z;d=round(resolution.xx*d+-vPixCoord.xx);vec2 sqrtD=sqrt(abs(d));float e2=sampleLevelZeroOffset(inputBuffer,coords.zy,vec2(1,0)).r;weights.rg=area(sqrtD,e1,e2,subsampleIndices.y);coords.y=vUv.y;detectHorizontalCornerPattern(weights.rg,coords.xyzy,d); 5959#if !defined(DISABLE_DIAG_DETECTION) 5960}else{e.r=0.0;} 5961#endif 5962}if(e.r>0.0){vec2 d;vec3 coords;coords.y=searchYUp(vOffset[1].xy,vOffset[2].z);coords.x=vOffset[0].x;d.x=coords.y;float e1=texture2D(inputBuffer,coords.xy).g;coords.z=searchYDown(vOffset[1].zw,vOffset[2].w);d.y=coords.z;d=round(resolution.yy*d-vPixCoord.yy);vec2 sqrtD=sqrt(abs(d));float e2=sampleLevelZeroOffset(inputBuffer,coords.xz,vec2(0,1)).g;weights.ba=area(sqrtD,e1,e2,subsampleIndices.x);coords.x=vUv.x;detectVerticalCornerPattern(weights.ba,coords.xyxz,d);}gl_FragColor=weights;}`,
vendor: 4,345 bytes, line 5962
5962E1=class extends r5{constructor(e=new tQ,t=new tQ){super({name:"SMAAWeightsMaterial",defines:{MAX_SEARCH_STEPS_INT:"16",MAX_SEARCH_STEPS_FLOAT:"16.0",MAX_SEARCH_STEPS_DIAG_INT:"8",MAX_SEARCH_STEPS_DIAG_FLOAT:"8.0",CORNER_ROUNDING:"25",CORNER_ROUNDING_NORM:"0.25",AREATEX_MAX_DISTANCE:"16.0",AREATEX_MAX_DISTANCE_DIAG:"20.0",AREATEX_PIXEL_SIZE:"(1.0 / vec2(160.0, 560.0))",AREATEX_SUBTEX_SIZE:"(1.0 / 7.0)",SEARCHTEX_SIZE:"vec2(66.0, 33.0)",SEARCHTEX_PACKED_SIZE:"vec2(64.0, 16.0)"},uniforms:{inputBuffer:new lD(null),searchTexture:new lD(null),areaTexture:new lD(null),resolution:new lD(t),texelSize:new lD(e)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:E0,vertexShader:"uniform vec2 texelSize;uniform vec2 resolution;varying vec2 vUv;varying vec4 vOffset[3];varying vec2 vPixCoord;void main(){vUv=position.xy*0.5+0.5;vPixCoord=vUv*resolution;vOffset[0]=vUv.xyxy+texelSize.xyxy*vec4(-0.25,-0.125,1.25,-0.125);vOffset[1]=vUv.xyxy+texelSize.xyxy*vec4(-0.125,-0.25,-0.125,1.25);vOffset[2]=vec4(vOffset[0].xz,vOffset[1].yw)+vec4(-2.0,2.0,-2.0,2.0)*texelSize.xxyy*MAX_SEARCH_STEPS_FLOAT;gl_Position=vec4(position.xy,1.0,1.0);}"}),this.toneMapped=!1}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}get searchTexture(){return this.uniforms.searchTexture.value}set searchTexture(e){this.uniforms.searchTexture.value=e}get areaTexture(){return this.uniforms.areaTexture.value}set areaTexture(e){this.uniforms.areaTexture.value=e}setLookupTextures(e,t){this.searchTexture=e,this.areaTexture=t}get orthogonalSearchSteps(){return Number(this.defines.MAX_SEARCH_STEPS_INT)}set orthogonalSearchSteps(e){let t=Math.min(Math.max(e,0),112);this.defines.MAX_SEARCH_STEPS_INT=t.toFixed("0"),this.defines.MAX_SEARCH_STEPS_FLOAT=t.toFixed("1"),this.needsUpdate=!0}setOrthogonalSearchSteps(e){this.orthogonalSearchSteps=e}get diagonalSearchSteps(){return Number(this.defines.MAX_SEARCH_STEPS_DIAG_INT)}set diagonalSearchSteps(e){let t=Math.min(Math.max(e,0),20);this.defines.MAX_SEARCH_STEPS_DIAG_INT=t.toFixed("0"),this.defines.MAX_SEARCH_STEPS_DIAG_FLOAT=t.toFixed("1"),this.needsUpdate=!0}setDiagonalSearchSteps(e){this.diagonalSearchSteps=e}get diagonalDetection(){return void 0===this.defines.DISABLE_DIAG_DETECTION}set diagonalDetection(e){e?delete this.defines.DISABLE_DIAG_DETECTION:this.defines.DISABLE_DIAG_DETECTION="1",this.needsUpdate=!0}isDiagonalDetectionEnabled(){return this.diagonalDetection}setDiagonalDetectionEnabled(e){this.diagonalDetection=e}get cornerRounding(){return Number(this.defines.CORNER_ROUNDING)}set cornerRounding(e){let t=Math.min(Math.max(e,0),100);this.defines.CORNER_ROUNDING=t.toFixed("4"),this.defines.CORNER_ROUNDING_NORM=(t/100).toFixed("4"),this.needsUpdate=!0}setCornerRounding(e){this.cornerRounding=e}get cornerDetection(){return void 0===this.defines.DISABLE_CORNER_DETECTION}set cornerDetection(e){e?delete this.defines.DISABLE_CORNER_DETECTION:this.defines.DISABLE_CORNER_DETECTION="1",this.needsUpdate=!0}isCornerRoundingEnabled(){return this.cornerDetection}setCornerRoundingEnabled(e){this.cornerDetection=e}setSize(e,t){let i=this.uniforms;i.texelSize.value.set(1/e,1/t),i.resolution.value.set(e,t)}},E2=new r6,E3=null,E4=class{constructor(e="Pass",t=new nb,i=E2){this.name=e,this.renderer=null,this.scene=t,this.camera=i,this.screen=null,this.rtt=!0,this.needsSwap=!0,this.needsDepthTexture=!1,this.enabled=!0}get renderToScreen(){return!this.rtt}set renderToScreen(e){if(this.rtt===e){let t=this.getFullscreenMaterial();null!==t&&(t.needsUpdate=!0),this.rtt=!e}}setRenderer(e){this.renderer=e}isEnabled(){return this.enabled}setEnabled(e){this.enabled=e}get fullscreenMaterial(){return null!==this.screen?this.screen.material:null}set fullscreenMaterial(e){let t=this.screen;null!==t?t.material=e:((t=new rK(function(){if(null===E3){let e=new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),t=new Float32Array([0,0,2,0,0,2]);void 0!==(E3=new rz).setAttribute?(E3.setAttribute("position",new rM(e,3)),E3.setAttribute("uv",new rM(t,2))):(E3.addAttribute("position",new rM(e,3)),E3.addAttribute("uv",new rM(t,2)))}return E3}(),e)).frustumCulled=!1,null===this.scene&&(this.scene=new nb),this.scene.add(t),this.screen=t)}getFullscreenMaterial(){return this.fullscreenMaterial}setFullscreenMaterial(e){this.fullscreenMaterial=e}getDepthTexture(){return null}
5962setDepthTexture(e,t=3200){}render(e,t,i,r,s){throw Error("Render method not implemented!")}setSize(e,t){}initialize(e,t,i){}dispose(){for(let e of Object.keys(this)){let t=this[e];if(null!==t&&"object"==typeof t&&"function"==typeof t.dispose){if(t instanceof nb||t===this.renderer)continue;this[e].dispose()}}}},E5=class extends E4{constructor(e,t=!0){super("CopyPass"),this.fullscreenMaterial=new EG,this.needsSwap=!1,this.renderTarget=e,void 0===e&&(this.renderTarget=new id(1,1,{minFilter:1006,magFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTarget.texture.name="CopyPass.Target"),this.autoResize=t}get resize(){return this.autoResize}set resize(e){this.autoResize=e}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}setAutoResizeEnabled(e){this.autoResize=e}render(e,t,i,r,s){this.fullscreenMaterial.inputBuffer=t.texture,e.setRenderTarget(this.renderToScreen?null:this.renderTarget),e.render(this.scene,this.camera)}setSize(e,t){this.autoResize&&this.renderTarget.setSize(e,t)}initialize(e,t,i){void 0!==i&&(this.renderTarget.texture.type=i,1009!==i?this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1":3001===e.outputEncoding&&(this.renderTarget.texture.encoding=3001))}},E6=class extends E4{constructor(){super("ClearMaskPass",null,null),this.needsSwap=!1}render(e,t,i,r,s){let a=e.state.buffers.stencil;a.setLocked(!1),a.setTest(!1)}},E8=new ii,E9=class extends E4{constructor(e=!0,t=!0,i=!1){super("ClearPass",null,null),this.needsSwap=!1,this.color=e,this.depth=t,this.stencil=i,this.overrideClearColor=null,this.overrideClearAlpha=-1}setClearFlags(e,t,i){this.color=e,this.depth=t,this.stencil=i}getOverrideClearColor(){return this.overrideClearColor}setOverrideClearColor(e){this.overrideClearColor=e}getOverrideClearAlpha(){return this.overrideClearAlpha}setOverrideClearAlpha(e){this.overrideClearAlpha=e}render(e,t,i,r,s){let a=this.overrideClearColor,o=this.overrideClearAlpha,l=e.getClearAlpha(),h=null!==a,c=o>=0;h?(E8.copy(e.getClearColor(E8)),e.setClearColor(a,c?o:l)):c&&e.setClearAlpha(o),e.setRenderTarget(this.renderToScreen?null:t),e.clear(this.color,this.depth,this.stencil),h?e.setClearColor(E8,l):c&&e.setClearAlpha(l)}},E7=class extends tL{constructor(e,t=-1,i=-1,r=1){super(),this.resizable=e,this.base=new tQ(1,1),this.preferred=new tQ(t,i),this.target=this.preferred,this.s=r}get width(){let{base:e,preferred:t,scale:i}=this;return -1!==t.width?t.width:-1!==t.height?Math.round(t.height*(e.width/Math.max(e.height,1))):Math.round(e.width*i)}set width(e){this.preferredWidth=e}get height(){let{base:e,preferred:t,scale:i}=this;return -1!==t.height?t.height:-1!==t.width?Math.round(t.width/Math.max(e.width/Math.max(e.height,1),1)):Math.round(e.height*i)}set height(e){this.preferredHeight=e}getWidth(){return this.width}getHeight(){return this.height}get scale(){return this.s}set scale(e){this.s!==e&&(this.s=e,this.preferred.setScalar(-1),this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}getScale(){return this.scale}setScale(e){this.scale=e}get baseWidth(){return this.base.width}set baseWidth(e){this.base.width!==e&&(this.base.width=e,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}getBaseWidth(){return this.base.width}setBaseWidth(e){this.base.width!==e&&(this.base.width=e,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}get baseHeight(){return this.base.height}set baseHeight(e){this.base.height!==e&&(this.base.height=e,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}getBaseHeight(){return this.baseHeight}setBaseHeight(e){this.baseHeight=e}setBaseSize(e,t){(this.base.width!==e||this.base.height!==t)&&(this.base.set(e,t),this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}get preferredWidth(){return this.preferred.width}set preferredWidth(e){this.preferred.width!==e&&(this.preferred.width=e,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}getPreferredWidth(){return this.preferredWidth}setPreferredWidth(e){this.preferredWidth=e}get preferredHeight(){return this.preferred.height}set preferredHeight(e){this.preferred.height!==e&&(this.preferred.height=e,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}getPreferredHeight(){return this.preferredHeight}setPreferredHeight(e){this.preferredHeight=e}setPreferredSize(e,t){(this.preferred.width!==e||this.preferred.height!==t)&&(this.preferred.set(e,t),this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}copy(e){this.base.set(e.getBaseWidth(),e.getBaseHeight()),this.preferred.set(e.getPreferredWidth(),e.getPreferredHeight()),this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height)}static get AUTO_SIZE(){return -1}},Ce=!1,Ct=class{constructor(e=null){this.originalMaterials=new Map,this.material=null,this.materials=null,this.materialsBackSide=null,this.materialsDoubleSide=null,this.materialsFlatShaded=null,this.materialsFlatShadedBackSide=null,this.materialsFlatShadedDoubleSide=null,this.setMaterial(e),this.meshCount=0,this.replaceMaterial=e=>{if(e.isMesh){let t;if(e.material.flatShading)switch(e.material.side){case 2:t=this.materialsFlatShadedDoubleSide;break;case 1:t=this.materialsFlatShadedBackSide;break;default:t=this.materialsFlatShaded}else switch(e.material.side){case 2:t=this.materialsDoubleSide;break;case 1:t=this.materialsBackSide;break;default:t=this.materials}this.originalMaterials.set(e,e.material),e.isSkinnedMesh?e.material=t[2]:e.isInstancedMesh?e.material=t[1]:e.material=t[0],++this.meshCount}}}setMaterial(e){if(this.disposeMaterials(),this.material=e,null!==e){let t=this.materials=[e.clone(),e.clone(),e.clone()];for(let i of t)i.uniforms=Object.assign({},e.uniforms),i.side=0;t[2].skinning=!0,this.materialsBackSide=t.map(t=>{let i=t.clone();return i.uniforms=Object.assign({},e.uniforms),i.side=1,i}),this.materialsDoubleSide=t.map(t=>{let i=t.clone();return i.uniforms=Object.assign({},e.uniforms),i.side=2,i}),this.materialsFlatShaded=t.map(t=>{let i=t.clone();return i.uniforms=Object.assign({},e.uniforms),i.flatShading=!0,i}),this.materialsFlatShadedBackSide=t.map(t=>{let i=t.clone();return i.uniforms=Object.assign({},e.uniforms),i.flatShading=!0,i.side=1,i}),this.materialsFlatShadedDoubleSide=t.map(t=>{let i=t.clone();return i.uniforms=Object.assign({},e.uniforms),i.flatShading=!0,i.side=2,i})}}render(e,t,i){let r=e.shadowMap.enabled;if(e.shadowMap.enabled=!1,Ce){let r=this.originalMaterials;for(let s of(this.meshCount=0,t.traverse(this.replaceMaterial),e.render(t,i),r))s[0].material=s[1];this.meshCount!==r.size&&r.clear()}else{let r=t.overrideMaterial;t.overrideMaterial=this.material,e.render(t,i),t.overrideMaterial=r}e.shadowMap.enabled=r}disposeMaterials(){if(null!==this.material)for(let e of this.materials.concat(this.materialsBackSide).concat(this.materialsDoubleSide).concat(this.materialsFlatShaded).concat(this.materialsFlatShadedBackSide).concat(this.materialsFlatShadedDoubleSide))e.dispose()}dispose(){this.originalMaterials.clear(),this.disposeMaterials()}static get workaroundEnabled(){return Ce}static set workaroundEnabled(e){Ce=e}}
vendor: 5,250 bytes, line 5962
5962,Ci=class extends E4{constructor(e,t,i=null){super("RenderPass",e,t),this.needsSwap=!1,this.clearPass=new E9,this.overrideMaterialManager=null===i?null:new Ct(i),this.ignoreBackground=!1,this.skipShadowMapUpdate=!1,this.selection=null}get renderToScreen(){return super.renderToScreen}set renderToScreen(e){super.renderToScreen=e,this.clearPass.renderToScreen=e}get overrideMaterial(){let e=this.overrideMaterialManager;return null!==e?e.material:null}set overrideMaterial(e){let t=this.overrideMaterialManager;null!==e?null!==t?t.setMaterial(e):this.overrideMaterialManager=new Ct(e):null!==t&&(t.dispose(),this.overrideMaterialManager=null)}getOverrideMaterial(){return this.overrideMaterial}setOverrideMaterial(e){this.overrideMaterial=e}get clear(){return this.clearPass.enabled}set clear(e){this.clearPass.enabled=e}getSelection(){return this.selection}setSelection(e){this.selection=e}isBackgroundDisabled(){return this.ignoreBackground}setBackgroundDisabled(e){this.ignoreBackground=e}isShadowMapDisabled(){return this.skipShadowMapUpdate}setShadowMapDisabled(e){this.skipShadowMapUpdate=e}getClearPass(){return this.clearPass}render(e,t,i,r,s){let a=this.scene,o=this.camera,l=this.selection,h=o.layers.mask,c=a.background,d=e.shadowMap.autoUpdate,u=this.renderToScreen?null:t;null!==l&&o.layers.set(l.getLayer()),this.skipShadowMapUpdate&&(e.shadowMap.autoUpdate=!1),(this.ignoreBackground||null!==this.clearPass.overrideClearColor)&&(a.background=null),this.clearPass.enabled&&this.clearPass.render(e,t),e.setRenderTarget(u),null!==this.overrideMaterialManager?this.overrideMaterialManager.render(e,a,o):e.render(a,o),o.layers.mask=h,a.background=c,e.shadowMap.autoUpdate=d}},Cr=class extends E4{constructor(e,t,{resolutionScale:i=1,width:r=E7.AUTO_SIZE,height:s=E7.AUTO_SIZE,renderTarget:a}={}){super("DepthPass"),this.needsSwap=!1,this.renderPass=new Ci(e,t,new ni({depthPacking:3201}));let o=this.renderPass;o.skipShadowMapUpdate=!0,o.ignoreBackground=!0;let l=o.getClearPass();l.overrideClearColor=new ii(16777215),l.overrideClearAlpha=1,this.renderTarget=a,void 0===this.renderTarget&&(this.renderTarget=new id(1,1,{minFilter:1003,magFilter:1003,stencilBuffer:!1}),this.renderTarget.texture.name="DepthPass.Target");let h=this.resolution=new E7(this,r,s,i);h.addEventListener("change",e=>this.setSize(h.baseWidth,h.baseHeight))}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}getResolution(){return this.resolution}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}render(e,t,i,r,s){let a=this.renderToScreen?null:this.renderTarget;this.renderPass.render(e,a)}setSize(e,t){let i=this.resolution;i.setBaseSize(e,t),this.renderTarget.setSize(i.width,i.height)}};new Float32Array([255/256/16777216,255/256/65536,255/256/256,255/256]);var Cs={SKIP:0,ADD:1,ALPHA:2,AVERAGE:3,COLOR_BURN:4,COLOR_DODGE:5,DARKEN:6,DIFFERENCE:7,EXCLUSION:8,LIGHTEN:9,MULTIPLY:10,DIVIDE:11,NEGATION:12,NORMAL:13,OVERLAY:14,REFLECT:15,SCREEN:16,SOFT_LIGHT:17,SUBTRACT:18},Ca=new Map([[Cs.SKIP,null],[Cs.ADD,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return min(x+y,1.0)*opacity+x*(1.0-opacity);}"],[Cs.ALPHA,"vec3 blend(const in vec3 x,const in vec3 y,const in float opacity){return y*opacity+x*(1.0-opacity);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){float a=min(y.a,opacity);return vec4(blend(x.rgb,y.rgb,a),max(x.a,a));}"],[Cs.AVERAGE,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(x+y)*0.5*opacity+x*(1.0-opacity);}"],[Cs.COLOR_BURN,"float blend(const in float x,const in float y){return(y==0.0)?y:max(1.0-(1.0-x)/y,0.0);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[Cs.COLOR_DODGE,"float blend(const in float x,const in float y){return(y==1.0)?y:min(x/(1.0-y),1.0);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[Cs.DARKEN,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return min(x,y)*opacity+x*(1.0-opacity);}"],[Cs.DIFFERENCE,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return abs(x-y)*opacity+x*(1.0-opacity);}"],[Cs.EXCLUSION,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(x+y-2.0*x*y)*opacity+x*(1.0-opacity);}"],[Cs.LIGHTEN,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return max(x,y)*opacity+x*(1.0-opacity);}"],[Cs.MULTIPLY,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return x*y*opacity+x*(1.0-opacity);}"],[Cs.DIVIDE,"float blend(const in float x,const in float y){return(y>0.0)?min(x/y,1.0):1.0;}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[Cs.NEGATION,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(1.0-abs(1.0-x-y))*opacity+x*(1.0-opacity);}"],[Cs.NORMAL,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return y*
5962opacity+x*(1.0-opacity);}"],[Cs.OVERLAY,"float blend(const in float x,const in float y){return(x<0.5)?(2.0*x*y):(1.0-2.0*(1.0-x)*(1.0-y));}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[Cs.REFLECT,"float blend(const in float x,const in float y){return(y==1.0)?y:min(x*x/(1.0-y),1.0);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[Cs.SCREEN,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(1.0-(1.0-x)*(1.0-y))*opacity+x*(1.0-opacity);}"],[Cs.SOFT_LIGHT,"float blend(const in float x,const in float y){return(y<0.5)?(2.0*x*y+x*x*(1.0-2.0*y)):(sqrt(x)*(2.0*y-1.0)+2.0*x*(1.0-y));}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[Cs.SUBTRACT,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return max(x+y-1.0,0.0)*opacity+x*(1.0-opacity);}"]]),Cn=class extends tL{constructor(e,t=1){super(),this.f=e,this.opacity=new lD(t)}getOpacity(){return this.opacity.value}setOpacity(e){this.opacity.value=e}get blendFunction(){return this.f}set blendFunction(e){this.f=e,this.dispatchEvent({type:"change"})}getBlendFunction(){return this.blendFunction}setBlendFunction(e){this.blendFunction=e}getShaderCode(){return Ca.get(this.blendFunction)}},Co={NONE:0,DEPTH:1,CONVOLUTION:2},Cl=class extends tL{constructor(e,t,{attributes:i=Co.NONE,blendFunction:r=Cs.SCREEN,defines:s=new Map,uniforms:a=new Map,extensions:o=null,vertexShader:l=null}={}){super(),this.name=e,this.renderer=null,this.attributes=i,this.fragmentShader=t,this.vertexShader=l,this.defines=s,this.uniforms=a,this.extensions=o,this.blendMode=new Cn(r),this.blendMode.addEventListener("change",e=>this.setChanged())}getName(){return this.name}setRenderer(e){this.renderer=e}getDefines(){return this.defines}getUniforms(){return this.uniforms}getExtensions(){return this.extensions}getBlendMode(){return this.blendMode}getAttributes(){return this.attributes}setAttributes(e){this.attributes=e,this.setChanged()}getFragmentShader(){return this.fragmentShader}setFragmentShader(e){this.fragmentShader=e,this.setChanged()}getVertexShader(){return this.vertexShader}setVertexShader(e){this.vertexShader=e,this.setChanged()}setChanged(){this.dispatchEvent({type:"change"})}setDepthTexture(e,t=3200){}update(e,t,i){}setSize(e,t){}initialize(e,t,i){}dispose(){for(let e of Object.keys(this)){let t=this[e];if(null!==t&&"object"==typeof t&&"function"==typeof t.dispose){if(t instanceof nb||t===this.renderer)continue;this[e].dispose()}}}};function Ch(e,t,i){for(let r of t){let t="$1"+e+r.charAt(0).toUpperCase()+r.slice(1),s=RegExp("([^\\.])(\\b"+r+"\\b)","g");for(let e of i.entries())null!==e[1]&&i.set(e[0],e[1].replace(s,t))}}var Cc=class extends E4{constructor(e,...t){super("EffectPass"),this.fullscreenMaterial=new EQ(null,null,null,e),this.effects=t.sort((e,t)=>t.attributes-e.attributes),this.skipRendering=!1,this.uniformCount=0,this.varyingCount=0,this.minTime=1,this.maxTime=Number.POSITIVE_INFINITY}get encodeOutput(){return this.fullscreenMaterial.encodeOutput}set encodeOutput(e){this.fullscreenMaterial.encodeOutput=e}get dithering(){return this.fullscreenMaterial.dithering}set dithering(e){let t=this.fullscreenMaterial;t.dithering=e,t.needsUpdate=!0}verifyResources(){let e=this.renderer.capabilities,t=Math.min(e.maxFragmentUniforms,e.maxVertexUniforms);this.uniformCount>t&&console.warn("The current rendering context doesn't support more than "+t+" uniforms, but "+this.uniformCount+" were defined"),t=e.maxVaryings,this.varyingCount>t&&console.warn("The current rendering context doesn't support more than "+t+" varyings, but "+this.varyingCount+" were defined")}updateMaterial(){let e=EQ.Section,t=new Map([[e.FRAGMENT_HEAD,""],[e.FRAGMENT_MAIN_UV,""],[e.FRAGMENT_MAIN_IMAGE,""],[e.VERTEX_HEAD,""],[e.VERTEX_MAIN_SUPPORT,""]]),i=new Map,r=new Map,s=new Map,a=new Set,o=0,l=0,h=0,c=!1,d=!1;for(let e of this.effects)if(e.blendMode.blendFunction===Cs.SKIP)h|=e.getAttributes()&Co.DEPTH;else if((h&e.getAttributes()&Co.CONVOLUTION)!=0)console.error("Convolution effects cannot be merged",e);else{h|=e.getAttributes();let u=function(e,t,i,r,s,a,o){let l=new Map([["fragment",t.getFragmentShader()],["vertex",t.getVertexShader()]]),h=void 0!==l.get("fragment")&&/mainImage/.test(l.get("fragment")),c=void 0!==l.get("fragment")&&/mainUv/.test(l.get("fragment")),d=[],u=[],p=!1,f=!1;if(void 0===l.get("fragment"))console.error("Missing fragment shader",t);else if(c&&(o&Co.CONVOLUTION)!=0)console.error("Effects that transform UV coordinates are incompatible with convolution effects",t);else if(h||c){let m=/(?:\w+\s+(\w+)\([\w\s,]*\)\s*{[^}]+}
5962)/g,g=EQ.Section;if(c){let t=` ${e}MainUv(UV); 5963`;i.set(g.FRAGMENT_MAIN_UV,i.get(g.FRAGMENT_MAIN_UV)+t),p=!0}if(null!==l.get("vertex")&&/mainSupport/.test(l.get("vertex"))){let t=` ${e}MainSupport(`;t+=/mainSupport *\([\w\s]*?uv\s*?\)/.test(l.get("vertex"))?`vUv); 5964`:`); 5965`,i.set(g.VERTEX_MAIN_SUPPORT,i.get(g.VERTEX_MAIN_SUPPORT)+t),d=d.concat([...l.get("vertex").matchAll(/(?:varying\s+\w+\s+(\w*))/g)].map(e=>e[1])),u=u.concat(d).concat([...l.get("vertex").matchAll(m)].map(e=>e[1]))}u=(u=(u=u.concat([...l.get("fragment").matchAll(m)].map(e=>e[1]))).concat([...t.defines.keys()].map(e=>e.replace(/\([\w\s,]*\)/g,"")))).concat([...t.uniforms.keys()]),t.uniforms.forEach((t,i)=>a.set(e+i.charAt(0).toUpperCase()+i.slice(1),t)),t.defines.forEach((t,i)=>s.set(e+i.charAt(0).toUpperCase()+i.slice(1),t)),Ch(e,u,s),Ch(e,u,l);let v=t.blendMode;if(r.set(v.blendFunction,v),h){let t=`${e}MainImage(color0, UV, `;(o&Co.DEPTH)!=0&&/MainImage *\([\w\s,]*?depth[\w\s,]*?\)/.test(l.get("fragment"))&&(t+="depth, ",f=!0),t+=`color1); 5966 `;let r=e+"BlendOpacity";a.set(r,v.opacity),t+=`color0 = blend${v.blendFunction}(color0, color1, ${r}); 5967 5968 `,i.set(g.FRAGMENT_MAIN_IMAGE,i.get(g.FRAGMENT_MAIN_IMAGE)+t),t=`uniform float ${r}; 5969 5970`,i.set(g.FRAGMENT_HEAD,i.get(g.FRAGMENT_HEAD)+t)}i.set(g.FRAGMENT_HEAD,i.get(g.FRAGMENT_HEAD)+l.get("fragment")+` 5971`),null!==l.get("vertex")&&i.set(g.VERTEX_HEAD,i.get(g.VERTEX_HEAD)+l.get("vertex")+` 5972`)}
5972else console.error("The fragment shader contains neither a mainImage nor a mainUv function",t);return{varyings:d,transformedUv:p,readDepth:f}}("e"+o++,e,t,i,r,s,h);if(l+=u.varyings.length,c=c||u.transformedUv,d=d||u.readDepth,null!==e.extensions)for(let t of e.extensions)a.add(t)}let u=/\bblend\b/g;for(let r of i.values()){let i=r.getShaderCode().replace(u,`blend${r.blendFunction}`);t.set(e.FRAGMENT_HEAD,t.get(e.FRAGMENT_HEAD)+i+` 5973`)}if((h&Co.DEPTH)!=0){if(d){let i=`float depth = readDepth(UV); 5974 5975 `;t.set(e.FRAGMENT_MAIN_IMAGE,i+t.get(e.FRAGMENT_MAIN_IMAGE))}this.needsDepthTexture=null===this.getDepthTexture()}else this.needsDepthTexture=!1;if(c){let i=`vec2 transformedUv = vUv; 5976`;t.set(e.FRAGMENT_MAIN_UV,i+t.get(e.FRAGMENT_MAIN_UV)),r.set("UV","transformedUv")}else r.set("UV","vUv");t.forEach((e,t,i)=>i.set(t,e.trim().replace(/^#/,` 5977#`))),this.uniformCount=s.size,this.varyingCount=l,this.skipRendering=0===o,this.needsSwap=!this.skipRendering,this.fullscreenMaterial.setShaderParts(t).setExtensions(a).setUniforms(s).setDefines(r)}recompile(){this.updateMaterial(),this.verifyResources()}getDepthTexture(){return this.fullscreenMaterial.depthBuffer}setDepthTexture(e,t=3200){for(let i of(this.fullscreenMaterial.depthBuffer=e,this.fullscreenMaterial.depthPacking=t,this.effects))i.setDepthTexture(e,t)}render(e,t,i,r,s){for(let i of this.effects)i.update(e,t,r);if(!this.skipRendering||this.renderToScreen){let s=this.fullscreenMaterial;s.inputBuffer=t.texture,s.time+=r,e.setRenderTarget(this.renderToScreen?null:i),e.render(this.scene,this.camera)}}setSize(e,t){for(let i of(this.fullscreenMaterial.setSize(e,t),this.effects))i.setSize(e,t)}initialize(e,t,i){for(let r of(this.renderer=e,this.effects))r.initialize(e,t,i),r.addEventListener("change",e=>this.handleEvent(e));this.updateMaterial(),this.verifyResources(),void 0!==i&&1009!==i&&(this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1")}dispose(){for(let e of(super.dispose(),this.effects))e.dispose()}handleEvent(e){"change"===e.type&&this.recompile()}},Cd=[new Float32Array([0,0]),new Float32Array([0,1,1]),new Float32Array([0,1,1,2]),new Float32Array([0,1,2,2,3]),new Float32Array([0,1,2,3,4,4,5]),new Float32Array([0,1,2,3,4,5,7,8,9,10])],Cu=class extends E4{constructor({resolutionScale:e=.5,width:t=E7.AUTO_SIZE,height:i=E7.AUTO_SIZE,kernelSize:r=Cv.LARGE}={}){super("KawaseBlurPass"),this.renderTargetA=new id(1,1,{minFilter:1006,magFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTargetA.texture.name="Blur.Target.A",this.renderTargetB=this.renderTargetA.clone(),this.renderTargetB.texture.name="Blur.Target.B";let s=this.resolution=new E7(this,t,i,e);s.addEventListener("change",e=>this.setSize(s.baseWidth,s.baseHeight)),this.blurMaterial=new EV,this.ditheredBlurMaterial=new EV,this.ditheredBlurMaterial.uniforms.scale=this.blurMaterial.uniforms.scale,this.ditheredBlurMaterial.dithering=!0,this.dithering=!1,this.kernelSize=r}getResolution(){return this.resolution}get width(){return this.resolution.width}set width(e){this.resolution.preferredWidth=e}get height(){return this.resolution.height}set height(e){this.resolution.preferredHeight=e}get scale(){return this.blurMaterial.scale}set scale(e){this.blurMaterial.scale=e}getScale(){return this.blurMaterial.scale}setScale(e){this.blurMaterial.scale=e}getKernelSize(){return this.kernelSize}setKernelSize(e){this.kernelSize=e}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}render(e,t,i,r,s){let a=this.scene,o=this.camera,l=this.renderTargetA,h=this.renderTargetB,c=Cd[this.kernelSize],d=this.blurMaterial,u=t,p,f;for(this.fullscreenMaterial=d,p=0,f=c.length-1;p<f;++p){let t=(1&p)==0?l:h;d.kernel=c[p],d.inputBuffer=u.texture,e.setRenderTarget(t),e.render(a,o),u=t}this.dithering&&(d=this.ditheredBlurMaterial,this.fullscreenMaterial=d),d.kernel=c[p],d.inputBuffer=u.texture,e.setRenderTarget(this.renderToScreen?null:i),e.render(a,o)}setSize(e,t){let i=this.resolution;i.setBaseSize(e,t);let r=i.width,s=i.height;this.renderTargetA.setSize(r,s),this.renderTargetB.setSize(r,s),this.blurMaterial.setSize(r,s),this.ditheredBlurMaterial.setSize(r,s)}initialize(e,t,i){void 0!==i&&(this.renderTargetA.texture.type=i,this.renderTargetB.texture.type=i,1009!==i?(this.blurMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1",this.ditheredBlurMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1"):3001===e.outputEncoding&&(this.renderTargetA.texture.encoding=3001,this.renderTargetB.texture.encoding=3001))}static get AUTO_SIZE(){return E7.AUTO_SIZE}}
5977,Cp=class extends E4{constructor({width:e=E7.AUTO_SIZE,height:t=E7.AUTO_SIZE,renderTarget:i,luminanceRange:r,colorOutput:s}={}){super("LuminancePass"),this.fullscreenMaterial=new EZ(s,r),this.needsSwap=!1,this.renderTarget=i,void 0===this.renderTarget&&(this.renderTarget=new id(1,1,{minFilter:1006,magFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTarget.texture.name="LuminancePass.Target",this.renderTarget.texture.generateMipmaps=!1);let a=this.resolution=new E7(this,e,t);a.addEventListener("change",e=>this.setSize(a.baseWidth,a.baseHeight))}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}getResolution(){return this.resolution}render(e,t,i,r,s){this.fullscreenMaterial.inputBuffer=t.texture,e.setRenderTarget(this.renderToScreen?null:this.renderTarget),e.render(this.scene,this.camera)}setSize(e,t){let i=this.resolution;i.setBaseSize(e,t),this.renderTarget.setSize(i.width,i.height)}initialize(e,t,i){void 0!==i&&1009!==i&&(this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1")}},Cf=class extends E4{constructor(e,t){super("MaskPass",e,t),this.needsSwap=!1,this.clearPass=new E9(!1,!1,!0),this.inverse=!1}get inverted(){return this.inverse}set inverted(e){this.inverse=e}get clear(){return this.clearPass.enabled}set clear(e){this.clearPass.enabled=e}getClearPass(){return this.clearPass}isInverted(){return this.inverted}setInverted(e){this.inverted=e}render(e,t,i,r,s){let a=e.getContext(),o=e.state.buffers,l=this.scene,h=this.camera,c=this.clearPass,d=this.inverted?0:1;o.color.setMask(!1),o.depth.setMask(!1),o.color.setLocked(!0),o.depth.setLocked(!0),o.stencil.setTest(!0),o.stencil.setOp(a.REPLACE,a.REPLACE,a.REPLACE),o.stencil.setFunc(a.ALWAYS,d,4294967295),o.stencil.setClear(1-d),o.stencil.setLocked(!0),this.clearPass.enabled&&(this.renderToScreen?c.render(e,null):(c.render(e,t),c.render(e,i))),this.renderToScreen?e.setRenderTarget(null):(e.setRenderTarget(t),e.render(l,h),e.setRenderTarget(i)),e.render(l,h),o.color.setLocked(!1),o.depth.setLocked(!1),o.stencil.setLocked(!1),o.stencil.setFunc(a.EQUAL,1,4294967295),o.stencil.setOp(a.KEEP,a.KEEP,a.KEEP),o.stencil.setLocked(!0)}},Cm=class extends E4{constructor(e,t="inputBuffer"){super("ShaderPass"),this.fullscreenMaterial=e,this.inputBufferUniform=null,this.setInput(t)}setInput(e){if(this.inputBufferUniform=null,null!==this.fullscreenMaterial){let t=this.fullscreenMaterial.uniforms;void 0!==t&&void 0!==t[e]&&(this.inputBufferUniform=t[e])}}render(e,t,i,r,s){null!==this.inputBufferUniform&&null!==t&&(this.inputBufferUniform.value=t.texture),e.setRenderTarget(this.renderToScreen?null:i),e.render(this.scene,this.camera)}initialize(e,t,i){void 0!==i&&1009!==i&&(this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1")}},Cg=class{constructor(){this.previousTime=0,this.currentTime=0,this.delta=0,this.fixedDelta=1e3/60,this.elapsed=0,this.timescale=1,this.fixedDeltaEnabled=!1,this.autoReset=!1}setFixedDeltaEnabled(e){return this.fixedDeltaEnabled=e,this}isAutoResetEnabled(e){return this.autoReset}setAutoResetEnabled(e){return"u">typeof document&&void 0!==document.hidden&&(e?document.addEventListener("visibilitychange",this):document.removeEventListener("visibilitychange",this),this.autoReset=e),this}getDelta(){return .001*this.delta}getFixedDelta(){return .001*this.fixedDelta}setFixedDelta(e){return this.fixedDelta=1e3*e,this}getElapsed(){return .001*this.elapsed}getTimescale(){return this.timescale}setTimescale(e){return this.timescale=e,this}update(e){return this.fixedDeltaEnabled?this.delta=this.fixedDelta:(this.previousTime=this.currentTime,this.currentTime=void 0!==e?e:performance.now(),this.delta=this.currentTime-this.previousTime),this.delta*=this.timescale,this.elapsed+=this.delta,this}reset(){return this.delta=0,this.elapsed=0,this.currentTime=performance.now(),this}handleEvent(e){document.hidden||(this.currentTime=performance.now())}dispose(){this.setAutoResetEnabled(!1)}},Cv={MEDIUM:2,LARGE:3,HUGE:5},Cy=`#ifdef FRAMEBUFFER_PRECISION_HIGH 5978uniform mediump sampler2D map; 5979#else 5980uniform lowp sampler2D map; 5981#endif 5982uniform float intensity;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){outputColor=clamp(texture2D(map,uv)*intensity,0.0,1.0);}`,Cx=class extends Cl{constructor({blendFunction:e=Cs.SCREEN,luminanceThreshold:t=.9,luminanceSmoothing:i=.025,resolutionScale:r=.5,intensity:s=1,width:a=E7.AUTO_SIZE,height:o=E7.AUTO_SIZE,kernelSize:l=Cv.LARGE}={}){super("BloomEffect",Cy,{blendFunction:e,uniforms:new Map([["map",new lD(null)],["intensity",new lD(s)]])}),this.renderTarget=new id(1,1,{minFilter:1006,magFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTarget.texture.name="Bloom.Target",this.renderTarget.texture.generateMipmaps=!1,this.uniforms.get("map").value=this.renderTarget.texture,this.luminancePass=new Cp({renderTarget:this.renderTarget,colorOutput:!0}),this.luminanceMaterial.threshold=t,this.luminanceMaterial.smoothingFactor=i,this.blurPass=new Cu({resolutionScale:r,width:a,height:o,kernelSize:l});let h=this.blurPass.getResolution();h.addEventListener("change",e=>this.setSize(h.baseWidth,h.baseHeight))}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}get resolution(){return this.blurPass.resolution}getResolution(){return this.blurPass.resolution}getBlurPass(){return this.blurPass}getLuminancePass(){return this.luminancePass}get luminanceMaterial(){return this.luminancePass.fullscreenMaterial}getLuminanceMaterial(){return this.luminancePass.fullscreenMaterial}get width(){return this.resolution.width}set width(e){this.resolution.preferredWidth=e}get height(){return this.resolution.height}set height(e){this.resolution.preferredHeight=e}get dithering(){return this.blurPass.dithering}set dithering(e){this.blurPass.dithering=e}get kernelSize(){return this.blurPass.kernelSize}set kernelSize(e){this.blurPass.kernelSize=e}get distinction(){return console.warn(this.name,"distinction was removed"),1}set distinction(e){console.warn(this.name,"distinction was removed")}get intensity(){return this.uniforms.get("intensity").value}set intensity(e){this.uniforms.get("intensity").value=e}getIntensity(){return this.intensity}setIntensity(e){this.intensity=e}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}update(e,t,i){let r=this.renderTarget;this.luminancePass.enabled?(this.luminancePass.render(e,t,r),this.blurPass.render(e,r,r)):this.blurPass.render(e,t,r)}setSize(e,t){let i=this.resolution;i.setBaseSize(e,t),this.renderTarget.setSize(i.width,i.height),this.luminancePass.resolution.copy(i)}initialize(e,t,i){this.blurPass.initialize(e,t,i),void 0!==i&&(this.renderTarget.texture.type=i,3001===e.outputEncoding&&(this.renderTarget.texture.encoding=3001))}},Cb=class extends Cl{constructor({blendFunction:e=Cs.NORMAL,brightness:t=0,contrast:i=0}={}){super("BrightnessContrastEffect","uniform float brightness;uniform float contrast;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 color=inputColor.rgb+vec3(brightness-0.5);if(contrast>0.0){color/=vec3(1.0-contrast);}else{color*=vec3(1.0+contrast);}outputColor=vec4(min(color+vec3(0.5),1.0),inputColor.a);}",{blendFunction:e,uniforms:new Map([["brightness",new lD(t)],["contrast",new lD(i)]])})}get brightness(){return this.uniforms.get("brightness").value}set brightness(e){this.uniforms.get("brightness").value=e}getBrightness(e){return this.brightness}setBrightness(e){this.brightness=e}get contrast(){return this.uniforms.get("contrast").value}set contrast(e){this.uniforms.get("contrast").value=e}getContrast(e){return this.contrast}setContrast(e){this.contrast=e}},Cw=class extends Cl{constructor(e=Cs.NORMAL){super("ColorAverageEffe
5982ct","void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){outputColor=vec4(vec3(average(inputColor.rgb)),inputColor.a);}",{blendFunction:e})}},CS=class extends Cl{constructor({blendFunction:e=Cs.NORMAL,offset:t=new tQ(.001,5e-4)}={}){super("ChromaticAberrationEffect","varying vec2 vUvR;varying vec2 vUvB;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec2 ra=texture2D(inputBuffer,vUvR).ra;vec2 ba=texture2D(inputBuffer,vUvB).ba;outputColor=vec4(ra.x,inputColor.g,ba.x,max(max(ra.y,ba.y),inputColor.a));}",{vertexShader:"uniform vec2 offset;varying vec2 vUvR;varying vec2 vUvB;void mainSupport(const in vec2 uv){vec2 shift=offset*vec2(1.0,aspect);vUvR=uv+shift;vUvB=uv-shift;}",blendFunction:e,attributes:Co.CONVOLUTION,uniforms:new Map([["offset",new lD(t)]])})}get offset(){return this.uniforms.get("offset").value}set offset(e){this.uniforms.get("offset").value=e}getOffset(){return this.offset}setOffset(e){this.offset=e}},C_=`#ifdef FRAMEBUFFER_PRECISION_HIGH 5983uniform mediump sampler2D nearColorBuffer;uniform mediump sampler2D farColorBuffer; 5984#else 5985uniform lowp sampler2D nearColorBuffer;uniform lowp sampler2D farColorBuffer; 5986#endif 5987uniform lowp sampler2D nearCoCBuffer;uniform float scale;void mainImage(const in vec4 inputColor,const in vec2 uv,const in float depth,out vec4 outputColor){vec4 colorNear=texture2D(nearColorBuffer,uv);vec4 colorFar=texture2D(farColorBuffer,uv);float CoCNear=texture2D(nearCoCBuffer,uv).r;CoCNear=min(CoCNear*scale,1.0);vec4 result=inputColor*(1.0-colorFar.a)+colorFar;result=mix(result,colorNear,CoCNear);outputColor=result;}`,CA=class extends Cl{constructor(e,{blendFunction:t=Cs.NORMAL,worldFocusDistance:i,worldFocusRange:r,focusDistance:s=0,focalLength:a=.1,focusRange:o=a,bokehScale:l=1,width:h=E7.AUTO_SIZE,height:c=E7.AUTO_SIZE}={}){super("DepthOfFieldEffect",C_,{blendFunction:t,attributes:Co.DEPTH,uniforms:new Map([["nearColorBuffer",new lD(null)],["farColorBuffer",new lD(null)],["nearCoCBuffer",new lD(null)],["scale",new lD(1)]])}),this.camera=e,this.renderTarget=new id(1,1,{minFilter:1006,magFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTarget.texture.name="DoF.Intermediate",this.renderTarget.texture.generateMipmaps=!1,this.renderTargetMasked=this.renderTarget.clone(),this.renderTargetMasked.texture.name="DoF.Masked.Far",this.renderTargetNear=this.renderTarget.clone(),this.renderTargetNear.texture.name="DoF.Bokeh.Near",this.uniforms.get("nearColorBuffer").value=this.renderTargetNear.texture,this.renderTargetFar=this.renderTarget.clone(),this.renderTargetFar.texture.name="DoF.Bokeh.Far",this.uniforms.get("farColorBuffer").value=this.renderTargetFar.texture,this.renderTargetCoC=this.renderTarget.clone(),this.renderTargetCoC.texture.name="DoF.CoC",this.renderTargetCoCBlurred=this.renderTargetCoC.clone(),this.renderTargetCoCBlurred.texture.name="DoF.CoC.Blurred",this.uniforms.get("nearCoCBuffer").value=this.renderTargetCoCBlurred.texture,this.cocPass=new Cm(new Ek(e));let d=this.cocMaterial;d.focusDistance=s,d.focusRange=o,void 0!==i&&(d.worldFocusDistance=i),void 0!==r&&(d.worldFocusRange=r),this.blurPass=new Cu({kernelSize:Cv.MEDIUM,width:h,height:c});let u=this.blurPass.getResolution();u.addEventListener("change",e=>this.setSize(u.getBaseWidth(),u.getBaseHeight())),this.maskPass=new Cm(new E$(this.renderTargetCoC.texture));let p=this.maskPass.fullscreenMaterial;p.maskFunction=1,p.colorChannel=1,this.bokehNearBasePass=new Cm(new Ez(!1,!0)),this.bokehNearBasePass.fullscreenMaterial.cocBuffer=this.renderTargetCoCBlurred.texture,this.bokehNearFillPass=new Cm(new Ez(!0,!0)),this.bokehNearFillPass.fullscreenMaterial.cocBuffer=this.renderTargetCoCBlurred.texture,this.bokehFarBasePass=new Cm(new Ez(!1,!1)),this.bokehFarBasePass.fullscreenMaterial.cocBuffer=this.renderTargetCoC.texture,this.bokehFarFillPass=new Cm(new Ez(!0,!1)),this.bokehFarFillPass.fullscreenMaterial.cocBuffer=this.renderTargetCoC.texture,this.target=null,this.bokehScale=l}get cocTexture(){return this.renderTargetCoC.texture}get cocMaterial(){return this.cocPass.fullscreenMaterial}get circleOfConfusionMaterial(){return this.cocMaterial}getCircleOfConfusionMaterial(){return this.circleOfConfusionMaterial}getBlurPass(){return this.blurPass}get resolution(){return this.blurPass.getResolution()}getResolution(){return this.blurPass.getResolution()}get bokehScale(){return this.uniforms.get("scale").value}set bokehScale(e){for(let t of[this.bokehNearBasePass,this.bokehNearFillPass,this.bokehFarBasePass,this.bokehFarFillPass])t.fullscreenMaterial.setScale(e);this.maskPass.fullscreenMaterial.setStrength(e),this.uniforms.get("scale").value=e}getBokehScale(){return this.bokehScale}setBokehScale(e){this.bokehScale=e}getTarget(){return this.target}setTarget(e){this.target=e}calculateFocusDistance(e){let t=this.camera;return EF(-t.position.distanceTo(e),t.near,t.far)}
5987setDepthTexture(e,t=3200){this.circleOfConfusionMaterial.depthBuffer=e,this.circleOfConfusionMaterial.depthPacking=t}update(e,t,i){let r=this.renderTarget,s=this.renderTargetCoC,a=this.renderTargetCoCBlurred,o=this.renderTargetMasked;if(null!==this.target){let e=this.calculateFocusDistance(this.target);this.circleOfConfusionMaterial.focusDistance=e}this.cocPass.render(e,null,s),this.blurPass.render(e,s,a),this.maskPass.render(e,t,o),this.bokehFarBasePass.render(e,o,r),this.bokehFarFillPass.render(e,r,this.renderTargetFar),this.bokehNearBasePass.render(e,t,r),this.bokehNearFillPass.render(e,r,this.renderTargetNear)}setSize(e,t){let i=this.resolution;i.setBaseSize(e,t);let r=i.width,s=i.height,a=[this.cocPass,this.blurPass,this.maskPass,this.bokehNearBasePass,this.bokehNearFillPass,this.bokehFarBasePass,this.bokehFarFillPass];a.push(this.renderTargetCoC,this.renderTargetMasked),a.forEach(i=>i.setSize(e,t)),(a=[this.renderTarget,this.renderTargetNear,this.renderTargetFar,this.renderTargetCoCBlurred]).forEach(e=>e.setSize(r,s)),[this.bokehNearBasePass,this.bokehNearFillPass,this.bokehFarBasePass,this.bokehFarFillPass].forEach(e=>e.fullscreenMaterial.setSize(r,s))}initialize(e,t,i){[this.cocPass,this.maskPass,this.bokehNearBasePass,this.bokehNearFillPass,this.bokehFarBasePass,this.bokehFarFillPass].forEach(r=>r.initialize(e,t,i)),this.blurPass.initialize(e,t,1009),void 0!==i&&(this.renderTarget.texture.type=i,this.renderTargetNear.texture.type=i,this.renderTargetFar.texture.type=i,this.renderTargetMasked.texture.type=i,3001===e.outputEncoding&&(this.renderTarget.texture.encoding=3001,this.renderTargetNear.texture.encoding=3001,this.renderTargetFar.texture.encoding=3001,this.renderTargetMasked.texture.encoding=3001))}};new iv,new iX;var CM=class extends Cl{constructor({blendFunction:e=Cs.NORMAL,hue:t=0,saturation:i=0}={}){super("HueSaturationEffect","uniform vec3 hue;uniform float saturation;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 color=vec3(dot(inputColor.rgb,hue.xyz),dot(inputColor.rgb,hue.zxy),dot(inputColor.rgb,hue.yzx));float average=(color.r+color.g+color.b)/3.0;vec3 diff=average-color;if(saturation>0.0){color+=diff*(1.0-1.0/(1.001-saturation));}else{color+=diff*-saturation;}outputColor=vec4(min(color,1.0),inputColor.a);}",{blendFunction:e,uniforms:new Map([["hue",new lD(new iv)],["saturation",new lD(i)]])}),this.hue=t}get saturation(){return this.uniforms.get("saturation").value}set saturation(e){this.uniforms.get("saturation").value=e}getSaturation(){return this.saturation}setSaturation(e){this.saturation=e}get hue(){return Math.acos((3*this.uniforms.get("hue").value.x-1)/2)}set hue(e){let t=Math.sin(e),i=Math.cos(e);this.uniforms.get("hue").value.set((2*i+1)/3,(-Math.sqrt(3)*t-i+1)/3,(Math.sqrt(3)*t-i+1)/3)}getHue(){return this.hue}setHue(e){this.hue=e}};new ii;var CE=`void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 noise=vec3(rand(uv*time)); 5988#ifdef PREMULTIPLY 5989outputColor=vec4(min(inputColor.rgb*noise,vec3(1.0)),inputColor.a); 5990#else 5991outputColor=vec4(noise,inputColor.a); 5992#endif 5993}`,CC=class extends Cl{constructor({blendFunction:e=Cs.SCREEN,premultiply:t=!1}={}){super("NoiseEffect",CE,{blendFunction:e}),this.premultiply=t}get premultiply(){return this.defines.has("PREMULTIPLY")}set premultiply(e){this.premultiply!==e&&(e?this.defines.set("PREMULTIPLY","1"):this.defines.delete("PREMULTIPLY"),this.setChanged())}isPremultiplied(){return this.premultiply}setPremultiplied(e){this.premultiply=e}},CT=class extends Cl{constructor(e=30){super("PixelationEffect","uniform bool active;uniform vec2 d;void mainUv(inout vec2 uv){if(active){uv=vec2(d.x*(floor(uv.x/d.x)+0.5),d.y*(floor(uv.y/d.y)+0.5));}}",{uniforms:new Map([["active",new lD(!1)],["d",new lD(new tQ)]])}),this.resolution=new tQ,this.d=0,this.granularity=e}get granularity(){return this.d}set granularity(e){let t=Math.floor(e);t%2>0&&(t+=1),this.d=t,this.uniforms.get("active").value=t>0,this.setSize(this.resolution.width,this.resolution.height)}getGranularity(){return this.granularity}setGranularity(e){this.granularity=e}setSize(e,t){this.resolution.set(e,t),this.uniforms.get("d").value.setScalar(this.d).divide(this.resolution)}};new iv,new iv;var CP="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAQCAYAAACm53kpAAAAeElEQVRYR+2XSwqAMAxEJ168ePEqwRSKhIIiuHjJqiU0gWE+1CQdApcVAMUAuARaMGCX1MIL/Ow13++9lW2s3mW9MWvsnWc/2fvGygwPAN4E8QzAA4CXAB6AHjG4JTHYI1ey3pcx6FHnEfhLDOIBKAmUBK6/ANUDTlROXAHd9EC1AAAAAElFTkSuQmCC",CD
vendor: 6,469 bytes, line 5993
5993="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAIwCAYAAAABNmBHAAAgAElEQVR4Xuy9CbhlV1ktOvbpq09DkiIkUBI6kxASIH0DlAQiIK1wRfSJTx+i4JX7vKIigs8HXpXvqVcvrcC9agQ7IDTSSWgqCQQliDRBJKkkhDSkqVPNqVOnP+8b//rH3P+eZ+199tlznVTlvVrft7+1T7OaueZY42/m37QALKNk2wHg1pITlB17mC+Pp11W3X/LHyT32vhg48/5SOv+PnwpsHA70JoGlueB1iKApeqzvOzn44GatTB76Xzhd7suBR7+WWADgDEAwwCG/L54b/poDLrHuvvm70Z2Avhsc+PVcxscBU8F8C8ADg5+ipIjD/PlGwfgju8B924E5seARUfLsiNmqQW0IjL8+7L2NYD/7COBzfcCm+aB8SVgdAkYIRCXKyDax4EdAanL5PuNPllNvXDlAHwFgP8AcC2AhRIoDXbsYb48dl5WkVFTE3LGDcC9m4CZCWBuFFgeAZaGAYJQQCRqDHT+McJrVb8zwATUXH02MHYfMHEIGFsAxgjApQqACYQORjtd/B7Axt/z79sC0+cMPgjjlwPwVwHcA+DfAHzTxcVgWBroqMN8+cYBeM71wH0TwKExYHYUWCIAHYRLTlkCYgcIBcAgU/n3qy8GRu4HRgnAOWBkERhddPAJhGJDBxkvw7cqimr+zFM/ZLnZF64cgL8BYD+AWwB8x/dlWuWagHiYL984AJ/0RWBy1AE4AizyM1yxYAcTigW55xMbAkxEiwEdkJ/ZCQxPAiOHgBECcKEC4TBZcKkSv+mTieNcNPNC26mLNsj45QD8LQDTAO4GcJt/7iw2bfoG4WG+vAGwm9ExiEg69zpg/wgwPQLMjgALzn4E4aIzoJjQ9g4024uygkj+pyuAoX0VAIfngOH5NgCHMhAm8Sv2y3XDZeBhNIp8OzJE8OsBzAKYBHAXgDt8/4O+MVT0j4f58o0D8Pxrgf3DwMwIMEPQEYRkNwfgsuuDZLskip0No0gWMD/9HGDoADAkAC4Aw/wsAgZAgs2Z0ABI0GU6IVmKv+f28KDnHxkA/G0A8y6G73N9kOCjXnh/Ebb6OvgwX75xAF5wLTA1VIHPADgMLDj4yIA5AAm6aCUnv4oz46eeDwxNAUMzwJAz4BABSNDFTwSfg7DDKHE23MG5PqIY8A1u/dINs9dBdy8AgnGPM2NfUBrsnw7z5RsH4IXXAAcJviFgluAbygBINnSLWOAjGxJ4pgOKDV0v/OSLKp8iGXBovhLBBOCQM2ACoTOhnYrAdItYbCij5JFzRyIAqRccAnDAQUjg6UNQ7hsMXP0cRQAexss3DsCLCECCLwCQzMcPwUi2MwAScAKbfnY/YRLFQ8DHX+IAJAMSfDkAF13kLvleIjhjQQHxUVS3jjgGpKeeNzYVQEjgUS8k+PghONdhIwAP4+XXBYCHKIJbwJyDTgaIAdCBJx3Q2M8tYAHP9m4df/ylQOsQ0JqtRLCx30K1wtLBggScQOgsKBGcWHAJeOwRC0BSM1mQIKRbhh+Bj98JQP6t4U0APEyXXxcAEnxkQAFwoVUxID9kvQg+c1C7vidRbIDkc24B//hTQGumDcCWA5DgMxASdNIFBUI5pCML8v8API5zfEQx4BudgqiczviSnJhQwCP4BMCGl+wO8+U7AJi/W4O4YS6+pmK/2ciADsAOBhTIIiAJnPB7AvNjP+0AnANaYkAHX2JBAc+tYaJXOqBZv24Vc386XW5dtkHGW+4HFAJonpOe+YYQZAShgKjv3PNvPQaxVoI8zJdfFwASfPzMUwS3Kt1v0UFIlos6oDFdAGFcliMAP/ryAEAGNwQRnDOgLbdlIEwrIs6AZ/QgkMMHQF6ZAKQcJAsSYPwIeAIk9wJgoPK1gi7+PwF4GC/fOAAvIQPSs0URTPBJ/Pp3GSEGRHfBCIQ0xowBtUbcAj7ys5X4Jfu1HIAGQrIgQRXEsAFQIORDFhiDY/rMHmrU4QUgR08AkgUjCAW6CD6CkwBsAIQC4GG6fPMA3OXiNzCg2I9gNCMksmAAoemDzoimFwL48M85AKkiuQVMAAp8CYRRDAt8GQiJ67N6GJODAXAHlsGguscA2AJg1IPGYmxOpBxFWkRN9LsATgIwXnNs/v/5z/9XCf8BO3YAtxbc/46/KDt+5+ea1Yku2VUxHz/z0v24FwMGK1gWsK2OUUxHHdCBeRUB6OxHABr4ZICIBd0QWSF+XRdMTAjgCdTrG9cBNwE4F8CpDkICyYLGsuhFt6zs+gISwUen8zEAjgMw4cfx2H6O/90yAFo84Cbg4ID3/9TfLTt+5+ebnRABkODjx0SwPi5ec/FrYpmqSAxM8Dn60CsqAFI6GfhqAMiDE/gokmvEr0C4PgDkBQm40wE8zMFEUDKEVoxIMLl/KS73mE7H9d+vcKHQQcjwW0Yu9nP8m8sAmOIBuWY6wP2/4s0ezjjg8TuvaR6ABJ70vxUApGrm7EbGE+i472BAB+WHfqHS/eoAaEwY2E9+wLSXTqhI7CXgnB6LCoOJ4BiST+hTnG0HcCwAglCx3ARoZEVFXnBPp/O/A/hXACc7CPs9/i1lAOyIB+RDX+P9/+pbQjjjAMfv/PL6AFDs1wFAgs/9fgKfgdE/ZEpuiQlbwAde6QAMBgiRmsSwA9BY0JfjovGRDBMH4TlcXGhcBOc6HkF0gjPhZgchxTLZMAci/04W/B6Ab3t09EPXcPyflgFwRTwgJ2MN9/8bf5qFM67x+B/aW4XQz42FeL0YrRyikztUFw0704mf9kXgxhOAqc3AAsPyRxxQCs/PdXOFY0W1KHy3QIUGtx+6vdnx1vsB+dsTncm2AogglFgVEAlUWrOMB2RyEmMCGQ/Y7/HvKns6tfGAnJQ+r/9b76oJZ1zD8WdyQjYBh8aBhVEHjELouQ8ukQ7VRSCJAALwkr+sALhnGzDD3JAJYJHg9uhoi4bx8ytkWUtvHT/7+Zc4dw1uZ3612fH2dkQf7yxIEEockwkJQn4IQoq8unhAhmPRKKFx0uv4K8ueTs94wD7u//VX9ghn7OP4c+4G7h8HpseB+dF2AKlFLwuAIZ8jD6NPrOhAffmfA9/ZBuzZCkyRWSeqBCWyoYGQ5yQrBpDbum/ME1HoPo0XEkSD2zlfbna8q6+EUJcTCxKEtHL5EQjP6BEPyIgYAZBvYt3xHyx7OqvGA65y/7/9wVXCGVc5/sl7qxD66dEqiYgRzAqhN1A4CBNAAlDyAFI+iZ9/N3DLJuC+jcDUBmCWyUnOrmTYCMIOkNclLg0B8/RsNLg9+UvNjnd1APLmmQpFHyEBROuWACQT8nN+H/GAvY7/VNnT6SsesMf13/CpahGnZzhjj+PPmwX2MYdDIfQexWyBAwEUOQDrRDN/98p3A7dvAO6fAA5sqHJDBEAyoUVGkwEd6HR12XU4kwzfl6fCXTZzjy57vvnR513X7Hj7AyDvggAUi9EyFgiZqNxPQF6345nOWbD1HQ/Y5fpvuLa/2+82/vNHgAPDFQDnhoF5j2C2qBWCI8bw1eRw5CL5l94L3DEOTI4DB8Y9OWmsEu/zBJ3rgsaybqBob/7A4C7jtWcooRrczr+u2fH2D0AOQgAUCxKEP7aGgLy64+m6KdjWFA9Yc/03/Osa4glrjr+AupqHz1sEs0cxG0BC9HIePLoit9eNkVf9L+DuUWByDJgaq4ybGYLPAWgiXmLedUE7dwC7saL7CqfPKXi4NYdaykCD410bAHlDEsNiwZ9wAPYbkJcfz6T2gm3N8YDZ9d/wHxUA+739fPwXPrSKYGb+BuP3jAFDElFH9HIWwbzCIGkBr/or4J4RYO8oMOW6ZVcAuvi1Cgoha04BCwT5gfMKHm7NoRde2+x41w5A3hQZkADk5+cGiAeMx3+/7AENFA8Yrv/G71cAXFM4Yzj+otOAaQLQA0gZxaIIZtMDFTigKJV8H9Iq6aZ59ZXAvSPAvpEKgBTtBODcSCWCZeRYtpzrmLyeGNCAyFl1v+Hei8qeb370Rdc2O97BAMi7EgB/2QG41nhAHU9LuWAbOB7Qr//GPRUA13r7Gv9FZwIMoVcEswEwfDoimEP0shKKtIphaZQAXv1+YM+wA3DEdcvRKkGJADQQEsQuhi1Tjt95vBsh5nx2IO59SsHDrTmUOStNjndwAAqEry0IyCMICkOyiuIBNwBvPFQQT7gBuPjc9oRYAIHyOEL4vIFEYVNaOou5vCGE/tV/A0wOVcnpzI47NOri3QFIBpSeaSDUdYLOSWvYImSGgftpJDa4MWJbAGxivGUA5MAOc0Be6eVLj7/4Mk+hzCOYPYpZDBiNkLh+G/M3yFyv/ltgL3W3YQfgcFUhgRY2PwY+Z7/EhAR1SFyXCOb57r28QfQBsJQBMn5D4y0HYLPje9Cd7RIC0PM3EiMofF4gVCBp1P840ix/gyz56r+vAMjk9Gl375iB4+CzveuZdLkkEPJ8ZEfX/6R73vOjzT5Si9hucLxHAVg4PwJgRwh9CKOXK8YA4ZEqKZXSQWh5P+5AftXfA/uGKvYjCKn72cctbFrZNECka5L5CPwIPtMH3TVz17MLB5gdLgA2Nd6jACycHwLQxFEUSR5ASvARDB0h9AQb9bXIgCGk6lUfAPYTgEPAITKgg1BObk58srTJgG58WMkWMaAbQQT1nc8rHGANAJsc71EAFs4PAagQestgC1lsBJ4BMCSOK6dDUcwqqaFiQr/0QeAAAdjy+jBiQQeeMSBZT3nCPUDIa9z+/MIB1gCwyfEeBWDh/BCAeQSzgkjFfGLBBD5nxQ4DxN0wv3hVxX5TBGDwL5obxvVA5YqYL5BeMLd66YYxJpRB0gK+96LCAdYAsMnxHgVg4fwIgMrhUPKQ2C+Bz0PmBTqBMQehAbDlIjj4F80KJguSVZ0FuXpjoCOgXawLjALhbT9eOMAuAGxqvEcBWDg/l1IE05Ed0ygZnyHdz0VwCqEPIfNyx0QQvvLDFQCp+8nfZk5und8tXwIgWcHSNX0N2CJmnAl3v6RwgNnhl17T7HiPArBwfghAS7mV/hey2JS9FvM3BLpUUi1YwDRMXvkRYJoAlAh2l0dcZ04s6JUTDIjyBcrl4yDc/dLCAdYAsMnxHgVg4fxwKVwJgGEJNmWtxpQMpX9on2eRhVA+O56AjMfnP+e3Xvf3NwG4xIPTleiY55bpGh6UbafNU0l0z0p+5Jh5HqYJ6b51nP6XP8cx12XNHQVgIQB/bFPVg2OC7Q+WgVFWng/FvtWLI06uWh5oguKEcXVS/9sEAF//VGD7t4ETDgJbF4CNi8CGZWBs2fPL/H6Vwp2KEtVk4fJ+v/EIYPN9wKa5qu+IncfPwXHVZe/aOL3EbwS7xv8A1rQvnO0j8PArTgTGZ4BxFv9mIxhOCGsv+0OPYDRghcLfkWkEuq0+G00x4OtfDGz+d2DbHmDLjL8si8AYP/7CGIAiEEMTG92zXqSbH+d9R2aA0XnvO+JjthiIrOVDHHPOkBrzUQAWAPsZp3oPDpa/Xag6EVkLBK+5rAnJC3/nYk/APD704WiEAV8OTHwX2LQH2DgFbJgFNrBhjd8r79deGoEwsllgNBOzy8CdjweG9wBj08AIAci2D6HafmyAk4/Z7SJ72hGYRwFYAMDLTwOGp4FRFgD3HhzqRGQiyeurqOdG6r0Rm8IEZjzRlkiqCWoEgK8Axm4BJu4HJhyAbFhDxmbDGnZO4j0SgLGDkpibgEq66TJw/1nA0F5gdLpq+zDqFfd5LMeWqu5HNST0uJOIllg+qgMWgI+HPv0xwLA3gWHpW2sC441gCECbmKziaGrnUdMO4aHeh6MxAP4SMHI7ML4HGD8AjHvHJGNAgpDgY/ck3stipRemvVhc+uASMPUEYGh/9dIRgGx8Y+MNbR/00uVtH0wEx94j/v0oAxaA8Ed+GBieAYZZg5kADC0QWGOFzGJlcGPzl1BxNLXD8sk4xftwNAbA/wwM3wGMUmxOOQBnHXzetIYvibonmSiuYTNjriVg7glAiwBk0fNZH6+PmX9P6kfNmCXGpftJ7TgKwBIAnln14BAAYxMYm5C6RjCyCoOyr0qkD/c+HI0B8DXA8N3AyCQwesD1VQKH7EcASm1Q+y4CkN9pUKiVF5nLvy+fBbTUd8QBaH1HvNBROiZvfsNnrF4kcvPwpdsBLBeU18Nf7AB23Dp4ecHC8oBgUlJJecLS+7+WOpE3gbE+HKw+yoevCYkMGKqPJrdEKARutaFYRs1fiEZ0wP8CDN8LDO8FRqYq3W10pgKgfYLaYCzootgA6KXaTA90y374TKB1sBozy77xHFZ536utRgAmEaw6g5kUSFZwSXnA330qsOlfgHMPDlZesLA8IOjoLypPWHj/11EnCiVwkz7kAExtsGraYUWdSDX5TmsagL8KDBGA7Bd30JsW0oWivnEOQNP7yGTSB
vendor: 60,312 bytes, line 5993
5993R101AlZSUtGyfgZDkCWY1HnJdcBVe6325hTvelg2CQjZNDygG/2An0j1wKnL6y9vGBheUC8prQ8YeH9X39OVQSc7Mc6fCaKvAeHdCIVf4yMYCynTpX+nb97NJmlSQb8r8DQHm9YOFUZTKOzoXGhs6AxF0HIexcLBvWBuiHN8s2ne98R3qc6L4Vyb2oBVjfm9MIFHbjDCh6kPOBbQoG+oW8CO5bWVl6wsDwgfr20PGHh/X/1iaEIuDcCTIW/1Q4rFv8OnYiW3c+W2iKwUjKbyjQNwL1uuR6sAEgDgq1brXOmV81PxhNB6DUDBSYzQJwFtz623XcktX1Q1VWKaTF/zZhVazBVYA1tX5MazsGvobwe/jQr0Ne6BTh5uf/ygoXlAfG60vKEhff/rSe1i4DnTWDUACY1guFTDqLYdCBvf6DJYSMYATBfOx1kLfj1v1axH10nQ3Sd0GUkBnTfpemtBJgseIKQAHLQcVxa2TnuMW0Aqui5es8xBIegVdVVE8VhzHnLh65WMB9An+X18K6aAn2tO4ETl6vqbKuVFywsDwhevqg8YeH93/Rk70JE90nowxZbIJjvS3WYNSGUwGHJTpPxwwcbBuBrgRYBeKACn7VtpdUu/c0NJxO9BIxcKu4TTODzbkonPLoaL0vyUQRb2y8HsL1ckfWzMeuFi40Qezqi+yiPhyt7FOjr6/gCFwgP7Xb5vssTFt7/nQRg6MGRWmDRoeyTlpgw68GRTwgZgo1gGmXAX6/8dtaylSKY/koyID9BhzML3q1gAos2AcOrZYSoq/pJp1VtODRm9Z3LS/7WjVkvXOzEtOpKyGrlAT+4SoG+VY8vBGCvy/dVnrDw/vee65NBJiAjBIVcAJQjOm+DkCZEeiGAMw6sAwDZsJrAdhFM9rPGhd4904Co5oVuCZPV6kD40Ec6+9W8dBTBsfdc3nkpvnB82fp2RPcs79dHgb51LA9ofsDV6vut5/3PnxcAmLVBiDqgevDaJLkYrpuQxzcNwN8AWgIgRbB8loEBzXDwl4cGiDGft58SCOWGedgjvOJ+bPvgRkiuA+ZjzhnQQOiFNVbloa7l/fos0LdO5QENgEXlCfs8Qbf7HyMA3QVjYihYhLENgjX9y/qwxQmRU/asfd0ZcLU2CHVGyusJQLKfVi98CS12T5f7iECkHpsMkAhCF8+nshWH2I/jXsOYO144GV/9ApAIrS3vt4YCfetQHtAA2G+/4PW4/2PPbzMgmUMi2NoeSCRxIt2/FvuxWURIWCXg357gfTjEDNIHnTRXRCpH5ugKwGl3HpMBXQc0v6WLYVm/5limj04rG762K2uYY9jBkr9+rI03NL5ZbczS/dJ+LQyoga4o77fGAn0NlwdMAOy3vl/T938KAcj121z8Bn+Y9eWQJRz8Y6kNagDh2ey5EvxjxQD8TWdAuneCCO4An1vw5vdzQMmdktwq7pLZQR+dM34+ZumAxvY1Y04uqOAJ6FsExzeto7zfAAX6GiwPaLWR1lrfr8n7f/Rl3QGzmsis+/uO71V9OFgP2gpPhgr7TGRqRUT6dyvr4aIs/pm/2zVUNbBSv6G8e5pEv0Cvec7Po7+bTtjlBRlkvAMBkDeQyvsNWKCvofKACYBrre/X1P0/oWEAnnFD1YdjhtXxR73mX10FfCHHE9pVWcGAI/S0gKsfA2y+twrFZw6Hxf/F0Pk8Ri/kpGSnMuDx5T0iACgQHioo0NdAecBUHW6QdsV2/cL7v/Cyqr5gnc42CCOcfX1VIZ/V8We9IDmTzVXwPDJiXuKXPxtDBma8+lzP4WAgKkPxCUAPE4v5GzEuMX0PYJPLhB6FJsc7MAMmkVxaYC/K9gG+F1++8AQ7Gwbgk78I7GFpXgIwFiRXOwaJZPUbiR0yCUDRk+cHf+YpwMj9HgfI8ClGPyvsSiH0WSKRuYlitLb/zHM/JOSs5C/YIC9cMQDZr/dwxgOW9gtGYUBi0wA8l304vDQvAchilFbpIBQhZ7Ejq6ZQ0/Yhil8y4j89Axie9DAsD6FX9HOK3QtROTFkviN83kG4felIY8DCeLrSeMDSfsEovAECUFsTjHD+tcB+tkFgcXKvBRir7qtFl9owmO4Xy/1G3bAFfPrZHorFNWBFwHjQAFctIghj2kBarw06If/+MM9ZqTN6DgsDojCerjQesLRfMApvoGkAWh8Ob/tgAPSKWCp8ngNQtadjmTdltvNvn3peFYhgQQgh+iUmEaUAUoXM1yRLmWuFLaE9Z+XIAWBhPF1pPGBpv2AU3kDTALzwmqo6qtVh9kJErAudABia38TC5wJgS2xIhAwBn3yhByL4EhzXfRXxYsDTJ4IvrNN2JFMxZcBzVo4cABbG05XGA5b2C0bhDTQNQLZBYH1AVsQSAAU+imI1obHyblnjG/kJk3U8BHz8xVUQAhnQIl5CyNgKAGp5LKSSCoAySh5Jj79vTagcxUaIBeRNe79g9gq+DXig4wGzy+PONfT7RWFA4noAkGXZVAhcBckJQgNgrLiaNb3paIDo1vHHX+oA9LQBi4DxJcOUPJUnTgU2NJUyROs8irGARxQAC+PpCtsFd40H/AEf0gMQkLgeACT41PiGoLOKqyrJq3K/Ya9mNyr5FusN/uPLPIeDa8Bc+w3rtyl4VFHaMZc3i9RWBM9jjzgAFsbTFbYLRmm/YBTeQNMAtD4cBKDXBTQGdAB2MGBo8SCLmEuS1AFVAJ3A/NhPt0PoCcA8bSDG76XI7aySg6JYuGfKwJHFgH0E5B3ueMCe/Y4L+xVHAOZ+9EHcEgQgwbeiEYx6jwTdz4qfu7EhEJqxGqruf/RnHIAEnxgwBM0aC8aUAYWNBRCmoIll4HTqO122QcZbrgMWxtMVtgvuOx6wa7/jwhtoGoDWh4MBJ16WN4lfr8AqI0TVV1O1fa9BbQzovkAy4Ed+NgCQUSxZCFWvCOaOFREXyUwZOPIA2GdA3uGOB6wPaOz+QPv5S+MA3OXiN9aclghW+d3IgupBF2pPqxcxGenDPxfSRh2ASiKKiVP2PaZScvAKoA0VDc6cOlIB2GdA3uGOB1zR77iwX/F6AFB9ONSOQW0frA50sILVcckWJyIDSgwPAVcJgFbYuZ3FJvAlEHbJ3IsgJLGedeBIA+AAAXmHOx6wo99xYb/i9QKg2iAIfDJEJHqj4SExbEty0gkdhB/6P9oZbBZIGiKYVb9GKaN50lRHBLOvhDxh/5EKwDUG5B3ueMB2QGM/grb7/6wHAPNGMAY+GSGUjC52VX2f2CD4+HO0gqkZfegXKgBaHkcWtS0AWii9xG1ImrLlN5XR8L8fmQD05BVrmEENmpYSP9QX+KHiqj2/82+HqqDWwnbBRfGATdzAegGwru2DpRq7Mzq2fpAf0Nq0Rl2wBXzglZ4yUAPAmDSVWDBPHQjLcgTqOZ6zUvdKHh4ruDCerox/Dnu7YqwXAC1NI/QcEQuK6WK/kdgCTGC0PYAP/KIDMBgglq+hIkrOfsaCviLSofcJgJ5AdM7kkSaCj/HqQKVIGvD4swF8bcBjmzjsaQ2H5D/6acBd9wALB4DFWWB5AVherMp4GKIYEOp7+26UF0aSfT/xYuDG7wDjrIpAERytXf2vajj7ueryQXSFl10K/ON3gIWDwCLvjfGB8Z54O+Ee4ve6513uB2R1yzsqC+twbC8HcNVhfAeaBuDP/TvwtS3A/ePAIfYFVlPq2HHTuyulZCTlhbjhETF5yxTQGgPGhoHhIWC4VSXGD3n0tLkMHXHxu+YyB+MlPwDuZs5K6FlsbCzdVO9DuKfkHM8AEkP7B8fOkwDcD+B7np42+JkGOvKdAL4E4K8P0zvQdET0b14D3DgB3D0B7B8HZka9WzrD88N6sFm+YcUjrn7E1ZDvMtF9DBgeAYaHgSGB0PNHCD4BLwLRsByAyX/ij0/dDUxuqlIG5hix7eFhvLcOVUAtyPSydAFmOQNe6EYGV/9ZESiKgIEgtbaD/gHALQC4ovY5r5KwtjOU/XfTAHzzLuCmIeDuMWDvKHBwpMoN0WQzNtAaYSs0K4ZlOSAjGG9kPjCBRwZ0ABKEBJexYAZEAU3A7Oi1BeDym4EDnjQ1TwCGWMW8MXcKks0YOyZNlQOQjcgYIUHllEzYQ0ktm+r6oz8G4F4AXwXwRd8/kO9A0wB8y65KmPxgGJgcqYJTKYpTv2CCzyddQJRDOjKivn+Deh8BF8BnwBtaCUA+YYEyAU8h+c6Az9gNHHRmrgOgmDA3jHQ+iWupCeUAvNSrA9HNwqx+muk9nJVNg/CTfrmbAPwbgK8D+PcHkIibjob5o13A3XypWsAkG1cPA9PDFQDZM1id0i1KxsWfOrKnAFXlifCFFMMRcASigOcs2MGAIfE9iWXplS6On7UbmPaUUTXQrgsVMzcRj5Folg2V5ayUA5BWYKwOxKUafnosWjcJwk+7W5F2EKvlE3xcXaNYfiCYsGkA/smuqug6hcleAnAImPbO6YwRpMgjCAVAm/yQmKTv5hNsAf/i7SyNBSl2a8Qv/4/M1yF+BZSYlNQCnnVrpbC+mToAACAASURBVJcaI7sOSEY2NpaDXLqpR+vE/OVksDgImgGgghHoYJbTWc7oJtFWc65/cg2AYvh2ALsB3AzgVv95nS/f4QdsIkT9T3cBrGtITWZfC5hqtQHInsEGQn3UDDvEDEY/ICf7SxMOrAg8T+c00JGkvHGd2DABUYZIAONzCUDppCFhSukCBsLQrFtZe/IixYQpSyEoJoqnuPWrVRAubQh83HNlZB23z7j1ywmj6CIIqUPxw2Xeu9bx2jx10wz4Z7sqTYZaDD8EIDuoE3hMVEphWg66JIp90k0sBxBcy+iPIIaT1RtEsHS/yIAqw+VSNPWQfe5tlVEk8auXgVa5BUsEJuT5uoliAbE5AGotmIAjCPnR9xDG3TQernYAUupTdBGEFMf83OkApHG+XlvTAPwfuyrgSZOhas3u6cwTsUBVn2gTwyFMi8wjHZAA1M9fYGHDULJD1m8Cpa8fRxDad+l+Ykf/3XNvd11U+qiL39SxXevSsshdDFvgbI1O2AwAtRZMZzTBRuDFjxe1Xg8QEIB8yyj5yYIUxfQIkfkIRnmHCM712JoG4FsdgHHp3ACoMH2G6jM4lWzoQarSvwQ6MSB/vporVaFkh+mCLlpVR8Z+dqDZLoDOpHSiQeAFDkBjPrlgCHgCUaFifg67H/9uYjn4Ai1vpTERTAASBaoQJBAKeNqHlL6mwPDZYAOROag/EYRkPX34MwHIvzW9rQcA+TLpI22G7EcQKlJGsYIJhC6ClUMiXfBTbFUQAej6nPS/OuAl9pOOqIc2BLzg++3VmWgIEUz82cRuCAtLIHQQm0gO52uOAb22sC3JEWgRfPpZf2sQBQIgLydPEIFGwPEj8MlF2bSbsulghLftqsCXq9HGgHysznrGgi5qzTUTFH8FLhAUn3hIJwCN0HLncw37qaF2zoYvuKNivmQIuUNc7GvWt6sHNs26twA6vhyq8NEMAHlyntFrDCcQehyaPTl+FwAbXDcmAKMRThakEk8Q8kPg8SPL0qzLBl+A9QCgR6uZGs3vfHz8TtBZvkgGQrEPBVAUg2Sij50QAOjiVKI3saADJRm7dSLYWfSFDkCem/dhZeMy9pPY5QvSDYQyUJoDIK8qMezh3wY6fSL49PcGgCAA8pScJLIgAUYQEmz8RPA17StvGoBv39W24eREiBoNQSgWNI1HBkdgxJSw1AI+dFIbgOYmkjimQ1r6XXC3rAbCHycAgytohf8vsB/r2KRaRq7zpZ+D37HMX0s3DDcCUGLYaw53MJ4YUODzusqlGCQAOQCejuxA8UULUkxIwAmMAp8Wa3qkN/R9W+sBwOhIEPjk5SLr8HeKFbTQfb77csPIMHGl/4MPbReslPhNe4+MiTpi9AFGV4nI7MfvagNQLh/pfrYnDAS8aJQ42A2w4em2cAyWQUuJVQTGWLs1uL7DG9J1RjhA+jvYk4t3KXeMqijpzrud4At9z3XtP16yGfjKZmCGooYh1tZzvv8xXPFl4PoJYC97k9FlwZWD+Azi/deMZWeP13eQCGEyoERudChIjbb3mJYwH7V0QIKuCwj/gfMj0asn2I0FXRSHXfL/iRkNgLyeVj8ccMY//J1fyxzTAXT2+xoQViKYD/1hDqLxPiYxTgSvQrphphG97tz4Slqafnj7uk1kIQDZrvWTw8B3jwEW+RLxPgSiCERdPwPR7+wCPg/gulFgfruDkOMQkFc5x84e708JAMmCuRNBXi4TIg5CGRzGiBGE/D4E/C2r2vcAYJoify62i0aJSMhB+2IHoNwu0fkcjQ85pu3ack5nIBREqneYFyWLkAXIJHESe00Cyx5QyeL6F/tyEcDcrOW2n7fX8df0mME+/vQ/PQjhoy3gzo3AISYf80MQaQx1peH9wb7v2mrtmCBkIMMejp3jIJD1MsaxaMZ8v5N/67INAsB3BAYU4JL4DSo1J15AFPAEwuQHZJzkKfUAtOHLJSOQRWndBYQvCQA01cfnNopfsaCJaD2baBn79QjSTiOEP1EcawIpkq2kegBTNgHWEpOKF8Uwq2NRFPM4AqCf46/rA2U9/uVDvurB01zvAJpiiwOl3fEeciCGF+Ij11f+QkbSfMPfIzqw57mEFZ9Dl3Ps5HXWAYByHJAJKV7N+s0cCQQhwSlfm4lGZ0KB8C/rABgZUS6ZHITBSEhCowUYAAksF7cStWREyxRwtuPpOlgw+5s9sq6OaIJIIlUgEhA1edoTgHxa9HVw5jibZNF+j/9yGQA/7pbujZ4bwv2+cWB6tFo0NzYnkxFA+cvEAo43VBoEo2e+48EMXEOmD9F6xhCE8RwZEJ80VblKvDlmzwicfqy93/o+8K8TwB2jVSgW138FrJQTXBNlnJgmrjZwanow9CBP/rL9wF0jwAGWDtFyoN9PHutnIHT05mPXz93dMGQAPniJsjiBXiTbxDZFMF9NLUPQxKR5qezz1Y6/YZDH0D6GkdAkYJIvRalAdHAMmPZoYhb6NhDWvEyf/ma737CXN7R1ZC7hUbPgcFgqt/ZZjADnM1xqEVhYBpb4CUk5UsL7jQvj///5buDrLeCOEeD+YQchYwG9VIfyg1NaZszFiCH6DkRGLze5/dgk8IMWcMCjdCiCzR8od1B8OTwvJM8JEShFut1fzMhi+eRJr6LI7hYP2M/xVLwKNoZjUTwRMAQQmYyhWGQxsSADOflZ4kukj7PhZ75bETjBpkAGahMkcrGgwhsXeCyBHBj1wmOBQwvAwqKzoFeRV8ZaerjKYAuirmPY/o9X7q5Cyr7fAvYMAftCPGAEoYlBiVtFwLjtp2U4irj7yOANbi+crHyrfCbTquJV44O0F1FrwQGIMZFqdQDyP/gGSZ8TC0ZRRsOlVzzgasd/u+zpMByLehAfCgMQCDyGZJHFCCgLZ2f8mgI5qauEcVx9e5vACTgCTwEMWr5TdIpWKJb5MvrnoocDswvAPAG4VLGg6UKeqmi4iuDz4er30oX0FP7u5moMvIf7W8B+jwlUNAzFnlZCIhvGFRCeWzrgXSSIBreXTFZSgVLHAp4UHOFuociEEsn2PJwl/XEk0dzfSojeerFg1IOo5BKAveIBex1P67lgUzgWQaJwLAKRH04i14ItgDKEtGsRnWx49b2Vkk9wUefTGrKCF7R0JxZMqxN8cmPAxWcAcxGABKEAKPA5u9lEaAbCmKMI+sDN1X3z+ro24wEZFc0VEE64ABgT180PF9ZdBcDb6JpqcPtPk+1ACbmKjJnllwyuILunEAWjZHkBsrsRUnfD0qEiC5IJfyisgMhzWhcP2O14Ro4WbASgAMQJ48SJwchmBCDFa8qpyBbSP7OvU4PQ0p2W7+LSnSJUFOrI4V7w5IoBTQQTfJ6oTSYk2mQcpGRyH2syGjIF6EM3V/fM++C1CfwUExhCsmzCaQT43lZC3e1hBpEHh36XEqrB7Scmq5dV0XZxmV8WuDFzAF9iwhow9seAGoBcGtKjqAc+1l9rLb/1igesO55ysmCrC8ei6IxRMAKTWNBi6Xw98xNTFUi0jEcmpYgRAPhddpVi9OIEPP5cYD4CcLkCooHPwaW9kV+iwWrQHT8uA1fd3F7DFvgUHUP2k8jTiogAqLoxFpDgbMj9jXSuN7i9dLIdaxzBp5XVBMIMgFEnFAPKT9qPd6A9BIGI7MfPmf4U+40HzI8nWgq2PBxL4FEkjKJixGRRFyQQPzzd1iAUzCAQas1YOmAEoFjwkecDC/PAwhKw6CxIkCXwOdVJLxTobMjBdyIgfvimNvNJ7Evf4jWtdnRYD1YNGVuG93VWuWs4Jf+mlZCCZxwP/cnJ6mXVKk2+tK8lQQVHRTGc64SDAZB3Ey3JcxyACkToJx4wHl+YwqloGDICmYmTFgMQFBET8yyYzyAG/AfWX8mCGQg0BTRoHwt9KVaPE/HQ890AIfgWK+CRAaMRYnVdxHbhdY8Wslw1V93UDsmPIj9GxgiAioRRMIJNvoti+SW/Ikd0gwAU8+XxJcbGITJPDvI6XdCFREFSknTB83xka40H1PGF9dnycCxFwygkK0bASJQSVAbAYeD98xUAe5U3jKIwBosSgNsuABYogl3/IwgFPrOIg1Xc4ZrpAsSrvruykl2ucykapkMMh4CExD5DwJfWAYAxwk4MKPAJgOIjGSEGwuCakRhemw6Yv0UUwRf7L00L9pnsNx6Qx4feY4O8pDEcixOjsoTKKpMYjSFYYjOC8Eq3Wnnr0YYS+0Tmi2HysrPGLqwASNYzBnT2Mz2QD91laxLB0gs12GAh81cf/o/OcHyJ+qj0S/zxnhUZbSyYWaL8+Rq2S29wowiWkJPan4MvgrDDGAlRe7KIywDIgR3meEDWg9HbJgApNTkXo8o0i7oVgxnEgFr8F7jEdnU5GvqfJQKQKyEOPlsNIQvyvupAGHS/Okv4qv9oh+PHxMLk8ggBCRxvAmEN+AiEzz2iQfQBeNmkh4K52hJBKOaNe/FSLobLRXCz43rQnu2yi9oMSMDxs2jo8303ERz1wsCGZECF4kd3DwEYYwJjhoNlQrgIjlYodbBPrwMAZfEmyzcIv27gs6XDzC/IR1DOgA9a6DRz4wZAsZ+LYXvQYsHoD4ziOFklna6YD3+nnU6dZ7bGDAcBUImIAmEUw/zbJ1i/scGNDJiLXmle3RhQ+l/aq57gUQCWzwwBKPeLsZ/LFrGg/ShRXAe64Ajkv30kALAjF8R11Dy3K7KRwJcsUTaqWScARou3w/INVnCH+A36n8RvM3nB5XP4oD6DATBYwGb5ajlOLOh6X8JaBKRG77+7ygGYp1bn+V25/01AzBnwQ1ypanD7KWfA1QDYC3zJIj7KgOUzc9nFbetX/r+O5biwNhyX5uSEDr5o0xsJwLp8/m4A7GaJUv/j3/5+HQFYJ3oFPPkho/hNeqBcMkcB2BAA6XrxmMBkfFAci/m0JpwzXw0TXvXtzrz+PKc/Ml/ugzM9MDqCAbz/keVjjGcQA/YLvjoguo1mRslRI6RwfsiA5nqhL5D6nscF8gfTdfxpS+/hLzvWfzMQCoB1Fq/8b3VWaPIDZqsRV64DALsZHVHs1gEvsqFAeBSApQC8pHK90Oql4UEAyvCwNeGcBXNLOPMLftgZsI75ouUr9ousp2TEyIJ/sU4AzC1e+WIFshyAHPZREVwItrrD3wGAhibTYBhxVpe/xePyrNBuWaoNp3DgFwC81O+RAepK/a5Lfe51jxr7JwA83nPXYgq1asl0yX5N48+f4VEGLATlK1vAo5YB1gBSRmsM+NFE57lcfPD5pPFWCJImtyvGgGfOAacBYO59zFglgHgPefZsXV6/gPXBYeC0RVgyJNOGYuJjPka9eHWgjL9bWzhWk0/n/wPn+k8bgFNmgYcsVflZnBRmIShtJM/m7JGibGBoOIIez9wKPP4AcNpylfbNlGfdI+9NjBjz8JVzppckZuJ+dBw4aQ44drk6j1LIY9JkPD7P4s2lwVEGLHwJnncscNIh4Nh5YMsSsHm5ndOu1BGFThJ8/K6JrZtoslST2+XHA6ftB05ZAE5crgAups5TfaL6EF+UyIif3gAcOwtsXep82eIYY9JkXpMgMp/AeZQBC2b8OduBYw8C2+aALQvARgJwGZhY7swEzbNa88IRvAVO1qkF91J36DNOBE7eD2yfB45fqphLnevzdGeBKBfL8UX5/CZgyyyweRHYsFwxYHzRNK6oetSBMDLjUQAWTPqPngpsnQK2zgKbCMAlYMMSME4ALrcnR6JYQIwsoUnjpDRstOLy7cBJB4CHUGwuAtuW2nUDVH1EFUhycSwWjGD64mZg0xywcaECoI0z5P3X5P6nWlHdgHgUgAUAfOYOYMtBYNMssHEe2LgITBCADkIzSJZXpCOnIg25uPrhgnupO/TyhwLHHwSOmwW2LVSik2pCrDsQskzNIBGIpBdGI+VfNgMb5oENCxX4yPRjPj4xaJ0+WGeEHRXBDUz2Mx4FbDoIbJypADixUAFwzAFI8KUJChMV2SUaAGc1cE/xFJef3FYRti64nkqWDrqqEhbrsm5zvZCdPCd8nHzJOLZuABRz9hTHZwPL7LnLnoNMIY2VyaKcjtZLHOAbNgNPngKe4BacfGF1pnydD+hphQ/8XV5UiEueLGnDN1tWXj/3/4cTwAUzwGPcRcFJiDpPt3FLmf5vjwE2HAQ2zPrEzDv7OQg5OSM+ScYQy5Xbo8465u/ZfLTJ7fKHAdumKxVh8wKwealSE6inEoSy2MWCdbUHIghv3AqMzwHji9VLZuDzD8cXxxWZs5c7apmW0fMBnIHKn5X7d6I5npvRz94O7LgXuGIReJSb+Xl1tzqflybwRwqf9i97BQRWomWJQ7oZVFtJoqDX/b/oGODsvcBTATB9gsfGqmzdjtVz+G+PAyamgYmZCoDjFE2anCVg1CeJwOMnTRB/DmUINVkkgia3y08BtkwDW+YqAFJFMD1VAAw6XG61R31O9/fdrcDYPDDmY0zjc1UjivBuAMx1QdMB+WAYXU8dhEU16dOSkppbcHFSrng8MHwnsGMPcN5ypURHp2xMIa7zDz2z8Gn/kVe0YomO0wEwBYKujL7v/zHA6C3AxfOVh58g5AsZxx4fZM7sf3h6BcDxWWeGBZ+cMEFiwGEHHRnDzun7ONHs/djkRgBunql0VDOSHIDU3cxSD4aEajhFXS4H4S1bgVGN0V8we7E0Fh9jVDG6Obr1LJMRwn+kOCaTEYT0dsfqZHXl/p7PrLi9wIY7gO0H2yAgCAWCWCowKrYE8nMLn/a7PQn9X7zIJPPkCcK+758y7x7guNsB6l98gZjLLYet3Ay5n0sv4R+fCYxPA2MOwLEAQLIDPyP8uBg2cRYmzFweAYilKkn+OC8/Fdh0CNhEA4nGA40kd6FES13WLO8v1qHKAfh9B+DoYjU2Ak/js/8NAIwg7OUb7LCC+WAfB4CpBJoIiTRNRmS1l13kqWh3Adv2A8cdqqp1MB+aIOSxWv6pq5D2kkIAvt8rF7BLJksN/jMqfa7v+7/Ak4B3A6ceqpasKMq5akAmlLWY37t8ZW97PDB2qALg2BxgAFwANEGcnI5JcrDZRPlkaXL4u1KJUAfAjbTQ59x6dSvdLPXAgGYshZWR6JIRaXB/NwFI8C1WwLMXzMeSwLfcXuKrA2G+wrLCDcN/IIg4ERRn0qvyySAQX6mG1XuA4fuAbTOVwktRRr2MLCoQyvEZ/UY/WwjAj3jtFJZkU79g1ghkgEBf98+0Umb/3A2M3lkBl/fOcdMok2EjkZyv8773LAfgHDDKjwNwxEUw9yailpwdxBAEYhBbAuGzG3aKkQEJwAkCkOCjlb7Y6SYyf2UwlAS+vKYnAXjfNmDEX7DEfA5CjUcsnzvbu1nDtUMmCDkRZEEyGdlAk6G6lQTSa6m0MP6HuY73AxNTlcJLZ6WOJYC5/CNxLpHMgdKIKNl69Qvu6/75AjHOiTU87gKOOViJb748BKCWrnK/maTA+58AjM0Ao7PA6Lx/xBAupoYDC9okBRAmPdBZ47lNA/DhwMRsxX7mPgl+SrmK5EaRNRslXFQ9CKB9DkADn79cZtkHFkysJ103eBbqlh97DpmTQTYgk9VNxu+xYbXKU3lhFoJPOgdFGY+lPkgQxokkgF9Xgj4AvfoFs84eX4Ke9x9fIC+tRfDxvvniif358sSir2LCj5wNjBKAc8CIi2AxxLCzIAGY9L7AhGIKgpATw4l8wToB0JjPrfTkp+SLQbHrOqm5jNyajS6VCMIpApDAWwQ4LrGgXqzIfnq5cv0vN0ZXHTInME5GBNLb1DGdOYQsI7AfGKFjlgqve8wJwG4T+fuFAFytXzCLb+VgWnH/fIGYfc46Hs7iHC8ZkPcdXx4VfVXJw8+cA4wIgM6AHSLKWZCTESfLfg7WsIyRF3ckiRQ+HACXkwHptyP4KHrpJvKVGnOhRF9eBF9wE0mUEogz2wC+WGI/vVxiQQIxAs9+rmHA6E1YFYB8DJwQMZl0OrLZ++i7sfT8zroYHLS9df4RACWKxSZvLXzG/fQLZqk2gqn2/vUCUQ9UZaM9wDaPeSPrC4A5C1KV+NITKwCS/SiCR/jRBDlLmP7nHynsxno1IPwJSyRpbiMADXzuPDYfZfBTEoAmcuVQdiaW0zwXwQsCYDYmMaDA1wG8TBSvaoR0G77EcGSET6hjOvVApfRPAUN0zjr45JzVcSqiTxD+VeGzXku/4Nr7JwDJOkxFIwt6j6+RqUrlkO4bXzp1gCAAv04AzgLDDsBhKugLFUvQUhTwCEKbnKCw14HwJ9cDgGQ9WegRgDI8XEcVEDvAl7lVlglAgi+I4CR+Zf1mLGgMmDFhBGFfDCicRJFERviSABjLS7FC0MFKMU+07wOPE0kGvaoQgGvtF9z1/iODkwn3VWoEXxres5ib9xx1wZufBAwLgAQexbAD0JiQwJOuJBA68/H3Zhk6+3CifqqwWNMKN8wjKgbk6gWJgC+FMaBb5vJVmsUbV2vCqo3cRWZcCIACoax53+ulkqNd7iqOcU1WcC9cxEm5kQBUdZ+sTnSL/jEtTWngi21jhJNJBivZBukXvOL+yYBkcOqxKjJ4AGgxzMrBVwdAMmHrZOAYF2l6y/mwV6xD17zmWo6MbRyeWtOHwxJ91IIhr6rqZS70DPPLXDVUrfBwzHKr1EUp6/h0T/6L/GcCqslt4IhoTcwdAqDSs7I60WQH6R329pHuFyuXDJmEjuOSbdB+wSvuP5bGUjmsA5XoUvcvBXKKAQnApUdXwah0b8jXR2YzJTsC0ZHB33FL+2yiX3h/1YeD1fFZGT81g/H6yqkVa9YEpqMhTADle8erHA6t7Mh6j4ZBXdBGjFyO4CSIm9wGBiBvgqxwIAJQlXIyEJLyI/i0SkAG/FbhaEr6BXfcv+5dLKhCg4z1C1HEBJ8+BODQGZXfk/quAZC6ketAZEQCTWAU8PIJt0fgwHzZvVWNaKqi7JLOmtDWFy42g1FxH/XfqGkII0C+a0tnDkfsGxQjn3VPsk7tXmuy+Xp0JhtoJosAaFcUAJUYKiYJxcqHqKAH9rPlG2cMrmCUbMX9guMLpGTcCMKDlZGhMK8IPnPIn1X5PA2AwegwEEYmDGBMjOI5whGQP3NPBT7VJlRNaKvF4t2IWHbDErtDlSk1p4lJ7/zd246tglGZryIfrFhQ7pU8WCAX0ZENG+57U14Z4YrCeLrSxXdev6TfLwrbxT7znMrfKQXfHLQCnyvmRIv0Q3430ezMmL98P393G3wqz6am1NYzzoGn+svqRmTAU2citctqAX/2EI8F9ACEmLHXLZGoFxtSl2xyK2bAYwrj6Xr12+1noL/jUTCD9vvFrn6u0v1/nvGkaoVBAQi0eummMAuXQHMWJAA7gCixG8U0gFfcXdlBKk4Z6zELgAJfZEKrxpC1xOIl/+Sk7jkcdYlSco90y9+gK6vJrRiADD0piad7RuFo3udNCgft94vCdrGXn+tujgV3QAcHLcFnroelivHkchEL8ue0uQ74S3eubAITS3IQhKkMRjBMokgWG3L//2z3VSnP4VDgQWxUEEUxAZFHL0eR3HDfm3IRbDHkBfF0zy4EIKNhSvr9goGEBdvTz/MIYQLQdVsTwRTFDj5jQmdArRDYJQNDSs961R3tPhx5NXoVgoxleHnarjohgLec3D2HI492yQNvIwvqO9fJm9zKGbAwnu6FhaP5pFuMg/b7tTbpBdvTz68cz/zI8azVj8iAHTqgmFHXDUB89R2dtaC7tUGw4kDOgFb0R2wYRDGZ8g9O8aU4XwPOczhiwGlMjqqLWiFYGu570wADFsbTvaxg8nkow7E8nM/atfKzln6/1mS4YHv6BQ4+Z0BbqHcd0NwwYbVD3+1yWhXJxPBrbq8AqE/XApSqAxiBV2MZ/54DMOZwKE00rnDUWcR5KiV/brjtSAMALIyn+/mCyeehjIYp6fdrvVELth8RAClyHXxmhPi6r1m8FM0ucgk8+y4RHC1kAK/5XgW+2hZYofafWcPq1B5AqDqEYsQ3nepR2gqhV2yiol1COkD0C+aOaoGx4aL7DQCwMJ7uVwomn4fm7VrX2u/XAlELth+5sHPtN+l/Ap6sX2dCsZ/phZkIJgv9l++1wbcq+2WFv2NXIjNKAPzuw7MUAV8DTuynFIEsQy83RgTAhiv+NgBABaQOGE/3mwWTLwAqHnaQfr9GnwUbARgDNBUlkpzQboyYCyYDYdILdf0l4NduW9kGoa4geNdazLElKoA3Prx7DofiETtC6XvE7hGEzJlpcis3Qgrj6d5UOJoYDcMglrX2+y0NPtl5UZUjkfx/Hqbecoe0OZzdF1gHQrln9Bhee4s3f3Zxm4MvAk9VSFdUIw0i+Q2PaBtISiBSSFgCYMjMW00MP7pwvvLDmwFgQTzdHxcOSGvBg/b7ZRZByWYAlOERluKM3Ra9CKWc0q73dTBhMFT4ZwIw9l5Lrpes+HjeBiGCUOKXeuBvPcKTiEIOR0f+RhDBMYi0Lhea4GTaa5NbOQAVDzhgPB1La5RssV3rIP1+7yy5OAADoAchEHBkFbKfGRpiweAPtMs5IFNokyOGk/7rAYC9OhBFwNXVY1at5tftCBHaWVS2AJdEcEinrDNC+Lumiyc1B8AB4+muLARAXTDCWvr93lR4/Z0Xt6ODFQkj8WtumEwHTKDLQejAfN3uds/dfjoQdatGLxb8jQBAYz6/boxiFgAVudzNIc2/s3xLk1szAORoB4yn+2DhaATAGJCtbpkCYq9+v4V+aBgAQ4i66XtaC85YkDog/zdZvzUgfN1N7a633Xqv6fe9msDIHfNaB6Ay2JRE1AHAEDIfI5nzZCLeN4Nbm9yaA+CA8XSsul6yqV0rJ2WQfr+splCyCYBR/HJyKX4phs0PKBZ0lqOYTpvniAiUAmAd+HKjo1cvDjHgr+3wPJQsVCymUZrPMuRsRBDG4AQCsunyJtFGHwAAIABJREFUcc0BUJlxQoH62q8ST8cggpKNAFRGwCD9fkuvbwAkyGgJE3C+Nz1P1q9/T3F1EZBxvZh50s6AEYC5yyUHXt5/Q8zI5/KrAmAIkkipkyGPYwXz1aRT8v5ZO6jJrRyAvKOvNXlLazsXs9bo/ztc29Pohgotp5J49Rcj/pzfIwGS//3OM4CNd1dpntQpFUmjEH4LYIgnyn/OLjL8FeDGhwJbNgFjI8DIEDA8BAy1PFK7FSKf43cNKrvHx+8C/vmxwMgmYHgEaA35J0StpvvzL/nP8RbLAfhyT207TChgDRiu/ZL9DsfWNABvYzbhCDBKoBAk/pEobGWTqp819hzQ1/0k0PoaMDEJbJjxVZFgDad0SaUO5LksWVj+XScDmw5UEUDJ6U4d0nVbC91S3ovfVHp5al64cgC+k7mZAP768KCA0WD3A/ieLz090CDceVmlAuhBljLgrfcAw6PAyDAwPFwBkCAbItM4a/FiNtERjBl76W9ffD2AbwJDdwFj+6syImRXrd5Y2FjIYcnzWPLEqnsfC0zsr6qBMQmfIDR/pyJ6xMhKyMrSDiKD2xja6TADTt0/AGAs1KcAUCFrOLF6tbtiRVFavT/wuMCa7MfVTlH098YBeBcwNAIMEYAUlS4uBULOmK3LCnwOPANlEIOSoF9+C4DvVoWXhvdWZVOYqWgi3vOXDUQhgieB0EElViMYJ08HxqeqnG8D4IIDkAzo51DKQQJvBKUmKACzbM4+5hUivwrgiwC4LzvjmgCh6nBcgiMTcv9Abo0D8E6g5eCjfpUA6AxoQIzgi8ALmWwC4z//DxcPPwBak8DQFDB8yJPpPZHeGCyC0KN5DFCByfh9/+OAsekKgEzCTwD047X0SCPM1IYQjCv2E/MJoGVwUUQoPboq0MdqkWVn7RtDDMahB4g+P6qhXFpjVtkDtRGA2nKjos7IyOyHFUbIrXe0FXsTuzIYfNb4O2M3ATGIYQOmPn6hG6gi3eUkQQAeAIYOAUOzALMVh2pAlESqGFBAXAYOMQVjxll03iO/yYKRAT0FQXkwZkjp1pz51LO2XAT3KtD3AIAwj4Wg05kfiuUHYlsXAJLVnP0INLM0OYFx78AzcRySeTsw2AJueI+Dj2Fne4EWKz5MA0MzDkCCkAByUWqsJzarEanzj2zXwjEGFHuGY+pYsMojzZL1G9EBexXou339IRBrC3lJGmNDuSHX+w7WC4Cm6wWxm8DngLTImgC8pBcGBuTXf/1fXnyTugnFwxTQOgi0CECyIFlsvvJfEnh0mhsYI/s5uxFYi1xZof7oOqSAawwYjRGBzYGXbtWXaCIrlvHUagX6SP/ruMVYCEbEqECXAMjfree2HgA0ESur1/0vtnNwGSsG0RsZME20/+/XWH6Mugk/yngPAGy5GDYALjiIHIgRUIrsZjM7Ax+BSx1S4pfffQVIep8dL7dMDsTGjJB+CvQxTHmdtrw4l0CovFruC2NOe975egDQsCXRK/eK634JhBK90q2C7I1i+Gt0jxF40k1cPJAB7UP2m3MGJAAFQrGei9iUTH9yBUDTHfU3B5+BOIKQ43BWtNtPcWIOzEZE8FoK9K0DCGNxLi3FqaKA9gTgeoFwPQAoI0OulWT11oEwiFz7cwbErzNxWtEYBB+VY76Vh4DWrH8IOoGQ7Ocg1CqMRLPltmxvs1/SHaP4dcAJePYyyUCRIzrTB8tE8FoL9DUMwl61kQQ87Rmy2PS2rgB0a1ci18RudEJH57OsY02y/+83/sZdBKr4FXQTApBvprGgQCg9UEAM+h9F6ugJDkC3gJPBEvRGrYoYCBX9IxEcS5K4i6cZAHIw8oXQ4mLBb35YH5d7OekadtTV1UZSjaEIPH4nQzYNwgjAHNwDuWGYpZc7lzPfX1cQur5oBorfzDf+zi0yVTuSkuxBI2Q+PhQDIUEnMLo1TBCZLufGw/ixbQa0KB8CTODjPohdY78IQmfDjmW7Yo/doAX6GqIiAtDHaYswSmeMubV81kp11L6hy2PdAcgblfslOKC1IiKRmyRxZgV/8++DS8BFrxXi5Hd/U6MeSKdqEsEKhpBRsgRMbAtuG4KU/+9ry5brzP/lPVMv1EPOQegharrVcgZUhVHFxNPcp9VFtlOWkL437C0WABWypFRGsV0sb5Hn2zYBwvUGoKl10v1knDgo0y7XA8Pfv0UACnjaK33Co9gJQAOe64FkNvtZAHQdjz9v2Nz2GSa3jYej2W3KGuZ9ixGdIVSoKT13B2s5AHkGheST6qn0erHv5AIgAAU+LVfw/wq3CEAV7clBKDDGZG9/5oVXx/oyYARczcqH5GyH8eFplTawFvAtrtXLGpNrQDGbejupB3omlIHQGc/ErzOcGSRs8zrhAbbuL1Tco/JfbLlNwHOmi2kIcs3owbdwNpYtynDQhsFcgvuG9/YapGFvYX22zZcAU0/GwA2LJ/4AmGF9mwEbBu98Y3cMF+uAGQCj2HVp3BbPuo3IlqxAy5wHAq4OfARmEBXGfNIBa0BIsG0ecwC67merHgRpZLwocrWaovuTxew/V0txJQ2DWeae3WAGbdhb2DB4+wRw7w5g8Qpv88liyGtoWHzMi4C9fAEHbBi8kwUKu2xNAdBxaGBLbJdZux1LwAGECYAEm6wyfpelJrEgFnRDxESwgyUxIUsVMwjVy5AYO0bG89Auu1/5BF38KqjBHlUAYXsteNCGwTeWNuwtk4JMkrlzGNizA1hm69g1Nix+zDOBW0aBeRZZGqBh8M4emfWNADDT+zqMjQyESdQFHfDbZECCLRgdHeCTe8CBaKJY1rDnBRCIAuGW4TYAZeFG8ZuMkGiQ1IEwGCJtHZBmy1obBsvVMnDD3jIAerti3LEBOMjGcOpa3WfD4ic9t6oveDtLfw7QMHjnH6wPAybW6yaG4+8D4HIQfvtDIVtLejpBFsVvUI7NIBHw3DUjRzL3rDVtsYPOkAScuX3coNDynT2VYJCkn+PjqvUD8hVbS8NgjphGxcANe8sAGNoVY/824BCBtIaGxRe8pLKZdpMkTvXiJ2toGHzSNHDPScAyq3er4qPyGaNc7JCRXWLT2TjwGmCOeQashq6+qSpZmp8vojQpheF58ncdZVjLnjWPHr4VWKTKxrHGUqq97qXu3jp0wPy+eEC/DYNZsZAO6IEb9pY9lNCuGPcNV830ZmkM9dmw+OKfbdcXvJMPdY0Ng0/7GnDXKcDMccBS7MwdKz8KCAKQIgY0MWGCtr4TOHAasMwOkTqf6unyuLykfd254nkb7qsw/iVg7jhgmSX31Vpd9yRHeLx+zRhjEGRbB6wDYT8NdymyubzDzCCGfpMJWfSRYfr9HP/aMgBm7YoxNQHMbQHm+ID6aFh8yS93tAvGQb7da2gYfPoXgbtPAqaPA+a3AEubgGU1RM6B060fgkRoCzj+TcD+04CFE4BldZdRc4/YxlxgjJMewSiwN1zWfsOngdljq3EmY08vm5i/7j5yIMqpvupKyGoNg9lngYosl9wY/0dZdrMzYl8Ne8sAWNOu2MA3zw/F2CoNiy99XbvftrcLriz6PhsGn3U9cM9xMODObQYWCMANwPJ49UliuW6SaqqBn/gGYP8pwPyJwNIxwDK76ahDeN6uXYCuYyABkEza4LbpY5WEWdSLxjF26/dQB0SJ6r4ByAN6NQxmkWcqrnQ00x1DEDJFjR8CcNWGvWVPp6ZdMQ6OVOCb3wAscPJ6NCy+7PerkP5Q3tBY1PrT9tEw+JwbgPu2AlNbgVkCcCOwtAFYcgAuiwWlM/XqDjMEbP9t4MB2YO54YJFMo/5gHIcALV1TRZ17FXOhPtvgtvkqf9H4kvHDlyKK4l6VzvVSBF22uwjOb7pbw+CfcwBSkyeFEHAUx/yw9JTyEbo27C17Ol3aFWNuAlgIn9QxO2tYfNlbK6MvaxeMRYquvL9rTcPgJ30TuH8LcHAzMOugX3QALo21WXBZLEHwRF1OgHS2eOgbgIPHA7PHAezNu7QFWFZ7JnXJ5rnqxHEulvlzwyVNN3+wern5Yovl7SXLGwvn4riLWO4fgMRJXcPd/+pmOymELEhRzBxJAo9gVL4kwVnbsLccgHEpWi3epocCAMeBRU5eTcPiy/6qtl0wpvhA+2gYfO7NwOQm4OBGYGaDs+5ExYDGgqP+ccAkINaVpB8GTv4d4OBxwNw2YGFrxYCmV0YxLNYheCXau7EhV3ga3Lb8g4+R45uoGLADgHWqhsBXA8K1AZADyRvuvtkBSArh+i9DsQhCOtf0UUgW/7aiYW/Z0+nRrhizoxXwFhyAi5y4rGHxU66qAFhT3rDSIVdpGHzencDejcDBDcDsBDBP1uX1CMJRwFiQIBzxieL3KIY1YW5MPOxNwLRb8gs0aghAss1GZ1O+SFHsdRPt0i/PLHu++dFb/x4mXfhcbWxhfCtYMFr/uWvKxfDaAcg7ipPCvFOVpuo3HrCjYW/ZA+rRrti6TS6MVQ+L4NPH2nx698GnXF0BsKa8Iab4dFZpGHz+JLBvApieqAA4J8CPOQuOBBAOV0CUYbIskRkAecrvAdNbXc/aDCxSpyT4CEIyTgRgneiLIp3nP6fs+a4A4N8B8/48CUC+ZGJA29fpuLmxJW+5h5kNFg2jiWHSi0r0Uv4pCoZsxw8DUfnhd4Vk0XGdGvaWPaBV2hVjdjgA0BlpkQ/K9bmn/HOVqtClvKEBqlfD4AtmgP3jDsBxB6DA7tdbcvYzJvQJkii2n4NOeMpbgJktbYPGACiF3wFoEx1ZMNe/4jnPLXu+KwD4t/5SO/iMBcXuesHylyACMBPDgzGg7opM8mEHIGdwrfGA1rC37AH10a64Yr4APvvOSdwEPOVbKxu+K2pdKRTmdI3dqkPPVgbSTBGAY8AsATjWniBdx0QxJylOFCcr6HBiw1P/CDgU3EgEIMW52M8YkLolQRddIN1AyKWiBretf9MJQN6HsaCPxe4rvgDdHOcOxDIAcmDFDXvLnk4f7Yqt63gEIB/Yoj+4p9xaAbBHeUPM8qF2aRh84QQwNQYcGgdmx4C50WqCFngNsgSvQ+Dxu4MuiawhwIAXVk1O+e/A7CZgThY1dcno1nHL2oDIyZULpBsAFTBZ9pjT0QQgn2V6ufRicS8QRgbs5ZYpEsENDejBfpoLrwAOjgIzZMBRZ0AHoUC+SOA56xJwNlEyTFw5FxBPeWvlzpnbANCdQ1eSGTRybMuydgMggVBsKmtYoC6Mt8znZxsZMLzAxoAOvsh+ydDqtXx4FIDl8L/omQ7A0QqA82S/ERdTI22mNfaTuBIIxR4BhKe+y61punQC+MytI/Zz/c9EuvyBeetLAfGZ5WOMZ9j2/gqABB1fMLsHAVBqhfTcyH5d9MByEdzs+B50Z7voGZX+NzNSsd8cwUcG5ASRKYbdHRNYwhhDIHRgGmO0gFP+HJh15jOXjnyKblVT5Cbfoq+yJOszF8P8+VnNPlICkMAzds/YLxlYznrJwIpO6egTPMqA5ZNDAB6iCCYAyYBcBqTRQ0e4630SxZyQJQIvMJ8mSeLrYe+p/GzGfnTpEIBy6US/out+K1wg+brs88rHmDOgAVCMnrEfxxMte1Mt6j7u9zzKgIXzczEBOJIB0BnCJoqgIfDEhM58SWzJEPGJe9hfVH42un/Mfxl9bgSiBySIBWnAJBDGEDAB8QWFA8wO3/a+wH4+rg4RLPYLul8tCI8CsJmJMQAOuwFC9qMI9g9Z0CxhZz65K0wfFBPqu7PEyVdWAOTHVlTcpxhXHZLz1w0ZA6EDLhkCskRf0sw4dRYC0PQ/vVSRAYPo7QCdj7GqVOSMeBSAzUzMxZcDMwLgcKX/zbv45SQlHXDIgagJc+bjZBqAWhUoH/Y+B2D0J7rFa6LYDRmzomsAaOeKqxEvbWacHQB08JkRIteSXiSBLYJOLB+X4xrzAzY7vgfd2S4RAKkDDgPzNEAIxMASSWF38WsgkuXLyXTRSRCe/DduSZMBMwe6ObTd8JBj24Aot07uDObPP9XsIzUGFPs5+JJ/M6oT4buxHv9X7BeY8KgOWDg/Z58GTC9Xq5FxTXOw9c3Cm6k5fPcjgbHbgAlvVG2tH1T3Oavoq6BlniZ+12n5u/2sDbOvasqoFg8x2Lnbcd1GdhSAhXN+7qMrAC4sA8sORJ6yHwD28z+Ft4fdv8UyqUDrDmCEBcpZ39kLS6aq9l4D2rLb/KYsFTPWdfbvh86vQu2s1K/K+zIjTsXIVQ9a59Egs4Y6sZfIA/EcSp/jEXv8BWcAhxaA+SVgSQAkGAMICcwVlNLlqTc9Gbv/HAA7MrL4+f1VlXwrUq7SvCoyGcrrWpGhuur2fNGYwM8YT67hT3s1LaZvqn5MLM0bzmHMmIFSgdFNj/mIBct63NhFZwEzDsBFgpDPeanNgATfCtGsX9TIKwNrg9tuVkhlng7TI/YArX1VkXKrEe1l2SynN1RCsFJsqnQv3UIMxhwIRjU5AGN9QUteVz3BUAvahuNgjC3HxLAND7nBp/cgONXF5wCz8xUDGgCjKPbvevlzcKUHH2ag6cnYzepYBB9Zi2FxDJdjoXJv1WDFiLJ6MKqKZUzoQFTfj2HmwTKcTpVWvcxHKm6kKgoORAEvVclPD6NdzLXpMT8IYNPcLV7yJGB2AVhYrAC4SNA5AxKM9ryDPE5fs6eeVKWGZ2M3S3MQfEyJUKV8L1ZpJXpVJ9pLilmlAxWkVJHKwIhjjD9TtVXVm1HdOy/pJiaMFRWM+bo0rWl4yM1N7oPhTJecC8wRgAttBjQWdBBGESwgSiV0Pb9DRgu0TY19N+M1mRKh8niqFx3rRDsLqjgl9yaGXT80vcL1wnE252PAZCzAHQCoiqoW3yYWFIt664fUpKaREr1NPakH6XkuOQ+YDwy4FMSwgU8GSRSz0UJx3Vx/5vFNbrs/EiLRY+v4ACITww6iJEodQKwBIyBRv9vwhKzUW6z66TUGEwhDS3ezqusAyNxnJn8xa1KRPSFts9YfFB/QDZcAm78CnDBT5U8rCqjfc3yh8Gn/hGd/MsKf1+QzYJ4891Jye13iy1cAE9cDJ+6FpYrEkidxDN3OtXR+FwBGMezoMmxJLOumAuD4J4rxJrfdH/XCoLGFVKiUbw+LAPQqWWaMMLrd6/+JycSIm85w9lOpt1j1MwAwFTiqAWEUxeYH5ENn/jInUVHeMXQ/f/jRePvCa4DhTwLHfBc4frGqqaNJzLPw6iZxV+HTplFGvZrXZT45N39+HW3TujlZv8D6fp8HRq8Dts9XIOR5YtakgBgdrrrt5Qsq8Ssd0BhQ4HMwmVitAWHAY/LbLDQNQDaTVJ8Q6W4qVB51OOqDZDPVB3TLOBepW5jmqaLbec3jGgBGMSxvvemDYkQ9GoKF1ShUCSKCqBeQrvmfVZPC1keBjXcCmw911tTJ8q5XgOLaQgA+x/OdWA2EGZ98gbjleTHdQHQN+2iwls3nK3/Zhj3VeQhovYzdxmArSwQgDRA3QiSCJUrTnjfl4KozRCSCCeYmt90EoJJbVCk/1+FiCwFZxLk4dRfLFia6x8LbYkD9v9cXtLG6+O4AYQRfrgPygVIcqyhTXcWFOJH8fh3rz7EKwnUArq8mcGwK2MCC1i7WY7Zenh56feHT/jE3yliE4TZncd636gPFCKWavGhcRx2J+cvs9MlSw0Ty3cCm+c7n0G0MExdW4BMIbTXE9UCynvyCCX+Ovm4gbByA/xisVgJPpXrzLj4EoRJjJIZrWHArS9iprK+KcefgiyB0XVKGjOmCmW9xhRVMUSyRFnNeFGEdI2q+/HFXclkp9WsAbgTG9wGj08CI64WxRk/OTDcUAvBHXSLQxcVCDMQSWbzv+1e7WVbz+k5w2tJtsbcCYV6WJY7hmAsDA7r1Sz3OgOgoM+KTOJbcjSI5yGIaNE1uuwlAAU/MF+tF5/0sIghVLdVdM2S0bSzHx2Mi+FTxXf8X925NC4BycK8QwfmgVX1LlcFiykEMcL2BndJJ7aQfijKfxLGDwAhByM7aC5U4qwPzNwufNnNuOH4VZaCPlPo2AahqFqoPVFc14ga2m+WEEL0cAz9kdPrOmMu8r1o/rTsXz7f9oswFs+jO6LAqkvC3Ggg5Fg6mwW03CUI6X12h8lyfcz3QHqr3DIl64DbqaQKc9mI87QXACD6vpJqY0EVxz2CEyCI5eMSGX2e7VtI5J4yTRyZhscrvt1nQuivOAaNLlYESwcySgiVbr37Bfd0/u31yEgg2FVaiPCeVOguqAfGov0iR0R9JABJ0bnwk9nMxw+fOh55EbgRhzozrBUA1polN9CLwok5HEEUQBjFMQB7D+j656PW+IrJ8O/bBCo4sGFdGejqiyYCx3mKe9/JtTiBvmI5OFiTisg9LtJFF7gZGDrUbHKs79+hyu5hSaUvh1foFr3r/6vZJCiXgCDwVVFJ7MVmRLsrGltuFCc68yFdACMDAflwR4QM3HPoKgIExt4gz42SuaQb8hBOE2oZmlu+KFlKR3QSssMJxDPWbbjpfLoJrxG8CYT8MKGZSVTCxYFTIb84nkCxCIPLDiby30gXFghaF4c2ReR466Uu2fvoFr3r/fKAEFxvpqMcd9yonIrkuK5LLV7MVCM+/uDJCyIC2J8a0z1iwqyESgMl15Sa33QKgmtPEBnp11mwuXgO70Ud4DHWzfgDYC3zBEOk7HlA6XKyHQzb8HgGoCSQLqsxorIy1Bxie7Wx0rFaf+wr9Xv32C+56/7HbJ5VHtRYT+GJrsehHcya57PyKAQk6+vBkBZPpjPEExlwU59awg3C24W6KBsC6tqHR+MidyVG3i3rdAnAsH2T093XT+zLr197MTA80h3SfsZP2UqpCrPQ46oF317VrpeiKXTJ9MhMLkgGdCacKG/mupV9w1/vnwyGgCDCKWzJe3lqsyzLWZWe6/kc/oKzgKH4jC7oolhdC4jiuzM0WPo+cPQ2AsX1obFCTO5Jzn566PwbReiwnfTWjI4KvDoh1juh+aT+WKSYD3i8Aql2rJk+VsVQly5kkddv2FvHT61icqO7Fr71/IkLNXOi0FQjV0046oBy6wZ922Q95ICqDEaL4XWw3COcf9Mw73DFB9AqE6wZAAS8XuzGQIDKf+oVkqxt00ttAc+YT0PJ9qRFSB8xoye5Xu1ZVeCSgCLbYLVNswoncHxoeLwCzBGjBNki/4BX3z9lXgUCyIIGmhova83cRgO5Te9yLgP3MfmsBS8xs8/U67ePQOqy9umBUruDchqo8sHSd3PMfT5ifo+ack8eFHI6QEcnT5GvdOnVdXof+ptJ+BVPWceiaRHA8Us/nkACo8mzqlqmWrbFDppT5A5UIZm7CPA2Vgm3QfsEd909kKIqB1qJAKCBG8ZstZz3xHOAAiwmpDIdng1maZQAkZzsHZ537YfQrwNyxoQ+HakrnS0h1mUA1C96TdJTmORyhC3oeqdwROi+GDhkFI6bYNrcNDEDeAkXwQizPRpmnIs3OdqZPSaRFUcbchHlgie6agq2kX7Dd/+d8lUJVXuUzk8ERmS+2vfd4uvN2VOV5rSwb0y3JhgIh9wJeN3YMQCIgR78Q+nDEVYBYZUrUpbXFnM7COSdf7N4IPvtDnT2BY/h8Chh10MXQeYGS+7GGjaQiABpuNIFiECnzdWJMIUHcazLptC7YivsF8/7FgLFMqpiQL5TuNbKfA/DC46rqqAbAwIKWK+timRUBEiNGsOQsyQm+Gpjd4n046hbT84KPuYjOmHHyp92gcgDS2OoIuVIeh/xyUkaVwyEWdLrewHE3uBUDcKIwnq40HpDXL+n3CzbaKdguel5VnFJl2awaghLQBTzteZ0cjLq2A2n0M6EPh2pC57Wg41poLzZsAZNso0Hw6eVR/J8bF9YjWGmVCpGKwQLBRCcrbiSxNLgVAxCF8XSl8YDHHFPW7xeFBRwv/rGqOKUBkODzqgdWPYAM53vTASMQu4Bx9J+69OHIF+N71F1O1gUB+AsBfFqKC+4Wi4BWX+CYgOTAU36wdMVNVKka3MoBWBhPxyiuko3xkSX9fvGMkqsDlzzHC1N6SQ4DoINOe7KelWWTheziObeKCdARApD1AdVnRH048gKUAmAEYi6Oh4DJV4VoGDWqjq4XLbO5o1jBoimEPhPJmwu9FvnTLgdgYTwd2wyXbMyRKen3i2eXXB245FlVYUpVxUpGiLtmGBlrTEhVUwV8dEkVKAq3MHJ1uzRbRx+OOgDWFX6MsXJU/36lJoEoA2AKvw8+uwTEDIBbStdOs8ddDsDCeDom7ZdszBIs6fcL9ror2C75US9IxJJsEsHdGFBil4yYuUwknofJgF4XcEUfjrz+X7fKo4EJJ//PkMORO6FrVjQMeL5kJhZMMXzLwNZCt1nzDFgYT8cQwpLt4hDON0i/X7ys5OrAJVe0S/ISgFY7j9ZvnQ7I3+lyqpYaL98CWp/N+nDkZdhi6bW8An1kP3fRTLKVWlwF6RZCH2L4zDDR0k1IqeTNb2OQSYNbOQMWxtMxeqtkY6I+ny9VEz6btfb7xc+XXB249AoXv85+tIBVgJJ6n4lf6oV+mfjdDJNMH0wAVFX90GMk1f5TxlS3Fggh92DyN0IORy5665KIfCktsl+K3VsGtpVOWOMiuDCerlSnjQ2rB+n3C+pIBdulz8wqonrNPLKgwKaC5B3s53qhXVq6oDNg6sOhqvqhEr3V2VNLBjmnSSNdrOLJ1zkAu6VPRjFcFz4fXDJ8i45hG94Gt3IGjOFYA8TTlQZ/qGH1oP1+8ZtlT1MAtHK8mQg25zOZUSCLIliWcbw8wfW5Ln04ssqnHX04euiCk6/3de66MPpuAQVZAEFkw2MKFw6a1wEL4+lSBvmAOMhD8vkOkFX77feLNw14YT/ssmc4A6oOdHBEkwXlgjH2k4Nal6wB4fIuX9LzZjAmorNeHMo5Tc0OewHwDTUh9HXxfGJsYkAbAAAgAElEQVS/uvCpoAcew6zBBrdyBlQwwoDxdLZWXLDFkHyF8xGE/fb7xR8XXByAAVC1oB18HQYIT+8uGfP75SCUs1o64he8v4j6cIQ+IqkPhxrBCHjdjBH6AblQkAeY1ondukSiELmsUPpjbyp7XuvDgAXxdNZVvWCLIfmKg6Bbhrjup98v3lVwcQLw8gqA5v9zC9jErutltg8gMxDWWMBaMVkmANWFyEV6R0uH2I1IzW7ypbkQOTP5f2ch9KsFkwp0kQlDAOmxzHpscGuGAQvi6VD4RgmAg/b7xZVlT5MATNXwqQc6KGwf2U2uGV2uzg3D4ua7fDnPwZcKgIdq9GaIBPZb0YdD7hgyIFWMXiH0eQ5vXS5HcMkc++9lz2t9GLAgns7KxxZsCkgdtN8vWD+vYDMAUpcja7lOR9eLVcIP4tcuob/3AOHCdW02VTX62ApB4Mv1v24gnPy9HiH03fJ366KYHYTHsgBBg1s5AxbG0+HLZaOp65i+ln6/YM5EwdYBwGj1cmUkE7+8THLNdAHhwrUOXtcrO/pwhF4cct2oN68BMDCfmsJM/n6PEPoYPp8bH3kCkbtjji2tJJA962YAWBBPZ0WBCrbYsFoOf9pDAiENk179fkuvf9nTXewKcBSjsn7ldonWbgQpx+26otaLIwAlfi2QQSJY3Yjy5i9dmsFM/oEDMM/Z7Uf0RiYUA7J+ToNbOQC3e0WBBm9qLad6HICG1ZK1XB5PoxnuOOIcxSXe/Of8xHV/P+FpwN47gKUpYHmuSve0pKZgCKSq5wqniWE1WZz/xouBm74KTMwBI17lVBXwtWSs+8/vL45Ff3vhpcAnvwos8d48DZX3M2hx9XIAnu0IIO0chu35AOgLL0yuG/jOmwbg028G/mNz1YWdETbm4I5BrFlov+EtD2wIo7l+Atg8D2xY7iw3V5diEqO54mnj6XdMAYcU+6gon7A3NSO2qFjlyZYDkAX6uD5Iam44YaUfVNDNxaJcLIPXcGGpfi6PnZdVD1wPspQBX/wl4OaNwN6Jqg+xwrxslcVFuYJblehkcYYZGPS3L20BxueBcS8nwg5H5kZkx6TQSbXFZcCQKadx5Cz5mPurAFxrRaa17pAR2PFC+ElSHKQ/0QjQcgCyGyM9v3SnsDBRJgL6msWCf6IfWeUJac8UFlpY8500DcCfvgb43hiwZwyYVhd2D/VSrKGAmIDnBkiafEcN9cprHgKMzgNjS1V7rRjRlceyrqif6KAkMgXIM+6tAnDl+zSL36O9+U8p9jGHQo285/2XA/AnXeNnKAorDXH/AILwbSvLEz6Ql2+cAf/3XcCdw8DkKHBwpOpFbE2wadzIdyh3jjNQirYWEwYq+/zJwMh8pf+xKNSwM6DZMmzNRRbM2K+2Ii6TlFrAWfd5V3i/F7IgT2LBF5LbIdkqxLPWvtzlAGQ3RpU3Y7AiixMxLOUB2t7pKQ8M0qCTnp8HkojJgNqaMEJesQv4AR3Iw8DB4QqAs+6SWRiqgJgY0HVDAdBA4Ba4xN7ndlSFAAjAYX4IPO5dBDMAdS2i+Jx7XTf1eEdTDfgAQnR34p/wQkRmjNAoByDT/ugFphXAmjAEn8qaPQAgZCs0lSckCNmVigEbFMsPBBE3DcBX7gLuawH7hoAD7EM8DMw48AhATrjtQwiXoqkTEwWd7LOneXNCbz6Tiq/TInb2M8ZzIFrTQbGiy92oGz7pXl/7jvdAJnb2470IbB3T77Sai+hyAP5voTqW6sKwFAc/TAdc5+3dvcsTrvPVYSK4SQb8xV3+6IaAqSHg0FDVh3iOIFTIFxtit9orL5Z/LD1Q4s+B8OnHVuXwhhdd5DoLGsgCCJ04q66X/Ju/vSaeAxDPvbdtmdtKDV90gVEPIl/xySkviOhmAEjrlzSkwj40SlQZYZ39I+8JBMx8mZryhOsKwqYB+KpdVSDFvhYwPVR9BD7uyX4SwRS59nNI+bRck/DzJ05v12M0nY8fAk8iWL5BB5qASPGRCi8EVjzv3mqpkC9ACrrwhKukB67GhpqRRowQMqCiYbj8oOoHeUWpdYIBAUj8c8WjrjyhNIJ1unzjDPjqXdUjJAAP8TMEzLYq9uOHICQALe/EwWe+QgddAqCzzD8+vgIgg0qp+5nYjaDzCgjmnCYone0klqP4JSgvvK+6LoFPoFMlkPGh+0rPWta4RHTNJJQz4M8EAGoNTPVU8opS64CC9zoAWTFChcq7lCdch6s3L4J/2QFIEBKA1P9mHIBmhPh3Ai354RyAAmWsR/PRs6vOR8Z8FMPS97yxtIlYgVB/I7jC0rIKSfLXF1EEB+BFFjQ3jCLA49OWsRTTEPzvzQEwry7VrZ5KwzAQAPssT9jw1dcHgCrORQCS/bgn+1HsCYQSveaHkzvGv1scgU/6R55Y1YIxhvOm1EZekQWl8wVDxJgwc88QiJc6AKX/meHDawX9z16M/Em7bO8Q08GBP/jEkAEVjMBoAFWXUjRA3KtNwOBXW3EkAZhrALktpC6lKtTV4OU7RHB+3kHWgv/zrnYZl2kCkF4uF8MGQGc+MqEYUCA0n1tkwxbw4ScHAHr71Q7W4++c8czwcBAmHVB/c7Bcek9b3FuwbdD/kjGWgzJjQ3thGmVA3jhfOyU+RxB6FamOFp8NrhsTgLy8Cpzm5QlVptAU+6CiNgXCaIQ0BcDYV8b0P4pi30vfIxD5+w72C9aliegW8MHzqrmh/meuFhYi0pKbs6D9fsh/n1XFMrYMbPgUByCZz6J+uEknDA9AornWFRb01WZEsACoHhOqyC7wdetT0QAK2KqOb5MCUvPyhLE0oQxzqaYNXL5xBvyVXe12vByLADjXAvgxBvSPGFGMIjCmJbEW8HfntxtQmxT0cmxp9UPAdKAZ1upA6EB7qgDo6oCUxXRtPVSpAwJpnUhuxAqWCCYK1MBExZljY5S8SYr+pxAFAuBayhNG26jw8usCQLX0SAAkwwcAEngyQizaXoziIli+Oe7/9kJvNk1LmBMe9ECO3XRB7aPeF0EYHNVPdT8gj016YBcWtBfBVYJuz7mF7VgGY/pO8f5WdQ1/7U67nIKNS7j0wIbDPFZsyNHHY7od/xdlEHj8CcC3TgCWHgGAPSxiSdt4312u/8SPAl8/Dlh4pDeZW2PD4J1c9+uyDaIDkgEJQKnTfG/N8nUAmu5HUnMW5ARbPfEuIHy/ACjRK7FL5pOR4RaxgTHofKl8r/S1ZWBnAGDKefbn3AFIPRPXB7sFiVQimKVgGdl5ooNwLQ1/1U+DQGSXQ9r5Evy1q9rZbP1lGQDZsPpzI8APHgXgod7qUx11YtBbFzC+/C+BL7SAWwhgdoLkONSLqy5oLogYft3ZI1F7EAC+phsAnekokhP4HIzml/PvthQWmPB9LJ7jxkcSr14jWj4/0wFlgJD5eoDw6fe4DzAYPHokWhHJZ3TFSkn4h7YOSOBwEtiMTv1aY0uktFYTmI2/43EMQmCuAJmUE0gmVD8EFdPpdnxhVhqzDr8F4NMtYM9Jfg98EVTeNu9Q2OFZBX7vr9vtgm/lcezczZ61ZNN8DCvilYCdPXqNDQpAlfGTKm0M6AA0PTAyoMSx64cRfPQHXsniOTI+fEWDFGp+Qb9BeySRBV2kpl0QxxGAlHDmkI56X6z+EP7UDYSdRgh/IouwIZ36lHabBE0GJ0r10Rgb/xA/tt/j/6aMAf+7R4CxzuBXWRGULwBfIrY6UNfpvLae7n0I+LO/reoLMqiVMbW38oUhkNkQIzZO7tIweGePcmWlAFTjAYHPVGwXxWoLYblEDkLuTT8MDPhXLJ4jALpaJB+ggU6xfgJknT7IKXIQXh4Y0FZCog+wxiUTwSkXUbSMV1rB/A31OXWuFpPUda/mRHKi1e6U+hA7Zq7l+A+UAfDtHg/LrptkQpZ727cRWOL9542Pa3rOvuOqagUltgtmJM08j4/PILbIDKz6w5PAHsbraTnMGdZWIwIzxIfeK0rn578J3LAVuH8CODRahV/FFQ/1IumIvXP1QudNfyNT8oVqcHviPcBd48A0g2RDuoDqHdb2SalZAdG9dnfDkAE0gXnH5ijWCDbKCq5/MRiV0QD8HgHQ63jG0hdsLGxA3x9Bw1Asli7hO3BwApgng/Gjvq01IHrXJ7q3Cz7E++YziF2rs1ZLZ+8H9jJsSoECWXj6igmR87aLgfbGq4GvbgLu2gjsHwdmCEIPSI1h+SkCRjpfUC3iNWcpoRrcnrYbuGsUOMBo7QBCxSTG/igxVcBIVGPWM1h1JYQPnyKNExGZMDIJ9b66eEBGxPDY1Y5nv+GCjfGAxD+DDpiawphABWZPjwNzNLAEIH4XCH0M7/5c93bBfI8Yk2cgVAdvdT10ifDkBWC/r9lGH51NhIsnsWHOfPmEUKT94WeAG8eAO8aAfWPAwVEHISNQlKQUglJjJExqC+H6Nq93kOpUg9szbwLuHa66QzFWkaFieXxi6hgVHOMCYGRuJ+5V4jYJIDKI9KlsAvFDq8QDrnb8NWVPh9EwdFkQ79TlSMIsN0Mi5s9MoOGno4U6f3YAvefL7Y7rvdoFLxOANSA8f7xSgWmd0kCQbmZ6mTLEnJ0UqWLhUkxlrBn6n3wWuGkYuGukCsufGq2iojnRFpafsU7MDxErJuZhYCsJosHtWTcBe1oeq+hxigJgXBrMmTBPnJKLrr+VED54ibHYvZos8sO+DNcrHrDX8YVVyglAKud0LtMjFPtNMz6QLDY7VomLJd671AEH4Xu+3g7nWq28ISvX58/hguOBg8vtFQvV/hEzxfqOevuTfpjri8vAWz8L3NYCfjBc6ZYHmBcitnFd06pxyb8W4gPlgonBqffTtdTg9pybqiVNBssyUsdUD7eGO9amnf3sXtxQipl7Wg/sD4A8AwHIyZMYky50Tp/xgN2OL8y051qw2hXzwRCEdT2nmck1RxHG+w5jeO9NFQBpR6ldMIMXlFWgVndqF2dVFsJzuOgRwMElB6DcI6rznemD0RnbwQiSRS3g7Z+tVIl7PC9kahiYZm6IizuLigliT/VoUog+p8P9l3wJ7qGEanB77k3VczroUToWLCsABud4ypaLCUoxf9i/9w9ADiICULrQRWuIB6w7nuZrwaZwLBGwClSqSyz3AhHbaRGEFGOmC44D72UVgjW2C2Z4lIF4ArjodODQcqUGqAxfcpG4mJVuVqcL5tbs2z/veV0tYK/nhTAqesYNHdO5PCJZos+WuzxHJIViuXFyJxupNLg976ZK2lizUKodilGUgzyGhokF8yw5Mf+qRkjdjfuDtwkkm7DTkNaBaQ2ox1q3eMD8+B6O3H6em8Kx1Ccx9ptWl9iYIUAAWrI3I3nHgPdOtsO5eOuxXXBdj0V1vOL/so3Cxef60tlSpYwveKf0pAu6ohfdJ8k4CUqgvr5jV6VGTBKALeCAh+VbZLTnh5gu6D44A6H8cVlkNK95O1WkBrfn31R5HSy+JCwPplAxRegE/2T+AloGncNmbQyogUQx/KwB4gHj8YWNTwRAOW0FIIIndoqNkTAxz/bd09XDGLBdMM6/pLKi5whAX60gCK2ujxzEAqGL2pQ1Jis5AJEAFHvTujYAKjRf+SEugm1d2COQLU/DAwQ44caEw8AtZzSIPgAvuKkdrWMM6M7xCMBoiBn4YpCE2NCfxWAA5MEuwvCCEICwlnhAHV+YORfDsWJGgPpMKwg1b9QpFnzHbD2BK2JGul9s8KkYW17vLALQRTCBpzXZpS4gtCXXMAkduuAy8E7PijPWprXJ5CR38ygw1fJDohh2BlRAgq2OeN7uTWc1D0AFNtmL54ESBsCaJcLkDajxj5ZXRiCIGA0waDwgjy8sk5+HY+X9ppUbJSCp6TnFCMXwny1WAFQ8rUAc2wUrRL6mXTAefWnFfnz3FpbagQKLAqAzoZjAKkkpXkNO5GCEvOMLFXOnnC4xIKOjnQGNdWSM+GqHQGd7JSsxUf+JzQLwhTdV4je1nQvr1MkPGtlf9yP2Dy+gAqZ6rQytfvdHSDxgLwBF8AmAYjHWluEDiKGMiqOVvtejXTBOuRSYJwDJAARgZAGWL9Nk+IM3SzgTydE4eec1nZHbtDaNAf1Dpd/SMx2END6kD0oXtFhBXmcY+OY6AFChnKnzl7NfdMR3qCAae2B+VVMYXASvDs3/X/zHJZcB84vuiqABEo0QPnhnwqQLyRURmZBPytnwHde0M1vN2lR6picoKULaxHDIEdHkW2iWg4/7b5zb7DSQAVd0/griV2JYojfpwRGEYsGBrOBmx/OgP5sAKANkcbFzNWTRnX/GSGImMYH/LYlk+gGvdT+bW+SWH+Ig1GqL5QeTtR2EYj5LVHfjw/ZDwL8yJ6TB7UU3VVoTjTYxYDK+Ivv7dzNAZIxpZSiU8jjKgIWTcykZkBawDBBnQdMr5QeTKI5iWCB09AmEb7+ucnOQ/aTPWn6wuzyS4u+R0Ob6CUGqJpIDA97AdqINbgRgBJ69CG4Jp6q/ckjXqB/RKla4WpkO2ODgHoynigA0JiLwaNiEt95YQKJ4FRC+7brKzRH9jZbN6iJYuSHm9I5iOAOhHNJfZkh+gxsBKPbLu3+JgaWDdojhMO5kkDWSlNTg4B6MpyIAjf3IggJgMD4MCARjFMU9QCgAykhSKnUCYHB9JB0wy5aTRUxmup4h+Q1uAmDs+hpXgFLnB6ULONOn5xACNJqxghsc3IPxVBGAiQG9aLeilWUJW1FvVXEN0TKp1C6At19TMSCBpz1dHtT/JH7N9yaxp6QkF73KBxYIr10nAMproB44qQGTj6sjUrtOFPtLeFQHLES9AdDFrq1E6M13MaxVCTNAXNFThIylLcor40zxtgDAPKuVwDMrOKw+SBTbtR2MND7sZwC7Qvm4wqHa4T/uIrhb+7n0EgbQdTijoyg+agWXT8llDsAFWr/B8qP1K7bT0pvtVwHhW6+t2C/m8svvZlawi2CKe37nhFtapkDnILRqBQA+v04AjMyn79EIkXO/DnzyCBwVweX4wxs9B4rRZgyPVFqykgDd+5JSpBU5r0vHyHz+jsc3ub0KABsZMCyQgeExKyFPVIz3lmcM6OfPAGCADYPE67Jfs6h7G0o+xvi7oyK4cLZfOgpsXwC2Lq9MwuuVERonKn4nSJrcXnQKcM7dwMMXgYcsVxkSebJgzOWPqdB1ad2f3gpsnwK2LXWeR9m3danUIV1lBSCPArBwtp+7DThuBti6UDWDmWA/DvXk8LRptfPtNUlihYZTOPCi04GH3wFsnwGOW6iAs5n3GeJJ+KLoE+9VDClQ8R6vOQHYegDYwuY3S6H/iJ8jb11ck0q9Qhoc9QMWgPBZJwFbpoFN88DGRWBiqQIgWyJY3lPozaGJ1KTEPh36zpTkJrcXPRE44S7g+Cng2DlgyyKwaclfFoIwvCwx9Zn3Q1DmIPx/2/sSaMuusszvjfXq1ZRUElJkKsBEGQyYhJCBSkUqAW1tsBdpuxEVaBzowXZqe1g90G2LotjQdmMjKqtBxQERdAWUAkUlZNBGkQRNyIAEMAkxpFKpqjfUG3t9//m/c/+737njPq9uVeqcte66b7jnnn32/s6///3v//++Tz0dmD0KzC4DM6vAFpd/0L3Gh6yTDgnvLwKzAWDGiH/ThcC2OWDrErB1pRgQisIQhAa+AED+HEEY6uNLyrRnZLSl6tSbrgLOeBQ44yiw8ziwfaV4UGbdegmA5QMTLFlqsfn7XecDW+eAmePAltXiXnkuZSBkRcm4UGXtU2uo3xsAZgz6y54JzMwDWzkgBOAqMMVBCSAUObh8QuN/CiTgcWAuyWhL1amvvBbY+VgxbW477paa7gIBqCnUrbUBiQuhAKDUot13IbBlDtiyBEyvtO5VDxvvVfxW/JkWNFrCeK8NAGsY7BsvKQC4hQCkJNaKy2LRIsg6SJ3IQSe1onKKC2CsOYMeN+0Dtj0ObDsGbFsEZmWp5S74g2Ir2uA22BScAJGA+dJFwPQ8ML0ETAUAkgDTPq9zdK/+sMWpPF19NxYwA4g3PtsHxAE4SQC6FdSgmGWRRIJLZJll8EGKjHiX1jwaN10HzD4BbD0GzC4WrsKMW2pNobZoCu6CLCDfCTqzgg6sr+wFphaAKQfgZHKvpRSYg7HN5XCL2AbAZwPrZGaj6ippXhgn0kqmU1woxnHedg5AATuWHig2FE1uVRwoxoX+Wcbg89S3AqCKPONcCi8oPtVP+9++G3j+oSK2xRBFDElUxbTS+3nvc4FpDsjxllXQoJg8FgdCQoGJJTTicLcQ6vPL6wbg9cDM4cJv27oAzFA5ky9/UOSvmg8oP86n0dICBn25JwjARWDSAUgBHN6vfdbv10AbARh8X91vDM2ss+NvAECKPVLCsHoyUgRqrlbnRwB933OBc+4DXrIC0IEmiLnE75di8HsyAcjzWUVGUi6uICMpVwwJVMXdeOk3XAxc+Hng+vV2esAYw+sWoP31r3eLcLwQBeQUrEHh4Jo2h4vDmJPuAyMLGAeEn7uqbgB+I7DlSWBGCwe31Gb9aL20kGDb/EGRxY6WTz8f2wtM8l4pgL1SgM8esHCvsuylME4nn9cfQLtldg6TZ0kUKorAfij23vAPCmqp3fcCl60XFINid1PlZrf41/dnApB6wSQjutUfIDJR8CGIQOwWEH7DywpKrWc8CFzqRLHkVYrB2jS2FQH5vkuBycXCAlIUUAAkCM2iRBA6+ARCe7DjYmQduLYTleiQ/XTTS4DpI+6nLhZW2nzVCEBaMLd+soIGqjD1ampdugiYWCpeBKA9bBJC9ActAk8LES26SqsftInLZ44dQif4Igdhym5WLrPDyuYH/7HTCNwDnPko8LXrBccjQaioe6BiKad3+QY/MGTH6rS3OBvCnQDuAIyqhiDkQ9RX+29yE3on8IwjxQPI8zkTiApGU3oVkD/4fGDieAuAdMw5MFQjEgg1DYsUku+a3uI0TGBfV7PotwHwaOEmbHEATvuDIutni6UAQoFRIFRYhfe/dhEw7tbe9Of0Si1g8HkrwRcevDajz07gIJ7n05rYyWIpb4ya/7vv8PRdFpj/LXDmkQLAnA4jCCOlTBRN/rFMAJKgkkVHpGUjySSBSFeg7/azqk8EgbSEq8UDRACLKDXSyaQ7Br//DcA4LSCtwnKhTEkQcmAIQhtM+Uaajl0uS9NatITXWzpzfcdNB4DpY+6nBgDaCtanYLN6fCj4u1ay0QIqtML/EYC61wSA9tAJeP6eWsAoDysFpg1eB0HIQRCIIkVeCqQf/05P3WCB+UPA+CPAzvmCaFWDKEuYcl1yMN+Y2dckqGTeHPEvvWDSNhOAfbefX0A6rS8CUw8X9066bFIfdqMHJID++DJgLACQumyc3gyAEYRRKFCLD1eu5ODLF6QvXedx0w3A1BwwxdAJLTXjd8seQnGrZ9bPFxLyA7WIKON63tYtCQBN/sv9QPm6BkLp0vl9t/m6ietR6fbyBA4gnXtORwRRpNnTtPpW6gWLH83lKqcOFTEnDiKtoHwy8RNFhrefyeztbnrBfbWfgttsP+kIyO32ELD1cHHvInrlvWs6TsnB7qAUlg/suFtAWkE55zYQ0QpqcALoNCXTEt7A3KoaDwGQfqoAOEUBa7fUbKctltwCajVbxvSiyvoasM0BaBKwwdKb9fN7NfcqBWGiSWykWXER0umeacUEonQgCKRfIgDFjya5yq8Wfsfs8dYgiuMxgpAg/vnMzu6mF0z6Zj5APdvPQec0TEosnvQosGOhaLuIYvnwEYSithE52F1XFAA0p5yigD4otCqygFKnpHUpLYP0OcKURYv6Mj4MNR433QhM0gL6QongawOg+6rl9CswKoSkEIxPyTsuAPigCYBmAXVfYcVf+n0SRYw6dP1YwNgHsgSajiJP429RrpWOM6cxDiJB6NINM4w7LbUGMQUwB/M9mZ3dSy+YVG0EoBiDBST5ddZ+PkCsAiIlQZDa3LVatJ0WXG2PbL98AB+4omB3oP/HgTUhmGgBfRqWf2TTrUSjExDSP/qWzQDgfAFAWyzR8rkFtDAKX75jo6nUguZxZ8NByHbvvqBQ36T1swcsBaBAGGRg40Ir+rt9WUDhQ5ZAU7Es2e9LLzglqHRxNkbeuW+oQRRls5jaMjnK0a9ecNf2R4LAwO829kQB3LTtEYQPUwzQAWgW0AGo8AQH0ljp/V17pm0KRcEifGuNOnocO1rACQbKPXhs8TtNwVr5uh+n6Zf3wDgu29g2FdMtOc8B6PdpFj08ZFrplw+ZA5FTvAQQ0/BT36FPDkRqBT9Jag7xYlQItY0f88j78sZzCcKPZlrAQfSCK9uvB4h577SCotUiEJ8opq8IQFl/PUBPEoBLxbRE62LSqG4dFB8r5bHcOtiOQSqT5T7RKzYDgJx+BUCCTxZQCwhaQc9oKcEnEBKknj5FsJ1LAPo9xoWWPWDy+6IIoqbeaO0VA+zHB0zxIQDKkn1GgtXiRxMIAx0Vn0Db+lkuFjLRCt5WEwD71Qvu2H5OfekD5FaciQay/GIbFgBXriwAyGmJADR1ck3DwTE3TQ4B0LetzBJErTYAr2BBSI3HTS8tLKBZPo/fWQDZp197Z3scjGb5BDp/L3+njMweB6B83Gj9wj3atOsPWin9WgXCFlVO/3ctf4iD8XkBkH5USlAZlNPZAQqARr5vxu1yjmH0givbX0UQKI63o0Wun/xHuR8E4VnPK5JQLd4VNttTBvK2uoiKOUf/f+GjwMNBh0NMV6J0c0NpcRv7mrYv3kh8/uHxYp+bVpwLp3R7sts2YzouSq3KGa+q7+x7Co4nazAerRKsVlV1QitF59dyyFZaYY0HMu9mWL3gtvZXMbymBIFMZ1ov2h0B+LTLisxgW+Eq5uU92iZ72ud9vvR+4JFp4NjkRh2ONi0OB1/UBCkvEYRhfuNs4OmhhiPKnFQlx6aAjMnSXJUAACAASURBVPjmz1w41nnwO4cCIBvBwZgTAOUHRq3gyDExD4zRGVYEnpm5LqmQc0M5esFt7acFl0SlHiBxuTkYxxdaihUC4QVXFu5FCUD5QtJl85sjGA0ziQxqeu/fem+hw0F2fLLQGxFlYMRvo7v1WmIVtpt1DFkXvOR7LwJ2HSkyoZmEypoVVe8p7b6qEMnidGG/Vl/L2aPOIwuA1pAIQE3DAmFa4j9f7CPaFpCHKujr5xzZesGdHqAqKz5X+FLRAl58le+jui+kTBALMcgZ73CDBkpN2/7+bfcWOhwUyCEAjQTcAVhKdjkPc2RajewKyu/n1//qJcA2uhBMRGXQOcn9U6JIOjXHQqSYOsVoQp1HNgAvz8yny80H5PVz9H6RqVd849WtXQ/zA0Ow2ayGLJ474L0G79vvbulwkJi8BGCg4S01SKqofoNvSIC+5zkhFUupV8rUTpJN06KpaBkFQm5M1HlkA3AyM5/u9Zl38zrk6f0iU6/4hmscgK5ISUtCTowyDqb7UxwsqFJW3fo/vbuIBJEZ1YRgyHwQKNi0KEl1OKTCZJdxtPDn//v8ooaDaVgqFyiTD2IKfcjZS4Fo+7g+HXOPv84jG4DIzKfLzQf8KVfI/FNKrQ6h94tfz+vOA9cGAAbrpylY2SDlVTTt+uCnV3/V3a7DQQAysJAwobZJgUXi78Qayhd812WeiOAZzEyUiAkHMeu5BF5FwZQAWLPwknkLQy9CrPMy8+lIHZFzvN3T+YbV+8X7c64OHHix74V6zIxB+RJ0wQ+UU992tYoFy3fcXcTDxQkoPsCUhFIczKVCegSg5B8A/PILN9ZwxBSxtiKiUAOi7JW0dLTustF8AGbm0/1o3vjjnSGdj+lYlGwdRO8XN+c1wABIoHk6k61yuSCJITq3jDY9Vx0BqK++uwAfX6JkI/hME0SC1EGguiQ+isqcQRLrF6/0jO2w+6FMnZhyZYsQ1W50qOHgPX1NXndtODsfgMwHzMin+0+ZN0S9YOllMzWfLwKQSS396P3iY3kNOLDPM1y065H4gOW3p4uTDkB8zWdb7FgbdDhEgJkCUDRvogTmd/vPv3BVAUBuvylNzAAYi4hisVQnEHoIqWblrxqm4Mx8ujfljT+YjsWBYgIOc0oJPsq1slCpH71fKybJOEoAuuVTRSCnYlmU6P/Z4iSJEcbLv+Yu9/1EAh7JKEXDKxq4ChUiKymRbwjgHdcUWTARgLYXHSr2LOU+BV7MVwzxwOfkOWybYAGZD5iRT0edjpxD6VhcOQ6j94tP51wdOHBdMeXa9OqWRcmWXA1XLUIUH6zyCwlAs3z+YBkfs1u+VIejJEF3ckrjI9T0y/aMA2+/tgAg08VURKT8vbKMUgAMIGzzAcOi5HknHQAz8+l+MW/829KxhtH7tTz+jIMAJPCYMULAWd6fvi+EY9ouoZBM/Kx/4LUBgFLgNC5o16FrE8JJVJgkiFhaQQBv3+dVbMrWVsC8UxFRkjjaVsW2DtRdOJ/vAyohVYK7A+bTvTdj8HlqTMcaRu/XxHkzjgNkIOWuDr8jnYYDKDutgpUhra0uAlAyCCUAK8BXcjBXgLCk/h0D/hcByDxFAdAzoFUqUBYRJTUcMWdPP7ONL6i5bLQeALJRQ+bT/W7G4AuAOXq/lsGdcRgAY+glLkYclJVTsa6ptCX3uQjAKINQstFrAZKIwWxQIhIJuovB/Nx+r2LzFCwlj8Y0evl/MYk0kieVtcvrwGUnHQCVjjVkPl3mItQsIPuElx9G79dOzDgMgGkAWlNyBJn8xKprBRC+zgEo4LWRgcdVcOCjjlNvmx84DrzNAahaFZWLygKWxUNibIhTcPD9BMLLa65bzreAMSGVoXvJ/Cgh1WUfO+XTZS5CDYDs9GH1fnOrIDcAkABTTDCCLYK0Cwi/586WcKJUiEpC8CCBYDsiiSplqUIUmOjf+o2tIiKVUJbgU5uSWl4DWwX4+PcXnrQATBNS+8yny1yEopdcay+930y5YhgAg+9n2OoUeI5TdQer+32fdhmGoOBZanBo+g1yEKU4dYgFSvqB//vZBIBt9RshkTbW8ZZZ2hUgvDL3iU3uux4LSBM0ZD7dPRnTH08VAIfV+2XAOucQAMuVcKfFSD/+IAABsEoGwYAoHZIKEEYxRIHwLS8pUuhjFVs6/ZZhIVWyxVKBBIRXnbQATBNS+8ynI4tBzkEACv+chlUVIKE/5cRGsWmlKfIzudc3APLQSlg3E2OCyVRc1kpU3DgBmKoQsWtlBcswjPu+nfTYtBL+GQdgOf16GCZW6pXlBCqWSgqJypoOAFfXXDifbwFJLvi5HAjlnUsiIe6AjOp4iQNQHRlT2PlgJCUbbc2s+v/hFwFb/q7gm6HlYpBbmTV2sscQyy/qFBj2v0/cAdz/HGD7NDA1AUyOOU+1CwWOewNjKj6/O03F1/WuugW4/XJgfBoYmwDGdH7IxB5kLPIB+I8AfNwZgga5ck2fJbEm8V9zNWPfrasbgMuPAcuseJ8Exsb9FdBhA+7gaQNKB6TfcgCYug+YJT+g89aoBDMmIMScP12uTKj13uDv8zsKig/uJ1uQOsnojm3qB5P5ACRBH3OhPuzzRN9DV88HqQLEWPJnvTy5nm/t/1s4BcuSpRZtGAu4fi+wtBVYEyccrYwn6hF8/FkJp9bKxAKVFsn/d8urgbHPA9NPOEOWl4+2cfoFHhfVrJTZPKHSj5daOtup6JyCpPx8rHWRVQ7WOlrYCMx8AHIzlxkALPD9c0VB+x/A3E/+E2fUYHXdF7KTGwdvTd0AHP9r4PgWYG0KWBdfsBdsMPfPrKKsoL9XAVLAvO2fFylCE4cKliyrDVZNcGS1CqEYhWFiAZV+XntaURdTLmpCEbpchTYLqi6NrkMCzLzt5Xc4HwyJmmkJ+Z73jQOh4NWeDUZiK1K08f0EXt7CMHVawIk7gaVpYJUA9LI1Ao8bzKX1cytoFtFfpdCIWz7rgzHgth8u0oPGDwETc8CEMySUzFaikgtlpW1Ta8JqNba7lVljSRgW+Q6ZP/57WQvj6fydBjXfAjKbgEvMLwWCvhNoipgNpnQshlS4IGFWzIk6ylWwAz93ETLxGWB5ClidLABoIOS7pmGfG+33YAG5mND0G8F4678vkiPJczNOAC4UyQm2N8w94kirFlfIAl7i402d6dbPWWAtrsjOFiuCvAJZOQE0pHTFsckHYDeCvhNgipQNxoAz8/8IPr5nbvH2jd+6AThJAE4AqwTdZKEBLDoDgU4+YVkPHIBoPwareOt/BkDexsMFAFnbzNJYm0IDnVwbt4uyur1kwL7Tp+iZM/08WT9Rc7DHUmuYTr/x+6o4ovvu9fjBbgR9JyA+omwwxvZI5ULg6ZW7y9FPf9QNwKm/CgCcKABovh8ByVy/UCtJq2f+X1yYJPGU27lIZLbuEWDsWBHesZeDz4iURLUWa1TE47LqK12fZmd3OXidFctqm92KatVs1jAEsNv6sdymaa2g8+xUL4I+Pn2beCgbLGWHI/h8G3oTr45iK86POlbBU9yKI/AcfLR+ouQwH9BfmmbLlTHboOnZ/T9+5vaf8FUaAThXsFOQ45mUcgZCWTAxe0UQ+urYMO1/37GtxQmoLCBtRSp30LrDp2SFdzYMgk/R+VNwvwR9mwQDsaspGSfJgYDYNTbp8psCQFJxEIBkQjDrxt8dXCUIY+COH5MVFPi8SOn2n/QYLZ9Gp0cxANIP5IvAkzVzxivRydnKNzBa8fddM84b6AFyAriMF2pajk9kYIeoClXmA3AQgr5NQEHMBqMVFMNaIOayNRL/vhlH3RZwmhbQQUcAasrVVGz4EtjCu/3dfb/ID3PbT7uKAZ/MhcIC0vqRTo4W0IBIEAmEtFwCYqjW03bcmdwBYeoWgetUbrR8snrloiR2drpACf+rD4D9EvTVjIJu7HBV+781X752Czj9lwUZkTEgcPoNPp5Nv4oBRhCG6dd+1DkMz1JIhR1BAHJ7zwqO3fIRRM5tmDK5CoQKsSgOeBYBKFZULTqcB9r6Ni5KYmd3WKDUA0BlhNLM8EbT1QBXBU72aI5ZjUcVOxz7WLkQ8d37vsart/uA6RcPsxNSAtAXHDYNC1AEpf9s01kKwuBwGU7HgVt/1jtD1e60fgQigSe/j5bQp+KYpGB+H62jT7P8/ZypBIC8Dhcx8eY9wF015abhmnoAyJ5WSrKeNgKO9SHxnT/LSasJBim5lRjWBEIVeROInKL1qunybRawLgASdEy74qjaNNzJCgqEEYzBGvK0297mAFSHEIB6ebKDgc8J1ksmV8t29f1en6L5v6cxIK5iK6Xne/5jCTiFcTqVn/r/tWDPWwXnEPTVgIKUHU7ljASawKefIwDpMdRxRB+wFgD+RREDJABpwSzz2c0LfxczVjkVKwaYgtBBezu3SvX08d39P5uO3QKahXMQciourZRAGKZWar/YZ1xXRPe8wQr2AUK7TvbOVTZBXx4MBECRnConUBSFEXT6mf/TK+/qmzAF/0UBOPqBZYF52HrTFCw2LH5G8UCzJEko5nZqmRnPh/uCXmpnVpDTsIPPwKApOaSA2QLDLSHf97iPx0tpISLfz7bl4iFfsUsnj+HZWEeOYDCDnDmCvZkEgedcCjxGseIhBYt3vx049HwMLRh8gA9gh2MoH9ABqKJzxf0McO7XlSAU4HzhYYFq+5D7hwBu/98OQLlIBCKnW39SlXNY+nqeiq2dkQg+gnGPb9/ZpT0lq6MV5D96gLCwgDmCwbdnCvZmCgY/dxy47xxg5SWuUjigYPHFbwA+fyGwfr2rXrMvPB+vp3L3GHCgi9JOHQCkRVPppeUBigXLFymyejYTB4YsgfA20ofRAlYB0FfAlvQqP0/TsX5PLOB5DNu471cmIwiBaRww/F01J+mz2pqChxUMZvpJlmBv3iTocsW4dzewfhkGFix+2febXDAeJO/YEILBB7pU1g8LQFo98QASVGYNQ6DZfEG3fnEqrgLhbf/HV15anbkFNCvohWSl9XPQ2XTM/2s3I4DwPIZwBEDfgitH0Ek6N6x+u/iD7T4g/YdBBYPpWHEaHlqwNw+AQa4Yj54JrJO+aQDB4pt+oCAyYvOPEIQDCgYfeF/9U3AbAMX7ItAlVtAspKZdz5SOlvA2pstxjES3wJ+92NgAGK2gwi78QoVfEhBeQACqNNP1RdoA18kKdgDhxkUI/zKIYDCnqyzB3jwAJnLFOEIW7QEEi1/1Y21ywVglCAcQDD5/Efj7M4CVrZ5AKlkhxeQUaxBI4nvFzxf8IfCVC4HV7cC6ZEX5nen3VX1vAGLZq8ysrvHY+QBwbGfI2E6JpLvdX+ksthpUvQrmX/sVDGZVUJZgb17vJHLFeGQcmCdVb5+Cxd/5xjZ6QzzMLOQBBIOfTV2Ps4HFHQ7CLQUQmUrV0rgKJMsCjsxGAqTn/hzw0EXA4tnAyg5gbTYBorKkUyLnkB9YVhTxu+kT13iccwtwdBewPAus+b2ar9xJAafqfgMQO4dh+J9+BHe5gqZZZzYok1JJUcpaR6bp93P+W/N6p0KuGIemgEWKgPQhWPxdP7NBLhiHKYHUp2DwpZ8rLOD8tmJQVplOLxAqmbRKC6EDYC7/CeCRPcCx3cDSrsISrs04CPm9ArZk55UvKAspYLqPaPdR4/H0g8DRHcDyVr/X6VabLHk2PhjpPVZY7d5xwF6CwS9y/4LbbVyQsEKIufGiKe0p2JvXOx3kinF0GjhOQY+oNRtljji9TQPf/fOV9IZY4Gq4D8Hgy/4W+Oo2YG5bUUy04vUcLCqSJVRWszJbNgxSmMau+q/Ao2cBR88EjtOqbgNWWaTkIFz3YiWrF4nAjtN0nBZrJnU+/8PA3CxwfMYB6LUra3oglL0tps6wlVha5rLiqd9AdDfB4Je6U0s/0BXTDYh80Sr2FOzNA2AXuWIszABL1JaKWq1R+nwGeM17OsoFY5XTVw/B4Cv+Djg0C8xvLYqJCECzgsxmZlq9T8e0XGUyaUizavPtxoFr/zvw2BnA0Z3A8e2FVV3x6c4sqwObckeyhiXAowUSADhD1XhceDMwx37lvU4XxVN2n3rJIocygkr/Vbs7fe+EdBLcfaXXQ3IPWIrpBB6XlnwpR76jYG9e7/SQKzarxM7qJFj8mg8UarMV9IZ4gvNDD8HgKx8HDs8A8zMFAFnPYQPDl0Co2g4fpDZLqKCxT0/7fhJ4fCdwbFvhRiwRgJruCOwUgCpeCvUjZmEFxhfk9W969kW/B8xvKQqnVgg+B6CB0MsI7P70AHgmd2n1NQ0rv7FvALIlVYK73MnQCDLThSGZoDpuP7uCeuX5n8zroB5yxThGnQ0CgyBMxY63Aq/5aBHG6EBviDlOLV0Eg1+0AByZLgbl+HRxnZXJoqqttA4ODovlJZVuSjTQFtq+NwNPbHMAzramdVpVs6wEoPtdNg37wJfvsYiJP9NFqvHY+7vAwjSwxAeNxVO8T6aNVRRRlT6hHrJ0Ovaw0WDJCKng7g86APvNB9wg2JvXO33IFWOBgn8EIf2nRLD4tbe1+AU7yAWbZeskGHwVdd2mgAUCcNKnJgLQrZ/V9/Jnn5JUYmnAE3hCmv3+t8AWQfSzyPK/POOgJgDdsgqA5nfJAvLdLV+bz0kK4RqPZ3wQWJxyAPqDVhZQyQr7gyaXI9axWCFVAGLvRUhV46PgLnUWBs0HbBPszeudPuWKsTRZAJDTo8l8ui/42juL5veQC7ZpsEow+OrZQlqVVuH4FLA8WVyDAOTAmHUQCAWQkOlsQAwDt/9/AE8SgPQpNa07+AhAA6HLXbb5Xr4IaAMfv/eGvP5NzyYA7UGjBWTWjh40v9fSyscHLtaxhJWxFVsNNAXH1khw983+DYPmA5aCvXkdNIBccemfceooAfhAAcA+6A2xLuAGucxrzgKOMexDfV9OwbS2BB/BEoqLSrBoYGgJ3E8qLcIEsP/ngCPuUy7S13L3wb6PU56/m/Xj4Ps0TKCXQA6AXuNeZY3HMz5QANAeND1kwcKXlj6wOZQ+b7R+Pi0PD0DeFAfk590CKg8qncfoFzIRVWVqfFfBhgn25vXOAHLFWCDbvPstBsJZ4LUPt+jdesgFg+qVptWq11bg2gtgfuLiRAAgQeg+oEmsOujsXb5SsAoCIN/3vx04OlNM6Yv0tdx1MKvK7/TFjVmeCD4HQQQhf159eV7/pmc/kwCcKABoeYvR0oept7SEoZQ0Tr1lPuPQFlAtO0nyAcWhpzw/FSjFzGjLx+RGvxzoSeC1hwsA9klvaFN5FAy+9mJgnhaQ0qqagglADo4c9AhCDpJPl5ZommQ8738HcGw6AJBW1VecZv0cePwOY0/wl1lAD/WUCx0mMlDLr8bjmb+Dwp3x4nkDYbD0thIO5aNtfmDi/xGEeRawxhs7Vb/q2huABQJwAlhyy2cC0xoggjAAUCWWAkksOiIY978TmOOqeqqwqAx3WGhHK06n7TDwOcAV/iipPAKjwgrZm2o8nkUA0gKmAHTrp+o9MTrEYvq44o9pZIOtgmu8mafCV72YAKT/RwAy5OPOuVlAAk9Oule6xQRTWUKlWtkU/IvAHAHti5oIwDK841ZPFtCmdr0U8PaC9hVultd4CIC8P2Ztt/m5/qC11TJXlJDGGpfGAmYODgFoCxACkLpuWh3KCgqE8gNVZK4KtxgjJAB/2X1Krao1rfN7CWZf3LSBT4uAEIyWBVpipL7GgwA0AW25GbGENBTRx3rm1M2w39mmrFVwjTd1Kn+VAZALEE5LtIDyMWUBvbLNLGHgd5H/V07BDp7r3uU+Jadgn3ptxekA5MBri0/Wp4wzBjDbCnkMWMqVpE8GJwLQqvfc0pqbkVj5aNk7gbCxgJno30cAjntowtXNaZ1suvSKNhsYTcVKmw9F5xGE+94dfEoP+JYhD/8OC8eIPUsUHokVVKB78XszbzAF4Pvd//PCKVGIpOAr78mn4DZOm8YC1jco+w6EFTDDPJqeCEBZBa5GffVbhmQ8DtZW5TYOvPhXip0GTuu22lTMLSw+aAVl9QhEWjurI/aQiLJkTMLsX9R3r/ymZ73fp1+37OU9hunXSkdl7T3QrhKCtlCM59k2i5CMMSIAGdqxEIwrmptzTsCEut5yilKoJLAcxCq3fe8tLCDBFwO+tKjyuxSCMdYEXoeDrHcHvu0tTwLzmwHA4N/Gh6zNCqqeOSxC2lb8tQSiMwbuqXIqAcjFh2JjBKGJyShQG6ygVbfJegULWBYcMR3rvb6oCRaQwFPgl1M5rR7/JtBZOIZWx/0+s4QeY5z/1/X2tFnAxPpFELaVkdLN8MWGVr4pCBsfMHN8bmTKfCjZ0Ncp456/x58zLzfw6Qf3ABd8pUgEYmqk5bGyek06IQl1bkXScnlN/u8L24Gdx1qVq91KQvrpgwaAAw9p+wnXPw1YjyWMGtDo2ASOFGMU7SIEUzdYD34vMPmXwLbHgdkFYAtlGiim6DpxJtvq9LtlVr/aWKEB8pUXAOOPAFPzwBTZ9r04vdQ9Ts4pAZ3cd+yHxgfMAOH+vcA69/9Uxijmz/AerYpdar1lNSMYzV+vWY/34I8DY58Gph8Bpo8A04vAFEFIknIHohGVR62QhFRSYjQE6qFri2z3iaPAhHNNlxKwArI0Q1IAxwfReacbC5gBPp66/5ICgLKCtqnsrKKlrFZUFPKOr7osMTtdsxzqQRZ93Q1MPARMPllohUxRqkEK6gShOP0S+dY2hlRv99y+ovRi7IiTnTvLqmg6xDPYpqAUgRgsoR7MxgJmgHD/c4E1FXu7FRRbvEgd7evXWlbPpp9EgUjiJpwe6zwOMlvpAWCMVusJYPIYMOlSDZRpoGiNxKzbdIQlXONMWJbGtw4svdgz3El47nzTRvPrrKptAJT6ZrzfintvAJgx4vsvdQvIXK5VYF3sUZxmJUvgA1FOvwF8spKyBtM1y6EepI4LqVMedbEaTp0EIKdPKh5FqYYqSxgo2jgFr13j6XXHnOiSZOeBVSvyC8qC2r05FVvVw9cAMAOA178AWPMp2LJaaekiCPXExwHw660n1oB/niGQazwOkkSepbJ/72I1x4CJ+cJ6lYI1riccrVicUuVSmIW82pkwnHHVOKbFsOozQGkFkwewnBES37ABYMaAX39ZAUCCb82nIlo+40p2gNnvsoKunxH1xGwA/LOzdQOQJPIuHzV2GBg7Cow7AI0l33XfjOsv6oVodes6ISbBsAZMX+kJxU56KY7pkmFVhOciuvTzSt05v0+ryuT/9gDrZNe4wPMsI7VJP3GcP7gUOOdvgL1rRYJ0ZI5IV3hV4/wrGYPPU3/AiRhYusy2K7mU999P+z90ObD7LuBZK0Xdkeq9NSX2+o4HLwfWlopFCC0fgciBMtAFC8CGrYXVoVjnU2G7rTXrzh4kfRzLY1kyGwBoeiGcPiXb5eAzdXWnazPCSScb4j3xfmav8Cx2p50lAMW0VXINitCogl2r9H2dcctWwQxQsn6ZTBbMNtcgdKIbiZj51VcBk38CXPxoQcfCUg8pjcYgZScw/momACnXyr4leBhs5QaBTHpf7X8dMPYJYO8XgAv9e8QJlAZZq8D4xSuANYKPJQn0AR2AHKy1MACKe9nfFI6IEqduEWoHIJ9wlsVKLekoMCa9EAegSTYQeM4TXco2SEMkAHEbBZoj4bbYtdyCVrFqGXgTSxgXYTZeHLi9AMjEQRCVUXP/n4KUaaT8vVTi+Rtg7GPAuYcAWlMCgUVkQfJ2Q12yBvPXMwHImhDWwf81imsTiLSEvHZkr+jY/p9CQRD4p8DOBwteItai05qn31FFdfLlFxYWgCDUIkRkj/TxbCEi/89jfPZ3X2VqYSJQbmUNQY3HQT7hbv2sLoerVwKQHNEEoCsm8R4MhPRjXUGzVEIKIoY7yaEYuY4dgGb5RXruoSgtSCLLarkICQ9f6QNykGjFdjsIBaI4kGlt8W+Rg5g0HJ8qAp47nihAzFpuWtPIMBZJlASILvR6fQ0DCVbJCkJOJCqnk4pGpb99tZ8MopyiKDX7WWDiwYKXiEQOehCrgKh+eJQ+EQHo1Lby/zRlyf8TIbf9XS5ftIb8I92YugH4ay2pLusorl7dAoonWtMwQSTdOFuQSLTGHyIC8kxSIQuA4hwU2WUAoO4/grBcDbsfWElSzg+JCoYDoEGM1ixSkHzgF/wG7y8sIa3J7JPAGWuFJSQIaU01iJHUiYP4e33BrPOHmG/JMaOfTZVYRhwGav87vWKPJ9/rSH4IOGO5sITqg/ggxXs4TOaBAECbeoOsgfl+DrQShFqcEIhyyt0MbMusEkx76iAZXKM8BvXiZAGlF+KaIbaadYpem4aDgpJZQz6YJABV5VcHAJZ0v4FxX6KG5UpYs0KnqjhRuagEVgPglYAl9ciHf8mdUrJh0Qx9vkDBzBywfbkYQIGwahA/kglATsHsDzKA0BATiPyZ4NEDwIeoa/uFYKKXL2f24nQoIgd9R3yQCMTFqwIAfdBWI7+yB5ZLECYLETd85YJl+2YAUNosLIel/xYlu4Jsl6bhNhD6it4WJCvA2Zc4Gxo73RcgJeOqFmGR6rcChLYACyGojmEYdj59KnZ+tIQRhH9IvWA2hiREjDeRI9Cly7fMF3EtWRFawhQIf5IJwE56wdTIYdt7tp9ys1K8JnoJvod9Wn682PNkP4hUy1ndWgstAtBDMLYN5/6PAc5DGNoF4SrZfN+4+IhT8jqwg2Cp8ThIJ5vfSWBXAVCrWN9SMxDK+skaOvhoAc8me654pmUB3f0wyt+E8FyRAGmPlOEoiSD2qgvmAKoOm52fAuiTDHSyIRxx+lI0QxxADubfF5vffMmSajrWlP7nmZ3dSy+4r/ZzAUEHnQ8R70HsXlK+PgJsW68G4XYGZj0EY2EYATCAT6tAhmE0DXcC4faapcwMgAIfLb0kuzT9Qmw5uwAAIABJREFUSi+EfeALkSrpBovbrQDnkm8wAo8/E3i+CCsZ98NCpAp8cUekZyBavI4ET/TnaAk/RQCyAXy6uNSPA0i+wMeB6ePA5HFgZq2wpNGK3FUDAHmv3fSCe7afX8CB4UNEEOolVi/3obastNwJ9cO5BOBKEQMsAcifHWzRAigWWAlCn5K2bQYAOe1KMjTIR2kRUhKVS7IrLia0v+3xwHMZMCbYNP0KfG79zAqK5DxOvyEuWu6VD5KSHy2YAEQAfpaRdl5UkuUctIpBnCIIl4psD03FtIIP1ADAlBuJM47EqqUX3LX9kSBQcuuyftK78xUkHyQ+RLqHZ3Fv1KcgLj5kAQ1s0Qo6IA1nHhNLQzA8ZxvBXuNx8DcS5UYpNnoYxsCnUIqvZo0F3wPTMa7Hv53HOJVbS/l+5bumX7d+5WLE44hxIRJB2NMCqj9ixwuE90svWCaIA6bAp959EKeWChAyA0PTOV2unGMQveCO7bfqHbcS4rJR7Ewqnw5AWhLuImg2uFQAXAVs8RGmntW4+g2hB3P79L/EJ9zGvqrxOPibiVihAOgrWQOf/EBfBcsPNBBqW9Hv6zzGqFzmoXz3B9AePgXiq6bgiv4YOB9QHS8AfpkAFMMjrWAcQA0iO9XJiQyAnos2vV7ESHOOQfWCO7Zf7F40mZFQScRKAYBaSU6vAVcTgN7xXHiUFpDTMK2dFh56912BTiDcvpkATIXzCL4g3WXTZ4jpGfjoF/oihL+fx+0yWUABLwIwtYKKIabgCzHQvi2ggBKn0McEQDaKT5cGkIOo6SuyYzEfjQB0EM5nZgAPoxe8of3sgSqCQM3jkdFLvpRvR13+7UVRuhUFSavNO6otwp88ZZ3+t4M6HLtch6OT9AG/q9cmtf//gV1JDYcnQ2zY6/YakfSrU+Pg1M45NqPt3IEtoM7WFHokyrWKkooglCMWLYjiUXMtK3g8Uzd1WL3gDe3vRRCoUEYCwGtYFxxqgA2E/jI20F5hhmQod98BHNnlxOTig1aGiDanO21yV4DygWuB8YeB6fnC9WEtiKVVKeE0ZGiXWczeJoWMIig5a9V5DA1ANoKDeDylZ9NSXxyAsiKawrQqmCv2HVf5e8aRoxfc1n7xs+khItAUvojvyWryxVcWJZksVSyZoQRA3dcAoHzax4Gj2wtu6FVKM7gMgti02jbV476oUJJs1j/AbA1mQ3Pm8eTRsoZDtR+xZKCiEKmMXTIeXHPGdhYArX8FwG4DGMEnAHIK4yvT58nWC2b73cexaZgWWaEKgU1gjNbPP7PvOYGsUSBkv3hBtmRWNzxjTk9RWktvxp6POj0vARjY9sWkFel8RWxegjIF4RjwAOnZWMPBTGjqvHmszxJOBUD3xyznL2bqROvoP3N3q84jG4C7M/PpcvMBef0cvV9k6hXv+2Yno5QfGArRbaCC0mWv2YtF3ecerNDhkNZIIsXQRv5dlTtGADJSz2gEE1EJQM//026HdIEZLC8B6A0tk0g1Ja8DuzJdphS82QBEZj5dbj7gxZN5er/IZI+67pscgE7QaDOUMyC0Wb8+gXjuR4F5J6YsaXnFhBoAGEVvUhb60jISgCQnoh/OLBgvIrL8v7DdFkEYM5dtNg97tvz5zJqzdfIBmJlPl5sP+DJP5xtW7xffnzeh7H+Z+3+RpkyWT1YxuURJYVtx6T0fCTocouQV85VkHRIGegEuEv/YKpkA/JceVmL8kv6t5/9pu62tfiPWcFQVEa0DZ9WcLJEPwMx8uvfnjT9IgZyj94t/ldeA/S9tMaGa9SNdmsIxbvVscVJ1GScoMt4UPwhAsmMZ0aXzQBsvdGRBjQz0FUpEJRAJQOq4KAnBdz+sfiPJ3bOYn8fsykyVWMfiN3BOzckS+QDMzKe7OW/88aqQzsfE5kH1fvGjeQ0wADodmVGwOeiMsUqHrGOnS4UFy9P/wAEojkEnI+IqOIJQNLgpCXhcmLAtD/D+kgQE235L93tj+YBqgTX9BiCeW/NedT4AmQ+YkU/3sbzxBymQuZhm8g1T+QbV+wWFdjKO/Te2mEFNlCb6gPF708VJ1TXHgKd91GnZpDfi1k/gM2vqU3DUnCuBmNQe3P9vw6pe229KOvB0K1k+ZS+rnrfM2AlA3JMZtah/EZKZT3drxuDz1O/yxAwu9JgJxr3lQfR+8aa8Buy/wdWQZAVl+ZzCrG3q9c/YrkmHy3IRYryAAqAkEBIlopJxNNUbER+fA/H+/+AAdP9PmS9dazicJybm7mlB8nR2dI1HvgVkOlZGPt2nM29GCamcGZjAwlQ+vvrV+8X/zGsAAUiLVPp/wd+zaTMFWw+/kAA0GQQnpCw5mDsAMIrcRB5mC/+MAffTwgfwKY2KfmCZ6ZIkUShrxXxBX4yYaV8Hzmcn13jUA8CMfDqWYeQcSkhVOl8U6uxH7xekrsg49h8oiCENgC5TUG5vKxxT8f2aRtOtcAKQ1s8soPuOVUIwpchNlEEIOyNSIrrvv3hwnckWIZPZsnbcDyzTpvg3lU8mpZQqozyfK74aj3wAKh1LgrsD5tMxiz/nkGD1sHq/YNFOxkEAcuW7oqmXlisuQOT7VV2jwi/kTgj1RkoZhBje8Z83SCAEEJZW0C3gff8tADCt4VASaWIBK0HI9q8BF5yUAMzIp8tNx5Jg9bB6v/jdDPSRns0BWIZeUitIo9IhHmhXTvzCPQddccnZ76U1V/IvC4SBCFyg26DFNg7c++Mhhb6qiCikT7WVUmr6lYn2nRKyrdZ51GMBlZIc07GUBdMjny6XCiUmpA6j94vMZbgBMFo552pu27PXAqXTyAUQcitOQjAm9xX0N9pIwIPmSCmH5QuPqER0L4kDYgp9zOUL6fYxkbZcFceyAreAF3GlV+NRDwAz8uksnT3jiILVSmpWNlhMze+k94vMZfgGAPJeHDjpCrgM01Tdry9OzvmYAzAqLVWIwEShwzbRwwSEn+MqP6bQK5tZlWyhjCCCsC19Xv7gOnBRbgp7cu/5AOyVjqVMmA75dJZ9nHF0yohWNlhMxKnS+0XmMtwAmFq4imnYbrEqNJPc+9kfd62RKh0On8qV9hXZ9askEPgAfI56ziocUgVbzGT28lEtRMoKtg7lBHtznfZNA+CQ+XQWM8k4uglWK/NLYKzS+8U9GReXD0g/Tyvh4Ne17Yb4Zbr6g6y7/aNWcoPpjKRTsJIags5IJwkEAv6en05S6GUBfRWsUExZyVZVQCQwrgN7Wfdd41GPBczIp8ODeXfTSbBa6YYxlY8/p3q/udc3C+jTbtvqt2oadnB2m4oNgMn0W0p+hYWHWbwg9yU/0Kb9EIy+5y2hiCit4UgKyTeAkN8Valk4Le/ldlONRz4AWWBRM6fdIPfHstw/G+SE5rMnVQ/kA5AkLHS0ak7V7reXfhgACaBqDtD3e/nmc5k9kA/A80JReq+U38zGVp3ObJo/BvAOD3dtwiWar9zEHsgHIGlFubqSx7+Jja36anLLcDvvgwA+NDpDfILv+qlzuXwAXuSjrkKemlO2e3U1uWUYnL8dwB/5e2apca9LNv+vsQfyAUheX4VguB+mzIsaG9ntqxhF4Xbe3QD+n7/uHLAW9wQ1tblMRQ/UA0CaHC7plXEh+q4T0OWcfhleYTSHBK0EH/mi+fcRuKQn4I6fWpeoB4AevCz3HOOm9yb3F5mBlZBNclYCj1aRfyfrbgPCTR6AzK+vD4CyglX7jpmN7HY66d1E0ctdIrEEE4wEIMlam+Pk7YF6AMj7EwAVbU82vTerCwhAXopJN9zVI+AYrOeULLZgErY2x8nZA/kAJGWr0naUWdFpy2cT+oCWjpdjLFxE5UzYIBBpEUX5nLnlvAktb76SPVAfAOUHpiAMm96bsVtCAMaKALICMyxDq6cXfycA+b/mOLl6oF4AiqBRIEzBp7/X2Af0+fi1XIioMIlAI+AIPIGPmeROWV3j1Zuvyu2B+gHoFfZiDS2lC0LiY52WUADkQoTTMH1BFSYRdHoRfKSu5v9qrizMHYPT+vx6ARhSuDcAzzmDo5ZGHT1PAKYMwQxME2jiSo/gEwBrrq+u41ZOy++oD4BaCcsXTPiSI3ey8s4KGoG8QwCMFM+0ggQhLR0BF19SXuD/ayakz7uR0/TsMcxg3SjfqWNA0hsrga/ojaq/8WPcC+YIk4Ke4CMSuB2XVht1Oj8zIfXlU8BtU8DhmYRXWdfrdF1fgr3+S8At48CD04DVjXQSDO70PTUnaJ5uOCwsIIFHSSFy1pKPWCDsZxCpw8UVgKSPxLXM937OzxxAljzcPAbcswU4Qh4V3UN8mKoeKm/bu78IfKJQa8VD48CylHQiL3O3/qg5Rf30BKACMtJXjXKQcfBSK8Dfqc3KVCwuN2VFGRnm/yKZtq4Re5ifyQQgM2A+BeB3GHaZBo5MAIue0l7Kt3cC4xhw+5eL7TuCkJk1jBtyerbUfYG5ExjZ/pqrxE5fAOrOq5SmowVIrRp1IyT2R6+fg0bgVYG4CsyZe2UsaiOGKXr4Sfp9k8CxCYAFSKyvXeY1o1BxQux91yMtfsHPutgnnyUuUvhc0ZsgUXib+nVkq6+ZKaABIHsgVZnuwD9sVo66rrR4ImdhLGSQ8zPL/JgBQxeU1ouWkO9PTgDzbgmXxrzMkatl3keivfG5x4r4IRcz5BfkO5vEZ0kgpIfBZ8yKjlL17syy0tMNcOn9dl4Fy6dLFabj1Mpvow9Ify+I4Nlo9Xt+ZqU9VdJpqZh4QDDyxUyYOYJwHDg+DhgI/WUVZl7aSEt93+GO9Ia2iuZKOfA7lhp9JpvAVy61w2mOwO5hmCgMHC1H9O24gu6UD9jP+ZmbtLRaSsei9SL4XDPbAEh/kGQ/pSUcc0lbApFWb67lQUhpVnLBsoKqqZclFMmUtrxPcwxl3X7vOCAtYLSCcugFQmqhdssH7HU+RznjiOlYXA8wqkOfkItTAom+oKygca4ES8jY+N3z7fSG4hfUtp3ihUHruVSsFy1iRvNP+1N7A5BdJACmVpAgZPhGOyCigEjlPLudn7kvFtOxuB4g6OjD8UWLRkCZFRwrLCEXJQQhp2K+37lQeBCRX1A7KPQto1prFEmSYn2mB9EAsO+kYfk8KQhZF8yjVz5gp/MztyOUjiW9bCUhEBhKRCCgSis45uQ/PhX/xfFWMgOnWu2gxB0TF/o0kEZ/kCDM1Ts+3RHYnwVUL6XhDFrAswfIB6w6P1MrTulY0sum1VICglKwCEACqvQFCUK3gHcsFQCM/ILayqP1k9JshVqrncMalOYYvgcGAyCvIwuod8YBJQmZpmGJeyRwkGw4n8jJOJQNw3idLFhMRNB0SgASTJyKoy/4ieXCeFfJBUeV2SoAclFyR0bbm1OHTUiN0/DTAwD7zQeM52dqj8VsGEkVE2jKetG7AEhQ0frJAv6RC0trC1skl+IWlNinGLbSaZg7Mc0xfA8MbgF1LQV1z08A2G8+oM7PVF9Ms2GUE0gQyp+Lwu2yagLgR9ZaYpkSypQ6a6Q2DCqzpkvietXIFdoZfuieGmcOD0DeP0HEbBhNwYPmA/L8zJQsATAKnguEqS+XTqkE4YfWWwCUFZTksYAYwZfIBeN9Tw0cjOwu8gDIZqsoSSvhEeQDiiGYFoyWiSDRypWgi69UP5sc5fIcquSCNeXqe2X9ZAHfM7Khe2pcOB+AT41+aO5iRD3QAHBEHd9ctuiBBoANEkbaAw0AR9r9zcUbADYYGGkPNAAcafc3F28A2GBgpD3QAHCk3d9cvAFgg4GR9kADwJF2f3PxBoANBkbaAw0AR9r9zcUbADYYGGkPNAAcafc3F28A2GBgpD3QAHCk3d9cfOxqYJ2au9RdPtdp/khoEOlglDYT39V1PzQFXLsMXAlgt9PCxJKPbufyf8/KHIPfBPAZABf79Xc5XQ0ZQ1Q7360NbxoHrlsDvs5ZRsgo0une06by6X1mZvtP99PNAp4F4LsBXA5gjw8EGTeqaGF4QhzQF80CX7cAvGIdeDYAfhdZ2sTKUcVrpE7nd31N5gj8e2dIo2osk7NZpMdK0Z19tv+bJ4F9K8D1ACj8yfNSikHeg+5Z969m57Y/8/ZP+dPLKZhP/rcA+AYAF7g1oRUhEMUzFMt6eSJfX78b2DkPfM0i8GIAX+uWlAMppreUUErn8p2gzTl+2flg/sDbTkvIOik+CP20//mzwAXzwDcCuNTPJeFXpEpM6QEjIHm/zTF8D7T5gATYNQCe69aAloRTGulfBESBSYNyxR5g/Bhw7hKwZwl4vk9LnM5JmsBzUyDGAX3B8G23Mz/g9BuUa/0IiutfMkj7zwKmngAuXSvOpUvAWYBtF4BTnspIj/O8zPaf7qdvWITw6eZA0JLQEhKEGgxZhUj/dz3NzSKwbR44exnYvVKcy+mM5Km0JhxInUtrGkmzCPicg3W5LMGkQiZZTm9xS9Z3+4m2o8C5c4X15pTKW2Lb+fCx7WLtjYxzqiql29Icw/dA5SqYf6RTTilg+lYCIXmICKQ4IK9wxfSJY8AZK8CuFWDnanEua9ZTAMsaCog3Dt92O/MvnRGBtGwkqKRmMEkqCaa+2k+0LQDTh4rP88UHj74kF1WaATo9QHQ7mmP4HugYhtEKj4PB6ZQ+FS0hQahpldPya1kXTOqNY8DscgG+HavAttUCvBxInitrkgL4lcO33c7spBdM3kAuSnq2nx9gQfAh4JyVwvrxwel2z3p4aMlzH6DM2z/lT+8aB+Q/OT4EEqckWQSBkGD6EQKQnDCLwBSnYgcf32fXioGUFawC4esyu7CXXnDP9tOCsyD4KLB1rmgvX7zfbu2WG/Jtme0/3U/vKxBNAMoi0KcjkATCN3HOEr3UAjDrwOP71rXixYEkeKMFlSX8ocwR6KUXTJ7AaNE2tF8WfA4Ye7Kw1mwvX/yZn+eKnvcrfzC6IK/ObP/pfnpfAGQnySoISBqUXyAASS1AK0JfagWYcRDOrAF66TxZQU7jBOEbM0egH71gcgXSFZAV54NQtj9YcNIpbONCyh8Ygi8CVospApDuB63g92W2/3Q/vW8AsqM4gLIKBBIH8bcJwMCNMX68BTqBb8s6sGWtsIA6jwDk662ZI9CvXjA5A6NVa2t/IAicnC/aGV+8T74IQPm/AmGuBc+8/VP+9IEAyLslAKMV/LgAyIUInfnjwPQqMOOgI/DstQ5Mr7UAqMF8V2YXDqoXXNl+EQQ6N9v29aKdesUpWJZbAPyPme0/3U8fGIDssDid/pUASCvCaXgJmFguAEfgEXT27gDkuwaUg/nbmSMwjF7whvbLhSDL5TwwvdRqo9oqHzACkCB8U2b7T/fThwIgO01T1IMCoAZxGRhbKoAXQUcQTjkI+a4B5e5FzjGsXvCG9gdqrLGFYrpVG/UuHzBOw2/LaXxzbh43DKeoJwlAHqLndSs4udoCoIBHQE45EPk3DuitmYOQoxdctp8+rFwIWsGFYiFFoLGNchcEQC6e+OJC5J2Z7T/dTx/aApYdJ37AyJK/DIwvFxYvWr0IwEn/H1Opco5sveDUhSAAF4HJpQJkWixp6k2n4IYfMGf0amDHev2I8+l4/UbvNw8Eozw72wJePOJ8und7EkKj9ztKGA1/7WwATo44n45pWI3e7/AAGPWZ2QBkYHCU+XTMfGGQmYIxjd7vqOE0+PXzATjifDrKtTZ6v4MP/MlyRj4AR5xPF+VaqZLJF1UzKdPV6P2eLDDr3I58AI44n07ZMARbo/d78gMubWE+AEecT8e9YOn2Uheu0fs9tUCYD8AR59MpG6bR+z21gKfW1gNAz4geRT5dTEZo9H5PPRDmAzBmRM8BJzqfLiYjSKKr0fs9dYBYDwBHmE9XtRfMsIz04aQZ1+j9npygrA+Akqs8wfl0BCCTWRq935MTYL1aVQ8Ao1zlAnAi8+kEQGZTNXq/vYb75Pt/fQAcUT5dBGCj93vyAaxXi+oDoFLyT3A+3Rcavd9eY3xS/z8fgCQX/LPR3SOzkon55jg1eyAfgD8M4NcAPD6aDmBtB1e4NMDNcer1QD4AbwbwxwDe4UvRE9wHZG1gNSXDLlwLNcep1QP5APxzzwj9IIAPnXhT5ORc5EYCA9HNcWr1QD4AmRH6FQBMTSZZH98ZmD5Bh5g1FopiNns1x6nTA/kAvAfAEwDudnI+EvQxPfkEzYfaCXRSBluQMB7YHKdGD+QDsBNBH/9+AkAobqTADGK7Inw1x8nfA/kA7EXQt8kgrGAGMfBxZ5Cv5ji5eyAfgL0I+r68uR0QmUFoBQU8vfNvzXHy9kA9AORoMw7CdGQCjoUZDwL4kv/+8OZ1gJhBIjGDgMh3vTavBc035/RAPgD7JegjODfhiMwgoqeJwNPPTaB6Ezq/hq+sB4AcXeXEP+ZhGVo9vRimIQD5v5oPAZCupgDI9wg8/qz/1Xz55usyeyAfgMMQ9GU2Op4eAchpOIJQQEz/VuPlm6/K7IH6AMjgGzdl6QtyX5jWjpQFevF3lq3xf6yhrOlIAUgQCojR8gmE+l9Nl2++JrMH6gEgR5UA5KYsc+AZmCbQCDi+IvgEQMob1XBEAHIajgBMLV+0kCdws6aGu3zqfkV9AGTwjftg3JRVVRAtHQEXX/wbAcoXP5d5CID8GoJKvqDAloKOoIz/y7x8c3pmD4zhaqwjRzCYyQg5gr2ZgsFTLweWr8XQgsXjbwLWrnNtMlKgNoLBmZAa7PTCAuYIBlMvlWQswwr2UlUw45jdDSx8HbD+Ctd+HVCwePKbgJV9aASDM8Yg59TWFDysYPBtmYK91IbNOHaPA/M7gUXKXA4hWDz79cA8+W0aweCMURj+1HYfcBjBYO54MMY3tGDv8I3nmWSHOzYOLJ0LLPGXAQWLz3oB8MQUsEa16kYwOG8whjh74yJkUMFgbsNlCfYO0epwissVY34bsHw2sEIRkAEEi/dcU0SP5qhF1ggG5w3GEGdXr4L5134Fg4kAjuDQgr1DtDqcUmZETwArZwAru4BVqsv0KVh8/o3F4v0QXZBGMDhvMIY4u3MYhv95Zh+Cu1xBcxuOU/HfeDIq5cv7FuwdotXhlCBXjOXZAnyrO4BV6in0IVh8wStLuWCsUAyvEQzOG5ABz+4eB+R/ewnu/kOP/3G/l4kJTERlljQtIot2e53/IwO2OPl4FLtcnCqAp9cahT56CBZf+LpSLhhz1N5qBIPzBmTAs/sLRHcTDKbiNHdBGGymOC/3hglEvgjAnoK9A7Y4+XgiV4zVWYDAs/etxaubYPFFP1QkLtCIP8neaASD8wZkwLP7AyC/tJNg8L/xLNBu+YBdBXsHbHEFAINcMVamgdWZAoRrfPdXm8KitLdmgYveWAq+2y7iMqfuRjA4b1AGOLt/APJLqwSD3+y5T1yI0AoSbAxMMzGV1o8/My2ro2DvAK2t+GgiV4zj4+3AIwDXtwBrVJeuECze+9aW4Dut4PxkIhYsdetGMDhvoDqcPRgA+SWp4O4veQ5Uv/mAGwR78+6rQq4Yq9PAOi2fA4/vBkKudKVU7VZw77uKvWFuZbtcMNb5v0YwOG9g+jx7cADyi6Pg7gccgIxlcA5TKhaD01yYKBmVFpBZMfx/m2Bvny3t8LGqoqTliZbVI+gMgHwnMAnCIFi897cLAAZ6QyzFzzSCwXkD1OPs4QDIL5XgLmk5JHk/SD5gKdibd38VcsVYGmuBTaAzEHLHgyCcaokB7/1IkUET5IKxwF5pBIPzBqbPs4cHIC/AaeqvPL9pmHxAE+zts6VdLCD/lcgVY3UyWD0Bj1ZwqgCggXA7sPfWAoAJvaEtZBrB4Lyx6efsPADyCtmCvf00s/NnOsgVY3m8BTRZPZuGBUACdArY+5lWDqGmYbIrLHEx0ggG5w1OH2fnA7CPizQfaXqgUw80AGywMdIeaAA40u5vLt4AsMHASHugAeBIu7+5eAPABgMj7YEGgCPt/ubiDQAbDIy0BxoAjrT7m4s3AGwwMNIeaAA40u5vLt4AsMHASHugAeBIu7+5eAPABgMj7YEGgCPt/ubiDQAbDIy0B8ZYNMbkX+ZekpuIiOQrPar+xs889HJg6jZg5jAwvVZ8B+ll9PlO5/Fc/o+ECjnHfi8zYfkvM5ulmp4qJXVqx5deD4zfAkw/CGxdAZgoHfuh131QkaI5hu8Bs4Ds8B0AWLnIRGCBsFfn87JffDMwdjOw5R5g8giwZa34jnQQUwDo99wBfJ4TM7COiNdlaj2rA/jeV/vfDeATAP4UGH8I2Lrc6gc+SHqY4oMZ74VSKM0xfA+UUzB/oBUUCKMl6zSQ/PsXqZD5KQC/A0w/DEwcAcYXgYnVwppwADuBkefnCim90FmBWXwnK87Uen53BI8sbuwqaz9p5UgnQhBS+ZN1zE8Ak0utviCwq8DI8/nx5hi+Bzb4gJzKZE1SEFZZgS9/2pWR/gTAJ4HJQ8DEMWB8ARhfBsaWCwDquwQKvvNgHXvOcYVbPFJPkw+dDxC/W1Y4tWDpw/Rlgo4lo1T4/KxTihDNpJwj3/UiMLXemprjffC7eWpzDN8DlYsQDiKtVxzEqoHkyX9HRizW+nIgaQnvAiaeBCbmC0s4tgSMu2rMePAR9X252jXklaTFU108K0MHav/nvJ6ZxVVk9OI7GR2IZoGQNc/HgbHgIwqILIVujuF7oOMqWFawCoRxkfEIB5CWgkREBCNf9wMTc8A4QciBWyoGz16rwNgaML5eWKpctYZL3N+TWLX0gvtuP0HHk2n16JDyxXmVhfU0qywbJbr5GSuXKxA/sV5Y9UYWdnjwyS3qKKgarWA69Wg6fjQOIK0HadnIjPVFB+AiME4AuiUkCFnESyCSkmAuU7Cjm15wX+2X2ifBRn9A8mKcW2UFjULVQcgVDl80u40SYh763FfvquhLCxitoBYUsoJfjXKttByMq9CKcHn4sPuCbgXNJwyWkECcz5Q376UX3LNncZyQAAADEklEQVT9fFgIJs6lBBwtn3Tt6FpIz4RWnuQxPh2XIGzm4CwQ9hWIFgBTK0gQHiIAJddKq0ELQh+KL1qUR4MvSEsoENIKrgALHNiMox+94K7tl9qnnMio8MSf6SNwGpYVjCDk/Ju7isq496fCqX0BkDeqlWwKwic1gAQSpzGREnFgREz01eALLvvq2Kfi45m6cf3qBXdsfxRbJMho8dimqOhEK8cXQRr9QVpvPoDNMXQP9A3ACELFxPh+jACkP0fLIKFCCRRqKuPUdqjlC9o07JZwKVNHeBC94DQcZO0XAAkmgotAk9QYrR9f/BvByYfMSATDVMzwTXMM3QMDAVAgVHCZ7/MaQK4QZUHiNCbBQlqUw74YCb7gcmYkelC9YFlwvVv7RRAorTuBkECU9asCID9/x9B935zYzyKkqpfiNHxcA0gLQgvBAaPVkCqm3h2AtC5m/RyEqzw/4xhGL3hD++MmslgqCbgUfLKAcRrmTlBzDN0DA1tAXUlWcDm1IOIIJAjlT/Fd05lbFQFwjdtgGcewesFt7Rc/Gx8iWjUCjGCT1YvWT1MwgUqrf3NG45tTbcu0aximWx9xENcEQHGbcYAEwtSXSqY0gnCdgeuMI0cvuGx/FUGgFhwEYrR80QckWN+X0fjm1DwAWv8RgJFilJZBznz0pQg+AZAAlVWh1GvGka0XzB0cCQi30aSGVa9AF62fLOB7MhrfnJoPwPER59Px+o3e76mL5Kwp2G57xPl0kxc3er+nLvyKtLmhfUC78RHn081ONnq/pzcAR5xPR9mRRu/31IVgvgUccT4dNaobvd/TGYAjzqejumqj93s6A3DE+XRUg2VSCjdaGr3fUw+I+VPwiPPpqJjO8J1Nw43e7ymHwHoAKMFd7QErAeEE5NNJMb3R+z3lsGcNzgfgiPPpomJ6o/d76oGwPgCOKJ8uKqY3er+nKwBHmE+noqRG7/fUA199U/AI8+kEwEbv93QHoEhZTnA+nYqSGr3fBoAtaiqBUImdm5hPJwA2er+nKwBHnE+X1gUzSbnR+z11wPj/AeCpPDD3t7rvAAAAAElFTkSuQmCC"
vendor: 3,122 bytes, line 5993
5993,CI={LOW:0,MEDIUM:1,HIGH:2,ULTRA:3},CO=class extends Cl{constructor({preset:e=CI.MEDIUM,edgeDetectionMode:t=2,predicationMode:i=0}={}){let r,s;super("SMAAEffect","uniform sampler2D weightMap;varying vec2 vOffset0;varying vec2 vOffset1;void movec(const in bvec2 c,inout vec2 variable,const in vec2 value){if(c.x){variable.x=value.x;}if(c.y){variable.y=value.y;}}void movec(const in bvec4 c,inout vec4 variable,const in vec4 value){movec(c.xy,variable.xy,value.xy);movec(c.zw,variable.zw,value.zw);}void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec4 a;a.x=texture2D(weightMap,vOffset0).a;a.y=texture2D(weightMap,vOffset1).g;a.wz=texture2D(weightMap,uv).rb;vec4 color=inputColor;if(dot(a,vec4(1.0))>=1e-5){bool h=max(a.x,a.z)>max(a.y,a.w);vec4 blendingOffset=vec4(0.0,a.y,0.0,a.w);vec2 blendingWeight=a.yw;movec(bvec4(h),blendingOffset,vec4(a.x,0.0,a.z,0.0));movec(bvec2(h),blendingWeight,a.xz);blendingWeight/=dot(blendingWeight,vec2(1.0));vec4 blendingCoord=blendingOffset*vec4(texelSize,-texelSize)+uv.xyxy;color=blendingWeight.x*texture2D(inputBuffer,blendingCoord.xy);color+=blendingWeight.y*texture2D(inputBuffer,blendingCoord.zw);}outputColor=color;}",{vertexShader:"varying vec2 vOffset0;varying vec2 vOffset1;void mainSupport(const in vec2 uv){vOffset0=uv+texelSize*vec2(1.0,0.0);vOffset1=uv+texelSize*vec2(0.0,1.0);}",blendFunction:Cs.NORMAL,attributes:Co.CONVOLUTION|Co.DEPTH,uniforms:new Map([["weightMap",new lD(null)]])}),arguments.length>1&&(r=arguments[0],s=arguments[1],arguments.length>2&&(e=arguments[2]),arguments.length>3&&(t=arguments[3])),this.renderTargetEdges=new id(1,1,{minFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTargetEdges.texture.name="SMAA.Edges",this.renderTargetWeights=this.renderTargetEdges.clone(),this.renderTargetWeights.texture.name="SMAA.Weights",this.uniforms.get("weightMap").value=this.renderTargetWeights.texture,this.clearPass=new E9(!0,!1,!1),this.clearPass.overrideClearColor=new ii(0),this.clearPass.overrideClearAlpha=1,this.edgeDetectionPass=new Cm(new Eq),this.edgeDetectionMaterial.edgeDetectionMode=t,this.edgeDetectionMaterial.predicationMode=i,this.weightsPass=new Cm(new E1);let a=new o1;a.onLoad=()=>{let e=new ih(r);e.name="SMAA.Search",e.magFilter=1003,e.minFilter=1003,e.generateMipmaps=!1,e.needsUpdate=!0,e.flipY=!0,this.weightsMaterial.searchTexture=e;let t=new ih(s);t.name="SMAA.Area",t.magFilter=1006,t.minFilter=1006,t.generateMipmaps=!1,t.needsUpdate=!0,t.flipY=!1,this.weightsMaterial.areaTexture=t,this.dispatchEvent({type:"load"})},a.itemStart("search"),a.itemStart("area"),void 0!==r&&void 0!==s?(a.itemEnd("search"),a.itemEnd("area")):"u">typeof Image&&(r=new Image,s=new Image,r.addEventListener("load",()=>a.itemEnd("search")),s.addEventListener("load",()=>a.itemEnd("area")),r.src=CP,s.src=CD),this.applyPreset(e)}get edgesTexture(){return this.renderTargetEdges.texture}getEdgesTexture(){return this.edgesTexture}get weightsTexture(){return this.renderTargetWeights.texture}getWeightsTexture(){return this.weightsTexture}get edgeDetectionMaterial(){return this.edgeDetectionPass.fullscreenMaterial}
5993get colorEdgesMaterial(){return this.edgeDetectionMaterial}getEdgeDetectionMaterial(){return this.edgeDetectionMaterial}get weightsMaterial(){return this.weightsPass.fullscreenMaterial}getWeightsMaterial(){return this.weightsMaterial}setEdgeDetectionThreshold(e){this.edgeDetectionMaterial.edgeDetectionThreshold=e}setOrthogonalSearchSteps(e){this.weightsMaterial.orthogonalSearchSteps=e}applyPreset(e){let t=this.edgeDetectionMaterial,i=this.weightsMaterial;switch(e){case CI.LOW:t.edgeDetectionThreshold=.15,i.orthogonalSearchSteps=4,i.diagonalDetection=!1,i.cornerDetection=!1;break;case CI.MEDIUM:t.edgeDetectionThreshold=.1,i.orthogonalSearchSteps=8,i.diagonalDetection=!1,i.cornerDetection=!1;break;case CI.HIGH:t.edgeDetectionThreshold=.1,i.orthogonalSearchSteps=16,i.diagonalSearchSteps=8,i.cornerRounding=25,i.diagonalDetection=!0,i.cornerDetection=!0;break;case CI.ULTRA:t.edgeDetectionThreshold=.05,i.orthogonalSearchSteps=32,i.diagonalSearchSteps=16,i.cornerRounding=25,i.diagonalDetection=!0,i.cornerDetection=!0}}setDepthTexture(e,t=3200){this.edgeDetectionMaterial.depthBuffer=e,this.edgeDetectionMaterial.depthPacking=t}update(e,t,i){this.clearPass.render(e,this.renderTargetEdges),this.edgeDetectionPass.render(e,t,this.renderTargetEdges),this.weightsPass.render(e,this.renderTargetEdges,this.renderTargetWeights)}setSize(e,t){this.edgeDetectionMaterial.setSize(e,t),this.weightsMaterial.setSize(e,t),this.renderTargetEdges.setSize(e,t),this.renderTargetWeights.setSize(e,t)}dispose(){let{searchTexture:e,areaTexture:t}=this.weightsMaterial;null!==e&&null!==t&&(e.dispose(),t.dispose()),super.dispose()}static get searchImageDataURL(){return CP}static get areaImageDataURL(){return CD}},CR=`uniform float offset;uniform float darkness;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){const vec2 center=vec2(0.5);vec3 color=inputColor.rgb; 5994#if VIGNETTE_TECHNIQUE == 0 5995float d=distance(uv,center);color*=smoothstep(0.8,offset*0.799,d*(darkness+offset)); 5996#else 5997vec2 coord=(uv-center)*vec2(offset);color=mix(color,vec3(1.0-darkness),dot(coord,coord)); 5998#endif 5999outputColor=vec4(color,inputColor.a);}`,CL={DEFAULT:0,ESKIL:1},CB=class extends Cl{constructor({blendFunction:e=Cs.NORMAL,technique:t=CL.DEFAULT,eskil:i=!1,offset:r=.5,darkness:s=.5}={}){super("VignetteEffect",CR,{blendFunction:e,defines:new Map([["VIGNETTE_TECHNIQUE",t.toFixed(0)]]),uniforms:new Map([["offset",new lD(r)],["darkness",new lD(s)]])})}get technique(){return Number(this.defines.get("VIGNETTE_TECHNIQUE"))}set technique(e){this.technique!==e&&(this.defines.set("VIGNETTE_TECHNIQUE",e.toFixed(0)),this.setChanged())}get eskil(){return this.technique===CL.ESKIL}set eskil(e){this.technique=e?CL.ESKIL:CL.DEFAULT}getTechnique(){return this.technique}setTechnique(e){this.technique=e}get offset(){return this.uniforms.get("offset").value}set offset(e){this.uniforms.get("offset").value=e}getOffset(){return this.offset}setOffset(e){this.offset=e}get darkness(){return this.uniforms.get("darkness").value}set darkness(e){this.uniforms.get("darkness").value=e}getDarkness(){return this.darkness}setDarkness(e){this.darkness=e}};function Cz(e,t,i,r){var s;return(s=e+(t-e)*.75)+(i+(r-i)*.75-s)*.875}new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,0,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([1,0,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([0,1,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([0,1,1]),new Float32Array([1,1,1]),new Float32Array(2),new Float32Array(2),new Float32Array([0,-.25,.25,-.125,.125,-.375,.375]),new Float32Array([0,0]),new Float32Array([.25,-.25]),new Float32Array([-.25,.25]),new Float32Array([.125,-.125]),new Float32Array([-.125,.125]),new Uint8Array([0,0]),new Uint8Array([3,0]),new Uint8Array([0,3]),new Uint8Array([3,3]),new Uint8Array([1,0]),new Uint8Array([4,0]),new Uint8Array([1,3]),new Uint8Array([4,3]),new Uint8Array([0,1]),new Uint8Array([3,1]),new Uint8Array([0,4]),new Uint8Array([3,4]),new Uint8Array([1,1]),new Uint8Array([4,1]),new Uint8Array([1,4]),new Uint8Array([4,4]),new Uint8Array([0,0]),new Uint8Array([1,0]),new Uint8Array([0,2]),new Uint8Array([1,2]),new Uint8Array([2,0]),new Uint8Array([3,0]),new Uint8Array([2,2]),new Uint8Array([3,2]),new Uint8Array([0,1]),new Uint8Array([1,1]),new Uint8Array([0,3]),new Uint8Array([1,3]),new Uint8Array([2,1]),new Uint8Array([3,1]),new Uint8Array([2,3]),new Uint8Array([3,3]),Cz(0,0,0,0),new Float32Array([0,0,0,0]),Cz(0,0,0,1),new Float32Array([0,0,0,1]),Cz(0,0,1,0),new Float32Array([0,0,1,0]),Cz(0,0,1,1),new Float32Array([0,0,1,1]),Cz(0,1,0,0),new Float32Array([0,1,0,0]),Cz(0,1,0,1),new Float32Array([0,1,0,1]),Cz(0,1,1,0),new Float32Array([0,1,1,0]),Cz(0,1,1,1),new Float32Array([0,1,1,1]),Cz(1,0,0,0),new Float32Array([1,0,0,0]),Cz(1,0,0,1),new Float32Array([1,0,0,1]),Cz(1,0,1,0),new Float32Array([1,0,1,0]),Cz(1,0,1,1),new Float32Array([1,0,1,1]),Cz(1,1,0,0),new Float32Array([1,1,0,0]),Cz(1,1,0,1),new Float32Array([1,1,0,1]),Cz(1,1,1,0),new Float32Array([1,1,1,0]),Cz(1,1,1,1),new Float32Array([1,1,1,1]);var CF=class{constructor(e,t){this.enabled=!1,this.effect=new e(t),Object.defineProperty(this,"opacity",{enumerable:!0,set(e){this.effect.blendMode.opacity.value=e},get(){return this.effect.blendMode.opacity.value}}),Object.defineProperty(this,"blendFunction",{enumerable:!0,set(e){this.effect.blendMode.setBlendFunction(Number(e))},get(){return this.effect.blendMode.blendFunction}}),this.blendFunction=Cs.NORMAL}},CN=class extends CF{constructor(){super(Cx),this.blendFunction=Cs.SCREEN}set intensity(e){this.effect.intensity=e}get intensity(){return this.effect.intensity}set luminanceThreshold(e){this.effect.luminanceMaterial.threshold=e}get luminanceThreshold(){return this.effect.luminanceMaterial.threshold}set luminanceSmoothing(e){this.effect.luminanceMaterial.smoothing=e}get luminanceSmoothing(){return this.effect.luminanceMaterial.smoothing}set blurScale(e){this.effect.blurPass.scale=e}get blurScale(){return this.effect.blurPass.scale}set kernelSize(e){this.effect.blurPass.kernelSize=e}get kernelSize(){return this.effect.blurPass.kernelSize}},Ck=class extends CF{constructor(){super(Cb)}set contrast(e){this.effect.uniforms.get("contrast").value=e}get contrast(){return this.effect.uniforms.get("contrast").value}set brightness(e){this.effect.uniforms.get("brightness").value=e}get brightness(){return this.effect.uniforms.get("brightness").value}},CU=class extends CF{constructor(){super(CS),this.effect.offset=new tQ(.01,.01)}set offset(e){this.effect.offset.set(e[0]/1e3,e[1]/1e3)}get offset(){return[1e3*this.effect.offset.x,1e3*this.effect.offset.y]}},CV=class extends CF{constructor(){super(Cw)}},Cj=class extends CF{constructor(){super(CM),this._hue=0}set hue(e){this._hue=e,this.effect.setHue(e)}get hue(){return this._hue}set saturation(e){this.effect.uniforms.get("saturation").value=e}get saturation(){return this.effect.uniforms.get("saturation").value}},CG=class extends CF{constructor(){super(CC),this.blendFunction=Cs.OVERLAY}},CH=class extends CF{constructor(){super(CB)}get eskil(){return this.effect.eskil}
vendor: 5,773 bytes, lines 5999-6026
5999set eskil(e){this.effect.eskil=e}get darkness(){return this.effect.uniforms.get("darkness").value}set darkness(e){this.effect.uniforms.get("darkness").value=e}get offset(){return this.effect.uniforms.get("offset").value}set offset(e){this.effect.uniforms.get("offset").value=e}},CW=class extends CF{constructor(e){super(CA)}set focalLength(e){this.effect.circleOfConfusionMaterial.uniforms.focalLength.value=e/2e3}get focalLength(){return this.effect.circleOfConfusionMaterial.uniforms.focalLength.value}set focusDistance(e){this.effect.circleOfConfusionMaterial.uniforms.focusDistance.value=this.isPerspectiveCamera?e/2e3:(e+992)/2e3}get focusDistance(){return this.effect.circleOfConfusionMaterial.uniforms.focusDistance.value}get bokehScale(){return this.effect.bokehScale}set bokehScale(e){this.effect.bokehScale=e}setCamera(e){let t=!1;(e.isPerspectiveCamera&&!1===this.isPerspectiveCamera||!e.isPerspectiveCamera&&!0===this.isPerspectiveCamera)&&(t=!0),e.isPerspectiveCamera?(this.effect.circleOfConfusionMaterial.adoptCameraSettings(e.perspCamera),this.isPerspectiveCamera=!0):(this.effect.circleOfConfusionMaterial.adoptCameraSettings(e),this.isPerspectiveCamera=!1),t&&this.effect.setChanged()}},Cq=class extends CF{constructor(){super(CT)}get granularity(){return this.effect.getGranularity()}set granularity(e){this.effect.setGranularity(e)}},CX=`#define GLSLIFY 1 6000varying vec2 vUv;varying vec2 vTexCoords[9];uniform vec2 resolution;void main(){vUv=position.xy*0.5+0.5;vec2 texelSize=vec2(1.0)/resolution;vTexCoords[0]=vUv+vec2(-texelSize.x,-texelSize.y);vTexCoords[1]=vUv+vec2(0.0,-texelSize.y);vTexCoords[2]=vUv+vec2(texelSize.x,-texelSize.y);vTexCoords[3]=vUv+vec2(-texelSize.x,0.0);vTexCoords[4]=vUv+vec2(0.0,0.0);vTexCoords[5]=vUv+vec2(texelSize.x,0.0);vTexCoords[6]=vUv+vec2(-texelSize.x,texelSize.y);vTexCoords[7]=vUv+vec2(0.0,texelSize.y);vTexCoords[8]=vUv+vec2(texelSize.x,texelSize.y);gl_Position=vec4(position.xy,1.0,1.0);}`,CY=`#define GLSLIFY 1 6001#include <common> 6002varying vec2 vUv;varying vec2 vTexCoords[9];uniform sampler2D inputBuffer;uniform sampler2D historyBuffer;uniform sampler2D velocityBuffer;uniform sampler2D depthBuffer;uniform vec2 resolution; 6003#define USE_YCOCG 6004#define USE_CATMULL_ROM 6005const float feedback_min=0.5;const float feedback_max=0.95;vec3 RGB_YCoCg(vec3 c){return vec3(c.x/4.0+c.y/2.0+c.z/4.0,c.x/2.0-c.z/2.0,-c.x/4.0+c.y/2.0-c.z/4.0);}vec3 YCoCg_RGB(vec3 c){return clamp(vec3(c.x+c.y-c.z,c.x+c.z,c.x-c.y-c.z),vec3(0.0),vec3(1.0));}vec4 sample_color(sampler2D tex,vec2 uv){ 6006#ifdef USE_YCOCG 6007vec4 c=texture(tex,uv);return vec4(RGB_YCoCg(c.rgb),c.a); 6008#else 6009return texture(tex,uv); 6010#endif 6011}vec4 sample_catmull_rom(sampler2D tex,vec2 uv,vec2 texSize){vec2 samplePos=uv*texSize;vec2 texPos1=floor(samplePos-0.5)+0.5;vec2 f=samplePos-texPos1;vec2 w0=f*(-0.5+f*(1.0-0.5*f));vec2 w1=1.0+f*f*(-2.5+1.5*f);vec2 w2=f*(0.5+f*(2.0-1.5*f));vec2 w3=f*f*(-0.5+0.5*f);vec2 w12=w1+w2;vec2 offset12=w2/(w1+w2);vec2 texPos0=texPos1-1.0;vec2 texPos3=texPos1+2.0;vec2 texPos12=texPos1+offset12;texPos0/=texSize;texPos3/=texSize;texPos12/=texSize;vec4 result=vec4(0.0);result+=texture2D(tex,vec2(texPos12.x,texPos0.y))*w12.x*w0.y;result+=texture2D(tex,vec2(texPos0.x,texPos12.y))*w0.x*w12.y;result+=texture2D(tex,vec2(texPos12.x,texPos12.y))*w12.x*w12.y;result+=texture2D(tex,vec2(texPos3.x,texPos12.y))*w3.x*w12.y;result+=texture2D(tex,vec2(texPos12.x,texPos3.y))*w12.x*w3.y;return result;}vec3 choose_motion_vector(){ 6012#ifdef CHOOSE_LONGEST_MOTION_VECTOR 6013float longest=-1.0;vec3 v_choose=vec3(-1.0);for(int i=0;i<9;i++){vec3 v=texture2D(velocityBuffer,vTexCoords[i]).rgb;float l=length(v.xy);if(l>longest){longest=l;v_choose=v;}}return v_choose; 6014#else 6015float closest_depth=1000.0;vec2 closest_uv_offset=vec2(0.0);for(int i=0;i<9;i++){float neighbor_depth=texture2D(depthBuffer,vTexCoords[i]).r;if(neighbor_depth<closest_depth){closest_uv_offset=vTexCoords[i];closest_depth=neighbor_depth;}}return texture2D(velocityBuffer,closest_uv_offset).rgb; 6016#endif 6017}vec4 clipAabb(vec3 aabb_min,vec3 aabb_max,vec4 avg,vec4 input_texel){const float FLT_EPS=0.00000001;vec3 p_clip=0.5*(aabb_max+aabb_min);vec3 e_clip=0.5*(aabb_max-aabb_min)+FLT_EPS;vec4 v_clip=input_texel-vec4(p_clip,avg.w);vec3 v_unit=v_clip.xyz/e_clip;vec3 a_unit=abs(v_unit);float ma_unit=max(a_unit.x,max(a_unit.y,a_unit.z));if(ma_unit>1.0){return vec4(p_clip,avg.w)+v_clip/ma_unit;}else{return input_texel;}}vec3 clip_aabb_variance(in vec3 cOld,in vec3 cNew,in vec3 centre,in vec3 halfSize){if(all(lessThanEqual(abs(cOld-centre),halfSize))){return cOld;}vec3 dir=(cNew-cOld);vec3 near=centre-sign(dir)*halfSize;vec3 tAll=(near-cOld)/dir;float t=0.0001;for(int i=0;i<3;i++){if(tAll[i]>=0.0&&tAll[i]<t){t=tAll[i];}}if(t>=0.0001){return cOld;}return cOld+dir*t;}void main(){vec3 v=choose_motion_vector();vec2 velocity=v.rg;vec2 previousPixelPos=vUv-velocity;vec4 currentColor=sample_color(inputBuffer,vUv); 6018#ifdef USE_CATMULL_ROM 6019vec4 previousColor=sample_catmull_rom(historyBuffer,previousPixelPos,resolution); 6020#else 6021vec4 previousColor=sample_color(historyBuffer,previousPixelPos); 6022#endif 6023#ifdef USE_YCOCG 6024previousColor=vec4(RGB_YCoCg(previousColor.rgb),previousColor.a); 6025#endif 6026vec4 ctl=sample_color(inputBuffer,vTexCoords[0]);vec4 ctc=sample_color(inputBuffer,vTexCoords[1]);vec4 ctr=sample_color(inputBuffer,vTexCoords[2]);vec4 cml=sample_color(inputBuffer,vTexCoords[3]);vec4 cmc=sample_color(inputBuffer,vTexCoords[4]);vec4 cmr=sample_color(inputBuffer,vTexCoords[5]);vec4 cbl=sample_color(inputBuffer,vTexCoords[6]);vec4 cbc=sample_color(inputBuffer,vTexCoords[7]);vec4 cbr=sample_color(inputBuffer,vTexCoords[8]);vec4 cmin=min(ctl,min(ctc,min(ctr,min(cml,min(cmc,min(cmr,min(cbl,min(cbc,cbr))))))));vec4 cmax=max(ctl,max(ctc,max(ctr,max(cml,max(cmc,max(cmr,max(cbl,max(cbc,cbr))))))));
6026vec4 cavg=(ctl+ctc+ctr+cml+cmc+cmr+cbl+cbc+cbr)/9.0;vec4 cmin5=min(ctc,min(cml,min(cmc,min(cmr,cbc))));vec4 cmax5=max(ctc,max(cml,max(cmc,max(cmr,cbc))));vec4 cavg5=(ctc+cml+cmc+cmr+cbc)/5.0;cmin=0.5*(cmin+cmin5);cmax=0.5*(cmax+cmax5);cavg=0.5*(cavg+cavg5); 6027#ifdef USE_YCOCG 6028vec2 chroma_extent=vec2(0.25*0.5*(cmax.r-cmin.r));vec2 chroma_center=currentColor.gb;cmin.yz=chroma_center-chroma_extent;cmax.yz=chroma_center+chroma_extent;cavg.yz=chroma_center; 6029#endif 6030vec4 previousColorClipped=clamp(previousColor,cmin,cmax); 6031#ifdef LUMINANCE_DIFFERENCES 6032#ifdef USE_YCOCG 6033float lum0=currentColor.r;float lum1=previousColorClipped.r; 6034#else 6035float lum0=luminance(currentColor.rgb);float lum1=luminance(previousColorClipped.rgb); 6036#endif 6037float unbiased_diff=abs(lum0-lum1)/max(lum0,max(lum1,0.2));float unbiased_weight=1.0-unbiased_diff;float unbiased_weight_sqr=unbiased_weight*unbiased_weight;float k_feedback=mix(feedback_min,feedback_max,unbiased_weight_sqr);vec4 result=mix(currentColor,previousColorClipped,vec4(k_feedback)); 6038#else 6039const float alpha=0.1;vec4 result=mix(currentColor,previousColorClipped,1.0-alpha); 6040#endif 6041#ifdef USE_YCOCG 6042gl_FragColor=vec4(YCoCg_RGB(result.rgb).rgb,result.a); 6043#else 6044gl_FragColor=result; 6045#endif 6046}`,CQ=`#define GLSLIFY 1 6047varying vec2 vUv;void main(){gl_Position=vec4(position.xy,1.0,1.0);vUv=position.xy*0.5+0.5;}`,CK=`#define GLSLIFY 1 6048layout(location=1)out vec4 gVelocity;varying vec2 vUv;uniform sampler2D inputBuffer;void main(){gl_FragColor=texture2D(inputBuffer,vUv);gVelocity=vec4(0.0);}`,CZ=class extends r5{constructor(){super({name:"PassthroughMaterial",uniforms:{inputBuffer:new lD(null)},blending:0,depthWrite:!1,depthTest:!1,vertexShader:CQ,fragmentShader:CK})}set inputBuffer(e){this.uniforms.inputBuffer.value=e}},CJ=class extends E4{constructor(){super("TAAResolvePass"),this.MRTCompatible=!0,this.needsSwap=!1,this.passThroughMaterial=new CZ,this.resolutionVector=new tQ,this.resolveMaterial=new r5({name:"TAAResolveMaterial",uniforms:{inputBuffer:new lD(null),historyBuffer:new lD(null),velocityBuffer:new lD(null),depthBuffer:new lD(null),resolution:new lD(new tQ)},blending:0,depthWrite:!1,depthTest:!1,vertexShader:CX,fragmentShader:CY}),this.historyRenderTarget=new id(1024,1024,{minFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.historyRenderTarget.texture.name="TAA.History",this.resultRenderTarget=new id(1024,1024,{minFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.resultRenderTarget.texture.name="TAA.Output"}setSize(e,t){this.historyRenderTarget.setSize(e,t),this.resultRenderTarget.setSize(e,t)}render(e,t){this.fullscreenMaterial=this.resolveMaterial,this.resolveMaterial.uniforms.inputBuffer.value=t.texture[0],this.resolveMaterial.uniforms.velocityBuffer.value=t.texture[1],this.resolveMaterial.uniforms.depthBuffer.value=t.depthTexture,this.resolveMaterial.uniforms.historyBuffer.value=this.historyRenderTarget.texture,this.resolveMaterial.uniforms.resolution.value.set(t.width,t.height),e.setRenderTarget(this.resultRenderTarget),e.render(this.scene,this.camera),this.fullscreenMaterial=this.passThroughMaterial,this.passThroughMaterial.inputBuffer=this.resultRenderTarget.texture,e.setRenderTarget(this.historyRenderTarget),e.render(this.scene,this.camera);let i=this.renderToScreen?null:t;this.fullscreenMaterial=this.passThroughMaterial,this.passThroughMaterial.inputBuffer=this.resultRenderTarget.texture,e.setRenderTarget(i),e.render(this.scene,this.camera)}dispose(){this.resultRenderTarget.dispose(),this.historyRenderTarget.dispose(),this.resolveMaterial.dispose(),this.passThroughMaterial.dispose()}},C$=class extends E4{constructor(e,t,i){super("TransmissionPass",void 0,t),this.MRTCompatible=!0,this.depthPass=new Cr(e,t,{renderTarget:i.transmissionDepthTarget}),this.passThroughMaterial=new CZ,this.splineScene=e,this.needsSwap=!1}updatePasses(e){this.passThroughMaterial=new CZ,this.depthPass=new Cr(this.splineScene,this.camera,{renderTarget:e.transmissionDepthTarget})}setCamera(e){this.camera=e}setScene(e){this.splineScene=e}render(e,t,i){let r=this.camera.layers.mask;e.setRenderTarget(e.transmissionRenderTarget),this.fullscreenMaterial=this.passThroughMaterial,this.passThroughMaterial.inputBuffer=t.texture[0],e.clear(),e.render(this.scene,this.camera),this.camera.layers.disable(3),this.depthPass.render(e,t,i),e.shadowMap.needsUpdate=!1,e.shadowMap.autoUpdate=!1;let s=this.renderToScreen?null:t;this.camera.layers.set(3),e.setRenderTarget(s),e.render(this.splineScene,this.camera),this.camera.layers.mask=r}},C0=new nb,C1=new r5({transparent:!0,vertexShader:` 6049 void main() { 6050 gl_Position = vec4(0.0); 6051 } 6052 `,fragmentShader:` 6053 layout(location = 1) out vec4 gVelocity; 6054 6055 void main() { 6056 gl_FragColor = vec4(0.0); 6057 gVelocity = vec4(0.0); 6058 } 6059 `}
6059),C2=class extends E4{constructor(e,t,i){super("OpaquePass",t??C0,i),this.MRTCompatible=!0,this.originalMaterials=[],this.hasTransmissionPass=!1,this.clear=!0,this.clearColorOnly=!1,this.clearDepth=!1,this.needsSwap=!1,this.MRTCompatible=e}setCamera(e){this.camera=e}setScene(e){this.scene=e??C0}getScene(){return this.scene}render(e,t){this.camera.layers.enable(3),this.hasTransmissionPass&&(this.originalMaterials.length=0,this.scene.traverse(e=>{e.layers.isEnabled(3)&&e instanceof SP&&(this.originalMaterials.push([e,e.material]),e.material=C1)}),e.shadowMap.needsUpdate=!0,e.shadowMap.autoUpdate=!0),this.camera.layers.enable(8);let i=this.renderToScreen?null:t;e.setRenderTarget(i),this.clearColorOnly&&e.clear(!0,!1,!0),this.clear&&e.clear(),e.render(this.scene,this.camera),this.clearDepth&&e.clear(!1,!0,!1),this.hasTransmissionPass&&this.originalMaterials.forEach(e=>{e[0].material=e[1]})}},C3=class{constructor(e,{depthBuffer:t=!0,stencilBuffer:i=!1,multisampling:r=0,frameBufferType:s=0}={}){this.renderer=e,this.helperStartIndex=0,this.copyPass=new E5,this.depthTexture=null,this.timer=new Cg,this._width=1,this._height=1,this.passes=[],this.helperPasses=[],this.autoRenderToScreen=!0,this.inputBuffer=this.createBuffer(t,i,s,r,!0,"input buffer mrt"),this.inputBufferSingle=this.createBuffer(t,i,s,r,!1," input buffer single"),this.inputBufferSingle.texture.dispose(),this.inputBufferSingle.depthTexture.dispose(),this.inputBufferSingle.texture=this.inputBuffer.texture[0],this.inputBufferSingle.depthTexture=this.inputBuffer.depthTexture,this.outputBuffer=this.inputBuffer.clone(),this.outputBuffer.name="output buffer mrt",this.outputBufferSingle=this.createBuffer(t,i,s,r,!1,"output buffer single"),this.outputBufferSingle.texture.dispose(),this.outputBufferSingle.depthTexture.dispose(),this.outputBufferSingle.texture=this.outputBuffer.texture[0],this.outputBufferSingle.depthTexture=this.outputBuffer.depthTexture,this.setRenderer(e)}get multisampling(){return this.inputBuffer.samples||0}set multisampling(e){let t=this.inputBuffer,i=this.multisampling;i>0&&e>0?(this.inputBuffer.samples=e,this.outputBuffer.samples=e,this.inputBuffer.dispose(),this.outputBuffer.dispose()):i!==e&&(this.inputBuffer.dispose(),this.outputBuffer.dispose(),console.log("creating new input buffer"),this.inputBuffer=this.createBuffer(t.depthBuffer,t.stencilBuffer,t.texture.type,e,!0,"new input buffer"),this.inputBuffer.depthTexture=this.depthTexture,this.outputBuffer=this.inputBuffer.clone())}getTimer(){return this.timer}getRenderer(){return this.renderer}setRenderer(e){if(this.renderer=e,null!==e){let t=e.getSize(new tQ),i=e.getContext().getContextAttributes()?.alpha??!1,r=this.inputBuffer.texture[0].type;for(let s of(1009===r&&3001===e.outputEncoding&&(this.inputBuffer.texture[0].encoding=3001,this.outputBuffer.texture[0].encoding=3001,this.inputBuffer.dispose(),this.outputBuffer.dispose(),console.log("doing some kinda dispose??")),e.autoClear=!1,this.setSize(t.width,t.height,!1),this.passes))s.initialize(e,i,r)}}replaceRenderer(e,t=!0){let i=this.renderer,r=i.domElement.parentNode;return this.setRenderer(e),t&&null!==r&&(r.removeChild(i.domElement),r.appendChild(e.domElement)),i}createDepthTexture(){let e=this.depthTexture=new nf(this._width,this._height);return this.inputBuffer.depthTexture=e,this.inputBuffer.stencilBuffer?(e.format=1027,e.type=1020):e.type=1014,e}deleteDepthTexture(){if(null!==this.depthTexture)for(let e of(this.depthTexture.dispose(),this.depthTexture=null,this.inputBuffer.depthTexture=null,this.inputBuffer.dispose(),this.passes))e.setDepthTexture(null)}createBuffer(e,t,i,r,s,a){let o=this.renderer,l=null===o?new tQ:o.getDrawingBufferSize(new tQ),h={minFilter:1006,magFilter:1006,wrapS:1001,wrapT:1001,stencilBuffer:t,depthBuffer:e},c;return r>0?(c=new id(l.width,l.height,h)).samples=r:(s?(c=new im(l.width,l.height,2,h)).texture[1].type=1016:c=new id(l.width,l.height,h),c.depthTexture=new nf(2048,2048),c.depthTexture.type=1015),1009===i&&null!==o&&3001===o.outputEncoding&&(Array.isArray(c.texture)?c.texture.forEach(e=>e.encoding=3001):c.texture.encoding=3001),Array.isArray(c.texture)?c.texture.forEach((e,t)=>{e.name=`EffectComposer.Buffer ${s} ${t}`,e.generateMipmaps=!1}):(c.texture.name=`EffectComposer.Buffer ${s}`,c.texture.generateMipmaps=!1),c.name=a,c}addPass(e,t){let i=this.passes,r=this.renderer,s=r.getDrawingBufferSize(new tQ),a=r.getContext().getContextAttributes()?.alpha??!1,o;if(e.MRTCompatible&&(o=this.inputBuffer.texture[0].type),e.MRTCompatible||(o=this.inputBuffer.texture.type),e.setRenderer(r),e.setSize(s.width,s.height),e.initialize(r,a,o),this.autoRenderToScreen&&(i.length>0&&(i[i.length-1].renderToScreen=!1),e.renderToScreen&&(this.autoRenderToScreen=!1)),void 0!==t?i.splice(t,0,e):i.push(e),this.autoRenderToScreen&&(i[i.length-1].renderToScreen=!0),e.needsDepthTexture||null!==this.depthTexture){if(null===this.depthTexture){let t=this.createDepthTexture();for(e of i)e.setDepthTexture(t)}else e.setDepthTexture(this.depthTexture)}}setHelperStartIndex(e){this.helperStartIndex=e}removePass(e){let t=this.passes,i=t.indexOf(e);-1!==i&&t.splice(i,1).length>0&&(null!==this.depthTexture&&(t.reduce((e,t)=>
6059e||t.needsDepthTexture,!1)||e.getDepthTexture()===this.depthTexture&&e.setDepthTexture(null)),this.autoRenderToScreen&&i===t.length&&(e.renderToScreen=!1,t.length>0&&(t[t.length-1].renderToScreen=!0)))}removeAllPasses(){let e=this.passes;e.length>0&&(this.autoRenderToScreen&&(e[e.length-1].renderToScreen=!1),this.passes=[])}render(e){let t=this.renderer,i=this.copyPass,r=this.inputBuffer,s=this.outputBuffer,a=this.inputBufferSingle,o=this.outputBufferSingle,l=!1,h,c,d,u;for(let p of(void 0===e&&(e=this.timer.update().getDelta()),this.passes))p.enabled&&(p.MRTCompatible?p.render(t,r,s,e,l):p.render(t,a,o,e,l),p.needsSwap&&(l&&(i.renderToScreen=p.renderToScreen,h=t.getContext(),(c=t.state.buffers.stencil).setFunc(h.NOTEQUAL,1,4294967295),i.render(t,r,s,e,l),c.setFunc(h.EQUAL,1,4294967295)),d=r,u=a,r=s,a=o,s=d,o=u),p instanceof Cf?l=!0:p instanceof E6&&(l=!1))}setSize(e,t,i){let r=this.renderer;if(this._width=e,this._height=t,void 0===e||void 0===t){let i=r.getSize(new tQ);e=i.width,t=i.height}r.setSize(e,t,i);let s=r.getDrawingBufferSize(new tQ);for(let e of(this.inputBuffer.setSize(s.width,s.height),this.outputBuffer.setSize(s.width,s.height),this.inputBufferSingle.setSize(s.width,s.height),this.outputBufferSingle.setSize(s.width,s.height),this.passes))e.setSize(s.width,s.height)}reset(){let e=this.timer.isAutoResetEnabled();this.dispose(),this.autoRenderToScreen=!0,this.timer.setAutoResetEnabled(e)}dispose(){for(let e of this.passes)e.dispose();this.passes=[],null!==this.inputBuffer&&this.inputBuffer.dispose(),null!==this.outputBuffer&&this.outputBuffer.dispose(),null!==this.inputBufferSingle&&this.inputBufferSingle.dispose(),null!==this.outputBufferSingle&&this.outputBufferSingle.dispose(),this.deleteDepthTexture(),this.copyPass.dispose(),this.timer.dispose()}},C4=new r5({name:"CombineMaterial",uniforms:{inputBufferA:new lD(null),inputBufferB:new lD(null)},blending:0,depthWrite:!1,depthTest:!1,vertexShader:` 6060varying vec2 vUv; 6061void main() { 6062 gl_Position = vec4(position.xy, 1.0, 1.0); 6063 vUv = position.xy * 0.5 + 0.5; 6064} 6065`,fragmentShader:` 6066 varying vec2 vUv; 6067 uniform sampler2D inputBufferA; 6068 uniform sampler2D inputBufferB; 6069 6070 // TODO: Why do we need these when postpro of framemode is enabled??? 6071 layout(location = 1) out vec4 gVelocity; 6072 6073 void main() { 6074 vec4 resA = texture2D(inputBufferA, vUv); 6075 vec4 resB = texture2D(inputBufferB, vUv); 6076 float a = resA.a + resB.a * ( 1.0 - resA.a ); 6077 6078 vec4 res; 6079 res.rgb = resA.rgb + (resB.rgb * (1.0 - resA.a)); 6080 res.a = resA.a + resB.a * (1.0 - resA.a); 6081 gl_FragColor = res; 6082 gVelocity = vec4(0.0); 6083 } 6084`}),C5=class extends E4{constructor(e){super("HelperPass",void 0,e),this.MRTCompatible=!1,this.fullscreenMaterial=C4,this.helperPass=new C2(!1,void 0,this.camera),this.helperPass.hasTransmissionPass=!1,this.helperPass.clear=!1,this.helperPass.renderToScreen=!1,this.helperPassOnTop=new C2(!1,void 0,this.camera),this.helperPassOnTop.hasTransmissionPass=!1,this.helperPassOnTop.clear=!1,this.helperPassOnTop.renderToScreen=!1;let t=new CO({preset:CI.LOW,edgeDetectionMode:2});this.effectPass=new Cc(this.camera,t),this.rt=new id(10,10,{minFilter:1006,magFilter:1006,wrapS:1001,wrapT:1001,depthBuffer:!0})}setSize(e,t){this.rt.setSize(e,t),this.effectPass.setSize(e,t)}set sceneHelpers(e){this.helperPass.setScene(e)}get sceneHelpers(){return this.helperPass.getScene()}set sceneHelpersOnTop(e){this.helperPassOnTop.setScene(e)}get sceneHelpersOnTop(){return this.helperPassOnTop.getScene()}setCamera(e){this.helperPass.setCamera(e),this.helperPassOnTop.setCamera(e)}initialize(e,t,i){super.initialize(e,t,i),this.effectPass.initialize(e,t,i)}dispose(){super.dispose(),this.rt.dispose(),this.effectPass.dispose()}render(e,t,i){this.rt.depthTexture=t.depthTexture;let r=e.getClearAlpha();e.setClearAlpha(0),this.helperPass.clearDepth=!0,this.helperPass.clearColorOnly=!0,this.helperPass.render(e,this.rt),this.helperPassOnTop.render(e,this.rt),this.effectPass.renderToScreen=!1,this.effectPass.render(e,this.rt,i),this.fullscreenMaterial.uniforms.inputBufferA.value=i.texture,this.fullscreenMaterial.uniforms.inputBufferB.value=t.texture,e.setClearAlpha(r),e.setRenderTarget(null),e.clear(),e.render(this.scene,this.camera)}},C6=`#define GLSLIFY 1 6085out vec2 v_uv;void main(){v_uv=uv;gl_Position=vec4(position.xy,1.0,1.0);}`,C8=`#define GLSLIFY 1 6086in vec2 v_uv;const float pi=3.14159265;const float num_steps=4.0;const float num_directions=4.0;uniform float near;uniform float far;uniform float fov;uniform vec4 proj_info;uniform bool is_ortho;uniform vec2 resolution;uniform float radius_of_influence;uniform float radius_in_screen_space;uniform float exponent;uniform vec3 ao_color;uniform float bias;uniform sampler2D texture_depth;uniform sampler2D texture_normals;uniform sampler2D texture_blue_noise;uniform sampler2D texture_blue_noise_in_disk;uniform sampler2D texture_color_pass;uniform int frame_index;uniform bool fog_enabled;uniform float fog_near;uniform float fog_far;vec3 uv_to_view_space(vec2 uv,float eye_z){return vec3((uv*proj_info.xy+proj_info.zw)*(is_ortho ? 1.0 : eye_z),eye_z);}float linearize_depth(float depth_sampled){float z=is_ortho ? depth_sampled : depth_sampled*2.0-1.0;return mix((2.0*near*far)/(far+near-z*(far-near)),near+z*(far-near),float(is_ortho));}vec3 get_view_position(vec2 uv_coords){float linear_depth=linearize_depth(texture(texture_depth,uv_coords).x);return uv_to_view_space(uv_coords,linear_depth);}vec3 min_difference(vec3 p,vec3 right,vec3 left){vec3 v1=right-p;vec3 v2=p-left;return(dot(v1,v1)<dot(v2,v2))? v1 : v2;}vec3 rebuild_normal(in vec2 uv,in vec3 p){vec2 one_over_resolution=1.0/resolution;vec3 r=get_view_position(uv+vec2(one_over_resolution.x,0));vec3 l=get_view_position(uv+vec2(-one_over_resolution.x,0));vec3 t=get_view_position(uv+vec2(0,one_over_resolution.y));vec3 b=get_view_position(uv+vec2(0,-one_over_resolution.y));return normalize(cross(min_difference(p,r,l),min_difference(p,t,b)));}float falloff(float distance_squared){float neg_inv_r2=-1.0/(radius_of_influence*radius_of_influence);return distance_squared*neg_inv_r2+1.0;}float ao_contribution(vec3 P,vec3 N,vec3 S){vec3 to_sample=S-P;float norm_squared=dot(to_sample,to_sample);float norm=sqrt(norm_squared);float cos_theta=dot(N,to_sample)/norm;return clamp(cos_theta-bias,0.0,1.0)*clamp(falloff(norm_squared),0.0,1.0);}float compute_ambient_occlusion(vec2 uv,float radius_in_screen_space,vec3 pc,vec3 view_space_n){vec2 one_over_resolution=1.0/resolution;ivec2 noise_uv=ivec2(int(mod(gl_FragCoord.x,128.0)),int(mod(gl_FragCoord.y,128.0)));float noise=texelFetch(texture_blue_noise,noise_uv,0).r;noise=fract(noise+0.61803398875*float(frame_index));float theta=noise*2.0*3.1415;float ct=cos(theta);float st=sin(theta);float step_size=radius_in_screen_space/(num_steps+1.0);const float angle_step=2.0*pi/num_directions;float contribution=0.0;for(int i=0;i<int(num_directions);++i){float current_pixel=step_size+1.0;for(int j=0;j<int(num_steps);++j){int index=i*int(num_steps)+j;vec2 blue_noise_sample=texelFetch(texture_blue_noise_in_disk,ivec2(index,0),0).rg;vec2 disk_point;disk_point.x=blue_noise_sample.x*ct-blue_noise_sample.y*st;disk_point.y=blue_noise_sample.x*st+blue_noise_sample.y*ct;vec2 sample_direction=disk_point;vec2 snapped_uv=round(current_pixel*sample_direction)*one_over_resolution+uv;vec3 ps=get_view_position(snapped_uv);current_pixel+=step_size;contribution+=ao_contribution(pc,view_space_n,ps);}}float mult=1.0/(1.0-bias);contribution*=mult/(num_directions*num_steps);return clamp(1.0-contribution*2.0,0.0,1.0);} 6087#define USE_GBUFFER_NORMALS 6088void main(){vec3 view_space_p=get_view_position(v_uv); 6089#ifdef USE_GBUFFER_NORMALS 6090vec3 view_space_n=texture(texture_normals,v_uv).rgb;view_space_n.z*=-1.0; 6091#else 6092vec3 view_space_n=-rebuild_normal(v_uv,view_space_p); 6093#endif 6094float radius_ss=radius_in_screen_space/(is_ortho ? 1.0 : view_space_p.z);float ao=compute_ambient_occlusion(v_uv,radius_ss,view_space_p,view_space_n);float final=pow(ao,exponent);if(view_space_p.z>
6094=far){final=1.0;}vec3 color=mix(ao_color,vec3(1.0),final);if(fog_enabled){float fog_factor=smoothstep(fog_near,fog_far,view_space_p.z);color=mix(color,vec3(1.0),fog_factor);}gl_FragColor=vec4(color,1.0);}`,C9=`#define GLSLIFY 1 6095out vec2 v_uv;void main(){gl_Position=vec4(position.xy,1.0,1.0);v_uv=uv;}`,C7=`#define GLSLIFY 1 6096in vec2 v_uv;uniform sampler2D texture_ao_lrez;uniform sampler2D texture_depth_lrez;uniform sampler2D texture_depth_hrez;uniform float near;uniform float far;float linearize_depth(float depth_sampled){float z=depth_sampled*2.0-1.0;return(2.0*near*far)/(far+near-z*(far-near));}vec2 nearest_depth_filter(in vec2 uv){vec2 resolution=vec2(textureSize(texture_depth_lrez,0));vec2 texel_size=1.0/resolution;vec2 offset=uv-0.5*texel_size;float d_hrez=texture(texture_depth_hrez,uv).r;float a=abs(d_hrez-texture(texture_depth_lrez,offset).r);float b=abs(d_hrez-texture(texture_depth_lrez,offset+vec2(texel_size.x,0.0)).r);float c=abs(d_hrez-texture(texture_depth_lrez,offset+vec2(0.0,texel_size.y)).r);float d=abs(d_hrez-texture(texture_depth_lrez,offset+vec2(texel_size.x,texel_size.y)).r);float min_diff=min(a,min(b,min(c,d)));if(min_diff==a)return offset;if(min_diff==b)return offset+vec2(texel_size.x,0.0);if(min_diff==c)return offset+vec2(0.0,texel_size.y);if(min_diff==d)return offset+vec2(texel_size.x,texel_size.y);}void main(){ 6097#ifdef DEBUG 6098float d_lrez=texture(texture_depth_lrez,v_uv).r;float d_hrez=texture(texture_depth_hrez,v_uv).r;float output_d=mix(linearize_depth(d_lrez)/far,linearize_depth(d_hrez)/far,step(0.5,v_uv.x));gl_FragColor=vec4(vec3(output_d),1.0); 6099#else 6100vec2 filtered_uv=nearest_depth_filter(v_uv);vec4 ao=texture(texture_ao_lrez,filtered_uv);gl_FragColor=vec4(ao.rgb,1.0);gl_FragColor=ao; 6101#endif 6102}`,Te=[[.478712,.875764],[-.337956,-.793959],[-.955259,-.028164],[.864527,.325689],[.209342,-.395657],[-.106779,.672585],[.156213,.235113],[-.413644,-.082856],[-.415667,.323909],[.141896,-.93998],[.954932,-.182516],[-.766184,.410799],[-.434912,-.458845],[.415242,-.078724],[.728335,-.491777],[-.058086,-.066401],[.20299,.686837],[-.808362,-.556402],[.507386,-.640839],[-.723494,-.22924],[.48974,.317826],[-.622663,.765301],[-.01064,.929347],[.663146,.647618],[-.096674,-.413835],[.525945,-.321063],[-.122533,.366019],[.195235,-.687983],[-.563203,.098748],[.418563,.561335],[-.378595,.800367],[.826922,.001024],[-.085372,-.766651],[-.92192,.183673],[-.590008,-.721799],[.167751,-.164393],[.032961,-.56253],[.6329,-.107059],[-.46408,.569669],[-.173676,-.958758],[-.242648,-.234303],[-.275362,.157163],[.382295,-.795131],[.562955,.115562],[.190586,.470121],[.770764,-.297576],[.237281,.93105],[-.666642,-.455871],[-.905649,-.298379],[.33952,.157829],[.701438,-.7041],[-.062758,.160346],[-.220674,.957141],[.642692,.432706],[-.77339,-.015272],[-.671467,.24688],[.158051,.062859],[.806009,.527232],[-.05762,-.247071],[.333436,-.51671],[-.550658,-.315773],[-.652078,.589846],[.008818,.530556],[-.210004,.519896]],Tt=new r5({vertexShader:`#define GLSLIFY 1 6103#include <skinning_pars_vertex> 6104#include <morphtarget_pars_vertex> 6105out vec3 n;void main(){ 6106#include <beginnormal_vertex> 6107#include <morphnormal_vertex> 6108#include <skinbase_vertex> 6109#include <skinnormal_vertex> 6110#include <defaultnormal_vertex> 6111#include <begin_vertex> 6112#include <morphtarget_vertex> 6113#include <skinning_vertex> 6114vec4 view_space=viewMatrix*modelMatrix*vec4(transformed,1.0);gl_Position=projectionMatrix*view_space;n=normalize(transformedNormal);}`,fragmentShader:`#define GLSLIFY 1 6115in vec3 n;void main(){gl_FragColor=vec4(n,1.0);}`}),Ti=new r5({vertexShader:C9,fragmentShader:C7,uniforms:{texture_ao_lrez:new lD(null),texture_depth_lrez:new lD(null),texture_depth_hrez:new lD(null),near:new lD(null),far:new lD(null)}}),Tr=class extends E4{constructor(e,t){super("AmbientOcclusionPass",void 0,t),this.fogEnabled=!1,this.fogNear=1,this.fogFar=1e3,this.frameIndex=0,this._runHalfRes=!0,this._width=1,this._height=1,this.gBuffer=new id(1024,1024,{type:uX?1016:1015,depthTexture:new nf(1024,1024),minFilter:1006,magFilter:1006}),this.depthBufferHighRes=new id(1024,1024,{depthTexture:new nf(1024,1024)}),this.aoBuffer=new id(1024,1024,{minFilter:1006,magFilter:1006}
6115),this.splineScene=e,this.splineCamera=t;let i=new Float32Array(2*Te.length);for(let e=0;e<Te.length;e++){let t=2*e;i[t+0]=Te[e][0],i[t+1]=Te[e][1]}this.blueNoiseInDiskTexture=new nM(i,Te.length,1,1030,1015),this.blueNoiseInDiskTexture.wrapS=1e3,this.blueNoiseInDiskTexture.wrapT=1e3,this.blueNoiseInDiskTexture.needsUpdate=!0,this.hbaoMaterial=new r5({vertexShader:C6,fragmentShader:C8,uniforms:{near:new lD(null),far:new lD(null),fov:new lD(null),proj_info:new lD(new ic),is_ortho:new lD(!1),resolution:new lD(new tQ),radius_of_influence:new lD(8),radius_in_screen_space:new lD(1),exponent:new lD(1),ao_color:new lD(new iv),bias:new lD(.5),texture_depth:new lD(null),texture_normals:new lD(null),texture_blue_noise:new lD(null),texture_blue_noise_in_disk:new lD(this.blueNoiseInDiskTexture),frame_index:new lD(0),fog_enabled:new lD(!1),fog_near:new lD(1),fog_far:new lD(1e3)}}),this.radius=128,this.aoColor={r:0,g:0,b:0},this.bias=.5,this.hbaoMaterial.uniforms.texture_depth.value=this.gBuffer.depthTexture,this.hbaoMaterial.uniforms.texture_normals.value=this.gBuffer.texture,this.needsSwap=!0,this.aaBuffer=new id(1024,1024,{minFilter:1006,magFilter:1006,wrapS:1001,wrapT:1001,depthBuffer:!1,type:1015});let r=new CO({preset:CI.ULTRA,edgeDetectionMode:2});this.effectPass=new Cc(this.camera,r)}initialize(e,t,i){super.initialize(e,t,i),this.effectPass.initialize(e,t,i)}setBlueNoiseTexture(e){this.hbaoMaterial.uniforms.texture_blue_noise.value=e}setSize(e,t){this._width=e,this._height=t,this.depthBufferHighRes.setSize(e,t);let i=this._runHalfRes?.5:1,r=e*i,s=t*i;this.gBuffer.setSize(r,s),this.aoBuffer.setSize(r,s),this.hbaoMaterial.uniforms.resolution.value.set(r,s),this.aaBuffer.setSize(r,s),this.effectPass.setSize(r,s)}get runHalfRes(){return this._runHalfRes}set runHalfRes(e){this._runHalfRes=e,this.setSize(this._width,this._height)}setCamera(e){this.splineCamera=e}setScene(e){this.splineScene=e}setDepthTexture(e){this.depthBufferHighRes.depthTexture=e,Ti.uniforms.texture_depth_hrez.value=e,Ti.needsUpdate=!0}render(e,t,i){this.splineScene.overrideMaterial=Tt;let r=this.splineCamera.layers.mask;if(this.splineCamera.layers.set(5),e.setRenderTarget(this.gBuffer),e.clear(),e.render(this.splineScene,this.splineCamera),e.setRenderTarget(this.depthBufferHighRes),e.clear(),e.render(this.splineScene,this.splineCamera),this.splineScene.overrideMaterial=null,this.splineCamera.layers.mask=r,this.hbaoMaterial.uniforms.radius_of_influence.value=this.radius,this.hbaoMaterial.uniforms.ao_color.value.set(this.aoColor.r,this.aoColor.g,this.aoColor.b),this.hbaoMaterial.uniforms.bias.value=this.bias,this.hbaoMaterial.uniforms.fog_enabled.value=this.fogEnabled,this.hbaoMaterial.uniforms.fog_near.value=this.fogNear,this.hbaoMaterial.uniforms.fog_far.value=this.fogFar,this.hbaoMaterial.uniforms.frame_index.value=this.frameIndex,this.frameIndex++,this.splineCamera.isPerspectiveCamera){this.hbaoMaterial.uniforms.near.value=this.splineCamera.perspCamera.near,this.hbaoMaterial.uniforms.far.value=this.splineCamera.perspCamera.far;let e=this.splineCamera.perspCamera.projectionMatrix.elements,t=2/e[0],i=2/e[5],r=-(1-e[8])/e[0],s=-(1+e[9])/e[5];this.hbaoMaterial.uniforms.proj_info.value.set(t,i,r,s);let a=this.splineCamera.perspCamera.fov*(Math.PI/180),o=this.hbaoMaterial.uniforms.resolution.value.y/(2*Math.tan(.5*a)),l=.5*this.hbaoMaterial.uniforms.radius_of_influence.value*o;this.hbaoMaterial.uniforms.radius_in_screen_space.value=l,this.hbaoMaterial.uniforms.is_ortho.value=!1}else{this.hbaoMaterial.uniforms.near.value=this.splineCamera.orthoCamera.near,this.hbaoMaterial.uniforms.far.value=this.splineCamera.orthoCamera.far;let e=this.splineCamera.orthoCamera.projectionMatrix.elements,t=2/e[0],i=2/e[5],r=-(1+e[12])/e[0],s=-(1-e[13])/e[5];this.hbaoMaterial.uniforms.proj_info.value.set(t,i,r,s);let a=this.hbaoMaterial.uniforms.resolution.value.y/i*.5,o=this.hbaoMaterial.uniforms.radius_of_influence.value*a;this.hbaoMaterial.uniforms.radius_in_screen_space.value=o,this.hbaoMaterial.uniforms.is_ortho.value=!0}this.runHalfRes?(this.fullscreenMaterial=this.hbaoMaterial,e.setRenderTarget(this.aoBuffer),e.clear(),e.render(this.scene,this.camera),this.fullscreenMaterial=Ti,Ti.uniforms.texture_ao_lrez.value=this.aoBuffer.texture,Ti.uniforms.texture_depth_lrez.value=this.gBuffer.depthTexture,Ti.uniforms.texture_depth_hrez.value=this.depthBufferHighRes.depthTexture,e.setRenderTarget(e.aoRenderTarget),e.clear(),e.render(this.scene,this.camera)):(this.fullscreenMaterial=this.hbaoMaterial,e.setRenderTarget(this.aaBuffer),e.clear(),e.render(this.scene,this.camera),this.effectPass.renderToScreen=!1,this.effectPass.render(e,this.aaBuffer,e.aoRenderTarget))}dispose(){this.gBuffer.dispose(),this.depthBufferHighRes.dispose(),this.aoBuffer.dispose()}},Ts=` 6116varying vec2 vUv; 6117void main() { 6118 vUv = uv; 6119 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); 6120}`,Ta=` 6121uniform sampler2D tInput; 6122uniform sampler2D tMap; 6123uniform vec2 resolution; 6124varying vec2 vUv; 6125 6126uniform vec2 uResolution; 6127uniform vec2 uCoords; 6128 6129// Draws a rectangle at center <st> with size <size> 6130float rectangle(vec2 st, vec2 size) { 6131 size = vec2(0.5) - size * 0.5; 6132 vec2 uv = vec2(step(size.x, st.x), step(size.y, st.y)); 6133 uv *= vec2(step(size.x, 1.0 - st.x), step(size.y, 1.0 - st.y)); 6134 6135 return uv.x * uv.y; 6136} 6137 6138uniform vec2 uSize; 6139uniform float uScale; 6140uniform float uDPR; 6141uniform float uCurrent; 6142uniform vec3 uSceneColor; 6143 6144void main() { 6145 vec2 screenUv = gl_FragCoord.xy / uResolution.xy; 6146 screenUv *= 1.0 / uDPR; 6147 6148 vec2 center = vec2(0.5, -0.5); 6149 vec2 outsideUv = screenUv; 6150 outsideUv += center; 6151 outsideUv -= uCoords.xy / uResolution.xy; 6152 outsideUv = (outsideUv - 0.5) + 0.5; 6153 outsideUv -= center; 6154 vec2 s = (uSize / uResolution) * uScale; 6155 float isOutside = 1.0 - rectangle(outsideUv, s); 6156 6157 vec2 mid = vec2(0.5); 6158 vec2 insideUv = (screenUv - mid + s * mid) / s; 6159 vec4 background = texture2D(tInput, screenUv); 6160 vec4 image = texture2D(tMap, insideUv); 6161 gl_FragColor = mix(image, background, isOutside); 6162} 6163`,Tn=class extends Cm{constructor(){super(new r5({vertexShader:Ts,fragmentShader:Ta,uniforms:{tInput:new lD(null),tMap:new lD(null),uResolution:new lD(new tQ),uSize:new lD(new tQ),uCoords:new lD(new tQ),uScale:new lD(1),uSceneColor:new lD(new ii(16711680)),uDPR:new lD(1),uCurrent:ne
6163w lD(0)}}),"tInput"),this.needsSwap=!0}get uniforms(){return this.fullscreenMaterial.uniforms}get texture(){return this.uniforms.tMap.value}set texture(e){this.uniforms.tMap.value=e}},To=` 6164void main() { 6165 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); 6166}`,Tl=` 6167uniform sampler2D toScene; 6168uniform sampler2D fromScene; 6169uniform vec2 resolution; 6170 6171uniform vec2 uResolution; 6172uniform float uDPR; 6173 6174uniform float mixRatio; 6175uniform sampler2D tMixTexture; 6176uniform int useTexture; 6177uniform float threshold; 6178 6179void main() { 6180 vec2 screenUv = gl_FragCoord.xy / uResolution.xy; 6181 screenUv *= 1.0 / uDPR; 6182 6183 vec4 texel1 = texture2D( fromScene, screenUv ); 6184 vec4 texel2 = texture2D( toScene, screenUv ); 6185 6186 if (useTexture==1) { 6187 6188 vec4 transitionTexel = texture2D( tMixTexture, screenUv ); 6189 float r = mixRatio * (1.0 + threshold * 2.0) - threshold; 6190 float mixf=clamp((transitionTexel.r - r)*(1.0/threshold), 0.0, 1.0); 6191 6192 gl_FragColor = mix( texel1, texel2, mixf ); 6193 } else { 6194 6195 gl_FragColor = mix( texel1, texel2, mixRatio ); 6196 6197 } 6198} 6199`,Th=class extends Cm{constructor(){super(new r5({vertexShader:To,fragmentShader:Tl,uniforms:{toScene:new lD(null),fromScene:new lD(null),uResolution:new lD(new tQ),uDPR:new lD(1),mixRatio:new lD(0),threshold:new lD(.1),useTexture:new lD(0),tMixTexture:{value:[][0]}}}),"toScene"),this.needsSwap=!0}get uniforms(){return this.fullscreenMaterial.uniforms}get texture(){return this.uniforms.fromScene.value}set texture(e){this.uniforms.fromScene.value=e}},Tc=` 6200void main() { 6201 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); 6202}`,Td=` 6203uniform sampler2D inputBuffer; 6204uniform sampler2D blurredInputBuffer; 6205uniform sampler2D overlay; 6206uniform float blurIntensity; 6207 6208uniform vec2 uResolution; 6209uniform float uDPR; 6210 6211void main() { 6212 vec2 screenUv = gl_FragCoord.xy / uResolution.xy; 6213 screenUv *= 1.0 / uDPR; 6214 6215 vec4 texel1 = texture2D( overlay, screenUv ); 6216 vec4 texel2 = texture2D( inputBuffer, screenUv ); 6217 vec4 texel3 = texture2D( blurredInputBuffer, screenUv ); 6218 6219 float blurMask2 = max(sign(texel1.a), 0.0) * blurIntensity; 6220 gl_FragColor = mix( mix(texel2, texel3, blurMask2), texel1, texel1.a ); 6221} 6222`,Tu=class extends Cm{constructor(){super(new r5({vertexShader:Tc,fragmentShader:Td,uniforms:{inputBuffer:new lD(null),blurredInputBuffer:new lD(null),overlay:new lD(null),uResolution:new lD(new tQ),uDPR:new lD(1),blurIntensity:new lD(0)}})),this._blurEnabled=!1,this.blurTarget=new id(1,1,{minFilter:1006,magFilter:1006,wrapS:1001,wrapT:1001}),this.blurPass=new Cu({width:window.innerWidth,height:window.innerHeight,kernelSize:Cv.HUGE,resolutionScale:.25}),this.blurPass.renderToScreen=!1,this.uniforms.blurredInputBuffer.value=this.blurTarget.texture}get uniforms(){return this.fullscreenMaterial.uniforms}get texture(){return this.uniforms.overlay.value}set texture(e){this.uniforms.overlay.value=e}setResolution(e,t,i=1){this.uniforms.uResolution.value.set(e,t),this.uniforms.uDPR.value=i,this.blurPass.setSize(e,t),this.blurTarget.setSize(e,t),this.blurPass.setSize(e,t)}get uiCanvas(){return this._uiCanvas}set uiCanvas(e){this._uiCanvas=e,e.texture&&(this.uniforms.overlay.value=e.texture);let t=e.frame;if(t){let e=t.data.backgroundBlur,i=e.radius;this._blurEnabled=e.enabled,this.uniforms.blurIntensity.value=this._blurEnabled?1:0,this.blurPass.scale=i/3}}render(e,t,i,r,s){this._blurEnabled&&(this.blurPass.setDepthTexture(this.getDepthTexture()),this.blurPass.render(e,t,this.blurTarget,r,s)),super.render(e,t,i,r,s)}},Tp=` 6223varying vec2 vUv; 6224void main() { 6225 vUv = uv; 6226 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); 6227}`,Tf=` 6228uniform sampler2D tInput; 6229uniform sampler2D tOverlayImage; 6230varying vec2 vUv; 6231uniform vec2 uResolution; 6232uniform vec2 uRightBottom; 6233uniform vec2 uImageSize; 6234uniform float uScale; 6235uniform float uDPR; 6236 6237vec3 blendNormal(vec3 base, vec3 blend) { 6238 return blend; 6239} 6240 6241vec3 blendNormal(vec3 base, vec3 blend, float opacity) { 6242 return (blendNormal(base, blend) * opacity + base * (1.0 - opacity)); 6243} 6244 6245vec4 drawFixedSizeImage(sampler2D image, vec2 screenUV, vec2 imageSize, vec2 imageCoords, vec2 screenSize, float dpr) { 6246 vec2 uv = (screenUV * screenSize * dpr - imageCoords) / (imageSize * dpr); 6247 if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) { 6248 return vec4(0.0); 6249 } 6250 return texture2D(image, uv); 6251} 6252 6253void main() { 6254 vec2 screenUV = gl_FragCoord.xy / (uResolution.xy * uDPR); 6255 vec2 imageCoords = vec2(uResolution.x * uDPR - uImageSize.x * uScale * uDPR - uRightBottom.x * uDPR, uRightBottom.y * uDPR); 6256 vec4 background = texture2D(tInput, screenUV); 6257 vec4 image = drawFixedSizeImage(tOverlayImage, screenUV, uImageSize * uScale, imageCoords, uResolution, uDPR); 6258 gl_FragColor = vec4(blendNormal(background.rgb, image.rgb, image.a), max(background.a, image.a)); 6259} 6260`,Tm=class extends Cm{constructor(){super(new r5({vertexShader:Tp,fragmentShader:Tf,uniforms:{tInput:new lD(null),tOverlayImage:new lD(null),uResolution:new lD(new tQ),uImageSize:new lD(new tQ),uRightBottom:new lD(new tQ(20,20)),uScale:new lD(.25),uDPR:new lD(1)}}),"tInput")}get uniforms(){return this.fullscreenMaterial.uniforms}get texture(){return this.uniforms.tOverlayImage.value}set texture(e){this.uniforms.tOverlayImage.value=e,this.uniforms.uImageSize.value.set(e.image.width,e.image.height)}};function Tg(e,t){return t&&t.enabled&&e.push(t.effect),e}var Tv=e=>Object.values(Cs).includes(e)?e:Cs.NORMAL,Ty=class extends tL{constructor(e,t){super(),this._needsDOFResize=t,this.postprocessingState=vX.defaultData,this._scene=new nb,this._camera=new Eg,this.effects=new Map,this.blueNoiseTexture=new nM,this._renderToScreen=!0,this._isUIOverlayEnabled=!1,this.clock=new lg,this.renderer=e,this.debug=!1,this.effects.set("bloom",new CN),this.effects.set("chromaticAberration",new CU),this.effects.set("vignette",new CH),this.effects.set("noise",new CG),this.effects.set("colorAverage",new CV),this.effects.set("hueSaturation",new Cj),this.effects.set("brightnessContrast",new Ck),this.effects.set("depthOfField",new CW),this.effects.set("pixelation",new Cq),this.effectComposer=new C3(this.renderer),this.effectComposer.autoRenderToScreen=!1,this.opaquePass=new C2(!0,this.scene,this.camera),this.opaquePass.clear=!0,this.transmissionPass=new C$
6260(this.scene,this.camera,this.renderer),this.aoPass=new Tr(this.scene,this.camera),this.taaPass=new CJ,this.taaPass.renderToScreen=!1,this.helperPass=new C5(this.camera),this.helperPass.renderToScreen=!1,this.stylesOverlayPass=new Tn,this.stylesOverlayPass.enabled=!1,this.uiOverlayPass=new Tu,this.uiOverlayPass.enabled=!1,this.logoOverlayPass=new Tm,this.logoOverlayPass.enabled=!1,this.sceneTransitionPass=new Th,this.sceneTransitionPass.enabled=!1,this._initCopyPass(),this._initPasses()}set overlayTexture(e){void 0!==e?(this.stylesOverlayPass.texture=e,this.stylesOverlayPass.enabled=!0):this.stylesOverlayPass.enabled=!1}get overlayTexture(){return this.stylesOverlayPass.texture}set sceneHelpers(e){this.helperPass.sceneHelpers=e}get sceneHelpers(){return this.helperPass.sceneHelpers}set sceneHelpersOnTop(e){this.helperPass.sceneHelpersOnTop=e}get sceneHelpersOnTop(){return this.helperPass.sceneHelpersOnTop}get scene(){return this._scene}set scene(e){this._scene=e,this.opaquePass.setScene(e),this.transmissionPass.setScene(e),this.aoPass.setScene(e)}get camera(){return this._camera}set camera(e){let t=this._camera!==e;this._camera=e,this.opaquePass.setCamera(e),this.transmissionPass.setCamera(e),t&&this.transmissionPass.updatePasses(this.renderer),this.aoPass.setCamera(e),this.helperPass.setCamera(e),this.effects.get("depthOfField").setCamera(e)}updateRenderToScreen(){let e=!1;for(let t=this.effectComposer.passes.length-1;t>=0;t--){let i=this.effectComposer.passes[t];if(!0===i.enabled&&!e&&this._renderToScreen){i.renderToScreen=!0,e=!0;continue}i.renderToScreen=!1}}get isUIOverlayEnabled(){return this._isUIOverlayEnabled}disableUIOverlay(){this._isUIOverlayEnabled=!1}enableUIOverlay(){this._isUIOverlayEnabled=!0}disableHelpers(){this.helperPass.enabled=!1,this.updateRenderToScreen()}enableHelpers(){this.helperPass.enabled=!0,this.updateRenderToScreen()}updateBlueNoiseTexture(e){this.blueNoiseTexture=new nM(e,128,128),this.blueNoiseTexture.wrapS=1e3,this.blueNoiseTexture.wrapT=1e3,this.blueNoiseTexture.minFilter=1003,this.blueNoiseTexture.magFilter=1003,this.blueNoiseTexture.needsUpdate=!0}setAmbientOcclusionParams(e,t,i,r,s,a,o,l){this.aoPass.enabled=e,this.aoPass.radius=t,this.aoPass.bias=i,this.aoPass.aoColor=r,this.aoPass.fogEnabled=s,this.aoPass.fogNear=a,this.aoPass.fogFar=o,!l!==this.aoPass.runHalfRes&&(this.aoPass.runHalfRes=!l)}setTransmissionPassEnabled(e){this.transmissionPass.enabled=e,this.opaquePass.hasTransmissionPass=e}
6260_initPasses(){if(this.uvEffectPass?.dispose(),this.effectPass?.dispose(),this.effectComposer.removeAllPasses(),this.transmissionPass.updatePasses(this.renderer),this.effectComposer.addPass(this.aoPass),this.effectComposer.addPass(this.opaquePass),this.effectComposer.addPass(this.transmissionPass),this.effectComposer.addPass(this.taaPass),this.postprocessingState.enabled){let e=[this.effects.get("pixelation")].reduce(Tg,[]);e.length>0&&(this.uvEffectPass=new Cc(this.camera,...e),this.uvEffectPass.renderToScreen=!1,this.effectComposer.addPass(this.uvEffectPass));let t=[this.effects.get("chromaticAberration"),this.effects.get("bloom"),this.effects.get("depthOfField"),this.effects.get("colorAverage"),this.effects.get("hueSaturation"),this.effects.get("brightnessContrast"),this.effects.get("vignette"),this.effects.get("noise")].reduce(Tg,[]);if(t.length>0&&(this.effectPass=new Cc(this.camera,...t),this.effectPass.renderToScreen=!1,this.effectComposer.addPass(this.effectPass),this._needsDOFResize&&this.effects.get("depthOfField")?.enabled&&void 0!==window)){let e=this.renderer.viewportWidth,t=this.renderer.viewportHeight;this.renderer.setSize(e-1,t-1),this.renderer.setSize(e,t)}}this.effectComposer.addPass(this.stylesOverlayPass),this.effectComposer.addPass(this.uiOverlayPass),this.effectComposer.addPass(this.sceneTransitionPass),this.effectComposer.addPass(this.helperPass),this.effectComposer.addPass(this.logoOverlayPass)}_initCopyPass(){if(this._savePass)return;let e=new tQ;this.renderer.getDrawingBufferSize(e),this._rt=new id(e.x,e.y,{depthBuffer:!1,stencilBuffer:!1,wrapS:1e3,wrapT:1e3}),this._rt.samples=0,this._savePass=new E5(this._rt,!1),this._savePass.renderToScreen=!1}setCopyPass(e){this._rt=e,this._savePass=new E5(this._rt,!1),this.renderToScreen=!1}get renderToScreen(){return this._renderToScreen}set renderToScreen(e){if(this._renderToScreen===e)return;let t=this.effectComposer;t&&(!0===e?t.removePass(this._savePass):t.addPass(this._savePass),this._renderToScreen=e,this.updateRenderToScreen())}set sceneTransitionFromTexture(e){e!==this.sceneTransitionPass.texture&&(null!==e?this.sceneTransitionPass.enabled=!0:(this.sceneTransitionPass.enabled=!1,this.updateRenderToScreen()),this.sceneTransitionPass.texture=e)}setWatermark(e){this.logoOverlayPass.enabled=null!==e,e&&(this.logoOverlayPass.texture=e)}get texture(){return this._rt&&this._rt.texture}get renderTarget(){return this._rt}updatePostprocessing(e){let{enabled:t,...i}=e,r=!1;for(let e of(t!==this.postprocessingState.enabled&&(r=!0),Object.entries(i))){let t=e[1],i=this.effects.get(e[0]);if(i)for(let[e,s]of(i.enabled!==t.enabled&&(r=!0),i.enabled=t.enabled,Object.entries(t)))"blendFunction"===e?i.blendFunction=Tv(s):i[e]=s}this.postprocessingState=e,r&&this._initPasses()}render(){this.effectComposer.render(this.clock.getDelta())}setScissor(e,t,i,r){e instanceof ic?(this.effectComposer.inputBuffer.scissor.set(e.x,e.y,e.z,e.w),this.effectComposer.outputBuffer.scissor.set(e.x,e.y,e.z,e.w)):(this.effectComposer.inputBuffer.scissor.set(e,t,i,r),this.effectComposer.outputBuffer.scissor.set(e,t,i,r));let s=this.renderer.getPixelRatio();this.effectComposer.inputBuffer.scissor.multiplyScalar(s),this.effectComposer.outputBuffer.scissor.multiplyScalar(s),this.renderer.setScissor(e,t,i,r)}setScissorTest(e){this.effectComposer.inputBuffer.scissorTest=e,this.effectComposer.outputBuffer.scissorTest=e,this.renderer.setScissorTest(e)}setViewport(e,t,i,r){e instanceof ic?(this.effectComposer.inputBuffer.viewport.copy(e),this.effectComposer.outputBuffer.viewport.copy(e)):(this.effectComposer.inputBuffer.viewport.set(e,t,i,r),this.effectComposer.outputBuffer.viewport.set(e,t,i,r))}resize(e,t,i){if(this.effectComposer.setSize(e,t,i),this._rt){let i=this.renderer.getPixelRatio();this._rt.setSize(e*i,t*i)}}dispose(){this.uvEffectPass?.dispose(),this.effectPass?.dispose(),this.effectComposer.dispose()}},Tx=e=>` 6261 6262// PCSS implementation based on: 6263// https://www.gamedev.net/articles/programming/graphics/contact-hardening-soft-shadows-made-fast-r4906/ 6264// NOTE: This number affects how big the shadow blur can 6265// possibly get. Bigger number == bigger blur, but less precise results 6266 6267const float gPenumbraFilterSize = 80.0; 6268const int gPenumbraSamples = ${e}; 6269const int gShadowSamples = ${e}; 6270const float gShadowSamplesRpc = 1.0f / float(gShadowSamples); 6271 6272#ifdef USE_SHADOWMAP 6273 #if NUM_DIR_LIGHT_SHADOWS > 0 6274 6275 uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ]; 6276 varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; 6277 6278 struct DirectionalLightShadow { 6279 float shadowBias; 6280 float shadowNormalBias; 6281 float shadowRadius; 6282 vec2 shadowMapSize; 6283 }; 6284 6285 uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; 6286 6287 #endif 6288
6289 #if NUM_SPOT_LIGHT_SHADOWS > 0 6290 6291 uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ]; 6292 varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_SHADOWS ]; 6293 6294 struct SpotLightShadow { 6295 float shadowBias; 6296 float shadowNormalBias; 6297 float shadowRadius; 6298 vec2 shadowMapSize; 6299 }; 6300 6301 uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; 6302 6303 #endif 6304 6305 #if NUM_POINT_LIGHT_SHADOWS > 0 6306 6307 uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ]; 6308 varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; 6309 6310 struct PointLightShadow { 6311 float shadowBias; 6312 float shadowNormalBias; 6313 float shadowRadius; 6314 vec2 shadowMapSize; 6315 float shadowCameraNear; 6316 float shadowCameraFar; 6317 }; 6318 6319 uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; 6320 6321 #endif 6322 6323 /* 6324 #if NUM_RECT_AREA_LIGHTS > 0 6325 6326 // TODO (abelnation): create uniforms for area light shadows 6327 6328 #endif 6329 */ 6330 6331float computePenumbra(int index, sampler2D shadowMap, float temporalAngle, float texelSize, vec2 uv, float compare, float texelScalar, float shadowRadius) 6332{ 6333 float penumbra = 1.0; 6334 float blockerDepthAvg = 0.0; 6335 float blockerCount = 0.0; 6336 6337 #pragma unroll_loop_start 6338 for(int i = 0; i < gPenumbraSamples; i ++) 6339 { 6340 vec2 offset = (vogelDiskSample(i, gShadowSamples, temporalAngle) * texelSize) * texelScalar; 6341 float depth = unpackRGBAToDepth( texture2D( shadowMap, uv + offset ) ); 6342 6343 if(depth < compare + 0.0001) 6344 { 6345 blockerDepthAvg += depth; 6346 blockerCount++; 6347 } 6348 } 6349 #pragma unroll_loop_end 6350 6351 if (blockerCount > 0.0) 6352 { 6353 blockerDepthAvg /= blockerCount; 6354 6355 // Compute penumbra 6356 penumbra = (compare - blockerDepthAvg) / (blockerDepthAvg); 6357 penumbra *= penumbra; 6358 penumbra *= 200.0 * penumbraSize[min(index, 5 - 1)]; // Magic number that affects how quickly the penumbra grows 6359 6360 return clamp(penumbra, 0.00, 1.0); 6361 } 6362 return 0.0; 6363} 6364 6365float vogelShadow(int index, sampler2D shadowMap, vec2 uv, float texelSize, float compare, float shadowRadius) 6366{ 6367 float shadow = 0.0f; 6368 6369 // NOTE: When using TAA, we should use screen space interleaved gradient noise 6370 vec2 halton = haltonSequence[frameIndex]; 6371 float temporalOffset = getNoiseInterleavedGradient(gl_FragCoord.xy + halton); 6372 float temporalAngle = temporalOffset * PI2; 6373 6374 float texelScalar = (gPenumbraFilterSize) / (texelSize * 1024.); 6375 float penumbra = computePenumbra(index, shadowMap, temporalAngle, texelSize, uv, compare, texelScalar, shadowRadius); 6376 if (penumbra == -1.0) { 6377 return 1.0; 6378 } 6379 6380 #pragma unroll_loop_start 6381 for (int i = 0; i < gShadowSamples; i++) 6382 { 6383 vec2 vogelSample = vogelDiskSample(i, gShadowSamples, temporalAngle) * texelSize; 6384 // Overall blurring offset 6385 vec2 offset = vogelSample * (shadowRadius * 2.); 6386 6387 // Penumbra offset 6388 offset += vogelSample * (penumbra * texelScalar); 6389 6390 shadow += step( compare, unpackRGBAToDepth( texture2D( shadowMap, uv + offset ) ) ); 6391 } 6392 #pragma unroll_loop_end 6393 6394 return shadow * gShadowSamplesRpc; 6395} 6396 6397 6398 float texture2DCompare( sampler2D depths, vec2 uv, float compare ) { 6399 6400 return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) ); 6401 6402 } 6403 6404 vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) { 6405 6406 return unpackRGBATo2Half( texture2D( shadow, uv ) ); 6407 6408 } 6409 6410 float VSMShadow (sampler2D shadow, vec2 uv, float compare ){ 6411 6412 float occlusion = 1.0; 6413 6414 vec2 distribution = texture2DDistribution( shadow, uv ); 6415 6416 float hard_shadow = step( compare , distribution.x ); // Hard Shadow 6417 6418 if (hard_shadow != 1.0 ) { 6419 6420 float distance = compare - distribution.x ; 6421 float variance = max( 0.00000, distribution.y * distribution.y ); 6422 float softness_probability = variance / (variance + distance * distance ); // Chebeyshevs inequality 6423 softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); // 0.3 reduces light bleed 6424 occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 ); 6425 6426 } 6427 return occlusion; 6428 6429 } 6430 6431 float getShadow( int i, sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) { 6432 6433 float shadow = 1.0; 6434 6435 shadowCoord.xyz /= shadowCoord.w; 6436 shadowCoord.z += shadowBias; 6437 6438 // if ( something && something ) breaks ATI OpenGL shader compiler 6439 // if ( all( something, something ) ) using this instead 6440 6441 bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 ); 6442 bool inFrustum = all( inFrustumVec ); 6443 6444 bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 ); 6445 6446 bool frustumTest = all( frustumTestVec ); 6447 6448 if ( frustumTest ) { 6449 6450 #if defined( SHADOWMAP_TYPE_PCF ) 6451 6452 vec2 texelSize = vec2( 1.0 ) / shadowMapSize; 6453 return vogelShadow(i, shadowMap, shadowCoord.xy, texelSize.x, shadowCoord.z, shadowRadius ); 6454 6455 #elif defined( SHADOWMAP_TYPE_PCF_SOFT ) 6456 6457 vec2 texelSize = vec2( 1.0 ) / shadowMapSize; 6458 float dx = texelSize.x; 6459 float dy = texelSize.y; 6460 6461 vec2 uv = shadowCoord.xy;
6462 vec2 f = fract( uv * shadowMapSize + 0.5 ); 6463 uv -= f * texelSize; 6464 6465 shadow = ( 6466 texture2DCompare( shadowMap, uv, shadowCoord.z ) + 6467 texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) + 6468 texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) + 6469 texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) + 6470 mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), 6471 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ), 6472 f.x ) + 6473 mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), 6474 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ), 6475 f.x ) + 6476 mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), 6477 texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ), 6478 f.y ) + 6479 mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), 6480 texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ), 6481 f.y ) + 6482 mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), 6483 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ), 6484 f.x ), 6485 mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), 6486 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ), 6487 f.x ), 6488 f.y ) 6489 ) * ( 1.0 / 9.0 ); 6490 6491 #elif defined( SHADOWMAP_TYPE_VSM ) 6492 6493 shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z ); 6494 6495 #else // no percentage-closer filtering: 6496 6497 shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ); 6498 6499 #endif 6500 6501 } 6502 6503 return shadow; 6504 6505 } 6506 6507 // cubeToUV() maps a 3D direction vector suitable for cube texture mapping to a 2D 6508 // vector suitable for 2D texture mapping. This code uses the following layout for the 6509 // 2D texture: 6510 // 6511 // xzXZ 6512 // y Y 6513 // 6514 // Y - Positive y direction 6515 // y - Negative y direction 6516 // X - Positive x direction 6517 // x - Negative x direction 6518 // Z - Positive z direction 6519 // z - Negative z direction 6520 // 6521 // Source and test bed: 6522 // https://gist.github.com/tschw/da10c43c467ce8afd0c4 6523 6524 vec2 cubeToUV( vec3 v, float texelSizeY ) { 6525 6526 // Number of texels to avoid at the edge of each square 6527 6528 vec3 absV = abs( v ); 6529 6530 // Intersect unit cube 6531 6532 float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) ); 6533 absV *= scaleToCube; 6534 6535 // Apply scale to avoid seams 6536 6537 // two texels less per square (one texel will do for NEAREST) 6538 v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY ); 6539 6540 // Unwrap 6541 6542 // space: -1 ... 1 range for each square 6543 // 6544 // #X## dim := ( 4 , 2 ) 6545 // # # center := ( 1 , 1 ) 6546 6547 vec2 planar = v.xy; 6548 6549 float almostATexel = 1.5 * texelSizeY; 6550 float almostOne = 1.0 - almostATexel; 6551 6552 if ( absV.z >= almostOne ) { 6553 6554 if ( v.z > 0.0 ) 6555 planar.x = 4.0 - v.x; 6556 6557 } else if ( absV.x >= almostOne ) { 6558 6559 float signX = sign( v.x ); 6560 planar.x = v.z * signX + 2.0 * signX; 6561 6562 } else if ( absV.y >= almostOne ) { 6563 6564 float signY = sign( v.y ); 6565 planar.x = v.x + 2.0 * signY + 2.0; 6566 planar.y = v.z * signY - 2.0; 6567 6568 } 6569 6570 // Transform to UV space 6571 6572 // scale := 0.5 / dim 6573 // translate := ( center + 0.5 ) / dim 6574 return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 ); 6575 6576 } 6577 6578 float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) { 6579 6580 float shadow = 1.0; 6581 vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) ); 6582 6583 // for point lights, the uniform @vShadowCoord is re-purposed to hold 6584 // the vector from the light to the world-space position of the fragment. 6585 vec3 lightToPosition = shadowCoord.xyz; 6586 6587 // dp = normalized distance from light to fragment position 6588 float compare = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); // need to clamp? 6589 compare += shadowBias; 6590 6591 // bd3D = base direction 3D 6592 vec3 bd3D = normalize( lightToPosition ); 6593 6594 vec2 halton = haltonSequence[frameIndex]; 6595 float temporalOffset = getNoiseInterleavedGradient(gl_FragCoord.xy + halton); 6596 float temporalAngle = temporalOffset * PI2; 6597 6598 #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_VSM ) 6599 for (int i = 0; i < gShadowSamples; i++) { 6600 vec2 vogelSample = vogelDiskSample(i, gShadowSamples, temporalAngle) * texelSize; 6601 6602 // Overall blurring offset 6603 vec3 offset = vec3(vogelSample.x, vogelSample.y, -vogelSample.x) * (shadowRadius + 5.); 6604 6605 // NOTE: Removed for now 6606 // Penumbra offset 6607 //offset += vec3(vogelSample.x, vogelSample.y, vogelSample.y) * (penumbra * gPenumbraFilterSize); 6608 6609 shadow += texture2DCompare( shadowMap, cubeToUV( bd3D + offset, texelSize.y ), compare ); 6610 6611 } 6612 return shadow * gShadowSamplesRpc; 6613 6614 #elif defined( SHADOWMAP_TYPE_PCF_SOFT ) 6615 for (int i = 0; i < 16; i++) { 6616 vec2 vogelSample = vogelDiskSample(i, gShadowSamples, temporalAngle) * texelSize; 6617 6618 // Overall blurring offset 6619 vec3 offset = vec3(vogelSample.x, vogelSample.y, -vogelSample.x) * (shadowRadius + 5.); 6620 6621 shadow += texture2DCompare( shadowMap, cubeToUV( bd3D + offset, texelSize.y ), compare ); 6622 6623 } 6624 return shadow * (1.0 / 16.0); 6625 #else // no percentage-closer filtering 6626 6627 return texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), compare ); 6628 6629 #endif 6630 6631 } 6632 6633#endif 6634`,Tb=sd.lights_fragment_begin,Tw=sd.shadowmask_pars_fragment,TS=null,T_=e=>{switch(e){case"low":return 8;case"medium":default:return 16;case"high":return 32}},TA=(e="medium")=>{if(TS===e)return!1;TS=e;let t=T_(e);sd.shadowmap_pars_fragment=Tx(t);let i=Tb.slice();i=(i=i.replace("getShadow( spotShadowMap[ i ]","getShadow( UNROLLED_LOOP_INDEX + 3, spotShadowMap[ i ]")).replace("getShadow( directionalShadowMap[ i ]","getShadow( UNROLLED_LOOP_INDEX, directionalShadowMap[ i ]"),sd.lights_fragment_begin=i;let r=Tw.slice();return r=r.replaceAll("getShadow(","getShadow( UNROLLED_LOOP_INDEX, "),sd.shadowmask_pars_fragment=r,!0},TM=new r5({vertexShader:` 6635attribute vec3 randomColor; 6636varying vec3 vNormal; 6637flat out vec3 vColor; 6638#include <skinning_pars_vertex> 6639#include <morphtarget_pars_vertex> 6640 6641void main() 6642{ 6643#include <beginnormal_vertex> 6644#include <morphnormal_vertex> 6645#include <skinbase_vertex> 6646#include <skinnormal_vertex> 6647vec3 transformed = vec3(position); 6648#include <morphtarget_vertex> 6649#include <skinning_vertex> 6650 6651vNormal = normal; 6652vColor = randomColor; 6653gl_Position = projectionMatrix * (modelViewMatrix * vec4(transformed, 1.0)); 6654} 6655`,fragmentShader:` 6656uniform float depthContrast; 6657varying vec3 vNormal; 6658flat in vec3 vColor; 6659void main() 6660{ 6661vec3 normal = (normalize(vNormal)).rgb; 6662 6663float contrastDepth = (gl_FragCoord.z - 0.5) * depthContrast + 0.5; 6664 6665vec3 resultColor = mix(mix(vColor, normal, 0.2), vec3(contrastDepth), 0.4); 6666gl_FragColor = vec4(resultColor, vColor.r); 6667gl_FragColor = vec4(resultColor, vColor.r); 6668} 6669`,uniforms:{depthContrast:{value:1}}}),TE=new ih,TC=new tQ,TT=class extends ny{constructor(e){super(e),this._pixelRatio=this.getPixelRatio(),this.viewportWidth=1,this.viewportHe
6669ight=1,this.resolution=new tQ,this.dummyCamera=new Eg,this.sceneTransitionDuration=0,this.sceneTransitionTimeRemaining=-1,this.isXRCopyPassSet=!1,this.clear=(e=!0,t=!0,i=!0)=>{let r=this.getContext(),s=0;e&&(s|=r.COLOR_BUFFER_BIT),t&&(s|=r.DEPTH_BUFFER_BIT),i&&(s|=r.STENCIL_BUFFER_BIT),r.clear(s),r.clearBufferfv(r.COLOR,1,[0,0,0,1])},this.pipeline=new Ty(this,e?.needsDOFResize??!1),this.autoClear=!1;let t=this.setPixelRatio.bind(this),i=this.setSize.bind(this);this.shadowMap.enabled=!0,this.shadowMap.type=1,this.dummyCamera.matrixAutoUpdate=!1,this.domElement.removeAttribute("data-engine");let r=this.getContext();if(r&&"drawingBufferColorSpace"in r)try{r.drawingBufferColorSpace="display-p3"}catch(e){console.warn(e)}this.setPixelRatio=e=>{this._pixelRatio!==e&&(this._pixelRatio=e,t(e))},this.setSize=(e,t,r=!0)=>{(this.viewportWidth!==e||this.viewportHeight!==t)&&(this.viewportWidth=e,this.viewportHeight=t,i(e,t,r),this.normalRenderTarget?.setSize(e*this._pixelRatio,t*this._pixelRatio),this._resizeTransmission(e,t),this.transmissionDepthTarget?.setSize(e*this._pixelRatio/2,t*this._pixelRatio/2),this.pipeline.resize(e,t,r))},this._superDispose=this.dispose,this.dispose=this._currentDispose}createAORenderTarget(){void 0===this.aoRenderTarget&&(this.aoRenderTarget=new id(this.viewportWidth*this._pixelRatio,this.viewportHeight*this._pixelRatio,{generateMipmaps:!1,minFilter:1006,magFilter:1006,wrapS:1001,wrapT:1001,depthBuffer:!1}))}_resizeTransmission(e,t){this.transmissionRenderTarget?.setSize(e*this._pixelRatio/(this.hdTransmission?1:2),t*this._pixelRatio/(this.hdTransmission?1:2)),this.aoRenderTarget?.setSize(e*this._pixelRatio/1,t*this._pixelRatio/1)}get hdTransmission(){return 1===_k.transmissionLod.value}set hdTransmission(e){_k.transmissionLod.value=!0===e?1:2,this._resizeTransmission(this.viewportWidth,this.viewportHeight)}createTransmissionRenderTarget(){void 0===this.transmissionRenderTarget&&(this.transmissionRenderTarget=new id(this.viewportWidth*this._pixelRatio/(this.hdTransmission?1:2),this.viewportHeight*this._pixelRatio/(this.hdTransmission?1:2),{generateMipmaps:!0,minFilter:1008,magFilter:1006,wrapS:1001,wrapT:1001,depthBuffer:!1}),this.transmissionDepthTarget=new id(this.viewportWidth*this._pixelRatio/2,this.viewportHeight*this._pixelRatio/2,{minFilter:1003,magFilter:1003,depthBuffer:!1}))}createNormalRenderTarget(){void 0===this.normalRenderTarget&&(this.normalRenderTarget=new id(this.viewportWidth*this._pixelRatio,this.viewportHeight*this._pixelRatio,{generateMipmaps:!1,minFilter:1003,magFilter:1003,type:1015,depthTexture:new nf(this.viewportWidth*this._pixelRatio,this.viewportHeight*this._pixelRatio)}))}renderNormal(e,t,i){this.normalRenderTarget&&(this.setClearColor(0),i.layers.enable(8),i.layers.disable(0),i.layers.disable(3),t.traverseEntity(e=>{e.layers.isEnabled(8)&&(e.copyPreviousMatrix=!1)}),this.setRenderTarget(this.normalRenderTarget),this.clear(),i instanceof Eg?TM.uniforms.depthContrast.value=(i.far-i.near)/1e4:TM.uniforms.depthContrast.value=1,t.overrideMaterial=TM,this.render(t,i),this.setClearColor(t.bgColor,t.bgColor.a),this.setRenderTarget(null),t.overrideMaterial=e.wireframeState?DN:null,i.layers.enable(0),i.layers.enable(3),t.traverseEntity(e=>{e.layers.isEnabled(8)&&(e.copyPreviousMatrix=!0)}))}renderSplineSceneWithDummyCamera(e,t,i=1){this.dummyCamera.updateCameraState(t.dataPatched),this.dummyCamera.matrix.copy(t.matrixWorld);let r=t.height,s=t.width,a=this.viewportWidth/this.viewportHeight;s<r?s=r*a:r=s/a,this.dummyCamera.setViewplaneSize(s,r);for(let t=0;t<i;t++)this.renderSplineScene(e,this.dummyCamera)}renderSplineScene(e,t,{sceneHelpers:i=this.sceneHelpers,sceneHelpersOnTop:r=this.sceneHelpersOnTop,overrideTransmission:s,overrideNormal:a}={}){let o=e instanceof DU?e.activePage:e,l=o.visible;o.visible=!0;let h=o.scene;this.xr.enabled&&(!1===this.isXRCopyPassSet&&null!==this.getRenderTarget()&&(this.pipeline.setCopyPass(this.getRenderTarget()),this.isXRCopyPassSet=!0),this.xr.updateCamera(t)),this.setClearColor(o.bgColor,o.bgColor.a),o.penumbraSizeArray.forEach((e,t)=>{_k.penumbraSize.value[t]=e}),_k.pixelRatioNode.value=this.getPixelRatio(),0!==this.resolution.x&&0!==this.resolution.y?_k.resolution.value.set(this.resolution.x,this.resolution.y):_k.resolution.value.set(this.viewportWidth*this._pixelRatio,this.viewportHe
6669ight*this._pixelRatio),void 0!==a?(_k.normalRenderTarget.value=a,_k.normalRenderTargetDepth.value=TE):h.needsNormal()&&(this.createNormalRenderTarget(),_k.normalRenderTarget.value=this.normalRenderTarget.texture,_k.normalRenderTargetDepth.value=this.normalRenderTarget.depthTexture,this.renderNormal(h,o,t));let c=o.data.ao,d=c.occlusion;if(d&&(this.createAORenderTarget(),_k.aoRenderTarget.value=this.aoRenderTarget.texture),_k.aoEnabled.value=d,this.pipeline.setAmbientOcclusionParams(c.occlusion,c.radius,c.bias,o.aoColor,null!==o.fog,o.backupFog.near,o.backupFog.far,c.aoFullRes&&!uX),this.pipeline.aoPass.setBlueNoiseTexture(this.pipeline.blueNoiseTexture),this.pipeline.isUIOverlayEnabled&&o.uiCanvas?.enabled&&o.uiCanvas.texture&&o.uiCanvas.texture.image.width>0){let e=this.getSize(TC),t=this.getPixelRatio();(o.uiCanvas.width!==this.viewportWidth||o.uiCanvas.height!==this.viewportHeight||o.uiCanvas.dpr!==t)&&o.uiCanvas.applySize({width:this.viewportWidth,height:this.viewportHeight},t),o.uiCanvas.render(this),this.pipeline.uiOverlayPass.uiCanvas=o.uiCanvas,this.pipeline.uiOverlayPass.enabled=!0,this.pipeline.uiOverlayPass.setResolution(e.x,e.y,t),this.pipeline.updateRenderToScreen()}else this.pipeline.uiOverlayPass.enabled=!1,this.pipeline.updateRenderToScreen();if(this.pipeline.logoOverlayPass.enabled){let e=this.getSize(TC),t=this.getPixelRatio();this.pipeline.logoOverlayPass.uniforms.uResolution.value.set(e.x,e.y),this.pipeline.logoOverlayPass.uniforms.uDPR.value=t}let u=!1;if(void 0!==s)_k.transmissionRenderTarget.value=s,_k.transmissionRenderTargetDepth.value=TE,this.pipeline.setTransmissionPassEnabled(!1);else{var p,f;let e=h.needsTransmission();e&&(void 0===this.transmissionRenderTarget&&(u=!0),this.createTransmissionRenderTarget(),_k.transmissionRenderTarget.value=this.transmissionRenderTarget.texture,_k.aspectRatio.value=(p=this.viewportWidth)>=(f=this.viewportHeight)?new tQ(f/p,1):new tQ(1,p/f),_k.transmissionRenderTargetDepth.value=this.transmissionDepthTarget.texture),this.pipeline.setTransmissionPassEnabled(e)}t.layers.enable(3),t.layers.enable(8),this.pipeline.sceneHelpers=i,this.pipeline.sceneHelpersOnTop=r,this.pipeline.scene=o,this.pipeline.camera=t,u&&this.pipeline.transmissionPass.updatePasses(this),this.pipeline.postprocessingState===o.postprocessing||(this.pipeline.updatePostprocessing(o.postprocessing),i||r||this.pipeline.disableHelpers()),void 0!==this.clearAlphaOverride&&this.setClearAlpha(this.clearAlphaOverride),h.shapeBlendIntances.forEach(e=>{e.onBeforeShadowPass(this)}),o.overrideMaterial=h.wireframeState?DN:null,this.pipeline.render(),_k.frameIndex.value=(_k.frameIndex.value+1)%16,t instanceof Eg&&t.copyHistory(),o.visible=l}renderFromSceneForSceneTransitionPass(e,t,i){this.pipeline.renderToScreen=!1,this.pipeline.renderTarget,this.renderSplineScene(e,t),this.pipeline.sceneTransitionFromTexture=this.pipeline.renderTarget.texture,this.sceneTransitionDuration=i,this.sceneTransitionTimeRemaining=i,this.pipeline.renderToScreen=!0;let r=this.pipeline.sceneTransitionPass.uniforms;r.uDPR.value=window.devicePixelRatio,r.uResolution.value.set(this.domElement.width,this.domElement.height).divideScalar(window.devicePixelRatio)}_currentDispose(){this._superDispose(),this.pipeline.dispose(),this.aoRenderTarget?.dispose(),this.transmissionRenderTarget?.dispose(),this.transmissionDepthTarget?.dispose(),this.normalRenderTarget?.dispose(),this.normalRenderTarget?.depthTexture?.dispose()}},TP=class extends M7(lq){constructor(e,t=15,i=10066329){super(e,t,i),this.object=e,this.added=!1,this.name=`DirectionalLightHelper: ${e.uuid}`}raycast(e,t){Er(this.object,TP.geometryHelper,e,t)}},TD=class extends M7(lj){constructor(e,t=15,i=6710886){super(e,t,i),this.object=e,this.name=`PointLightHelper: ${e.uuid}`}raycast(e,t){Er(this.object,TD.geometryHelper,e,t)}},TI=class extends M7(lV){constructor(e,t=6710886){super(e,t),this.object=e,this.name=`SpotLightHelper: ${e.uuid}`}raycast(e,t){Er(this.object,TI.geometryHelper,e,t)}update(){if(void 0!==this.object){let e=TI._vector,t=this.object.distance?this.object.distance:1e3,i=t*Math.tan(this.object.angle);this.cone.scale.set(i,i,t),e.setFromMatrixPosition(this.object.target.matrixWorld),this.cone.lookAt(e);let r=void 0!==this.color?this.color:this.light.color;if(this.cone.material instanceof Array)for(let e=0,t=this.cone.material.length;e<t;e++)this.cone.material[e].color.set(r);else this.cone.material.color.set(r)}}},TO=TI;TO._vector=new iv;var TR=class extends nd{constructor(){super(),this.caretIndex=0,this._caretVisibleAlpha=1,this._selectionVisibleAlpha=.3,this.current={start:0,end:void 0},this.matrixAutoUpdate=!1,this.caretMesh=new rK(new sc(1,1),new rS({transparent:!0,opacity:0,side:2})),this.add(this.caretMesh),this.selectionMesh=new rK(new sc(1,1),new rS({color:2857471,transparent:!0,depthTest:!1,depthWrite:!1,opacity:0,side:2})),this.add(this.selectionMesh),this.hide()}get caretHeight(){return this.object?.AD??0}show(e){this.visible=!0,this.object=e,this.caretMesh.scale.set(1,this.caretHeight,1),this.caretMesh.position.y=-(.5*this.caretHeight),this.setCaretPosition(this.caretIndex),this.update()}hide(){this.visible=!1}update(){if(void 0===this.object)return;this.updateHelperMatrix();let{depth:e}=this.object.geometry.userData.parameters;this.caretMesh.position.z=e,this.selectionMesh.position.z=e}updateHelperMatrix(){if(void 0===this.object)return;let e=this.object,t=e.parent;for(let i of(null!==t&&t.updateWorldMatrix(!0,!1),e.matrixAutoUpdate&&e.updateMatrix(),null!==t?(this.matrixWorld.multiplyMatrices(t.matrixWorld,e.hiddenMatrix),this.matrixWorld.multiplyMatrices(this.matrixWorld,e.matrix)):this.matrixWorld.multiplyMatrices(e.hiddenMatrix,e.matrix),this.matrix.copy(this.matrixWorld),this.children))i.matrixWorld.copy(this.matrixWorld);e.updateWorldMatrix(!0,!0)}setCaretColor(e){let t=this.caretMesh.material;t.color.setRGB(e.r,e.g,e.b);let i=this._caretVisibleAlpha===t.opacity;this._caretVisibleAlpha=e.a,i&&(t.opacity=this._caretVisibleAlpha)}setSelectionColor(e){this.selectionMesh.material.color.setRGB(e.r,e.g,e.b)}setCaretPosition(e,t={}){if(void 0===this.object)return;this.caretIndex=e;let i=this.object.wrappedText,[r,s]=TB(i,e),[a,o]=e>0?TB(i,e-1):[null,null];(e>0&&i.length?i[a].charAt(o):null)===` 6670`&&(r++,s=0),this.current.start=e,this.current.end=void 0;let[l,h]=TL(this.object,r,s),{AD:c,descender:d}=this.object,{width:u,height:p,depth:f}=this.object.geometry.userData.parameters;this.caretMesh.scale.set(1,this.caretHeight,1),this.caretMesh.position.set(l-.5*("string"==typeof u?0:u),h+(d+.5*c)+.5*("string"==typeof p?0:p),f),this.hideSelectionMesh(),this.showCaretMesh()}setSelection(e,t){if(void 0===this.object)return;let i=this.object.wrappedText;this.current.start=e,this.current.end=t;let r=[],s=[],a=function(e,t,i){let[r,s]=TB(e,t),[a,o]=TB(e,i),l=[];s>=e[r].length&&(r++,s=0);for(let t=r;t<=a;t++){let i=e[t],h=t===r?s:0,c=t===a?o:i.length;l.push([t,h,c])}return l}(i,e,t),{lineHeight:o,AD:l,descender:h}=this.object,c=h+.5*l-.5*o;for(let[e,t,i]of a)if(t!==i){let[a,l]=TL(this.object,e,t),[h,d]=TL(this.object,e,i);l+=c,d+=c+o;let u=r.length/3;r.push(a,l,0),r.push(h,l,0),r.push(h,d,0),r.push(a,d,0),s.push(u+0,u+1,u+2),s.push(u+2,u+3,u+0)}let d=new rz;d.setIndex(s),d.setAttribute("position",new rT(r,3));let{width:u,height:p,depth:f}=this.object.geometry.userData.parameters;this.selectionMesh.geometry.dispose(),this.selectionMesh.geometry=d,this.selectionMesh.position.x=-(.5*("string"==typeof u?0:u)),this.selectionMesh.position.y=.5*("string"==typeof p?0:p),this.selectionMesh.position.z=f,this.showSelectionMesh(),this.hideCaretMesh()}getSelectionFromPosition(e,t,i="previous"){if(void 0===this.object||void 0===this.object.font)return;let r=this.object.wrappedText,s=r.length,a=this.object.lineHeight,o=s*a,{height:l,verticalAlign:h}=this.object.geometry.userData.parameters,c="string"==typeof l?0:l,d=0;
66703===h?d=c-o:2===h&&(d=.5*c-.5*o);let u=Math.min(Math.floor(Math.max(Math.min(-t-d,o),0)/a),s-1),p=this.object.charCoords[u],f=this.object.charWidths[u],m=0,g=!1;if("previous"===i){for(let t=0;t<p.length;t++)if(p[t][0]+.5*f[t]-e>0){m=t,g=!0;break}}else if("closest"===i){let t=1/0;for(let i=0;i<p.length;i++){let r=Math.abs(p[i][0]+.5*f[i]-e);r<t&&(t=r,m=i,g=!0)}}else for(let t=0;t<p.length;t++){let i=p[t][0],r=p[t][0]+f[t];if(e>=i&&e<r){m=t,g=!0;break}}return g||(m=p.length),{index:this.getGlobalIndexFromLineAndCharIndexes(r,u,m),lineIndex:u,characterIndex:m}}getGlobalIndexFromLineAndCharIndexes(e,t,i){return e.slice(0,t).reduce((e,t)=>e+=t.length,0)+i}showSelectionMesh(){this.selectionMesh.material.opacity=this._selectionVisibleAlpha}hideSelectionMesh(){this.selectionMesh.material.opacity=0}showCaretMesh(){this.caretMesh.material.opacity=this._caretVisibleAlpha}hideCaretMesh(){this.caretMesh.material.opacity=0}};function TL(e,t,i){let{charCoords:r,charWidths:s,initialOffsetY:a,lineHeight:o}=e;if(r[t]&&0===r[t].length||0===r.length){let i=0,{horizontalAlign:r}=e.data.geometry,s=e.wrappedText,{width:l}=e.geometry.userData.parameters;return 1===s.length&&0===s[0].length&&(3===r?i=.5*l:2===r&&(i=l)),[i,a-o*t]}let l=r[t];if(void 0===l||0===l.length)return[0,0];let[h,c]=l[Math.min(i,l.length-1)];return i>=l.length&&(h+=s[t][i-1]),[h,c]}function TB(e,t){let i=0;for(let r=0;r<e.length;r++){let s=e[r],a=t-i;if(a<=s.length)return[r,a];i+=s.length}return[Math.max(0,e.length-1),e[e.length-1]?.length??0]}var Tz=class extends Ew(lp,TP){constructor(e,t,i){super(),this.super_Entity(e,t),this.castShadow=!0,this.shadow.mapSize.width=2048,this.shadow.mapSize.height=2048,this.shadow.normalBias=1,this.layers.enable(3);let r=this.shadow.camera;r.top=1250,r.bottom=-1250,r.right=1250,r.left=-1250,r.near=-1e4,r.far=2500;let s=new lQ(this.shadow.camera);s.visible=!1,this.gizmos.shadowmap=s}update(){for(let e in this.shadow.camera.updateProjectionMatrix(),this.gizmos){let t=this.gizmos[e];t instanceof lQ&&t.update()}}updateMatrixWorld(e){super.updateMatrixWorld(e),this.objectHelper&&this.objectHelper.update()}updateState(e,t){var i;this.updateState_Light(e,t);let r=void 0!==e.depth&&e.depth!==this.shadow.camera.far||void 0!==e.size&&e.size/2!==this.shadow.camera.right;void 0!==e.size&&(i=e.size,this.shadow.camera.right=i/2,this.shadow.camera.left=-i/2,this.shadow.camera.top=i/2,this.shadow.camera.bottom=-i/2,this.shadow.needsUpdate=!0),void 0!==e.shadowRadius&&(this.shadow.radius=e.shadowRadius),void 0!==e.shadowResolution&&(this.shadow.mapSize.set(e.shadowResolution,e.shadowResolution),this.shadow.map&&(this.shadow.map.dispose(),this.shadow.map=null)),void 0!==e.penumbraSize&&t.scene.markPenumbraSizeDirty(),r&&this.update()}},TF=new iv,TN=new iv,Tk=new ig,TU=class extends Ew(ln,TO){constructor(e,t,i){super(),this.super_Entity(e,t),this.castShadow=!0,this.shadow.mapSize.width=1024,this.shadow.mapSize.height=1024,this.shadow.normalBias=1,this.layers.enable(3);let r=this.shadow.camera;r.fov=2*tY.RAD2DEG*this.angle,r.aspect=1,r.near=100,r.far=2500;let s=new lQ(this.shadow.camera);s.visible=!1,this.gizmos.shadowmap=s,this.update()}update(){for(let e in this.shadow.camera.updateProjectionMatrix(),this.gizmos){let t=this.gizmos[e];t instanceof lQ&&t.update()}}updateMatrixWorld(e){super.updateMatrixWorld(e),TN.setFromMatrixPosition(this.matrixWorld),Tk.setFromRotationMatrix(this.matrixWorld),TF.copy(this.up).applyQuaternion(Tk).negate().multiplyScalar(this.distance),this.target.position.copy(TN).add(TF),this.target.updateMatrixWorld(),this.objectHelper&&this.objectHelper.update()}updateState(e,t){this.updateState_Light(e,t),void 0!==e.distance&&(this.distance=e.distance),void 0!==e.decay&&(this.decay=e.decay),void 0!==e.angle&&(this.angle=e.angle),void 0!==e.penumbra&&(this.penumbra=e.penumbra),void 0!==e.shadowRadius&&(this.shadow.radius=e.shadowRadius),void 0!==e.penumbraSize&&t.scene.markPenumbraSizeDirty(),void 0!==e.shadowResolution&&(this.shadow.mapSize.set(e.shadowResolution,e.shadowResolution),this.shadow.map&&(this.shadow.map.dispose(),this.shadow.map=null))}};function TV(e,t){return[[e[0][0]*t[0][0]+e[0][1]*t[1][0],e[0][0]
6670*t[0][1]+e[0][1]*t[1][1]],[e[1][0]*t[0][0]+e[1][1]*t[1][0],e[1][0]*t[0][1]+e[1][1]*t[1][1]]]}function Tj(e){return[[e[0][0],e[1][0]],[e[0][1],e[1][1]]]}(e=>{function t(e){return[e[0],e[3],e[1],e[4],e[2],e[5]]}e.identity=function(){return[1,0,0,0,1,0,0,0,1]},e.copy=function(t,i=e.identity()){for(let e=0,r=t.length;e<r;e++)i[e]=t[e];return i},e.create=function(t,i,r,s,a,o){return e.setAbcdef(e.identity(),t,i,r,s,a,o)},e.setAbcdef=function(e,t,i,r,s,a,o){return e[0]=t,e[1]=r,e[2]=a,e[3]=i,e[4]=s,e[5]=o,e},e.append=function(i,r){let[s,a,o,l,h,c]=t(i),[d,u,p,f,m,g]=t(r);return e.create(d*s+u*o,d*a+u*l,p*s+f*o,p*a+f*l,m*s+g*o+h,m*a+g*l+c)},e.prepend=function(i,r){let[s,a,o,l,h,c]=t(i),[d,u,p,f,m,g]=t(r),v=s,y=a,x=o,b=l;return(1!==d||0!==u||0!==p||1!==f)&&(v=s*d+a*p,y=s*u+a*f,x=o*d+l*p,b=o*u+l*f),e.create(v,y,x,b,h*d+c*p+m,h*u+c*f+g)},e.getAbcdef=t,e.invert=function(t){let[i,r,s,a,o,l]=e.getAbcdef(t),h=i*a-r*s;return e.create(a/h,-r/h,-s/h,i/h,(s*l-a*o)/h,-(i*l-r*o)/h)},e.apply=function([t,i],r){let[s,a,o,l,h,c]=e.getAbcdef(r);return[s*t+o*i+h,a*t+l*i+c]},e.applyInverse=function(t,i){let[r,s,a,o,l,h]=e.getAbcdef(i),c=1/(r*o+-(a*s)),[d,u]=t;return[o*c*d+-a*c*u+(h*a-l*o)*c,r*c*u+-s*c*d+(-h*r+l*s)*c]},e.scale=function(t,i,r=i){let[s,a,o,l,h,c]=e.getAbcdef(t);return e.setAbcdef(t,s*i,a*r,o*i,l*r,h*i,c*r),t},e.rotate=function(t,i){let r=Math.cos(i),s=Math.sin(i),[a,o,l,h,c,d]=e.getAbcdef(t);return e.setAbcdef(t,a*r-o*s,a*s+o*r,l*r-h*s,l*s+h*r,c*r-d*s,c*s+d*r),t},e.rotateAround=function(t,i,r){let[s,a]=r,o=e.translate(t,-s,-a);return o=e.rotate(o,i),o=e.translate(o,s,a)},e.translate=function(t,i,r){let[s,a,o,l,h,c]=e.getAbcdef(t);return e.setAbcdef(t,s,a,o,l,h+i,c+r),t},e.setTranslate=function(t,i,r){let[s,a,o,l]=e.getAbcdef(t);return e.setAbcdef(t,s,a,o,l,i,r),t},e.setPosition=function(t,i,r){let[s,a,o,l]=e.getAbcdef(t);return e.setAbcdef(t,s,a,o,l,i,r),t},e.getScale=function(t){let[i,r,s,a]=e.getAbcdef(t);return[Math.sqrt(i*i+r*r),Math.sqrt(s*s+a*a)]},e.getPosition=function(t){let[,,,,i,r]=e.getAbcdef(t);return[i,r]},e.getRotation=function(t,i){return e.decompose(t,i).rotation},e.decompose=function(t,i){let[r,s,a,o,l,h]=e.getAbcdef(t),{rotation:c,scale:d,shear:u}=function(e){let t,i,r,s,a,o,l,h,c,d,u,p;let[f,m,g]=(t=(e[0][0]+e[1][1])/2,i=(e[0][0]-e[1][1])/2,r=(e[1][0]+e[0][1])/2,a=Math.sqrt(t*t+(s=(e[1][0]-e[0][1])/2)*s),o=Math.sqrt(i*i+r*r),l=Math.atan2(r,i),c=((h=Math.atan2(s,t))-l)/2,u=[[Math.cos(d=(h+l)/2),Math.sin(d)],[-Math.sin(d),Math.cos(d)]],p=[[Math.cos(c),Math.sin(c)],[-Math.sin(c),Math.cos(c)]],u[0][0]*=-1,u[0][1]*=-1,p[0][0]*=-1,p[1][0]*=-1,[u,[[a+o,0],[0,a-o]],p]),v=TV(f,Tj(g)),y=TV(TV(g,m),Tj(g));return{rotation:Math.atan2(v[1][0],v[0][0]),scale:[y[0][0],y[1][1]],shear:[y[0][1]/y[1][1],y[1][0]/y[0][0]]}}([[r,a],[s,o]]);return{position:[l+(i[0]*r+i[1]*a)-i[0],h+(i[0]*s+i[1]*o)-i[1]],scale:d,rotation:c,shear:u,pivot:i}},e.compose=function(t,i,r,s,a=[0,0]){let[o,l]=t,[h,c]=s,[d,u,p,f]=function({rotation:e,scale:t,shear:i}){let r=Math.cos(e),s=Math.sin(e),a=TV([[r,-s],[s,r]],[[t[0],i[0]*t[1]],[i[1]*t[0],t[1]]]);return[a[0][0],a[1][0],a[0][1],a[1][1]]}({rotation:r,scale:i,shear:a});return e.create(d,u,p,f,o-(h*d+c*p)+h,l-(h*u+c*f)+c)}})(TW||(TW={}));var TG,TH,TW,Tq,TX=Math.PI/180,TY=class{constructor(e,t,i){this.uuid=e,this.data=t,this.localMatrix=TW.identity(),this.worldMatrix=TW.identity(),this.ignoreCameraZoom=!1,this.visible=!0,this._singleBBox=new T$,this._recursiveBBox=new T$,this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0,this.stateSelection=null,this.prevState=null,this.currentState=null,this.reversibleToState=null,this.currentTransitionEvent=null,this.previousAction=null,this.name="",this.position=[0,0],this.scale=[1,1],this.rotation=0,this.shear=[0,0],this.emitter=wR(),this.dpr=i.dpr??1,this.dataPatched=t}project(e,t){let i=this.worldMatrix;return t&&(i=TW.append(t.worldMatrix,i)),TW.applyInverse(e,i)}intersects(e,t,i,r=!1){return this.visible&&!this.data.raycastLock&&this.intersectsInLocalSpace(...this.project([e,t],i),r)}intersectsInLocalSpace(e,t,i=!1){let{min:r,max:s}=i?this.recursiveBBox:this.singleBBox;return e>=r[0]&&e<=s[0]&&t>=r[1]&&t<=s[1]}applyTransforms(e){e.setTransform(this.worldMatrix,this.ignoreCameraZoom)}get singleBBox(){return this.singleBBoxNeedsUpdate&&(this.singleBBoxNeedsUpdate=!1,this._singleBBox.setFromObjectSize(this,!1),this._singleBBox.computeVertices(),this._singleBBox.computeEdges()),this._singleBBox}get recursiveBBox(){return this.recursiveBBoxNeedsUpdate&&(this.recursiveBBoxNeedsUpdate=!1,this._recursiveBBox.setFromObjectSize(this,!0),this._recursiveBBox.computeVertices(),this._recursiveBBox.computeEdges()),this._recursiveBBox}updateLocalMatrix(){this.localMatrix=TW.compose(this.position,this.scale,this.rotation*TX,yj.getPivot(this.dataPatched),this.shear)}updateWorldMatrix(e,t,i){let r=this.parent;t&&null!=r&&r.updateWorldMatrix(e,!0,!1),e&&this.updateLocalMatrix(),this.parent?this.worldMatrix=TW.append(this.parent.worldMatrix,this.localMatrix):this.worldMatrix=TW.copy(this.localMatrix),this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0}get pivot(){return yj.getPivot(this.data)}getCenter(){return[0,0]}getHalfSize(){return[0,0]}get id(){return this.uuid}resetBBoxNeedsUpdateSelf(){this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0}resetBBoxNeedsUpdate(){this.resetBBoxNeedsUpdateSelf(),this.traverseAncestors(e=>{e.resetBBoxNeedsUpdateSelf()})}updateTransformState(e){let t=!1;void 0!==e.position&&(t=!0,this.position=e.position),void 0!==e.rotation&&(t=!0,this.rotation=e.rotation),void 0!==e.scale&&(t=!0,this.scale=e.scale),void 0!==e.shear&&(t=!0,this.shear=e.shear),t&&(this.updateWorldMatrix(!0,!1,!0),this.resetBBoxNeedsUpdate())}updateByOp(e,t,i){0===e.type&&void 0!==e.props.visible&&(this.visible=e.props.visible),this.data=t,this.data=t;let r=e,s=pX(e.path,["states","*"]);if(null!==s){if(0===e.type){let[t]=s;if(this?.stateSelection===t){let t={...e.props};if(delete t.name,Object.values(e.props).some(e=>void 0===e)){let i=this.data;if(void 0!==i){let r=p1.zoom(i,e.path.slice(2));if(r)for(let i in e.props)void 0===e.props[i]&&i in r&&(t[i]=r[i])}}r={...e,props:t,path:e.path.slice(2)}}}}else if(0===e.type){let t=this.stateSelection?this.data.states.data(this.stateSelection):void 0;if(void 0!==t){if(void 0!==e.props.name&&t.name){let{name:e,...i}=t;t=i}let i=p1.removeOverridden(e.path,e.props,t);r={...e,props:i}}}this.updateByPatchedOpBase(r,yI.patch(this.data,this.stateSelection?this.data.states.data(this.stateSelection):void 0),i)}changeSelectedState(e,t,i=!1){if(!(0===this.data.states.length&&!i)){for(let e of this.data.states)yI.toOps(this.data,e.data).forEac
vendor: 4,150 bytes, line 6670
6670h(e=>{let i=pJ.replaceProps(e,this.data);this.dataPatched=this.data,this.updateByPatchedOp(i,this.data,t)});if(null!==e){let i=this.data.states.data(e);i&&(this.dataPatched=yI.patch(this.data,i),yI.toOps(this.data,i).forEach(e=>{this.updateByPatchedOp(e,this.dataPatched,t)}))}i&&this.updateTransformState(this.dataPatched),this.stateSelection=e}}updateState(e,t){void 0!==e.name&&(this.name=e.name),void 0!==e.visible&&(this.visible=e.visible),this.updateTransformState(e)}updateByPatchedOpBase(e,t,i){this.dataPatched=t,this.updateByPatchedOp(e,t,i)}updateByPatchedOp(e,t,i){0===e.path.length&&0===e.type&&this.updateState(e.props,i),this.requestRender()}traverseFrameAncestors(e){this.traverseAncestors(t=>{"frame2d"===t.data.type&&e(t)})}traverseAncestors(e){let t=this.parent;for(;t;)e(t),t=t.parent}requestRender(){this.traverseFrameAncestors(e=>{e.requestRender()})}clone(e){let t=new TY(this.uuid,this.data,e);return t.parent=void 0,t}addEventListener(e,t){this.emitter.on(e,t)}removeEventListener(e,t){this.emitter.off(e,t)}dispatchEvent(e){this.emitter.emit(e.type,{...e,target:e.target??this})}traverseSortNextHelper(){let e=this.parent;if(e){let t=e.children;if(t){let i=t.indexOf(this)+1;return t[i]?t[i]:e.traverseSortNextHelper()}}}sortNext(){let e=this.children;return e&&e.length>0&&e[0]?e[0]:this.traverseSortNextHelper()}isDescendantOf(e){e instanceof TY&&(e=e.uuid);let t=this;for(;t.parent;){if(t.parent.uuid===e)return!0;t=t.parent}return!1}},TQ=class extends TY{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.context=i,this.children=[]}add(e){e.parent&&e.parent instanceof TQ&&e.parent.remove(e),this.children.push(e),e.parent=this}remove(e){let t=this.children.indexOf(e);t>=0&&(this.children.splice(t,1),e.parent=void 0)}traverse(e){let t=e(this);if(!0!==t)for(let i of this.children)i instanceof TQ?i.traverse(e):t=e(i)}intersectsChildrenHelper(e,t,i,r,s){for(let a of this.children)if(a.intersects(e,t,i,!1)&&(s.push(a),r)||a instanceof TQ&&a.intersectsChildrenHelper(e,t,i,r,s))return!0;return!1}intersectsChildren(e,t,i,r=!1,s=[],a=!1){return this.intersectsChildrenHelper(e,t,i,r,s),s}intersectsChildrenHelperReverse(e,t,i,r,s){for(let a of this.children)if(a instanceof TQ&&a.intersectsChildrenHelperReverse(e,t,i,r,s)||a.intersects(e,t,i,!1)&&(s.push(a),r))return!0;return!1}intersectsChildrenReverse(e,t,i,r=!1,s=[],a=!1){return this.intersectsChildrenHelperReverse(e,t,i,r,s),s}updateWorldMatrix(e,t,i){if(super.updateWorldMatrix(e,t,i),i&&this.children)for(let t of this.children)t.updateWorldMatrix(e,!1,!0)}find(e){let t;return this.traverse(i=>{i.uuid===e&&(t=i)}),t}innerDrawChildren(e){for(let t=this.children.length-1;t>=0;t--)this.children[t].draw(e)}resetBBoxNeedsUpdate(){super.resetBBoxNeedsUpdate(),this.traverse(e=>{e.resetBBoxNeedsUpdateSelf()})}clone(e){let t=new TQ(this.uuid,this.data,e);for(let i of(t.parent=void 0,this.children))t.add(i.clone(e));return t}},TK=class extends TQ{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.updateState(t,i)}draw(e){this.visible&&(e.save(),this.applyTransforms(e),this.innerDrawChildren(e),e.restore())}clone(e){let t=new TK(this.uuid,this.data,e);for(let i of(t.parent=void 0,this.children))t.add(i.clone(e));return t}},TZ=[[-1,1],[-1,-1],[1,-1],[1,1]],TJ=(e,t,i)=>{let r=e.getCenter(),s=e.getHalfSize(),a=TW.append(t,e.worldMatrix);0===s[0]&&0===s[1]?i.push(TW.apply(r,a)):TZ.forEach(e=>{let t=[e[0]*s[0]+r[0],e[1]*s[1]+r[1]];i.push(TW.apply(t,a))})},T$=class{constructor(){this.matrix=TW.identity(),this.min=[1/0,1/0],this.max=[-1/0,-1/0],this.vertices=[],this.edges=[]}setFromObjectSize(e,t=!1){e.updateWorldMatrix(),this.makeEmpty(),TW.copy(e.worldMatrix,this.matrix);let i=TW.invert(e.worldMatrix);this.expandByObjectSize(e,i,t)}expandByObjectSize(e,t,i=!1){let r=[];!0===i&&e instanceof TQ?e.traverse(e=>{e.visible&&TJ(e,t,r)}):TJ(e,t,r),this.setFromPoints(r)}setFromSize(e,t,i){this.makeEmpty(),TW.copy(i,this.matrix),this.expandBySize(e,t,i)}expandBySize(e,t,i){[TW.apply([0,0],i),TW.apply([0,t],i),TW.apply([e,t],i),TW.apply([e,0],i)].forEach(e=>this.expandByPoint(e))}getCenter(){let[e,t]=this.min,[i,r]=this.getHalfSize();
6670return TW.apply([e+i,t+r],this.matrix)}getSize(){return[this.max[0]-this.min[0],this.max[1]-this.min[1]]}getHalfSize(){return[(this.max[0]-this.min[0])*.5,(this.max[1]-this.min[1])*.5]}makeEmpty(){this.min=[1/0,1/0],this.max=[-1/0,-1/0]}setFromPoints(e){for(let t of(this.makeEmpty(),e))this.expandByPoint(t)}expandByPoint(e){this.min=[Math.min(this.min[0],e[0]),Math.min(this.min[1],e[1])],this.max=[Math.max(this.max[0],e[0]),Math.max(this.max[1],e[1])]}computeVertices(){let[e,t]=this.getHalfSize(),i=this.getCenter(),[r,s,a,o]=TW.getAbcdef(this.matrix),l=TW.create(r,s,a,o,i[0],i[1]);this.vertices=TZ.map(([i,r])=>TW.apply([i*e,r*t],l))}computeEdges(){this.edges=[];for(let e=0,t=this.vertices.length;e<t;++e)this.edges.push([this.vertices[e],this.vertices[(e+1)%t]])}project(e,t){let i=this.matrix;return t&&(i=TW.append(t.worldMatrix,i)),TW.applyInverse(e,i)}intersects(e,t,i){return this.intersectsInLocalSpace(...this.project([e,t],i))}intersectsInLocalSpace(e,t){let{min:i,max:r}=this;return e>=i[0]&&e<=r[0]&&t>=i[1]&&t<=r[1]}containsPoint(e){let[t,i]=e,[r,s]=this.min,[a,o]=this.max;return t>=r&&t<=a&&i>=s&&i<=o}intersectsBBox2D(e){for(let t=0,i=this.edges.length;t<i;t++){let i=this.edges[t];for(let t=0,r=e.edges.length;t<r;t++)if(function(e,t){let[[i,r],[s,a]]=e,[[o,l],[h,c]]=t,d=(i-s)*(l-c)-(r-a)*(o-h);if(0===d)return!1;let u=((i-o)*(l-c)-(r-l)*(o-h))/d,p=-((i-s)*(r-l)-(r-a)*(i-o))/d;return u>=0&&u<=1&&p>=0&&p<=1}(i,e.edges[t]))return!0}for(let t=0,i=e.vertices.length;t<i;t++){let i=e.vertices[t];if(this.containsPoint(i))return!0}return!1}ensureMinMax(){let e=this.min,t=this.max;this.min=[Math.min(e[0],t[0]),Math.min(e[1],t[1])],this.max=[Math.max(e[0],t[0]),Math.max(e[1],t[1])]}copy(e){this.min=[...e.min],this.max=[...e.max],TW.copy(e.matrix,this.matrix),this.computeVertices(),this.computeEdges()}clone(){let e=new T$;return e.copy(this),e}},T0=new Promise(e=>{Tq=e}),T1=!1;function T2(e){let t=!1;return e.scene.objects.traverse((e,i)=>{("Mesh"===i.type&&"UIGeometry"===i.geometry.type||"Page"===i.type&&void 0!==i.uiFrame)&&(t=!0)}),t}async function T3(e){let t=await T0;T7||(Pe||(Pe=t({locateFile:()=>e})),T7=await Pe)}var T4=TW.identity(),T5=class{constructor(e,t=1){this.canvas=e,this._dpr=t,this._width=0,this._height=0,this._strokeMode="inside",this._layerBlur=0,this._backgroundBlur=0,this._dropShadowBlur=0,this._dropShadowOffsetX=0,this._dropShadowOffsetY=0,this._dropShadowColor=ga.transparent,this._innerShadowBlur=0,this._innerShadowOffsetX=0,this._innerShadowOffsetY=0,this._innerShadowSpread=0,this._innerShadowColor=ga.transparent,this._fonts=new Map,this._isSizeDirty=!1;try{let i=e.getBoundingClientRect();e.width=i.width*t,e.height=i.height*t}catch{console.log(e.width,t)}this._currentM3Transform=T4,this._currentTransform=new Float32Array(T4)}get dpr(){return this._dpr}set dpr(e){this._dpr=e,this._isSizeDirty=!0}
6670async init(){if(!this.wasmURL)throw Error("Your must set the wasm binary url with renderer.wasmURL = ... before you can call renderer.init");await T3(this.wasmURL),this._surface=T7.MakeWebGLCanvasSurface(this.canvas),this.ctx=this._surface?.getCanvas(),this._paint=new T7.Paint,this._paint.setAntiAlias(!0),this._paintFill=this._paint.copy(),this._paintFill.setStyle(T7.PaintStyle.Fill),this._paintStroke=this._paint.copy(),this._paintStroke.setStyle(T7.PaintStyle.Stroke),this.ctx?.scale(this.dpr,this.dpr)}get currentTransform(){return this._currentM3Transform}get currentTransformBuffer(){return this._currentTransform}set currentTransform(e){this._currentM3Transform=e,this._currentTransform.set(e)}async loadFont(e,t){let i=await (await fetch(e)).arrayBuffer();this.registerFont(i,t)}registerFont(e,t){if(this._fonts.has(t))return;let i=T7.FontMgr.FromData(e);if(i)this._fonts.set(t,i);else throw Error("Invalid font data for "+t)}get width(){return this._width}get height(){return this._height}set strokeColor(e){this._paintStroke&&this._paintStroke.setColor(T8(e),T7.ColorSpace.DISPLAY_P3)}set fillColor(e){this._paintFill&&this._paintFill.setColor(T8(e),T7.ColorSpace.DISPLAY_P3)}set lineWidth(e){this._paintStroke&&this._paintStroke.setStrokeWidth("center"===this._strokeMode?e:2*e)}set strokeMode(e){this._strokeMode=e}set dropShadowBlur(e){this._dropShadowBlur=e}set dropShadowColor(e){this._dropShadowColor=e}set dropShadowOffsetX(e){this._dropShadowOffsetX=e}set dropShadowOffsetY(e){this._dropShadowOffsetY=e}set innerShadowBlur(e){this._innerShadowBlur=e}set innerShadowColor(e){this._innerShadowColor=e}set innerShadowOffsetX(e){this._innerShadowOffsetX=e}set innerShadowOffsetY(e){this._innerShadowOffsetY=e}set innerShadowSpread(e){this._innerShadowSpread=e}set layerBlur(e){this._layerBlur=e}set backgroundBlur(e){this._backgroundBlur=e}clear(){this.ctx?.clear(T7.TRANSPARENT)}save(){this.ctx?.save()}restore(){this.ctx?.restore()}beginPath(){this._currentPath?.delete(),this._currentPath=new T7.Path}closePath(){let e=this._currentPath;if(e){if(e.isEmpty())return;let t=e.getBounds();(t[3]-t[1]||t[2]-t[0])&&e.close()}}fill(){this._paintInner(this._paintFill,!0)}stroke(){this._paintInner(this._paintStroke,!1)}clipRect(e,t,i,r,s=0,a=0,o=0,l=0){let h=T7.XYWHRect(e,t,i,r);if(0===s&&0===a&&0===l&&0===o)this.ctx?.clipRect(h,T7.ClipOp.Intersect,!0);else{let e=T7.RRectXY(h,s,s);e[4]=e[5]=s,e[6]=e[7]=a,e[8]=e[9]=o,e[10]=e[11]=l,this.ctx?.clipRRect(e,T7.ClipOp.Intersect,!0)}}_applyShadowOffsetMatrix(){if(this.ctx){let e=TW.invert(this.currentTransform);this.ctx.concat(e);let t=TW.translate(TW.identity(),this._dropShadowOffsetX,this._dropShadowOffsetY);this.ctx.concat(t),this.ctx.concat(this._currentTransform)}}_applyEffectsToPaint(e,t,i=!0){if(this.ctx&&this._currentPath){let r,s=!1;if(i&&this._hasDropShadow()){let i,r=e.copy();r.setColor(T8(this._dropShadowColor)),this._dropShadowBlur>0&&(i=T7.MaskFilter.MakeBlur(T7.BlurStyle.Normal,this._dropShadowBlur*this.dpr*(this.camera?.scale??1),!1),r.setMaskFilter(i)),this.ctx.save(),this.ctx.clipPath(this._currentPath,T7.ClipOp.Difference,!0),this._applyShadowOffsetMatrix(),t(r),this.ctx.restore(),r.delete(),i?.delete()}if(this._backgroundBlur>0&&i){this.ctx.save(),this.ctx.clipPath(this._currentPath,T7.ClipOp.Intersect,!0);let t=T7.ImageFilter.MakeBlur(this._backgroundBlur,this._backgroundBlur,T7.TileMode.Clamp,null),i=e.copy();i.setImageFilter(t),i.setAlphaf(1);let r=this._currentPath.computeTightBounds();this.ctx.saveLayer(i,r,null,T7.SaveLayerInitWithPrevious),this.ctx.drawColor(e.getColor()),this.ctx.restore(),this.ctx.restore(),i.delete(),t.delete(),s=!0}if(this._layerBlur>0){let i=e.copy();r=T7.MaskFilter.MakeBlur(T7.BlurStyle.Normal,this._layerBlur*this.dpr*(this.camera?.scale??1),!1),i.setMaskFilter(r),t(i),i.delete(),r.delete(),s=!0}if(s||t(e),i&&this._hasInnerShadow()){let e,t=new T7.Paint;t.setAntiAlias(!0),t.setStyle(T7.PaintStyle.Fill),t.setColor(T8(this._innerShadowColor)),this._innerShadowBlur>0&&(e=T7.MaskFilter.MakeBlur(T7.BlurStyle.Normal,this._innerShadowBlur*this.dpr*(this.camera?.scale??1),!1),t.setMaskFilter(e));let i=this._currentPath.computeTightBounds(),[r,s,a,o]=i;this.ctx.save(),this.ctx.clipPath(this._currentPath,T7.ClipOp.Intersect,!0),this.ctx.saveLayer(t,i,null,T7.SaveLayerInitWithPrevious),this.ctx?.translate(this._innerShadowOffsetX,this._innerShadowOffsetY),this.ctx.drawRect(T7.XYWHRect(-1e3-this._innerShadowOffsetX,-1e3-this._innerShadowOffsetY,2e3+(a-r)+Math.abs(2*this._innerShadowOffsetX),2e3+(o-s)+Math.abs(2*this._innerShadowOffsetY)),t),t.setBlendMode(T7.BlendMode.Clear),this.ctx.drawPath(this._currentPath,t),this.ctx.restore(
6670),this.ctx.restore(),t.delete(),e?.delete()}}}_paintInner(e,t=!0){if(this.ctx&&this._currentPath&&e){let i=this.ctx,r=this._currentPath;this._applyEffectsToPaint(e,e=>{let s=!1;t||"center"===this._strokeMode||(i.save(),i.clipPath(r,"outside"===this._strokeMode?T7.ClipOp.Difference:T7.ClipOp.Intersect,!0),s=!0),i.drawPath(r,e),s&&i.restore()},t)}}_hasDropShadow(){return this._dropShadowColor?.a>0}_hasInnerShadow(){return this._innerShadowColor?.a>0}path(e){this._currentPath?.addPath(T7.Path.MakeFromSVGString(e))}ellipse(e,t,i,r,s,a,o,l){if(!T6([e,t,i,r])||!this._currentPath)return;if(i<0||r<0)throw Error("radii cannot be negative");let h=T7.XYWHRect(e-i,t-r,2*i,2*r);this._currentPath?.addOval(h)}rect(e,t,i,r,s=0,a=0,o=0,l=0){let h=T7.XYWHRect(e,t,i,r);if(T6(h)){if(0===s&&0===a&&0===l&&0===o)this._currentPath?.addRect(h);else{let e=T7.RRectXY(h,s,s);e[4]=e[5]=s,e[6]=e[7]=a,e[8]=e[9]=o,e[10]=e[11]=l,this._currentPath?.addRRect(e)}}}getHorizontalAlign(e){switch(e){case 2:return T7.TextAlign.Right;case 3:return T7.TextAlign.Center;case 4:return T7.TextAlign.Justify;default:return T7.TextAlign.Left}}drawTextInner(e,t,i,[r,s,a,o],l,h,c=!0){let d=0,{ctx:u}=this;if(!u)return d;let p=h.copy(),f=h.copy();return f.setAlphaf(0),this._applyEffectsToPaint(p,h=>{t.pushPaintStyle(i,h,f),t.addText(e);let c=t.build();c.layout(a);let p=s;2===l?p+=(o-c.getHeight())/2:3===l&&(p+=o-c.getHeight()),u.drawParagraph(c,r,p),d=c.getHeight(),t.reset(),c.delete()},c),p.delete(),f.delete(),d}drawText(e,t){let i=0,r=this._fonts.get(t.font),{ctx:s,_paintFill:a,_paintStroke:o}=this;if(r&&s){let s=new T7.TextStyle({fontFamilies:[t.font],fontSize:t.fontSize,heightMultiplier:t.lineHeight,letterSpacing:t.letterSpacing}),l=new T7.ParagraphStyle({textStyle:s,textAlign:this.getHorizontalAlign(t.horizontalAlign)}),h=T7.XYWHRect(t.x,t.y,t.width,t.height),c=T7.ParagraphBuilder.Make(l,r);a&&(i=this.drawTextInner(e,c,s,h,t.verticalAlign,a,!0)),o&&(i=this.drawTextInner(e,c,s,h,t.verticalAlign,o,!1)),c.delete()}return{height:i}}render(){this._surface?.flush()}moveTo(e,t){this._currentPath?.moveTo(e,t)}lineTo(e,t){this._currentPath?.lineTo(e,t)}bezierCurveTo(e,t,i,r,s,a){this._currentPath?.cubicTo(e,t,i,r,s,a)}quadraticCurveTo(e,t,i,r){this._currentPath?.quadTo(e,t,i,r)}setTransform(e,t=!1){if(!this.ctx)return;let i=this.ctx.getTotalMatrix(),r=TW.invert(i);if(r&&this.ctx.concat(r),this.ctx?.scale(this.dpr,this.dpr),this.camera?.enabled&&(this.ctx?.concat(this.camera.worldMatrix),t)){let e=TW.getScale(this.camera.worldMatrix);this.ctx?.scale(1/e[0],1/e[1])}this.ctx?.concat(e),this.currentTransform=e}transform(e){this.ctx?.concat(e)}setSize(e,t){!this._isSizeDirty&&e===this._width&&t===this._height||(this._isSizeDirty=!1,this._width=e,this._height=t,this.canvas.style.width=e+"px",this.canvas.style.height=t+"px",this.canvas.width=e*this.dpr,this.canvas.height=t*this.dpr,this._surface&&(this._surface=T7.MakeWebGLCanvasSurface(this.canvas),this.ctx=this._surface?.getCanvas()))}};function T6(e){for(let t=0;t<e.length;t++)if(void 0!==e[t]&&!Number.isFinite(e[t]))return!1;return!0}function T8({r:e,g:t,b:i,a:r}){return T7.Color4f(e,t,i,r)}var T9,T7,Pe,Pt,Pi=class{constructor(e,t,i){this.uuid=e,this.data=t,this.enabled=!1,this.color=ga.transparent,this.blurRadius=0,this.offset=[0,0],this.spread=0,this.update(t)}update(e){void 0!==e.color&&(this.color=e.color),void 0!==e.enabled&&(this.enabled=e.enabled),void 0!==e.blurRadius&&(this.blurRadius=e.blurRadius),void 0!==e.offset&&(this.offset=e.offset),void 0!==e.spread&&(this.spread=e.spread)}},Pr=class{constructor(e,t,i){this.uuid=e,this.data=t,this.enabled=!1,this.radius=0,this.update(t)}update(e){void 0!==e.enabled&&(this.enabled=e.enabled),void 0!==e.radius&&(this.radius=e.radius)}},Ps=class{constructor(e,t,i){this.uuid=e,this.data=t,this.enabled=!1,this.color=ga.transparent,this.update(t)}update(e){void 0!==e.enabled&&(this.enabled=e.enabled),void 0!==e.color&&(this.color=e.color)}},Pa=class{constructor(e,t,i){this.uuid=e,this.data=t,this.enabled=!1,this.color=ga.transparent,this.thickness=0,this.mode="inside",this.update(t)}update(e){void 0!==e.enabled&&(this.enabled=e.enabled),void 0!==e.color&&(this.color=e.color),void 0!==e.thickness&&(this.thickness=e.thickness),void 0!==e.mode&&(this.mode=e.mode)}},Pn=class extends TY{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.autoClose=!0,this.fill=new Ps(e+"-fill",t.fill,i),this.stroke=new Pa(e+"-stroke",t.stroke,i),this.dropShadow=new Pi(e+"-dropShadow",t.dropShadow,i),this.innerShadow=new Pi(e+"-innerShadow",t.innerShadow,i),this.backgroundBlur=new Pr(e+"-backgroundBlur",t.backgroundBlur,i),this.layerBlur=new Pr(e+"-layerBlur",t.layerBlur,i)}applyFillStroke(e){e.fillColor=this.fill.enabled?this.fill.color:ga.transparent,e.strokeColor=this.stroke.enabled&&this.stroke.thickness>0?this.stroke.color:ga.transparent,e.strokeMode=this.stroke.mode,e.lineWidth=this.stroke.thickness}applyFilters(e){this.layerBlur.enabled?e.layerBlur=5*this.layerBlur.radius:e.layerBlur=0,this.backgroundBlur.enabled?e.backgroundBlur=5*this.backgroundBlur.radius:e.backgroundBlur=0,this.dropShadow.enabled?(e.dropShadowBlur=5*this.dropShadow.blurRadius,e.dropShadowColor=this.dropShadow.color,e.dropShadowOffsetX=this.dropShadow.offset[0],e.dropShadowOffsetY=this.dropShadow.offset[1]):e.dropShadowColor=ga.transparent,this.innerShadow.enabled?(e.innerShadowSpread=this.innerShadow.spread,e.innerShadowBlur=5*this.innerShadow.blurRadius,e.innerShadowColor=this.innerShadow.color,e.innerShadowOffsetX=this.innerShadow.offset[0],e.innerShadowOffsetY=this.innerShadow.offset[1]):e.innerShadowColor=ga.transparent}innerDraw(e){}draw(e){this.visible&&(e.save(),this.applyTransforms(e),this.applyFilters(e),this.applyFillStroke(e),e.beginPath(),this.innerDraw(e),this.autoClose&&e.closePath(),this.fill.enabled&&e.fill(),this.stroke.enabled&&e.stroke(),e.restore(
vendor: 5,368 bytes, line 6670
6670))}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),0===e.type&&(pX(e.path,["fill"])?this.fill.update(e.props):pX(e.path,["stroke"])?this.stroke.update(e.props):pX(e.path,["dropShadow"])?this.dropShadow.update(e.props):pX(e.path,["innerShadow"])?this.innerShadow.update(e.props):pX(e.path,["layerBlur"])?this.layerBlur.update(e.props):pX(e.path,["backgroundBlur"])?this.backgroundBlur.update(e.props):this.resetBBoxNeedsUpdate())}updateState(e,t){super.updateState(e,t),void 0!==e.fill&&this.fill.update(e.fill),void 0!==e.stroke&&this.stroke.update(e.stroke),void 0!==e.dropShadow&&this.dropShadow.update(e.dropShadow),void 0!==e.innerShadow&&this.innerShadow.update(e.innerShadow),void 0!==e.layerBlur&&this.layerBlur.update(e.layerBlur),void 0!==e.backgroundBlur&&this.backgroundBlur.update(e.backgroundBlur)}clone(e){let t=new Pn(this.uuid,this.data,e);return t.parent=void 0,t}},Po=class extends Pn{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.width=0,this.height=0,this.updateState(t,i)}innerDraw(e){e.ellipse(.5*this.width,.5*this.height,.5*this.width,.5*this.height,0,0,2*Math.PI)}intersectsInLocalSpace(e,t){var i,r,s,a;let o,l;return i=.5*this.width,r=.5*this.height,s=.5*this.width,a=.5*this.height,(o=e-i)*o/(s*s)+(l=t-r)*l/(a*a)<=1}getCenter(){return[.5*this.width,.5*this.height]}getHalfSize(){return[.5*this.width,.5*this.height]}updateSizeState(e){let t=!1;void 0!==e.width&&(this.width="number"==typeof e.width?e.width:this.width,t=!0),void 0!==e.height&&(this.height="number"==typeof e.height?e.height:this.height,t=!0),t&&this.updateWorldMatrix(!0,!1,!0)}updateState(e,t){super.updateState(e,t),this.updateSizeState(e)}clone(e){let t=new Po(this.uuid,this.data,e);return t.parent=void 0,t}},Pl=class extends Pn{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.width=0,this.height=0,this.cornerRadius=[0,0,0,0],this.updateState(t,i)}innerDraw(e){e.rect(0,0,this.width,this.height,...this.cornerRadius)}getCenter(){return[.5*this.width,.5*this.height]}getHalfSize(){return[.5*this.width,.5*this.height]}updateCornerState(e){void 0!==e.cornerRadius&&(this.cornerRadius=e.cornerRadius)}updateSizeState(e){let t=!1;void 0!==e.width&&(this.width="number"==typeof e.width?e.width:this.width,t=!0),void 0!==e.height&&(this.height="number"==typeof e.height?e.height:this.height,t=!0),t&&this.updateWorldMatrix(!0,!1,!0)}updateState(e,t){super.updateState(e,t),this.updateSizeState(e),this.updateCornerState(e)}clone(e){let t=new Pl(this.uuid,this.data,e);return t.parent=void 0,t}},Ph=class extends Pn{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this._textHeight=0,this._textHeightDirty=!0,this.width=0,this.height=0,this.updateState(t,i)}get textHeight(){return this._textHeight}applyFillStroke(e){e.fillColor=this.fill.enabled?this.fill.color:ga.transparent,e.strokeColor=this.stroke.enabled&&this.stroke.thickness>0?this.stroke.color:ga.transparent,e.strokeMode="center",e.lineWidth=this.stroke.thickness}innerDraw(e){this._fontHolder?.arrayBuffer&&this._fontHolder.arrayBuffer.byteLength>1&&this.data.font&&e.registerFont(this._fontHolder.arrayBuffer,this.data.font);let t=this.data.textTransform,i=this.data.text.textValue.toString(),r=2===t?i.toUpperCase():3===t?i.toLowerCase():i,{height:s}=e.drawText(r,{x:0,y:0,width:this.width,height:this.height,fontSize:this.data.fontSize,lineHeight:this.data.lineHeight??1,letterSpacing:this.data.letterSpacing??0,horizontalAlign:this.data.horizontalAlign,verticalAlign:this.data.verticalAlign,font:this.data.font});this._textHeight=s}getCenter(){return[.5*this.width,.5*this.height]}getHalfSize(){return[.5*this.width,.5*this.height]}updateSizeState(e){let t=!1;void 0!==e.width&&(this.width="number"==typeof e.width?e.width:this.width,t=!0),void 0!==e.height&&(this.height="number"==typeof e.height?e.height:this.height,t=!0),t&&this.updateWorldMatrix(!0,!1,!0)}updateFontState(e,{shared:t}){void 0!==e.font&&(this._fontHolder=t.getFont(e.font),this._fontHolder&&!this._fontHolder.isLoaded&&this._fontHolder.loadingPromise.then(()=>{this.requestRender()}))}updateState(e,t){super.updateState(e,t),this.updateSizeState(e),this.updateFontState(e,t)}clone(e){let t=new Ph(this.uuid,this.data,e);return t.parent=void 0,t}},Pc=class extends Pn{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.curves=[],this.extremasBBox={min:[0,0],max:[0,0]},this.updateState(t,i)}computeExtremas(){0===this.curves.length&&this.computeCurves();let e=this.curves.map(e=>Pt.extremas(e)),t=[1/0,1/0],i=[-1/0,-1/0];for(let r=0,s=e.length;r<s;r++){let s=e[r];s[0][0]<t[0]&&(t[0]=s[0][0]),s[0][1]<t[1]&&(t[1]=s[0][1]),s[1][0]>i[0]&&(i[0]=s[1][0]),s[1][1]>i[1]&&(i[1]=s[1][1])}return this.extremasBBox.min=[t[0],t[1]],this.extremasBBox.max=[i[0],i[1]],this.extremasBBox}computeCurves(){this.curves=[];for(let e=1,t=this.data.points.length;e<t;e++){let t=this.data.points[e].data,i=this.data.points[e-1].data,r={start:i.position,cp1:i.controlNext.position,cp2:t.controlPrevious.position,end:t.position};this.curves.push(r)}let e=this.data.points[0].data,t=this.data.points[this.data.points.length-1].data;if(this.data.isClosed){let i={start:t.position,cp1:t.controlNext.position,cp2:e.controlPrevious.position,end:e.position};this.curves.push(i)}}getCenter(){let[e,t]=this.extremasBBox.min,[i,r]=this.getHalfSize();return[e+i,t+r]}getHalfSize(){let{min:e,max:t}=this.extremasBBox;
vendor: 6,526 bytes, line 6670
6670return[(t[0]-e[0])*.5,(t[1]-e[1])*.5]}innerDraw(e){for(let t=0,i=this.data.points.length;t<i;t++){let i=this.data.points[t].data;if(0===t){let[t,r]=i.position;e.moveTo(t,r)}else{let r=this.data.points[t-1].data,[s,a]=r.controlNext.position,[o,l]=i.controlPrevious.position,[h,c]=i.position,d={start:r.position,cp1:r.controlNext.position,cp2:i.controlPrevious.position,end:i.position};Pt.derive(d),e.bezierCurveTo(s,a,o,l,h,c)}}let t=this.data.points[0].data,i=this.data.points[this.data.points.length-1].data;if(this.data.isClosed){let[r,s]=i.controlNext.position,[a,o]=t.controlPrevious.position,[l,h]=t.position;e.bezierCurveTo(r,s,a,o,l,h)}}updateState(e,t){super.updateState(e,t),this.computeExtremas()}clone(e){let t=new Pc(this.uuid,this.data,e);return t.parent=void 0,t}};(e=>{function t(e,t,i,r=!1){let s=e-2*t+i;if(0!==s){let r=-Math.sqrt(Math.abs(t*t-e*i)),a=-e+t;return[-(r+a)/s,-(-r+a)/s]}return t!==i&&0===s?[(2*t-i)/(2*(t-i))]:[]}e.derive=function(e){let t=e.start,i=e.cp1,r=e.cp2,s=e.end,a={start:[3*(i[0]-t[0]),3*(i[1]-t[1])],cp:[3*(r[0]-i[0]),3*(r[1]-i[1])],end:[3*(s[0]-r[0]),3*(s[1]-r[1])]};return e.derivative=a,a.derivative=DI.derive(a),a},e.droot=function(i){let r=i.derivative??e.derive(i),s=r.start,a=r.cp,o=r.end;return[t(s[0],a[0],o[0]),t(s[1],a[1],o[1])]},e.extremas=function(t){let[i,r]=e.droot(t),s=[t.start[0],t.end[0]],a=[t.start[1],t.end[1]];for(let r of i)s.push(e.compute(t,Math.min(1,Math.max(0,r)))[0]);for(let i of r)a.push(e.compute(t,Math.min(1,Math.max(0,i)))[1]);return s.sort((e,t)=>e-t),a.sort((e,t)=>e-t),[[s[0],a[0]],[s[s.length-1],a[a.length-1]]]},e.compute=function(e,t){if(0===t)return[...e.start];if(1===t)return[...e.end];let i=1-t,r=i*i,s=t*t,a=r*i,o=r*t*3,l=i*s*3,h=t*s;return[a*e.start[0]+o*e.cp1[0]+l*e.cp2[0]+h*e.end[0],a*e.start[1]+o*e.cp1[1]+l*e.cp2[1]+h*e.end[1]]}})(Pt||(Pt={})),(DP=DI||(DI={})).derive=function(e){let t=e.start,i=e.cp,r=e.end,s={start:[2*(i[0]-t[0]),2*(i[1]-t[1])],end:[2*(r[0]-i[0]),2*(r[1]-i[1])]};return s.derivative=DO.derive(s),e.derivative=s,s},DP.droot=function(e){let t=e.derivative??DP.derive(e),i=t.start,r=t.end;return[i[0]!==r[0]?i[0]/(i[0]-r[0]):0,i[1]!==r[1]?i[1]/(i[1]-r[1]):0]},DP.compute=function(e,t){if(0===t)return[...e.start];if(1===t)return[...e.end];let i=1-t,r=i*i,s=i*t*2,a=t*t;return[r*e.start[0]+s*e.cp[0]+a*e.end[0],r*e.start[1]+s*e.cp[1]+a*e.end[1]]},(DD=DO||(DO={})).derive=function(e){let t=e.start,i=e.end,r=[i[0]-t[0],i[1]-t[1]];return e.derivative=r,e.derivative},DD.compute=function(e,t){if(0===t)return[...e.start];if(1===t)return[...e.end];let i=e.start,r=e.end;return[i[0]+(r[0]-i[0])*t,i[1]+(r[1]-i[1])*t]};var Pd=class extends TQ{constructor(e,t,i){super(e,t,i),this.uuid=e,this.width=0,this.height=0,this.clipped=!0,this.background=new Pl(e+"-background",yz.defaultData,i),this.background.parent=this,this.updateState(t,i)}get fill(){return this.background.fill}get stroke(){return this.background.stroke}get backgroundBlur(){return this.background.backgroundBlur}get layerBlur(){return this.background.layerBlur}get dropShadow(){return this.background.dropShadow}get innerShadow(){return this.background.innerShadow}get cornerRadius(){return this.background.cornerRadius}set cornerRadius(e){this.background.cornerRadius=e}updateLocalMatrix(){super.updateLocalMatrix(),this.background?.updateLocalMatrix()}updateWorldMatrix(e,t,i){super.updateWorldMatrix(e,t,i),this.background?.updateWorldMatrix(e,t,i)}draw(e){if(!this.visible)return;e.save();let t=this.width,i=this.height;this.applyTransforms(e),this.background.width=t,this.background.height=i,this.background.draw(e),this.clipped&&e.clipRect(0,0,t,i,...this.cornerRadius),this.innerDrawChildren(e),e.restore()}getCenter(){return[.5*this.width,.5*this.height]}getHalfSize(){return[.5*this.width,.5*this.height]}updateCornerState(e){void 0!==e.cornerRadius&&(this.cornerRadius=e.cornerRadius)}updateSizeState(e){let t=!1;void 0!==e.width&&(this.width="number"==typeof e.width?e.width:this.width,t=!0),void 0!==e.height&&(this.height="number"==typeof e.height?e.height:this.height,t=!0),t&&this.updateWorldMatrix(!0,!1,!0)}updateState(e,t){super.updateState(e,t),this.updateSizeState(e),this.updateCornerState(e),void 0!==e.fill&&this.fill.update(e.fill),void 0!==e.stroke&&this.stroke.update(e.stroke),void 0!==e.dropShadow&&this.dropShadow.update(e.dropShadow),void 0!==e.innerShadow&&this.innerShadow.update(e.innerShadow),void 0!==e.layerBlur&&this.layerBlur.update(e.layerBlur),void 0!==e.backgroundBlur&&this.backgroundBlur.update(e.backgroundBlur),void 0!==e.clipped&&(this.clipped=e.clipped)}requestRender(){super.requestRender(),this.dispatchEvent({type:"render"})}dispose(){this.removeEventListener("render")}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),0===e.type&&(pX(e.path,["fill"])?this.fill.update(e.props):pX(e.path,["stroke"])?this.stroke.update(e.props):pX(e.path,["dropShadow"])?this.dropShadow.update(e.props):pX(e.path,["innerShadow"])?this.innerShadow.update(e.props):pX(e.path,["layerBlur"])?this.layerBlur.update(e.props):pX(e.path,["backgroundBlur"])?this.backgroundBlur.update(e.props):this.resetBBoxNeedsUpdate())}clone(e){let t=new Pd(this.uuid,this.data,e);for(let i of(t.parent=void 0,this.children))t.add(i.clone(e));return t}},Pu=tw(tT(),1),Pp=class extends Pn{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this._pathBBox=new DOMRect,this.path="",this.updateState(t,i),this.autoClose=!1,this.computeSVGBBox()}computeSVGBBox(){let e=document.createElementNS("http://www.w3.org/2000/svg","svg"),t=document.createElementNS("http://www.w3.org/2000/svg","path");document.body.appendChild(e),t.setAttribute("d",this.path),e.appendChild(t),this._pathBBox=t.getBBox(),e.remove()}innerDraw(e){e.path(this.path)}intersectsInLocalSpace(e,t){return e>=this._pathBBox.x&&e<=this._pathBBox.x+this._pathBBox.width&&t>=this._pathBBox.y&&t<=this._pathBBox.y+this._pathBBox.height}getCenter(){return[(this._pathBBox.x+this._pathBBox.width)/2,(this._pathBBox.y+this._pathBBox.height)/2]}getHalfSize(){return[(this._pathBBox.x+this._pathBBox.width)/2,(this._pathBBox.y+this._pathBBox.height)/2]}updateState(e,t){super.updateState(e,t),void 0!==e.path&&(this.path=e.path,this.computeSVGBBox())}clone(e){let t=new Pp(this.uuid,this.data,e);return t.parent=void 0,t}},Pf=class{constructor(e,t,i){this.uuid=e,this.data=t,this.group=new TK(Pf.GROUP_ID,{...yU.defaultData},i),this.createChildrenObjects(t.objects,this.group,i)}createObject(e,t,i,r,s,a){let o=function(e,t,i){switch(t.type){case"ellipse2d":return new Po(e,t,i);
6670case"rectangle2d":return new Pl(e,t,i);case"text2d":return new Ph(e,t,i);case"vector2d":return new Pc(e,t,i);case"path2d":return new Pp(e,t,i);case"frame2d":return new Pd(e,t,i);default:return new TK(e,t,i)}}(e,t,a);o&&(r.add(o),r.children.splice(s,0,r.children.pop()),o.updateWorldMatrix(),i.length>0&&(o instanceof TK||o instanceof Pd)&&this.createChildrenObjects(i,o,a))}createChildrenObjects(e,t,i){let r=0;for(let s of e)this.createObject(s.id,s.data,s.children,t,r,i),r+=1}draw(e){this.group.draw(e)}updateEntityByOp(e,t,i,r){let s=this.find(e);if(s)try{s.updateByOp(t,i,{shared:r})}catch(e){console.error(e)}}updateTreeByOp(e,t){if(0===e.path.length&&7===e.type){let i=null===e.parent?this.group:this.find(e.parent);void 0!==i&&i instanceof TQ&&(this.createObject(e.id,e.data,e.children,i,e.localIndex,t),i.requestRender())}else if(0===e.path.length&&8===e.type){let t=this.find(e.id);if(void 0!==t&&void 0!==t.parent&&t.parent instanceof TQ){let e=t.parent;t.resetBBoxNeedsUpdate(),e?.remove(t),e?.requestRender()}}else if(0===e.path.length&&9===e.type){let t=this.find(e.id);if(void 0!==t){let i=t.parent,r=null===e.parent?this:this.find(e.parent);if(r instanceof TQ||r===this){r.add(t);let s=e.localIndex;r.children.splice(s,0,r.children.pop()),t.updateWorldMatrix(!0,!1,!0),i?.requestRender(),t.requestRender()}t.resetBBoxNeedsUpdate()}}}add(e){this.group.add(e)}remove(e){this.group.remove(e)}traverse(e){this.group.traverse(t=>{t!==this.group&&e(t)})}intersectsChildren(e,t,i,r=!1,s=[]){return this.group.intersectsChildren(e,t,i,r,s,!0)}intersectsChildrenReverse(e,t,i,r=!1,s=[]){return this.group.intersectsChildrenReverse(e,t,i,r,s,!0)}find(e){return this.group.find(e)}get children(){return this.group.children}project(e,t){return this.group.project(e,t)}getWithSortKey(e){let t=this.find(e);if(void 0===t)return;let i=[],r=t;for(;r!==this.group;){let e=r,t=(r=r.parent).children.indexOf(e);i.splice(0,0,t)}return{entity:t,sortKey:i}}getAllSorted(e){let t=[];for(let i of e){let e=this.getWithSortKey(i.id);void 0!==e&&t.push(e)}return t.sort((e,t)=>u$(e.sortKey,t.sortKey)),t.map(e=>e.entity)}};function Pm({constraints:e,newParentWidth:t,newParentHeight:i,initialParentWidth:r,initialParentHeight:s,objectInitialWidth:a,objectInitialHeight:o,objectInitialPosition:l}){let{horizontalConstraint:h,verticalConstraint:c}=e,d=t-r,u=i-s,p=a,f=o,m=l[0],g=l[1];if(0!==h){if(1===h)m+=d;else if(3===h)m+=d/2;else if(2===h)p=Math.max(1,p+d);else if(4===h){let e=t/r;p*=e,m*=e}}if(0!==c){if(1===c)g+=u;else if(3===c)g+=u/2;else if(2===c)f=Math.max(1,f+u);else if(4===c){let e=i/s;f*=e,g*=e}}return{width:p,height:f,position:[m,g]}}Pf.GROUP_ID="scene2d",tw(tT(),1);var Pg=` 6671 varying vec2 vUv; 6672 void main() { 6673 vUv = uv; 6674 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); 6675 }`,Pv=` 6676 uniform sampler2D tDiffuse; 6677 varying vec2 vUv; 6678 void main() { 6679 vec4 texel = texture2D( tDiffuse, vUv ); 6680 gl_FragColor = texel; 6681 }`,Py=new sw(-1,1,1,-1,0,1),Px=new class extends rz{constructor(){super(),this.setAttribute("position",new rT([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new rT([0,2,0,0,2,0],2))}},Pb=class{constructor(e){this._mesh=new rK(Px,e)}dispose(){this._mesh.geometry.dispose()}render(e){e.render(this._mesh,Py)}get material(){return this._mesh.material}set material(e){this._mesh.material=e}},Pw=new r5({defines:{},uniforms:{tDiffuse:new lD(null)},vertexShader:Pg,fragmentShader:Pv}),PS=new Pb(Pw),P_=null,PA=null,PM=()=>(null===P_&&(P_=document.createElement("canvas")),P_),PE=e=>(null===PA&&(PA=new T5(e)),PA),PC=TW.identity(),PT=class{constructor(e,t,i,r){this.uuid=e,this.width=t,this.height=i,this.context=r,this.enabled=!0,this.isScreenSpace=!1,this.dpr=window.devicePixelRatio,this.isFrameDirty=!1,this.onRenderRequestedDownstream=()=>{this.isFrameDirty=!0,this.context.shared.requestRender()},this._innerApplySize=()=>{let e=this.width,t=this.height,i=this.dpr;this.renderer.dpr=this.isScreenSpace?i:Math.floor(2048/Math.max(e,t)),this.renderer.setSize(e,t)},this.onFrameOverrideObjectEvent=e=>{if(e.target?.uuid!==void 0){let t=this.frameRoot?.find(e.target.uuid);t&&t.dispatchEvent({...e,target:t})}},this.scene2d=new Pf(tY.generateUUID(),yG.defaultData,{dpr:window.devicePixelRatio,shared:r.shared}),this.canvas=PM(),this.renderer=PE(this.canvas),this.promise=this.init(),this.renderTarget=new id(1,1,{type:1016,stencilBuffer:!1,depthBuffer:!1}),r.shared.addUIBuffer(this.uuid,this.renderTarget),this.textureHolder=r.shared.uiBuffer(this.uuid)}get canvasTexture(){return this._canvasTexture||(this._canvasTexture=new nX(this.canvas)),this._canvasTexture}
6681async init(){this.renderer instanceof T5&&(this.renderer.wasmURL=_W.skiaWasmUrl),await this.renderer.init()}render(e){if(this.isFrameDirty){this.isFrameDirty=!1,this._innerApplySize(),this.renderer.clear(),this.frameOverride?.draw(this.renderer),this.renderer.render(),Pw.uniforms.tDiffuse.value=this.canvasTexture,this.canvasTexture.needsUpdate=!0;let t=e.getRenderTarget();e.setRenderTarget(this.renderTarget),e.clear(),PS.render(e),e.setRenderTarget(t),this.textureHolder?.setNeedsUpdate(!0)}}updateEntity2DByOp(e,t,i,r){this.scene2d.updateEntityByOp(e,t,i,r),this.applySize()}updateTreeByOp(e,t){this.scene2d.updateTreeByOp(e,t),this.applySize()}applyOverrides(e){if(this.frameOverride&&this.frameRoot){this.frameOverride.position=[0,0],this.frameOverride.rotation=0;let t=e?.width??this.width,i=e?.height??this.height;this.frameOverride.width=t,this.frameOverride.height=i,this.frameOverride.localMatrix=PC,this.isScreenSpace&&(this.frameOverride.fill.color=ga.from0to1([0,0,0,0])),this.frameOverride.data={...this.frameOverride.data,width:t,height:i},function e({objectOverride:t,objectRoot:i,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o}){if(t instanceof Pd&&i instanceof Pd||t instanceof TK&&i instanceof TK)for(let l=0,h=t.children.length;l<h;l++){let h=t.children[l],c=i.children[l];h&&c&&h.uuid===c.uuid&&function({objectOverride:t,objectRoot:i,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o}){let[l,h]=function(e){if(PP(e))return[e.width,e.height];if(e instanceof Pp){let[t,i]=e.getHalfSize();return[2*t,2*i]}if(e instanceof TK){let[t,i]=e.recursiveBBox.getHalfSize();return[2*t,2*i]}return[0,0]}(i),{width:c,height:d,position:u}=Pm({constraints:t.data,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o,objectInitialWidth:l,objectInitialHeight:h,objectInitialPosition:i.position});if(t.position=u,t.data={...t.data,position:u},t.states)for(let e in t.states)!function({stateId:e,objectOverride:t,objectRoot:i,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o}){let l=t.states?.[e],h=i.states?.[e];if(l&&h){let{width:i,height:c,position:d}=Pm({constraints:t.data,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o,objectInitialWidth:yj.isResizeable(h)?h.width:0,objectInitialHeight:yj.isResizeable(h)?h.height:0,objectInitialPosition:h.position});Object.assign(t.states[e],{position:d}),yj.isResizeable(l)&&Object.assign(t.states[e],{width:i,height:c})}}({stateId:e,objectOverride:t,objectRoot:i,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o});if(PP(t)||t instanceof TK)PP(t)&&(t.width=c,t.height=d,t.data={...t.data,width:c,height:d}),e({objectOverride:t,objectRoot:i,newParentWidth:c,newParentHeight:d,initialParentWidth:l,initialParentHeight:h});else if(t instanceof Pp){let e=0!==l?c/l:1,r=0!==h?d/h:1;t.path=function(e,t=1,i=1){return t<=0||i<=0?e:function(e){let t=["rx","ry","xAxisRotation","largeArc","sweep","x1","y1","x2","y2","x","y"],i;return e.map(e=>{let r=[];t.forEach(t=>{if(t in e){let i=1*e[t];r.length&&i>=0&&r.push(","),r.push(i)}});let s=(i===e.code?r[0]<0?"":",":e.code)+r.join("");return i=e.code,s}).join("")}((0,Pu.parseSVG)(e).map(e=>{let r={...e};return"x"in r&&(r.x=r.x*t),"y"in r&&(r.y=r.y*i),"x1"in r&&(r.x1=r.x1*t),"x2"in r&&(r.x2=r.x2*t),"y1"in r&&(r.y1=r.y1*i),"y2"in r&&(r.y2=r.y2*i),"rx"in r&&(r.rx=r.rx*t),"ry"in r&&(r.ry=r.ry*i),r}))}(i.path,e,r),t.data={...t.data,path:t.path}}}({objectOverride:h,objectRoot:c,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o})}}({objectOverride:this.frameOverride,objectRoot:this.frameRoot,newParentWidth:this.frameOverride.width,newParentHeight:this.frameOverride.height,initialParentWidth:this.frameRoot.width,initialParentHeight:this.frameRoot.height}),this.frameOverride.updateWorldMatrix(!0,!1,!0)}}applySize(e,t=window.devicePixelRatio){let i=Math.max(1,e?.width??this.width),r=Math.max(1,e?.height??this.height);this.dpr=t,this.width=i,this.height=r,this._innerApplySize();let s=1;(i*t<512||r*t<512)&&(s=Math.max(512/(i*t),512/(r*t))),this.renderTarget.setSize(i*t*s,r*t*s),this._canvasTexture?.dispose(),this._canvasTexture=void 0,this.applyOverrides(e),this.frameOverride?.requestRender()}applyFrame(e){let t=this.context.scene.find2D(e);if(!(!t||!(t instanceof Pd)))return this.disposeFrameOverride(),this.frameRoot=t,this.frameOverride=t.clone({dpr:this.renderer.dpr,shared:this.context.shared}),this.scene2d.add(this.frameOverride),this.applySize(),this.frame?.addEventListener("render",this.onRenderRequestedDownstream),this.frameOverride.traverse(e=>{e.addEventListener("beginState",this.onFrameOverrideObjectEvent)}),this.frameOverride.traverse(e=>{e.addEventListener("completeState",this.onFrameOverrideObjectEvent)}),this.frame?.requestRender(),t}get frame(){return this.frameOverride}get frameId(){return this.frame?.uuid}find(e){return this.scene2d.find(e)}get texture(){return this.textureHolder?.getTexture(1001)}disposeFrameOverride(){this.frameOverride?.removeEventListener("render",this.onRenderRequestedDownstream),this.frameOverride?.traverse(e=>{e.removeEventListener("beginStateChange",this.onFrameOverrideObjectEvent)}),this.frameOverride?.traverse(e=>{e.removeEventListener("completeState",this.onFrameOverrideObjectEvent)}),this.frameOverride&&this.scene2d.remove(this.frameOverride)}};function PP(e){return e instanceof Pl||e instanceof Pd||e instanceof Po||e instanceof Ph}var PD=class extends xk(nb){constructor(e,t,i){super(),this.data=t,this.bgColor=new SN(1,1,1,1),this.fog=null,this.backupFog=new nx(16777215,.1,2e3),this.fogUseBGColor=!1,this.isActive=!1,this.aoColor=new ii,this.penumbraSizeArrayCache=null,this.super_Entity(e,t),this.personalCamera=new Eg(mh,{...v7.defaultData,...t.camera,name:"Personal Camera"}),this.personalCamera.objectHelper.visible=!1,this.add(this.personalCamera),this.activeCamera=this.personalCamera,this.ambientLight=new le(13882323,8553090,.75),this.ambientLight.name="Default Ambient Light",this.ambientLight.layers.enable(3),this.ambientLight.removeFromParent(),this.add(this.ambientLight),t.uiScene?this.uiScene=new Pf((Array.isArray(e)?e[0]:e)+"-ui",t.uiScene,{dpr:window.devicePixelRatio,shared:i.shared}):t.uiFrame&&this.createUICanvas(t.uiFrame,i)}get scene(){return this.parent}get postprocessing(){return this.data.postprocessing}get frameId(){return this.data.uiFrame}get frame(){return this.uiCanvas?.frame}createUICanvas(e,t){this.uiCanvas=new PT(this.uuid+"-uiscreen",window.innerWidth,window.innerHeight,t),this.uiCanvas.isScreenSpace=!0,this.uiCanvas.promise.then(()=>{this.uiCanvas?.applyFrame(e),this.uiCanvas?.applySize()})}updateVisible(){}
6681setBackgroundColor(e){this.bgColor=e,!0===this.fogUseBGColor&&(this.backupFog.color=e)}entityChildrenCount(){return this.uiScene?this.uiScene.children.length:super.entityChildrenCount()}updateAmbientLight(e,t){void 0!==e.color&&(this.ambientLight.color=Au(e.color,t)),void 0!==e.intensity&&(this.ambientLight.intensity=e.intensity),void 0!==e.enabled&&(e.enabled?this.add(this.ambientLight):this.remove(this.ambientLight))}onDeactive(){this.isActive=!1}onActive(e){this.isActive=!0,e.fog=this.fog,this.traverseEntity(e=>{e instanceof Eb&&e.recomputeBoolean()}),this.updateShadow(this.data.shadow)}forceMaterialsUpdate(){this.traverseEntity(e=>{if(e instanceof Mf){if(Array.isArray(e.material))for(let t of e.material)t.needsUpdate=!0;else e.material.needsUpdate=!0,e.material.dispose()}})}updateShadow(e){void 0!==e.softShadowQuality&&this.isActive&&TA(e.softShadowQuality)&&this.forceMaterialsUpdate()}updateFog(e,t){e.enabled?this.fog=this.backupFog:this.fog=null,this.isActive&&(this.scene.fog=this.fog),this.fogUseBGColor=e.useBackgroundColor,e.useBackgroundColor?this.backupFog.color.set(this.bgColor):this.backupFog.color=Au(e.color,t),this.backupFog.near=e.near,this.backupFog.far=e.far}updateAo(e,t){void 0!==e.aoColor&&(this.aoColor=Au(e.aoColor,t))}updateByOp(e,t,i,r){let s=this.data.uiFrame;super.updateByOp(e,t,i,r),pX(e.path,["fog"])?this.updateFog(t.fog,i.shared):pX(e.path,["ao"])?this.updateAo(t.ao,i.shared):pX(e.path,["ambient"])?this.updateAmbientLight(t.ambient,i.shared):pX(e.path,["shadow"])?this.updateShadow(t.shadow):0===e.type&&0===e.path.length&&(void 0!==e.props.uiFrame||s!==t.uiFrame)&&this.updateUIFrame(e.props.uiFrame,i)}updateUIFrame(e,t){e?(this.uiCanvas||this.createUICanvas(e,t),this.uiCanvas.enabled=!0,this.uiCanvas.applyFrame(e)):this.uiCanvas&&(this.uiCanvas.enabled=!1)}updateState(e,t){this.updateState_Entity(e,t),void 0!==e.backgroundColor&&this.setBackgroundColor(Au(e.backgroundColor,t.shared)),void 0!==e.fog&&this.updateFog(e.fog,t.shared),void 0!==e.ambient&&this.updateAmbientLight(e.ambient,t.shared),void 0!==e.ao&&this.updateAo(e.ao,t.shared),void 0!==e.shadow&&this.updateShadow(e.shadow)}createFrame(e,t){}raycast(e,t){super.raycast(e,t)}switchActiveCamera(e){e&&e.isDescendantOf(this)&&(this.activeCamera!==this.personalCamera&&(this.activeCamera.objectHelper.visible=!0),this.activeCamera=e,e.objectHelper.visible=!1)}get playCamera(){return this.scene?.find(this.data.publish.playCamera)??this.personalCamera}switchToPlayCamera(){this.switchActiveCamera(this.playCamera)}get penumbraSizeArray(){return null===this.penumbraSizeArrayCache&&this.updatePenumbraSizeArray(),this.penumbraSizeArrayCache}updatePenumbraSizeArray(){this.penumbraSizeArrayCache=[,,,,,].fill(.5);let e=0,t=0;this.traverseEntity(i=>{if(!i.visible)return!0;i instanceof Tz&&i.visible&&e<3&&(this.penumbraSizeArrayCache[e]=i.data.penumbraSize??.5,e+=1),i instanceof TU&&i.visible&&e<2&&(this.penumbraSizeArrayCache[3+t]=i.data.penumbraSize??.5,t+=1)})}raycastWithClones(e){let t=[],i=r=>{for(let s of r.children){let r=s.cloner;wQ.is(s)&&(s.visible||r?.object.data.visible)&&((ES(s)||EE(s)&&this.scene.enableHelpers&&s.objectHelper.visible)&&(e.intersectObject(s,!1,t),DS(s,e,t,!0)),i(s))}};return i(this),t}updateEntity2DByOp(e,t,i,r){this.uiCanvas?.updateEntity2DByOp(e,t,i,r)}},PI=class extends Ew(ld,TD){constructor(e,t,i){super(),this.super_Entity(e,t),this.castShadow=!0,this.shadow.mapSize.width=1024,this.shadow.mapSize.height=1024,this.shadow.normalBias=1,this.layers.enable(3);let r=this.shadow.camera;r.fov=90,r.aspect=1,r.near=100,r.far=2500;let s=new lZ(new ib(new iv(-r.far+this.position.x,-r.far+this.position.y,-r.far+this.position.z),new iv(r.far+this.position.x,r.far+this.position.y,r.far+this.position.z)),new ii(16755200));s.visible=!1,this.gizmos.shadowmap=s,this.update()}update(){if(this.shadow&&(this.shadow.camera.updateProjectionMatrix(),this.gizmos))for(let e in this.gizmos){let t=this.gizmos[e];if(t instanceof lZ){let e=this.shadow.camera,i=new iv(-e.far+this.position.x,-e.far+this.position.y,-e.far+this.position.z),r=new iv(e.far+this.position.x,e.far+this.position.y,e.far+this.position.z);t.box.set(i,r),t.updateMatrixWorld(!0)}}}updateMatrixWorld(e){super.updateMatrixWorld(e),this.objectHelper&&this.objectHelper.update(
6681)}updateState(e,t){this.updateState_Light(e,t),void 0!==e.distance&&(this.distance=e.distance),void 0!==e.decay&&(this.decay=e.decay),void 0!==e.shadowRadius&&(this.shadow.radius=e.shadowRadius),void 0!==e.shadowResolution&&(this.shadow.mapSize.set(e.shadowResolution,e.shadowResolution),this.shadow.map&&(this.shadow.map.dispose(),this.shadow.map=null))}},PO=class extends Mb{get forceComputeSize(){return!0}get shape(){return this.geometry.userData.shape}updateEntityBoxSize(e,t){let i=this.geometry.getAttribute("position");void 0!==i?SE(i,this.geometry.drawRange.start,this.geometry.drawRange.count<1/0?this.geometry.drawRange.count:i.count,e,t):super.updateEntityBoxSize(e,t)}},PR=class extends Mb{constructor(e,t,i){super(e,t,i),this._shapeId=null,this._context=i}updateState(e,t){super.updateState(e,t),this.updateShape(),this.refreshAttachedCloners(t)}updateShape(){let e,t={...this.data.geometry.extrusion.shape};for(let e in t)"string"==typeof t[e]&&(t[e]=this._context.shared.getVariable(t[e],[this.uuid,"geometry","extrusion","shape",e]));if("Custom"===t.type){let i=t.shapeId;if(i!==this._shapeId&&this.detachShape(),i){this._shapeId=i;let t=this._context.scene.find(i);t?.data&&(t.attachedPaths.add(this),e=t.geometry.userData?.shape),e||this._context.scene.addPendingCommand(()=>this.updateShape())}}else{let i;switch(t.type){case"Rectangle":i=wy;break;case"Ellipse":i=bH;break;case"Polygon":i=wp;break;case"Star":i=w_;break;default:throw Error(`Unknown shape type: ${t.type}`)}e=i.create({parameters:t}).userData.shape}let i=this.geometry;e&&i.inputs&&(i.inputs.shapeData=e,i.build())}detachShape(){null!==this._shapeId&&this._context.scene.find(this._shapeId)?.attachedPaths.delete(this)}createGeometryDelayed(e){this.geometryCreateDeleyed=e.shared,this.updateShape(),this.refreshAttachedPaths(e)}updateTransformState(e,t){return super.updateTransformState(e,t)}updateGeometryInteractions(e,t){super.updateGeometryInteractions(e,t),this.updateShape()}updateEntityBoxSize(e,t){let i=this.geometry.getAttribute("position");void 0!==i?SE(i,this.geometry.drawRange.start,this.geometry.drawRange.count<1/0?this.geometry.drawRange.count:i.count,e,t):super.updateEntityBoxSize(e,t)}},PL=class extends MK{constructor(e,t,i){super(e,t,i),this.data=t}},PB=class extends Eh(nd,EI){constructor(e,t,i){super(),"Instance"===t.type&&"string"==typeof e&&(t=this.transformAssignData(t,i)),this.super_Entity(e,t),this.objectHelper.update()}get isComponentRoot(){return"Component"===this.data.type&&"string"==typeof this.identity}get isInstanceRoot(){return"Instance"===this.data.type&&"string"==typeof this.identity}transformAssignData(e,t){let i=yA.getComponentData({scene:t.scene.data,shared:t.shared.data},e.component);if(!i)return{...v3.defaultData,...e,...uV(v3.defaultData,yi.rootOverrideProps)};{let t,r;for(let s of yi.rootOverrideProps)void 0===e[s]?(void 0===t&&(t={...e}),t[s]=i.data[s]):(void 0===r&&(r={}),r[s]=e[s],void 0===t&&(t={...e}),t[s]=p_.apply(i.data[s],e[s]));return this.overrideData=r,t}}updateByOp(e,t,i,r){let s;if(this.isInstanceRoot&&!r){if(t=this.transformAssignData(t,i),0===e.type&&0===e.path.length&&this.component)for(let t of yi.rootOverrideProps)t in e.props&&void 0===e.props[t]&&(void 0===s&&(s={...e,props:{...e.props}}),s.props[t]=this.component.data[t]);else if(0===e.type&&e.path.length>0&&yi.rootOverrideProps.includes(e.path[0])){let i=e.path[0];void 0===s&&(s={...e,path:[],props:{[i]:t[i]}})}}super.updateByOp(s??e,t,i,r)}updateState(e,t){this.updateState_Entity(e,t)}expandInstanceChildren(e){let t=this.data;if(void 0===this.component){let i=e.scene.find(t.component)??null,r=!1;if(i!==this.oldComponent){if(this.oldComponent){let t=0;for(let i of this.children)if(wQ.is(i))e.scene.disposeAndUnregisterEntityRecursivelyIfNotReregistered(i),Pz(i),t+=1;else break;this.children.splice(0,t)}r=!0}if(i){let s={};for(let a of(function e(t,i,r,s,a,o,l,h,c){if(l>50)return!1;if(s.component!==a){if(s.component){let e=s.component.instances.indexOf(s);e>=0&&s.component.instances.splice(e,1)}a.instances.find(e=>e===s)||a.instances.push(s),s.component=a}a instanceof PB&&a.isInstanceRoot&&a.expandInstanceChildren(t);let d=0;for(let u of a.children)if(wQ.is(u)){let a=[...i,..."string"==typeof u.identity?[u.identity]:u.identity],p=yt.resolve(r,a,1);null==p||p instanceof pA||(Object.setPrototypeOf(p,pA.prototype),console.error("wrong prototype"));let f=null,m;if(!h){let e=s.children[d];if(null!==(f=wQ.is(e)?e:null)){let e=PF(f,u,p,a);m=e>=1?f.stateSelection:void 0,2!==e&&(f=null)}if(null===f&&null!==(f=t.scene.findInstance(a)??null)){let e=PF(f,u,p,a);if(m=e>=1?f.stateSelection:void 0,2!==e)f=null;else{let e=f.parent.children.indexOf(f);f.parent.children.splice(e,1),s.children.splice(d,0,f),f.parent===s?e<=d&&console.error("not possible"):(f.parent=s,f.matrixWorldNeedsUpdate=!0,f.resetBBoxNeedsUpdate(),f.updateVisible(),t.pendingDeletes.delete(f))}}}if(null===f){let e=p?p_.apply(u.data,p):u.data;gc.is(e.type)&&(e={...e,type:"Empty"}),(f=xP.createEntity(a,e,t)).overrideData=p,s.add(f),s.children.splice(s.children.length-1,1),s.children.splice(d,0,f),f.updateState(f.data,t),m&&f.changeSelectedState(m,t),t.scene.registerInstanceAndSetUuid(f)}f.isBone&&(c[f.identity[f.identity.length-1]]=f.uuid),d+=1,e(t,i,r,f,u,o,l+1,h,c)}if(!h){let e=d;for(;;){let e=s.children[d];if(wQ.is(e))t.pendingDeletes.add(e);else break;d+=1}s.children.splice(e,d-e)}return!0}
6681(e,[this.uuid],t.overrides,this,i,i,0,r,s),this.children))if(wQ.is(a)){let t=a.data;"Empty"===t.type&&t.animations&&a.traverseEntity(t=>{let i=t.dataPatched;if(t instanceof Mb&&i.bones&&i.boneInverses){let i=t.dataPatched;if(i.bones&&i.boneInverses){let r=new nT(i.bones.map(t=>e.scene.find(s[t])),i.boneInverses.map(e=>new iX().fromArray(e)));t.bind(r,t.bindMatrix)}}else t.matrixAutoUpdate=!0})}}this.oldComponent=this.component}}};function Pz(e){if(e.component){let t=e.component.instances.indexOf(e);for(let i of(t>=0&&e.component.instances.splice(t,1),e.children))wQ.is(i)&&Pz(i)}}function PF(e,t,i,r){return e.component===t&&uL(e.identity,r)?e.overrideData===i?2:1:0}var PN=class extends Eh(nA,EI){constructor(e,t){super(),this.super_Entity(e,t),this.objectHelper.update(),this.matrixAutoUpdate=!0}updateState(e,t){this.updateState_Entity(e,t)}},Pk=class extends Mb{constructor(e,t,i){super(e,t,i),this.onBeforeRender=e=>{this.uiCanvas.render(e)},this.uiCanvas=new PT(e+"-canvas",t.geometry.width,t.geometry.height,i),this.uiCanvas.promise.then(()=>{this.applyFrame(this.dataPatched.geometry.frame,i.shared)})}updateByPatchedOpGeometry(e,t,i){super.updateByPatchedOpGeometry(e,t,i),0===e.type&&(void 0!==e.props.frame&&this.applyFrame(e.props.frame,i.shared),(void 0!==e.props.width||void 0!==e.props.height)&&this.applySize(e.props,i.shared))}applySize(e,t){let i=e?.width??this.dataPatched.geometry.width,r=e?.height??this.dataPatched.geometry.height;this.uiCanvas.applySize({width:i,height:r}),this.applyGeometryParametersFromFrame(t)}applyFrame(e,t){this.uiCanvas.applyFrame(e),this.applyGeometryParametersFromFrame(t),this.applyMaterialParametersFromFrame({shared:t})}applyGeometryParametersFromFrame(e){let t=this.frame;t&&(Object.assign(this.data,{geometry:Object.assign(this.data.geometry,{cornerRadius:t.cornerRadius,cornerType:0})}),Object.assign(this.dataPatched,{geometry:Object.assign(this.dataPatched.geometry,{cornerRadius:t.cornerRadius,cornerType:0})}),this.localGeometry?.dispose(),this.localGeometry=w4(this.dataPatched.geometry,e,this.data.flatShading,this))}applyMaterialParametersFromFrame(e){let t=this.frame;if(t){let i=t.data.backgroundBlur;Object.assign(this.data.material.layers[0].data.texture,{image:this.uiCanvas.uuid}),Object.assign(this.data.material.layers[1].data,{roughness:i.radius,alpha:i.enabled?1:0}),Object.assign(this.dataPatched.material.layers[0].data.texture,{image:this.uiCanvas.uuid}),Object.assign(this.dataPatched.material.layers[1].data,{roughness:i.radius,alpha:i.enabled?1:0}),this.material.reset(this.dataPatched.material,e,!0)}}updateEntity2DByOp(e,t,i,r){this.uiCanvas.updateEntity2DByOp(e,t,i,r),e===this.frameId&&0===t.type&&(void 0!==t.props.cornerRadius?this.applyGeometryParametersFromFrame(r):pX(t.path,["backgroundBlur"])&&this.applyMaterialParametersFromFrame({shared:r}))}get frame(){return this.uiCanvas.frame}get frameId(){return this.frame?.uuid}removeInteractionGeometry(e){super.removeInteractionGeometry(e),this.applySize({},e)}updateGeometryInteractions(e,t){super.updateGeometryInteractions(e,t),this.applySize({width:e.width,height:e.height},t)}},PU=class{constructor(e,t,i){this.variables=[],this.currentTextureIndex=0;let r=1015,s=new nb,a=new r6;a.position.z=1;let o={passThruTexture:{value:null}},l=d(`uniform sampler2D passThruTexture; 6682 6683void main() { 6684 6685 vec2 uv = gl_FragCoord.xy / resolution.xy; 6686 6687 gl_FragColor = texture2D( passThruTexture, uv ); 6688 6689} 6690`,o),h=new rK(new sc(2,2),l);
6690function c(i){i.defines.resolution="vec2( "+e.toFixed(1)+", "+t.toFixed(1)+" )"}function d(e,t){let i=new r5({uniforms:t=t||{},vertexShader:`void main() { 6691 6692 gl_Position = vec4( position, 1.0 ); 6693 6694} 6695`,fragmentShader:e});return c(i),i}s.add(h),this.setDataType=function(e){return r=e,this},this.addVariable=function(e,t,i){let r={name:e,initialValueTexture:i,material:this.createShaderMaterial(t),dependencies:null,renderTargets:[],wrapS:null,wrapT:null,minFilter:1003,magFilter:1003};return this.variables.push(r),r},this.setVariableDependencies=function(e,t){e.dependencies=t},this.init=function(){if(!1===i.capabilities.isWebGL2&&!1===i.extensions.has("OES_texture_float"))return"No OES_texture_float support for float textures.";if(0===i.capabilities.maxVertexTextures)return"No support for vertex shader textures.";for(let i=0;i<this.variables.length;i++){let r=this.variables[i];r.renderTargets[0]=this.createRenderTarget(e,t,r.wrapS,r.wrapT,r.minFilter,r.magFilter),r.renderTargets[1]=this.createRenderTarget(e,t,r.wrapS,r.wrapT,r.minFilter,r.magFilter),this.renderTexture(r.initialValueTexture,r.renderTargets[0]),this.renderTexture(r.initialValueTexture,r.renderTargets[1]);let s=r.material,a=s.uniforms;if(null!==r.dependencies)for(let e=0;e<r.dependencies.length;e++){let t=r.dependencies[e];if(t.name!==r.name){let e=!1;for(let i=0;i<this.variables.length;i++)if(t.name===this.variables[i].name){e=!0;break}if(!e)return"Variable dependency not found. Variable="+r.name+", dependency="+t.name}a[t.name]={value:null},s.fragmentShader=` 6696uniform sampler2D `+t.name+`; 6697`+s.fragmentShader}}return this.currentTextureIndex=0,null},this.compute=function(){let e=this.currentTextureIndex,t=0===this.currentTextureIndex?1:0;for(let i=0,r=this.variables.length;i<r;i++){let r=this.variables[i];if(null!==r.dependencies){let t=r.material.uniforms;for(let i=0,s=r.dependencies.length;i<s;i++){let s=r.dependencies[i];t[s.name].value=s.renderTargets[e].texture}}this.doRenderTarget(r.material,r.renderTargets[t])}this.currentTextureIndex=t},this.getCurrentRenderTarget=function(e){return e.renderTargets[this.currentTextureIndex]},this.getAlternateRenderTarget=function(e){return e.renderTargets[0===this.currentTextureIndex?1:0]},this.dispose=function(){h.geometry.dispose(),h.material.dispose();let e=this.variables;for(let t=0;t<e.length;t++){let i=e[t];i.initialValueTexture&&i.initialValueTexture.dispose();let r=i.renderTargets;for(let e=0;e<r.length;e++)r[e].dispose()}},this.addResolutionDefine=c,this.createShaderMaterial=d,this.createRenderTarget=function(i,s,a,o,l,h){return a=a||1001,o=o||1001,l=l||1003,h=h||1003,new id(i=i||e,s=s||t,{wrapS:a,wrapT:o,minFilter:l,magFilter:h,format:1023,type:r,depthBuffer:!1})},this.createTexture=function(){let i=new nM(new Float32Array(e*t*4),e,t,1023,1015);return i.needsUpdate=!0,i},this.renderTexture=function(e,t){o.passThruTexture.value=e,this.doRenderTarget(l,t),o.passThruTexture.value=null},this.doRenderTarget=function(e,t){let r=i.getRenderTarget(),o=i.xr.enabled,c=i.shadowMap.autoUpdate,d=i.outputEncoding,u=i.toneMapping;i.xr.enabled=!1,i.shadowMap.autoUpdate=!1,i.outputEncoding=3e3,i.toneMapping=0,h.material=e,i.setRenderTarget(t),i.render(s,a),h.material=l,i.xr.enabled=o,i.shadowMap.autoUpdate=c,i.outputEncoding=d,i.toneMapping=u,i.setRenderTarget(r)}}},PV=new rx,Pj=new iv,PG=class{constructor(e){let t=e.geometry;if(!t.isBufferGeometry||3!==t.attributes.position.itemSize)throw Error("THREE.MeshSurfaceSampler: Requires BufferGeometry triangle mesh.");t.index&&(console.warn("THREE.MeshSurfaceSampler: Converting geometry to non-indexed BufferGeometry."),t=t.toNonIndexed()),this.geometry=t,this.randomFunction=Math.random,this.positionAttribute=this.geometry.getAttribute("position"),this.colorAttribute=this.geometry.getAttribute("color"),this.weightAttribute=null,this.distribution=null}setWeightAttribute(e){return this.weightAttribute=e?this.geometry.getAttribute(e):null,this}build(){let e=this.positionAttribute,t=this.weightAttribute,i=new Float32Array(e.count/3);for(let r=0;r<e.count;r+=3){let s=1;t&&(s=t.getX(r)+t.getX(r+1)+t.getX(r+2)),PV.a.fromBufferAttribute(e,r),PV.b.fromBufferAttribute(e,r+1),PV.c.fromBufferAttribute(e,r+2),s*=PV.getArea(),i[r/3]=s}this.distribution=new Float32Array(e.count/3);let r=0;for(let e=0;e<i.length;e++)r+=i[e],this.distribution[e]=r;return this}setRandomGenerator(e){return this.randomFunction=e,this}sample(e,t,i){let r=this.distribution[this.distribution.length-1],s=this.binarySearch(this.randomFunction()*r);return this.sampleFace(s,e,t,i)}binarySearch(e){let t=this.distribution,i=0,r=t.length-1,s=-1;for(;i<=r;){let a=Math.ceil((i+r)/2);if(0===a||t[a-1]<=e&&t[a]>e){s=a;break}e<t[a]?r=a-1:i=a+1}return s}sampleFace(e,t,i,r){let s=this.randomFunction(),a=this.randomFunction();return s+a>1&&(s=1-s,a=1-a),PV.a.fromBufferAttribute(this.positionAttribute,3*e),PV.b.fromBufferAttribute(this.positionAttribute,3*e+1),PV.c.fromBufferAttribute(this.positionAttribute,3*e+2),t.set(0,0,0).addScaledVector(PV.a,s).addScaledVector(PV.b,a).addScaledVector(PV.c,1-(s+a)),void 0!==i&&PV.getNormal(i),void 0!==r&&void 0!==this.colorAttribute&&(PV.a.fromBufferAttribute(this.colorAttribute,3*e),PV.b.fromBufferAttribute(this.colorAttribute,3*e+1),PV.c.fromBufferAttribute(this.colorAttribute,3*e+2),Pj.set(0,0,0).addScaledVector(PV.a,s).addScaledVector(PV.b,a).addScaledVector(PV.c,1-(s+a)),r.r=Pj.x,r.g=Pj.y,r.b=Pj.z),this}};function PH(e,t){let i=new Float32Array(4*t*t);for(let r=0;r<t*t;r++)i[4*r]=e[3*r],i[4*r+1]=e[3*r+1],i[4*r+2]=e[3*r+2],i[4*r+3]=0;let r=new nM(i,t,t,1023,1015);return r.needsUpdate=!0,r}var PW=` 6698// uniform sampler2D uCurrentPosition; // Pass in the variable from GPGPU 6699// uniform sampler2D uCurrentVelocity; // Pass in the variable from GPGPU 6700// uniform sampler2D uCurrentEmissionRate; // Pass in the variable from GPGPU 6701uniform sampler2D uOriginalPosition; 6702uniform float uTime; 6703uniform float uSpeed; // update speed of the particles 6704uniform vec3 uWorldOffset; 6705uniform vec4 uWorldQuaternion; 6706uniform float uMaxLifeTime; 6707uniform vec3 uEmitterSize; 6708uniform float uFPSRatio; // 1 for 60 FPS 6709 6710float random (vec2 st) { 6711 return fract(sin(dot(st.xy, 6712 vec2(12.9898,78.233)))* 6713 43758.5453123); 6714} 6715vec3 applyQuaternionToVector( vec4 q, vec3 v ){ 6716 return v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v ); 6717} 6718 6719vec3 applyForce(vec3 force, float mass) { 6720 vec3 acceleration = force / mass; 6721 6722 return acceleration; 6723 } 6724 6725 6726void main() { 6727 vec2 vUv = gl_FragCoord.xy / resolution.xy; 6728 vec3 position = texture2D( uCurrentPosition, vUv ).xyz; 6729 float currentLife = texture2D( uCurrentPosition, vUv ).w; // from 1 to 0
6730 float isSpawning = texture2D( uCurrentEmissionRate, vUv ).r; // 1. = spawning, 0. = not spawning 6731 float isActive = texture2D( uCurrentEmissionRate, vUv ).g; // 1. = active, 0. = not active 6732 float timeStart = texture2D( uCurrentEmissionRate, vUv ).b; // timeStart in seconds when the particle was emitted 6733 vec3 originalPosition = ((texture2D( uOriginalPosition, vUv ).xyz) * uEmitterSize); 6734 vec3 velocity = texture2D( uCurrentVelocity, vUv ).xyz; 6735 float collisionFlag = texture2D( uCurrentVelocity, vUv ).w; // 1. = collided, 0. = not collided 6736 float lifeTime = uMaxLifeTime; 6737 6738 // Calculate the position adjustment based on collision 6739 // if (collisionFlag > .5) { 6740 float isColliding = step(0.5, collisionFlag); // 1.0 if collisionFlag > 0.5, otherwise 0.0 6741 float bounceOffset = 3.0 * isColliding; // Becomes 3.0 if colliding, 0.0 otherwise 6742 vec3 collisionAdjustedVelocity = velocity * (1.0 + bounceOffset); 6743 6744 // Update position based on collision or normal movement 6745 vec3 fpsVelocity = velocity * min(uFPSRatio, 5.0); 6746 position += mix(fpsVelocity, collisionAdjustedVelocity, isColliding); 6747 6748 // EMISSION RATE - BIRTH 6749 // if (isSpawning == 1.0) { 6750 // Better Approach to avoid If statement 6751 vec3 newPosition = applyQuaternionToVector(uWorldQuaternion, originalPosition) + uWorldOffset; 6752 originalPosition = mix(originalPosition, newPosition, isSpawning); 6753 position = mix(position, originalPosition, isSpawning);; 6754 timeStart = mix(timeStart, uTime, isSpawning); 6755 6756 // Calculate timeLeft for life normalization
6757 float timeLeft = max(lifeTime - (uTime - timeStart), 0.0); 6758 float life_Normalize = timeLeft / lifeTime; 6759 6760 // Use isActive to blend between the calculated color and black 6761 vec4 activeColor = vec4(position, life_Normalize); 6762 // if (isActive == 1.0) { 6763 gl_FragColor = mix(vec4(0.0), activeColor, isActive); 6764 6765} 6766`,Pq=` 6767 #ifdef USE_COLLIDER 6768 float restitution = max(uBounce * 2., .01); // Energy Loss 6769 // SPHERE COLLIDER 6770 // ************************************************************** 6771 #ifdef USE_SPHERE_COLLIDER 6772 // Convert collider size to radii (assuming uColliderSize is the diameter in each axis) 6773 vec3 radii = uColliderSize; 6774 // Adjust position relative to collider 6775 vec3 relPos = position - uColliderPos; 6776 // Apply rotation of the collider to the relative position 6777 relPos = applyQuaternionToVector(uColliderQuaternionInvert, relPos); 6778 // Scale relative position by radii (for ellipsoid collision detection) 6779 vec3 scaledPos = relPos / radii; 6780 // Calculate ellipsoidal distance 6781 float dist = length(scaledPos); // Distance in terms of ellipsoid 6782
6783 // Check for collision 6784 if (dist <= 1. + particleSize / length(radii) && collisionFlag == 0.0) { 6785 // Compute the normal at the collision point, accounting for particle size 6786 vec3 adjustedPos = scaledPos * (1.0 + particleSize / length(radii)); 6787 // Compute the normal at the collision point 6788 vec3 normal = ellipsoidNormal(adjustedPos, radii); 6789 // Rotate the normal back to world space 6790 normal = applyQuaternionToVector(uColliderQuaternion, normal); 6791 // Reflect the velocity vector off the normal 6792 velocity = reflect(velocity, normal) * restitution; 6793 6794 collisionFlag = 1.0; 6795 } else { 6796 collisionFlag = 0.0; 6797 } 6798 #endif 6799 6800 // BOX COLLIDER or PLANE COLLIDER 6801 // ************************************************************** 6802 #ifdef USE_BOX_COLLIDER 6803 // Box dimensions and repulsion variables 6804 vec3 boxHalfSize = uColliderSize / 2.0; 6805 // Convert world position to box's local space 6806 vec3 localPos = applyQuaternionToVector(uColliderQuaternionInvert, position - uColliderPos); 6807 // Collision detection 6808 vec3 localDistance = abs(localPos) - boxHalfSize; 6809 float distToSurface = max(localDistance.x, max(localDistance.y, localDistance.z)); 6810 6811 // Collision Detected 6812 if (distToSurface <= particleSize * 0.5 && collisionFlag == 0.0) { 6813 // Find the nearest face normal for bounce direction 6814 vec3 normal; 6815 if (localDistance.x > localDistance.y && localDistance.x > localDistance.z) { 6816 normal = vec3(sign(localPos.x), 0.0, 0.0); 6817 } else if (localDistance.y > localDistance.z) { 6818 normal = vec3(0.0, sign(localPos.y), 0.0); 6819 } else { 6820 normal = vec3(0.0, 0.0, sign(localPos.z)); 6821 } 6822 // Rotate normal back to world space 6823 normal = applyQuaternionToVector(uColliderQuaternion, normal); 6824 // Reflect velocity and apply repulsion force 6825 velocity = reflect(velocity, normal) * restitution; 6826 6827 collisionFlag = 1.0; 6828 } else { 6829 collisionFlag = 0.0; 6830 } 6831 #endif 6832 #endif 6833 // END COLLIDER 6834`,PX=` 6835 #ifdef USE_ATTRACTOR 6836 6837 #ifdef USE_SPHERE_COLLIDER 6838 // Convert collider size to radii (assuming uColliderSize is the diameter in each axis) 6839 vec3 radii = uColliderSize; 6840 // Adjust position relative to collider 6841 vec3 relPos = position - uColliderPos; 6842 // Apply rotation of the collider to the relative position 6843 relPos = applyQuaternionToVector(uColliderQuaternionInvert, relPos); 6844 // Scale relative position by radii (for ellipsoid collision detection) 6845 vec3 scaledPos = relPos / radii; 6846 // Calculate ellipsoidal distance 6847 float distToSurface = length(scaledPos); // Distance in terms of ellipsoid 6848 float insideCheck = 1.0; 6849 6850 #endif 6851 6852 6853 #ifdef USE_BOX_COLLIDER 6854 // Box dimensions 6855 vec3 boxHalfSize = uColliderSize / 2.0; 6856 // Convert world position to box's local space 6857 vec3 localPos = applyQuaternionToVector(uColliderQuaternionInvert, position - uColliderPos); 6858 vec3 localDistance = abs(localPos) - boxHalfSize; 6859 float distToSurface = max(localDistance.x, max(localDistance.y, localDistance.z)); 6860 float insideCheck = particleSize; 6861 #endif 6862 6863 // Apply vortex force inside the Helper 6864 #ifdef USE_FORCE_LOCAL_SPACE 6865 if (distToSurface <= insideCheck ) { 6866 // Define parameters for the attractor field 6867 #ifdef USE_SPHERE_COLLIDER 6868 float attractorStrength = (1.0 - distToSurface ) * uForceIntensity; // Adjust as needed 6869 #endif 6870 6871 #ifdef USE_BOX_COLLIDER 6872 float attractorStrength = max((1.0 - insideCheck / distToSurface), 0.) * uForceIntensity; // Adjust as needed 6873 #endif 6874 6875 float attractorDamping = uForceDamping; // Adjust as needed (higher values will attenuate velocity more) 6876 6877 // Use the same radii calculation code as for the collider 6878 vec3 attractorRadii = uColliderSize; 6879 // Adjust position relative to attractor center 6880 vec3 relPos = position - uColliderPos; 6881 // Apply rotation of the collider to the relative position 6882 relPos = applyQuaternionToVector(uColliderQuaternionInvert, relPos); 6883 // Scale relative position by radii (for ellipsoid attraction) 6884 vec3 scaledPos = relPos / attractorRadii; 6885 6886 // Calculate ellipsoidal distance as attractor radius 6887 float attractorRadius = length(scaledPos); 6888 // Calculate the distance from the attractor center 6889 vec3 relativePosition = position - uColliderPos; 6890 // Calculate the force vector towards the attractor center 6891 vec3 attractorForce = normalize(relativePosition) * attractorStrength; 6892 // Apply the attractor force to the particle 6893 velocity -= attractorForce; 6894 // Attenuate the particle's velocity 6895 velocity *= attractorDamping; 6896 } 6897 #else 6898 // Calculate the distance from the attractor center 6899 vec3 relativePosition = position - uColliderPos; 6900 // Calculate the force vector towards the attractor center 6901 vec3 attractorForce = normalize(relativePosition) * uForceIntensity; 6902 // Apply the attractor force to the particle 6903 velocity -= attractorForce; 6904 // Attenuate the particle's velocity 6905 velocity *= uForceDamping; 6906 #endif 6907 #endif 6908`,PY=` 6909 #ifdef USE_VORTEX 6910 // Box dimensions 6911 vec3 boxHalfSize = uColliderSize / 2.0; 6912 // Convert world position to box's local space 6913 vec3 localPos = applyQuaternionToVector(uColliderQuaternionInvert, position - uColliderPos); 6914 vec3 localDistance = abs(localPos) - boxHalfSize; 6915 float distToSurface = max(localDistance.x, max(localDistance.y, localDistance.z)); 6916 6917 // Apply vortex force inside the box 6918 if (distToSurface <= particleSize) { 6919 float vortexStrength = uForceIntensity; 6920 vec3 localTopCenter = vec3(0.0, 0., 0.0); 6921 6922 // Transform the local top center to the world space 6923 vec3 vortexCenter = uColliderPos + applyQuaternionToVector(uColliderQuaternion, localTopCenter); 6924 // Calculate the vector from particle to vortex center 6925 vec3 vortexVector = vortexCenter - position; 6926 6927 // Calculate the rotation axis from the inverse of the collider's quaternion and the fixed up vector 6928 // Note: important to add a tiny z component to the up vector to avoid instability 6929 vec3 upVector = vec3(0.0, 1.0, 0.01); 6930 vec3 rotationAxis = cross(upVector, applyQuaternionToVector(uColliderQuaternion, vortexVector)); 6931 rotationAxis = normalize(rotationAxis); 6932 6933 // Add rotational component to velocity 6934 float rotationSpeed = length(vortexVector * vortexStrength * 3.0) ; 6935 6936 vec3 rotationVelocity = rotationAxis * rotationSpeed; 6937 // velocity += rotationVelocity * 0.005 ; 6938 velocity = rotationVelocity * 0.005 ; 6939 6940 // Calculate vortex force 6941 // vec3 vortexForce = normalize(vortexVector) * uSpeed * .1 ; 6942 // Apply the vortex force to the particle 6943 vec3 originDirection = applyQuaternionToVector(uWorldQuaternion, directions); 6944 velocity += applyForce( originDirection * uSpeed * (1. - uForceDamping) , mass * .5); 6945 } 6946 #endif 6947`,PQ=` 6948// uniform sampler2D uCurrentPosition; // Pass in the variable from GPGPU 6949// uniform sampler2D uCurrentVelocity; // Pass in the variable from GPGPU 6950// uniform sampler2D uCurrentEmissionRate; // Pass in the variable from GPGPU 6951uniform sampler2D uOriginalPosition; 6952uniform sampler2D uDirections; 6953uniform vec3 uDirectionsAxis; 6954uniform vec4 uWorldQuaternion; 6955uniform vec3 uGravity; 6956uniform float uNoiseStrength; // Variation of the noise 6957uniform float uNoiseScale; // Scale of the noise 6958uniform float uNoiseSeed; // Seed of the noise 6959uniform float particleSize; 6960uniform float uSpeed; // update speed of the particles
6961uniform float uRandomMassFactor; 6962 6963// COLLIDER 6964uniform vec3 uColliderPos; // Collider Position 6965uniform vec3 uColliderSize; // Collider Dimension 6966uniform vec4 uColliderQuaternion; // Collider Rotation 6967uniform vec4 uColliderQuaternionInvert; // Collider Rotation 6968uniform float uBounce; // Bounce factor 6969uniform float uForceDamping; 6970uniform float uForceIntensity; 6971 6972 6973 6974 6975 vec3 mod289(vec3 x) { 6976 return x - floor(x * (1.0 / 289.0)) * 289.0; 6977 } 6978 6979 vec4 mod289(vec4 x) { 6980 return x - floor(x * (1.0 / 289.0)) * 289.0; 6981 } 6982 6983 vec4 permute(vec4 x) { 6984 return mod289(((x*34.0)+1.0)*x); 6985 } 6986 6987 vec4 taylorInvSqrt(vec4 r) 6988 { 6989 return 1.79284291400159 - 0.85373472095314 * r; 6990 } 6991 6992 vec3 fade(vec3 t) { 6993 return t*t*t*(t*(t*6.0-15.0)+10.0); 6994} 6995 6996 float snoise(vec3 v) 6997 { 6998 const vec2 C = vec2(1.0/6.0, 1.0/3.0) ; 6999 const vec4 D = vec4(0.0, 0.5, 1.0, 2.0); 7000 vec3 i = floor(v + dot(v, C.yyy) ); 7001 vec3 x0 = v - i + dot(i, C.xxx) ; 7002 vec3 g = step(x0.yzx, x0.xyz); 7003 vec3 l = 1.0 - g; 7004 vec3 i1 = min( g.xyz, l.zxy ); 7005 vec3 i2 = max( g.xyz, l.zxy ); 7006 vec3 x1 = x0 - i1 + C.xxx; 7007 vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y 7008 vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y 7009 7010 // Permutations 7011 i = mod289(i); 7012 vec4 p = permute( permute( permute( 7013 i.z + vec4(0.0, i1.z, i2.z, 1.0 )) 7014 + i.y + vec4(0.0, i1.y, i2.y, 1.0 )) 7015 + i.x + vec4(0.0, i1.x, i2.x, 1.0 )); 7016 7017 // Gradients: 7x7 points over a square, mapped onto an octahedron. 7018 // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) 7019 float n_ = 0.142857142857; // 1.0/7.0 7020 vec3 ns = n_ * D.wyz - D.xzx; 7021 7022 vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7) 7023 7024 vec4 x_ = floor(j * ns.z); 7025 vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N) 7026 7027 vec4 x = x_ *ns.x + ns.yyyy; 7028 vec4 y = y_ *ns.x + ns.yyyy; 7029 vec4 h = 1.0 - abs(x) - abs(y); 7030 7031 vec4 b0 = vec4( x.xy, y.xy ); 7032 vec4 b1 = vec4( x.zw, y.zw ); 7033 7034 vec4 s0 = floor(b0)*2.0 + 1.0; 7035 vec4 s1 = floor(b1)*2.0 + 1.0; 7036 vec4 sh = -step(h, vec4(0.0)); 7037 7038 vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ; 7039 vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ; 7040 7041 vec3 p0 = vec3(a0.xy,h.x); 7042 vec3 p1 = vec3(a0.zw,h.y); 7043 vec3 p2 = vec3(a1.xy,h.z); 7044 vec3 p3 = vec3(a1.zw,h.w); 7045 7046 //Normalise gradients 7047 vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3))); 7048 p0 *= norm.x; 7049 p1 *= norm.y; 7050 p2 *= norm.z; 7051 p3 *= norm.w; 7052 7053 // Mix final noise value 7054 vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0); 7055 m = m * m; 7056 return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1), 7057 dot(p2,x2), dot(p3,x3) ) ); 7058 } 7059 7060 vec3 snoiseVec3( vec3 x ){ 7061 7062 float s = snoise(vec3( x )); 7063 float s1 = snoise(vec3( x.y - 19.1 , x.z + 33.4 , x.x + 47.2 )); 7064 float s2 = snoise(vec3( x.z + 74.2 , x.x - 124.5 , x.y + 99.4 )); 7065 vec3 c = vec3( s , s1 , s2 ); 7066 return c; 7067 7068 } 7069 7070 7071 vec3 curlNoise( vec3 p, float seed){ 7072 p += seed; 7073 const float e = .1; 7074 vec3 dx = vec3( e , 0.0 , 0.0 ); 7075 vec3 dy = vec3( 0.0 , e , 0.0 ); 7076 vec3 dz = vec3( 0.0 , 0.0 , e ); 7077 7078 vec3 p_x0 = snoiseVec3( p - dx ); 7079 vec3 p_x1 = snoiseVec3( p + dx ); 7080 vec3 p_y0 = snoiseVec3( p - dy ); 7081 vec3 p_y1 = snoiseVec3( p + dy ); 7082 vec3 p_z0 = snoiseVec3( p - dz ); 7083 vec3 p_z1 = snoiseVec3( p + dz ); 7084 7085 float x = p_y1.z - p_y0.z - p_z1.y + p_z0.y; 7086 float y = p_z1.x - p_z0.x - p_x1.z + p_x0.z; 7087 float z = p_x1.y - p_x0.y - p_y1.x + p_y0.x; 7088 7089 const float divisor = 1.0 / ( 2.0 * e ); 7090 return normalize( vec3( x , y , z ) * divisor ); 7091 7092 } 7093 7094 7095// Classic Perlin noise 7096float cnoise(vec3 P) 7097{ 7098 vec3 Pi0 = floor(P); // Integer part for indexing 7099 vec3 Pi1 = Pi0 + vec3(1.0); // Integer part + 1 7100 Pi0 = mod289(Pi0); 7101 Pi1 = mod289(Pi1); 7102 vec3 Pf0 = fract(P); // Fractional part for interpolation 7103 vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0 7104 vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x); 7105 vec4 iy = vec4(Pi0.yy, Pi1.yy); 7106 vec4 iz0 = Pi0.zzzz; 7107 vec4 iz1 = Pi1.zzzz; 7108 7109 vec4 ixy = permute(permute(ix) + iy); 7110 vec4 ixy0 = permute(ixy + iz0); 7111 vec4 ixy1 = permute(ixy + iz1); 7112 7113 vec4 gx0 = ixy0 * (1.0 / 7.0); 7114 vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5; 7115 gx0 = fract(gx0); 7116 vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0); 7117 vec4 sz0 = step(gz0, vec4(0.0)); 7118 gx0 -= sz0 * (step(0.0, gx0) - 0.5); 7119 gy0 -= sz0 * (step(0.0, gy0) - 0.5); 7120 7121 vec4 gx1 = ixy1 * (1.0 / 7.0); 7122 vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5; 7123 gx1 = fract(gx1); 7124 vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1); 7125 vec4 sz1 = step(gz1, vec4(0.0)); 7126 gx1 -= sz1 * (step(0.0, gx1) - 0.5); 7127 gy1 -= sz1 * (step(0.0, gy1) - 0.5); 7128 7129 vec3 g000 = vec3(gx0.x,gy0.x,gz0.x); 7130 vec3 g100 = vec3(gx0.y,gy0.y,gz0.y); 7131 vec3 g010 = vec3(gx0.z,gy0.z,gz0.z); 7132 vec3 g110 = vec3(gx0.w,gy0.w,gz0.w); 7133 vec3 g001 = vec3(gx1.x,gy1.x,gz1.x); 7134 vec3 g101 = vec3(gx1.y,gy1.y,gz1.y); 7135 vec3 g011 = vec3(gx1.z,gy1.z,gz1.z); 7136 vec3 g111 = vec3(gx1.w,gy1.w,gz1.w); 7137 7138 vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); 7139 g000 *= norm0.x; 7140 g010 *= norm0.y; 7141 g100 *= norm0.z; 7142 g110 *= norm0.w; 7143 vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); 7144 g001 *= norm1.x; 7145 g011 *= norm1.y; 7146 g101 *= norm1.z; 7147 g111 *= norm1.w; 7148 7149 float n000 = dot(g000, Pf0); 7150 float n100 = dot(g100, vec3(Pf1.x, Pf0.yz)); 7151 float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z)); 7152 float n110 = dot(g110, vec3(Pf1.xy, Pf0.z)); 7153 float n001 = dot(g001, vec3(Pf0.xy, Pf1.z)); 7154 float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z)); 7155 float n011 = dot(g011, vec3(Pf0.x, Pf1.yz)); 7156 float n111 = dot(g111, Pf1); 7157 7158 vec3 fade_xyz = fade(Pf0); 7159 vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z); 7160 vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y); 7161 float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); 7162 return 2.2 * n_xyz; 7163} 7164 7165 7166vec3 fbm_vec3(vec3 p, float frequency, float offset) 7167{ 7168 return vec3( 7169 cnoise((p+vec3(offset))*frequency), 7170 cnoise((p+vec3(offset+20.0))*frequency), 7171 cnoise((p+vec3(offset-30.0))*frequency) 7172 ); 7173} 7174 7175 7176float rand(vec2 co){ 7177 return fract(sin(dot(co, vec2(12.9898, 78.233))) * 43758.5453); 7178} 7179vec3 applyQuaternionToVector( vec4 q, vec3 v ){ 7180 return v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v ); 7181 } 7182vec3 applyForce(vec3 force, float mass) { 7183 vec3 acceleration = force / mass; 7184 7185 return acceleration; 7186} 7187 7188vec4 conjugate(vec4 q) { 7189 return vec4(q.w, -q.x, -q.y, -q.z); 7190} 7191 7192// Function to compute the normal of the ellipsoid at a given point 7193vec3 ellipsoidNormal(vec3 p, vec3 radii) { 7194 return normalize(p / (radii * radii)); 7195} 7196 7197float friction = .3; 7198 7199void main() { 7200 vec2 vUv = gl_FragCoord.xy / resolution.xy; 7201 vec3 position = texture2D( uCurrentPosition, vUv ).xyz; 7202 vec3 originalPosition = texture2D( uOriginalPosition, vUv ).xyz; 7203 float timeLeft = texture2D( uCurrentPosition, vUv ).w; 7204 vec3 directions = texture2D( uDirections, vUv ).xyz; 7205 vec3 velocity = texture2D( uCurrentVelocity, vUv ).xyz; 7206 float mass = rand(originalPosition.xy) * 0.5 + 0.5;
7207 float isSpawning = texture2D( uCurrentEmissionRate, vUv ).x; // 1. = spawning, 0. = not spawning 7208 float isActive = texture2D( uCurrentEmissionRate, vUv ).y; // 1. = active, 0. = not active 7209 float collisionFlag =texture2D( uCurrentVelocity, vUv ).w; // Indicate collision 7210 7211 // Randomness Mass 7212 mass = (1.0 - (uRandomMassFactor * mass)); 7213 7214 if (isActive == 1.0) { 7215 // ************************************************************** 7216 // FORCES NOISES 7217 // ************************************************************** 7218 #ifdef USE_CURL_NOISE 7219 if (uNoiseScale > 0.0 ) { 7220 velocity = curlNoise(position * uNoiseScale * .002, uNoiseSeed) * ( uNoiseStrength + 1.0) * .05 * uSpeed; 7221 } 7222 // Variation of the noise Over Time 7223 if (uNoiseStrength > 0.0 && uNoiseScale == 0.0 ) { 7224 velocity += curlNoise( position, uNoiseSeed) * uNoiseStrength * 0.05 * uSpeed; 7225 } 7226 #endif 7227 // ************************************************************** 7228 #ifdef USE_SIMPLEX_NOISE 7229 if (uNoiseScale > 0.0 ) { 7230 velocity = vec3(snoise(position * uNoiseScale * .001) * ( uNoiseStrength + 1.0) * .1); 7231 velocity *= uSpeed; 7232 } 7233 // Variation of the noise Over Time 7234 if (uNoiseStrength > 0.0 && uNoiseScale == 0.0) { 7235 velocity += vec3(snoise(position * uNoiseStrength * .001) * .05 * uSpeed); 7236 } 7237 #endif 7238 // ************************************************************** 7239 #ifdef USE_FBM_NOISE 7240 if (uNoiseScale > 0.0 ) { 7241 velocity = fbm_vec3(position * uNoiseScale * .001, ( uNoiseStrength + 1.0), uNoiseSeed); 7242 velocity *= uSpeed; 7243 } 7244 // Variation of the noise Over Time 7245 if (uNoiseStrength > 0.0 && uNoiseScale == 0.0 ) { 7246 velocity += fbm_vec3(position * uNoiseStrength * .001, ( uNoiseStrength + 1.0), uNoiseSeed) * .1 * uSpeed; 7247 } 7248 #endif 7249 7250 // COLLIDER 7251 ${Pq} 7252 // ATTRACTION 7253 ${PX} 7254 // VORTEX 7255 ${PY} 7256 } 7257 // End isActive 7258 7259 // SPAWN BIRTH 7260 // ************************************************************** 7261 // if (isSpawning == 1.) 7262 #ifdef USE_NORMALS 7263 velocity = mix(velocity, applyQuaternionToVector(uWorldQuaternion, directions) * uSpeed, isSpawning); 7264 #else 7265 velocity = mix(velocity, applyQuaternionToVector(uWorldQuaternion, uDirectionsAxis) * uSpeed, isSpawning); 7266 #endif 7267 7268 // if (collisionFlag == 0.0) 7269 velocity += applyForce(uGravity, mass * .5) * (1.0 - collisionFlag); 7270 7271 gl_FragColor = vec4(velocity, collisionFlag); 7272} 7273`,PK=` 7274 7275 // Linear Fade In 7276 float linearFadeIn(float t) { 7277 return t; 7278 } 7279 7280 7281 // linear fade out 7282 float linearFadeOut(float t) { 7283 return 1.0 - t; 7284 } 7285 7286 float linearInOut(float t) { 7287 return t < 0.5 ? t : (1.0 - t); 7288 } 7289 7290 // lerp 7291 float lerp(float a, float b, float t) { 7292 return a + (b - a) * t; 7293 } 7294 7295 // Ease In Out Quart 7296 float exponentialInOut(float t) { 7297 return t < 0.4 ? lerp(0.0, 1.0, t / 0.4) : 7298 t > 0.6 ? lerp(1.0, 0.0, (t - 0.6) / 0.4) : 7299 1.0; 7300 } 7301 7302 // constant 7303 float constant(float t) { 7304 return 1.0; 7305 } 7306`,PZ=` 7307 7308float rand(vec3 co){ 7309 return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); 7310} 7311 7312vec3 applyQuaternionToVector( vec4 q, vec3 v ){ 7313 return v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v ); 7314} 7315 7316vec3 applyForce(vec3 force, float mass) { 7317 vec3 acceleration = force / mass; 7318 7319 return acceleration; 7320} 7321`,PJ=` 7322vec3 rgb2xyz (in vec3 rgb) { 7323 float r = rgb.r; 7324 float g = rgb.g; 7325 float b = rgb.b; 7326 7327 r = r > 0.04045 ? pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); 7328 g = g > 0.04045 ? pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); 7329 b = b > 0.04045 ? pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); 7330 7331 float x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); 7332 float y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); 7333 float z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); 7334 7335 vec3 xyz = vec3( 7336 (r * 0.4124) + (g * 0.3576) + (b * 0.1805) * 100.0, 7337 (r * 0.2126) + (g * 0.7152) + (b * 0.0722) * 100.0, 7338 (r * 0.0193) + (g * 0.1192) + (b * 0.9505) * 100.0 7339 ); 7340 return(xyz); 7341} 7342 7343vec3 xyz2lab (in vec3 xyz) { 7344 float x = xyz.x / 95.047; 7345 float y = xyz.y / 100.0; 7346 float z = xyz.z / 108.883; 7347 7348 x = x > 0.008856 ? pow(x, 1.0 / 3.0) : (7.787 * x) + (16.0 / 116.0);
7349 y = y > 0.008856 ? pow(y, 1.0 / 3.0) : (7.787 * y) + (16.0 / 116.0); 7350 z = z > 0.008856 ? pow(z, 1.0 / 3.0) : (7.787 * z) + (16.0 / 116.0); 7351 7352 vec3 lab = vec3((116.0 * y) - 16.0, 500.0 * (x - y), 200.0 * (y - z)); 7353 return(lab); 7354} 7355 7356vec3 rgb2lab(in vec3 rgb) { 7357 vec3 xyz = rgb2xyz(rgb); 7358 vec3 lab = xyz2lab(xyz); 7359 return(lab); 7360} 7361 7362vec3 xyz2rgb (in vec3 xyz) { 7363 float x = xyz.x / 100.0; 7364 float y = xyz.y / 100.0; 7365 float z = xyz.z / 100.0; 7366 7367 7368 float r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); 7369 float g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); 7370 float b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); 7371 7372 r = r > 0.0031308 ? ((1.055 * pow(r, 1.0 / 2.4)) - 0.055) : r * 12.92; 7373 g = g > 0.0031308 ? ((1.055 * pow(g, 1.0 / 2.4)) - 0.055) : g * 12.92; 7374 b = b > 0.0031308 ? ((1.055 * pow(b, 1.0 / 2.4)) - 0.055) : b * 12.92; 7375 7376 r = min(max(0.0, r), 1.0); 7377 g = min(max(0.0, g), 1.0); 7378 b = min(max(0.0, b), 1.0); 7379 7380 return(vec3(r, g, b)); 7381} 7382 7383vec3 lab2xyz (in vec3 lab) { 7384 float l = lab.x; 7385 float a = lab.y; 7386 float b = lab.z; 7387 7388 float y = (l + 16.0) / 116.0; 7389 float x = a / 500.0 + y; 7390 float z = y - b / 200.0; 7391 7392 float y2 = pow(y, 3.0); 7393 float x2 = pow(x, 3.0); 7394 float z2 = pow(z, 3.0); 7395 7396 y = y2 > 0.008856 ? y2 : (y - 16.0 / 116.0) / 7.787; 7397 x = x2 > 0.008856 ? x2 : (x - 16.0 / 116.0) / 7.787; 7398 z = z2 > 0.008856 ? z2 : (z - 16.0 / 116.0) / 7.787; 7399 7400 x *= 95.047; 7401 y *= 100.0; 7402 z *= 108.883; 7403 7404 return(vec3(x, y, z)); 7405} 7406vec3 lab2rgb (in vec3 lab) { 7407 vec3 xyz = lab2xyz(lab); 7408 vec3 rgb = xyz2rgb(xyz); 7409 return(rgb); 7410} 7411 7412`,P$=` 7413 uniform sampler2D uPosition; 7414 uniform float uSize; 7415 uniform float uSizeEnd; 7416 uniform vec3 uWorldOffset; 7417 uniform vec4 uWorldQuaternion; 7418 // Billboard Behavior - Currently at Zero, but we can change that 7419 uniform float uRotation; 7420 uniform float uRotationEnd; 7421 uniform vec2 center; 7422 7423 // Randomness 7424 uniform float uRandScaleFactor; 7425 uniform float uRandRotationFactor; 7426 7427 attribute vec2 ref; 7428 7429 varying float v_LifeLeft; // normalized lifetime 1 to 0 7430 varying vec2 vUv; 7431 varying vec2 vRef; 7432 7433 ${PZ} 7434 ${PK} 7435`,P0=({easeSize:e="linearFadeOut"})=>` 7436 vUv = uv; 7437 vRef = ref; 7438 // Normalized LifeTime 1 to 0 7439 float lifeLeft = texture2D(uPosition, ref).w; 7440 v_LifeLeft = lifeLeft; 7441 // Position From DataTexture Simulation 7442 vec3 pos = texture2D(uPosition, ref).rgb - uWorldOffset; 7443 // Apply World Quaternion 7444 pos = applyQuaternionToVector(uWorldQuaternion, pos); 7445 7446 #ifdef USE_SIZE_END 7447 // Scaled Over Time 7448 float t = 1. - lifeLeft; 7449 float currentSize = mix(uSize, uSizeEnd, t); // Linearly interpolate between uSize and uSizeEnd 7450 vec3 scaledPosition = position * vec3(currentSize); 7451 #else 7452 // Change Size Behavior over LifeTime 7453 float easeSize = ${e}(1. - lifeLeft); 7454 // Scaled Over Time 7455 vec3 scaledPosition = position * vec3(uSize * easeSize); 7456 #endif 7457 7458 // Billboard Behavior 7459 vec2 scale; 7460 scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) ); 7461 scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) ); 7462 // Randomness 7463 float randRef = rand(ref); 7464 scale *= (1.0 - (uRandScaleFactor * randRef)); 7465 // Rotation 7466 float randRotation = 2.0 * PI * ( uRandRotationFactor * randRef); 7467 float originalRotation = (1.0 - uRotation) * 2.0 * PI; 7468 float originalRotationEnd = (1.0 - uRotationEnd) * 2.0 * PI; 7469 // OverTime 7470 float finalRotation = mix(originalRotation + randRotation, originalRotationEnd + randRotation, lifeLeft); 7471 7472 vec2 alignedPosition = ( scaledPosition.xy - ( center - vec2( 0.5 ) ) ) * scale; 7473 vec2 rotatedPosition; 7474 rotatedPosition.x = cos( finalRotation ) * alignedPosition.x - sin( finalRotation ) * alignedPosition.y; 7475 rotatedPosition.y = sin( finalRotation ) * alignedPosition.x + cos( finalRotation ) * alignedPosition.y; 7476 7477 mat4 instanceMatrix = mat4( 7478 vec4(1.0, 0.0, 0.0, 0.0), 7479 vec4(0.0, 1.0, 0.0, 0.0), 7480 vec4(0.0, 0.0, 1.0, 0.0), 7481 vec4(pos.x, pos.y, pos.z, 1.0) 7482 ); 7483 7484 mvPosition = modelViewMatrix * instanceMatrix * vec4( 0.0, 0.0, 0.0, 1.0 ); 7485 mvPosition.xy += rotatedPosition; 7486 gl_Position = projectionMatrix * mvPosition; 7487`,P1=` 7488 uniform vec4 uColor; // start color 7489 uniform vec4 uColor2; // end color 7490 uniform sampler2D uTexture; // texture 7491 varying float v_LifeLeft; // normalized lifetime 1 to 0 7492 varying vec2 vUv; 7493 varying vec2 vRef; 7494 7495 float random(vec2 co) { 7496 return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453); 7497 } 7498 `+PK+` 7499 ${PJ} 7500 7501`,P2=({easeOpacity:e="linearFadeOut"})=>` 7502 // if Particle is dead, hide it 7503 if (v_LifeLeft <= 0.005 ) { 7504 discard; 7505 } 7506 7507 #ifdef USE_RANDOM_COLORING 7508 float randVal = random(vRef); // Generate a random value based on the reference 7509 vec4 color = mix(uColor, uColor2, randVal); // Interpolate between the two colors 7510 #else 7511 vec4 color = mix(uColor, uColor2, 1. - v_LifeLeft); 7512 #endif 7513 7514 // Opacity over Life Time 7515 float finalAlpha = ${e}(1. - v_LifeLeft); 7516 vec4 textureColor = texture2D(uTexture, vUv).rgba; 7517 finalColor = textureColor.rgb * color.rgb; 7518 finalAlpha = color.a * textureColor.a * finalAlpha; 7519 7520 gl_FragColor = vec4(finalColor, finalAlpha); 7521 7522`,P3=class extends r5{constructor(e,t){super(),this.needsJitter=!0,this.type="ParticleMaterial",this.easeOpacity="linearFadeIn",this.easeSize="linearFadeIn",this.useSizeEnd=!1,this.isColoringRandom=!1,this.init(e,t),this.context=t}reset(){}init(e,t){this.transparent=!0,this.depthTest=!0,this.depthWrite=!1,this.easeOpacity=e.ease,this.easeSize=e.easeSize,this.layers=[],SI.startContext(SI.globalContext),this.lightLayer=new A_(0,"",{...gM.defaultData("light","phong"),visible:!1},new _q,{},t.shared),SI.endContext(SI.globalContext),this.build()}updateState(e){void 0!==e.coloring&&(this.isColoringRandom="random"===e.coloring),void 0!==e.color&&(e.color instanceof Array?this.uniforms.uColor.value=e.color:this.uniforms.uColor.value=this.context.shared.color(e.color)),void 0!==e.color2&&(e.color2 instanceof Array?this.uniforms.uColor2.value=e.color2:this.uniforms.uColor2.value=this.context.shared.color(e.color2)),void 0!==e.size&&(this.uniforms.uSize.value=e.size[0],this.uniforms.uSizeEnd.value=e.size[1],e.size[0]!==e.size[1]?this.useSizeEnd=!0:this.useSizeEnd=!1),void 0!==e.ease&&(this.easeOpacity=e.ease,this.build()),void 0!==e.easeSize&&(this.easeSize=e.easeSize,this.build()),this.needsUpdate=!0}onBeforeCompile(e){this.build(),e.defines=this.defines,e.uniforms=this.uniforms,e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader}build(){let e=new _l;return e.needsJitter=this.needsJitter,e.addFragmentParsCode(_i),e.buildShader("vertex",this.fragment),e.buildShader("fragment",this.fragment),e.addFragmentFinalCode(_r),this.isColoringRandom&&e.define("USE_RANDOM_COLORING"),this.useSizeEnd&&e.define("USE_SIZE_END"),e.addVertexParsCode(P$),e.addFragmentParsCode(P1),e.addVertexFinalCode(P0({easeSize:this.easeSize})),e.addFragmentFinalCode(P2({easeOpacity:this.easeOpacity})),this.vertexShader=e.getCode("vertex"),this.fragmentShader=e.getCode("fragment"),this.defines=e.defines,this.uniforms={...e.uniforms,...this.uniforms},this.extensions=e.extensions,this}get nodeMaterial(){return this}get fragment(){return this.lightLayer.node}getDefines(){return this.defines}
7522nodeMaterialDispose(){this.layers.forEach(e=>e.dispose()),super.dispose()}},P4=class{constructor(e,t,i,r){this.type="SphereEmitterShape",this.targetMesh=void 0,this.size=e,this.type=i,this.textureSize=Math.max(Math.ceil(Math.sqrt(t)),1),this.targetMesh=r?.type==="Mesh"&&r?r:this.getMesh(i,1);let{positions:s,dataTexture:a,dataTextureNormals:o}=this.createPositions(this.textureSize,this.targetMesh??this.getMesh(i,1));this.positionsTexture=a,this.positionsAttribute=s,this.directionsTexture=o}createPositions(e,t){let{positions:i,normals:r}=function(e,t){let i=new rK(e.geometry,e.material),r=[],s=[],a=new iv,o=new iv;null!==i.geometry.index&&(i.geometry=i.geometry.toNonIndexed());let l=new PG(i).build();for(let e=0;e<t;e++)l.sample(a,o),r.push(a.x,a.y,a.z),s.push(o.x,o.y,o.z);return{positions:new Float32Array(r),normals:new Float32Array(s)}}(t,e*e);return{dataTexture:PH(i,e),positions:i,dataTextureNormals:PH(r,e)}}getMesh(e,t){let i=null;switch(e){case"SphereEmitterShape":i=new oO(.5*t,32,32);break;case"TorusEmitterShape":i=new oR(.5*t,.3,15,40);break;case"ConeEmitterShape":i=new ol(t,t,15);break;case"BoxEmitterShape":i=new rJ(t,t,t);break;case"PlaneEmitterShape":(i=new sc(t,t)).rotateX(-Math.PI/2);break;default:i=new oO(t,32,32)}return new rK(i,new rS({color:16711680}))}applyToShader(e,t){this.size=new iv().fromArray(t.size),e.uEmitterSize.value=this.size}dispose(){this.positionsTexture.dispose(),this.directionsTexture.dispose(),this.positionsAttribute=new Float32Array}};function P5(e){let t={...e},i=gg.defaultData;t.forceFieldObjectId&&(t.colliderEntityId=t.forceFieldObjectId);let r={...i.shape,...t.shape},s={...i.renderMaterial,...t.renderMaterial};return{...i,...t,shape:r,renderMaterial:s}}var P6=` 7523// uniform sampler2D uCurrentPosition; // Pass in the variable from GPGPU 7524// uniform sampler2D uCurrentVelocity; // Pass in the variable from GPGPU 7525// uniform sampler2D uCurrentEmissionRate; // Pass in the variable from GPGPU 7526 7527uniform sampler2D uIndex; // Texture with corresponding index 7528uniform float uLastIndexEmitted; // Last emitted index 7529uniform float uParticlesToEmit; // Number of particles to emit on that frame 7530uniform float uTime; 7531 7532void main() { 7533 vec2 vUv = gl_FragCoord.xy / resolution.xy; 7534 float particleIndex = texture(uIndex, vUv).x; 7535 float timeLeft = texture2D( uCurrentPosition, vUv ).w; 7536 float isActive = texture2D( uCurrentEmissionRate, vUv ).g; // 1. = active, 0. = not active 7537 float timeStart = texture2D( uCurrentEmissionRate, vUv ).b; 7538 7539 7540 // ********** Detect Colision to Create a flag and use it in position ********** 7541 // We are doing this here, so 7542 7543 // ********** Emit Particles ********** 7544 // X = isSpawning 0.0 or 1.0 7545 // Y = isActive 0.0 or 1.0 7546 // Check if the vertex index is between the first value and the last value 7547 // if (particleIndex >= uLastIndexEmitted && particleIndex < uLastIndexEmitted + uParticlesToEmit) { 7548 // // Emit a particle by writing 1 to the red channel of the color output 7549 // // r: 1. == emit the particle 7550 // // g: 1. == particle is now active 7551 // timeStart = uTime; 7552 // gl_FragColor = vec4(1.0, 1.0, timeStart, 1.0); 7553 // } else { 7554 // // The Particle is either already emitted or not in the range of the particles to emit 7555 // // Do not emit a particle by writing 0 to the red channel of the color output 7556 // gl_FragColor = vec4(0.0, isActive, timeStart, 1.0); 7557 // } 7558 // Determine if the particle is within the emission range 7559 float emitLowerBound = step(uLastIndexEmitted, particleIndex); 7560 float emitUpperBound = step(particleIndex, uLastIndexEmitted + uParticlesToEmit - 1.0); 7561 float emitParticle = emitLowerBound * emitUpperBound; // 1.0 if in range, 0.0 otherwise 7562 7563 // Set timeStart and color 7564 timeStart = mix(timeStart, uTime, emitParticle); 7565 gl_FragColor = vec4(emitParticle, mix(isActive, 1.0, emitParticle), timeStart, 1.0); 7566 7567 7568} 7569`,P8=class extends rl{constructor(e,t){super(),this.type="ParticleEmitter",this.debugMode=!1,this.worldSpace=!0,this.rootObject=null,this.gpuCompute=null,this.positionSimRT=null,this.velocitySimRT=null,this.emissionRateSimRT=null,this.emitterShape=void 0,this.isEmitting=!1,this.hasBeenReset=!1,this.emittedParticlesAmount=0,this.lastEmitTime=0,this.globalTime=0,this.targetFPS=60,this.previousRatio=1,this.lerpFactor=.4,this.particlesAmount=0,this.noiseStrength=0,this.noiseScale=0,this.isBillboardBased=!0,this.simFeaturesDefinition={USE_COLLIDER:!1,USE_ATTRACTOR:!1,USE_VORTEX:!1,USE_SPHERE_COLLIDER:!1,USE_BOX_COLLIDER:!1,USE_FORCE_LOCAL_SPACE:!1,USE_NORMALS:!1,USE_CURL_NOISE:!0,USE_SIMPLEX_NOISE:!1,USE_FBM_NOISE:!1},this.textureLoader=new o9,this.currentWorldPosition=new iv,this.systemQuaternion=new ig,this.worldGravity=new iv(0,0,0),this.directionAxis=new iv(0,0,0),this.colliderV3=new iv(0,0,0),this.colliderQuaternion=new ig(0,0,0,1),this.matrixAutoUpdate=!0,this.renderer=e,this.system=t,this.shared=t.context.shared;let i=t.data;
7569this.material=new P3(i.renderMaterial,t.context),this.material.uniforms={uSize:{value:0},uSizeEnd:{value:0},uColor:{value:i.renderMaterial.color},uColor2:{value:i.renderMaterial.color2},uPosition:{value:new iv(0,0,0)},uEmissionData:{value:new iv(0,0,0)},uTexture:{value:this.defaultTexture},uWorldOffset:{value:new iv(0,0,0)},uWorldQuaternion:{value:new ic(0,0,0,1)},uRandScaleFactor:{value:i.randomScale??0},uRandRotationFactor:{value:i.randomRotation??0},uRotation:{value:i.renderMaterial.spriteRotation[0]??0},uRotationEnd:{value:i.renderMaterial.spriteRotation[1]??0}},this.setTexture(this.material.uniforms,i.renderMaterial.texture),this.init(i)}setTexture(e,t){let i=t.data;if("string"==typeof t){let i=new ih(this.shared.image(t).img);i.needsUpdate=!0,e.uTexture.value=i;return}if("string"!=typeof i){let t=new Image;t.onload=()=>{let i=new ih(t);i.needsUpdate=!0,e.uTexture.value=i};let r=new Blob([i],{type:"image/*"}),s=URL.createObjectURL(r);t.src=s}}updateGeometryAttributes(e,t){let i=function(e){let t=new Float32Array(e*e*2);for(let i=0;i<e;i++)for(let r=0;r<e;r++){let s=i*e+r;t[2*s+0]=i/(e-1),t[2*s+1]=r/(e-1)}return t}(t);this.emitterShape?.positionsAttribute&&e.geometry.setAttribute("ref",new nP(i,2))}applyWorldSpace(){if(!this.system.started||!this.worldSpace||!this.positionSimRT||!this.velocitySimRT)return;let e=this.system;e.getWorldQuaternion(this.systemQuaternion),this.systemQuaternion.invert(),e.getWorldPosition(this.currentWorldPosition),this.material.uniforms.uWorldOffset.value=this.currentWorldPosition,this.material.uniforms.uWorldQuaternion.value.copy(this.systemQuaternion.normalize()),this.positionSimRT.material.uniforms.uWorldOffset.value=this.currentWorldPosition,this.systemQuaternion.invert(),this.positionSimRT.material.uniforms.uWorldQuaternion.value.copy(this.systemQuaternion.normalize()),this.velocitySimRT.material.uniforms.uWorldQuaternion.value.copy(this.systemQuaternion.normalize())}update(e,t){if(!this.gpuCompute||!this.positionSimRT||!this.velocitySimRT||!this.emissionRateSimRT||this.hasBeenReset)return;if(this.checkIfAllParticlesAreDead()&&!this.hasBeenReset){this.reset();return}this.applyWorldSpace(),this.globalTime=e,this.positionSimRT.material.uniforms.uTime.value=e,this.emissionRateSimRT.material.uniforms.uTime.value=e;let i=this.targetFPS/(1e3/t),r=this.previousRatio+(i-this.previousRatio)*this.lerpFactor;this.positionSimRT.material.uniforms.uFPSRatio.value=r,this.previousRatio=r;let s=this.isEmitting?this.GoEmitSomeParticles(e,this.system.data.birthRatePerSec):0;this.emissionRateSimRT.material.uniforms.uLastIndexEmitted.value=this.emittedParticlesAmount,this.emissionRateSimRT.material.uniforms.uParticlesToEmit.value=s,this.material.uniforms.uPosition.value=this.gpuCompute.getCurrentRenderTarget(this.positionSimRT)?.texture,this.system.colliderEntities.length>0&&this.renderColliders(),this.gpuCompute.compute()}renderColliders(){if(!this.velocitySimRT)return;let e=this.system.colliderEntities[0],t=this.simFeaturesDefinition.USE_COLLIDER||this.simFeaturesDefinition.USE_ATTRACTOR||this.simFeaturesDefinition.USE_VORTEX;if(e.destroyedInAction&&t&&this.init(P5({...this.system.data,colliderEntityId:null})),!e||e.destroyedInAction)return;e.getWorldPosition(this.colliderV3),0===this.colliderV3.y&&(this.colliderV3.y=1e-4),this.velocitySimRT.material.uniforms.uColliderPos.value.copy(this.colliderV3);let i=e.data.size;this.colliderV3.fromArray(i),this.velocitySimRT.material.uniforms.uColliderSize.value.copy(this.simFeaturesDefinition.USE_SPHERE_COLLIDER?this.colliderV3.multiplyScalar(.5):this.colliderV3),e.getWorldQuaternion(this.colliderQuaternion),this.velocitySimRT.material.uniforms.uColliderQuaternion.value.copy(this.colliderQuaternion.normalize()),this.velocitySimRT.material.uniforms.uColliderQuaternionInvert.value.copy(this.colliderQuaternion.normalize().invert())}updateState(e){this.velocitySimRT&&this.positionSimRT&&(e.renderMaterial&&this.updateMaterialState(e.renderMaterial),this.updateParticleState(e))}updateVariableState(e,t){if(!this.velocitySimRT||!this.positionSimRT)return;"size"===t[2]&&this.material.updateState({size:[e,this.material.uniforms.uSizeEnd.value]}),"sizeEnd"===t[2]&&this.material.updateState({size:[this.material.uniforms.uSize.value,e]});let i=(e,t)=>{let i=[...this.system.data.shape.size];i[e]=t,this.updateParticleState({shape:{...this.system.data.shape,size:i}})};"shape_size_0"===t[2]&&i(0,e),"shape_size_1"===t[2]&&i(1,e),"shape_size_2"===t[2]&&i(2,e),"speed"===t[2]&&(this.velocitySimRT.material.uniforms.uSpeed.value=e/10),"gravity"===t[2]&&this.worldGravity.set(0,e/100,0),"noiseStrength"===t[2]&&(this.noiseStrength=e,this.velocitySimRT.material.uniforms.uNoiseStrength.value=this.noiseStrength),"n
7569oiseScale"===t[2]&&(this.noiseScale=e,this.velocitySimRT.material.uniforms.uNoiseScale.value=this.noiseScale),"direction_x"===t[2]&&(this.directionAxis=this.getDirectionAxis([Number(e),this.system.data.direction[1],this.system.data.direction[2]])),"direction_y"===t[2]&&(this.directionAxis=this.getDirectionAxis([this.system.data.direction[0],Number(e),this.system.data.direction[2]])),"direction_z"===t[2]&&(this.directionAxis=this.getDirectionAxis([this.system.data.direction[0],this.system.data.direction[1],Number(e)]))}updateMaterialState(e){this.material.updateState({...e,size:e.size?[Number(this.shared.getVariable(e.size[0],[this.uuid,"particles","size"])),Number(this.shared.getVariable(e.size[1],[this.uuid,"particles","sizeEnd"]))]:[0,0]}),e.texture&&(this.setTexture(this.material.uniforms,e.texture),this.material.needsUpdate=!0)}updateParticleState(e){if(!(!this.positionSimRT||!this.velocitySimRT)){if(this.shouldReInitGPUCompute(e)&&this.init(P5(this.system.data)),void 0!==e.life&&(this.positionSimRT.material.uniforms.uMaxLifeTime.value=e.life),void 0!==e.speed&&(this.velocitySimRT.material.uniforms.uSpeed.value=Number(this.shared.getVariable(e.speed,[this.uuid,"particles","speed"]))/10),void 0!==e.collisionBounce&&(this.velocitySimRT.material.uniforms.uBounce.value=e.collisionBounce),void 0!==e.noiseStrength&&(this.noiseStrength=Number(this.shared.getVariable(e.noiseStrength,[this.uuid,"particles","noiseStrength"])),this.velocitySimRT.material.uniforms.uNoiseStrength.value=this.noiseStrength),void 0!==e.noiseScale&&(this.noiseScale=Number(this.shared.getVariable(e.noiseScale,[this.uuid,"particles","noiseScale"])),this.velocitySimRT.material.uniforms.uNoiseScale.value=this.noiseScale),void 0!==e.noiseSeed&&(this.velocitySimRT.material.uniforms.uNoiseSeed.value=e.noiseSeed),void 0!==e.randomMass&&(this.velocitySimRT.material.uniforms.uRandomMassFactor.value=e.randomMass),e.renderMaterial?.size!==void 0){let t=this.shared.getVariable(e.renderMaterial.size[0],[this.uuid,"particles","size"]);this.velocitySimRT.material.uniforms.particleSize.value=Number(t)}if(e.renderMaterial?.spriteRotation!==void 0&&(this.material.uniforms.uRotation.value=e.renderMaterial.spriteRotation[0],this.material.uniforms.uRotationEnd.value=e.renderMaterial.spriteRotation[1]),void 0!==e.shape){let t=e.shape.size??this.system.data.shape.size,i=[Number(this.shared.getVariable(t[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(t[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(t[2],[this.uuid,"particles","shape_size_2"]))],r={...P5(this.system.data).shape,size:i};this.emitterShape?.applyToShader(this.positionSimRT.material.uniforms,r)}if(void 0!==e.gravity&&(this.worldGravity.set(0,Number(this.shared.getVariable(this.system.data.gravity,[this.uuid,"particles","gravity"]))/100,0),this.velocitySimRT.material.uniforms.uGravity={value:this.worldGravity}),void 0!==e.direction){let t=this.getDirectionFromVariable(e.direction);this.directionAxis=this.getDirectionAxis(t),this.velocitySimRT.material.uniforms.uDirectionsAxis.value=this.directionAxis}void 0!==e.randomRotation&&(this.material.uniforms.uRandRotationFactor.value=e.randomRotation),void 0!==e.randomScale&&(this.material.uniforms.uRandScaleFactor.value=e.randomScale)}}updateForceFieldParameters(e){this.velocitySimRT&&(void 0!==e.forceIntensity&&(this.velocitySimRT.material.uniforms.uForceIntensity.value=e.forceIntensity),void 0===e.forceDambing||(this.velocitySimRT.material.uniforms.uForceDamping.value=e.forceDambing))}getDirectionAxis(e){let t=[Number(e[0])*tY.DEG2RAD,Number(e[1])*tY.DEG2RAD,Number(e[2])*tY.DEG2RAD],i=new i3(t[0],t[1],t[2],"XYZ");return this.directionAxis.set(0,1,0).applyEuler(i).normalize(),this.velocitySimRT&&(this.velocitySimRT.material.uniforms.uDirectionsAxis.value=this.directionAxis),this.directionAxis}shouldReInitGPUCompute(e){let{birthRatePerSec:t,rootObjectType:i,colliderEntityId:r,shape:s,emitTimeDuration:a,emitTimeCycle:o,life:l,directionMode:h,noiseType:c}=e;return void 0!==t||void 0!==i||r||null===r||void 0!==o||void 0!==s||void 0!==l||void 0!==a||void 0!==h||void 0!==c}init(e){this.dispose(),this.particlesAmount=this.getMaxParticlesAmount({birthRatePerSecond:e.b
7569irthRatePerSec,particleMaxLifeTime:e.life,loopDuration:"infinity"===e.emitTimeCycle?0:e.emitTimeDuration}),this.particlesAmount>1e5&&(console.warn("The maximum number of particles is limited to 100000."),this.particlesAmount=1e5),this.emitterShape=this.createShape(e.shape,this.particlesAmount);let t=setInterval(()=>{if(this.emitterShape){if(isNaN(this.emitterShape.positionsTexture.source.data.data[0])){this.init(e);return}clearInterval(t)}},100);if(!this.emitterShape)return;let i=new PU(this.emitterShape.textureSize,this.emitterShape.textureSize,this.renderer),r=this.updateSimulationDefinition(e),s=i.addVariable("uCurrentPosition",r+PW,this.emitterShape.positionsTexture),a=i.addVariable("uCurrentVelocity",r+PQ,this.emitterShape.directionsTexture),o=i.addVariable("uCurrentEmissionRate",P6,function(e){let t=new Float32Array(4*e*e);for(let i=0;i<e*e;i++)t[4*i]=0,t[4*i+1]=0,t[4*i+2]=0,t[4*i+3]=0;let i=new nM(t,e,e,1023,1015);return i.needsUpdate=!0,i}(this.emitterShape.textureSize));i.setVariableDependencies(s,[s,a,o]),i.setVariableDependencies(a,[s,a,o]),i.setVariableDependencies(o,[s,a,o]);let l=function({size:e}){let t=new Float32Array(4*e*e);for(let i=0;i<e*e;i++)t[4*i]=i,t[4*i+1]=0,t[4*i+2]=0,t[4*i+3]=0;let i=new nM(t,e,e,1023,1015);return i.needsUpdate=!0,i}({size:this.emitterShape.textureSize}),h={uOriginalPosition:{value:this.emitterShape.positionsTexture},uWorldOffset:{value:new iv(0,0,0)},uWorldQuaternion:{value:new ic(0,0,0,1)},uTime:{value:0},uFPSRatio:{value:1},uMaxLifeTime:{value:e.life},uEmitterSize:{value:new iv(Number(this.shared.getVariable(e.shape.size[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(e.shape.size[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(e.shape.size[2],[this.uuid,"particles","shape_size_2"])))},particleSize:{value:0}};s.material.uniforms=h;let c=this.getDirectionFromVariable(e.direction);this.directionAxis=this.getDirectionAxis(c),this.worldGravity.set(0,Number(this.shared.getVariable(this.system.data.gravity,[this.uuid,"particles","gravity"]))/100,0),this.noiseStrength=Number(this.shared.getVariable(e.noiseStrength,[this.uuid,"particles","noiseStrength"])),this.noiseScale=Number(this.shared.getVariable(e.noiseScale,[this.uuid,"particles","noiseScale"]));let d=e.colliderEntityId&&this.system.getColliderData(e.colliderEntityId),u={uOriginalPosition:{value:this.emitterShape.positionsTexture},uDirections:{value:this.emitterShape.directionsTexture},uDirectionsAxis:{value:this.directionAxis},uWorldQuaternion:{value:new ic(0,0,0,1)},uColliderPos:{value:new iv(0,0,0)},uColliderSize:{value:new iv(0,0,0)},uForceIntensity:{value:d?d.forceIntensity:0},uForceDamping:{value:d?d.forceDambing:0},uColliderQuaternion:{value:new ic(0,0,0,1)},uColliderQuaternionInvert:{value:new ic(0,0,0,1)},particleSize:{value:0},uGravity:{value:this.worldGravity},uNoiseStrength:{value:this.noiseStrength},uNoiseScale:{value:this.noiseScale},uNoiseSeed:{value:e.noiseSeed},uRandomMassFactor:{value:e.randomMass},uBounce:{value:e.collisionBounce},uSpeed:{value:Number(this.shared.getVariable(e.speed,[this.uuid,"particles","speed"]))/10}};a.material.uniforms=u,o.material.uniforms={uIndex:{value:l},uTime:{value:0},uLastIndexEmitted:{value:0},uParticlesToEmit:{value:0}};let p=[Number(this.shared.getVariable(e.shape.size[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(e.shape.size[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(e.shape.size[2],[this.uuid,"particles","shape_size_2"]))],f={...P5(this.system.data).shape,size:p};this.emitterShape.applyToShader(s.material.uniforms,f),i.init(),this.gpuCompute=i,this.positionSimRT=s,this.velocitySimRT=a,this.emissionRateSimRT=o,this.rootObject=this.createPrimaryEmitter(this.emitterShape.textureSize),this.add(this.rootObject),this.material.needsUpdate=!0}getDirectionFromVariable(e){return[Number(this.shared.getVariable(e[0],[this.uuid,"particles","direction_x"])),Number(this.shared.getVariable(e[1],[this.uuid,"particles","direction_y"])),Number(this.shared.getVariable(e[2],[this.uuid,"particles","direction_z"]))]}updateSimulationDefinition(e){if(this.simFeaturesDefinition.USE_COLLIDER=!1,this.simFeaturesDefinition.USE_ATTRACTOR=!1,this.simFeaturesDefinition.USE_VORTEX=!1,this.simFeaturesDefinition.USE_SPHERE_COLLIDER=!1,this.simFeaturesDefinition.USE_BOX_COLLIDER=!1,this.simFeaturesDefinition.USE_FORCE_LOCAL_SPACE=!1,this.simFeaturesDefinition.USE_NORMALS=!1,this.simFeaturesDefinition.USE_CURL_NOISE=!1,this.simFeaturesDefinition.USE_SIMPLEX_NOISE=!1,this.simFeaturesDefinition.USE_FBM_NOISE=!1,e.colliderEntityId&&this.system.colliderEntities.length>0){let t=this.system.getColliderData(e.colliderEntityId);switch(t?.forceType){case"attractor":this.simFeaturesDefinition.USE_ATTRACTOR=!0;break;case"collider":this.simFeaturesDefinition.USE_COLLIDER=!0;break;case"vortex":this.simFeaturesDefinition.USE_VORTEX=!0}let i=t?.colliderType;"sphere"===i&&(this.simFeaturesDefinition.USE_SPHERE_COLLIDER=!0),"box"===i&&(this.simFeaturesDefinition.USE_BOX_COLLIDER=!0),t?.forceRange==="helper"&&(this.simFeaturesDefinition.USE_FORCE_LOCAL_SPACE=!0)}"normals"===e.directionMode&&(this.simFeaturesDefinition.USE_NORMALS=!0),"curl"===e.noiseType&&(this.simFeaturesDefinition.USE_CURL_NOISE=!0),"simplex"===e.n
7569oiseType&&(this.simFeaturesDefinition.USE_SIMPLEX_NOISE=!0),"fbm"===e.noiseType&&(this.simFeaturesDefinition.USE_FBM_NOISE=!0);let t="";for(let[e,i]of Object.entries(this.simFeaturesDefinition))i&&(t+=`#define ${e} 7570`);return t}createShape(e,t){this.emitterShape&&this.emitterShape.dispose();let i=new iv(Number(this.shared.getVariable(e.size[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(e.size[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(e.size[2],[this.uuid,"particles","shape_size_2"])));if("MeshEmitterShape"!==e.type)return new P4(i,t,e.type);{let r=null;return this.system.context.scene.traverseEntity(t=>{t.uuid===e.fromMeshId&&(r=t)}),r?new P4(i,t,e.type,r):new P4(i,t,"SphereEmitterShape")}}createPrimaryEmitter(e){let t;return t=new nB(new sc(1,1,1),this.material,e*e),this.updateGeometryAttributes(t,e),this.material.needsUpdate=!0,t.onBeforeRender=()=>{this.applyWorldSpace()},t}getMaxParticlesAmount({birthRatePerSecond:e,particleMaxLifeTime:t,loopDuration:i=0}){return Math.ceil(e*(t+i))}dispose(){this.gpuCompute&&(this.rootObject?.parent?.remove(this.rootObject),this.gpuCompute.dispose(),this.material.nodeMaterialDispose(),this.emitterShape?.dispose())}GoEmitSomeParticles(e,t){let i=e-this.lastEmitTime,r=1/t;if(i>=r){let t=Math.max(1,Math.floor(i/r));return this.lastEmitTime=e,this.emittedParticlesAmount+t>this.particlesAmount&&(this.emittedParticlesAmount=0),this.emittedParticlesAmount+=t,t}return 0}checkIfAllParticlesAreDead(){return this.lastEmitTime+this.system.data.life+1<this.globalTime}reset(){this.hasBeenReset=!0,this.lastEmitTime=0,this.emittedParticlesAmount=0,this.gpuCompute&&this.init(P5(this.system.data))}startEmitting(e){this.isEmitting=!0,this.hasBeenReset=!1,this.lastEmitTime=e}stopEmitting(){this.isEmitting=!1}},P9=class extends SP{constructor(e,t,i){super(e,t),this.type="ParticleSystem",this.geometry=new rz,this.actualTime=0,this.currentLoopTime=0,this.started=!1,this.stopped=!1,this.timeoutId=void 0,this.isFrozen=!1,this.isIdle=!0,this.emitter=null,this.colliderEntities=[],this.renderer=null,this.isPreWarm=!1,this._hasOnAfterRenderBeenCalled=!1,this.onAfterRender=e=>{this._hasOnAfterRenderBeenCalled||(this._hasOnAfterRenderBeenCalled=!0,this.init(e))},this.context=i,this.data={...t,...P5(t)},this.geometry.setAttribute("position",new rT([],3)),this.material=new rS({colorWrite:!1}),this.frustumCulled=!1}init(e){this.renderer=e,this.emitter=new P8(e,this),this.add(this.emitter),this.updateParticleState(this.data)}update(e){if(!this.isReady||!this.started||this.isFrozen||this.isIdle)return;this.actualTime+=e,this.stopped||(this.currentLoopTime+=e);let t="one_time"===this.data.emitTimeCycle;if(("loop"===this.data.emitTimeCycle||t)&&this.currentLoopTime>1e3*this.data.emitTimeDuration&&(this.stopped||(this.stop(),t||this.start(1e3*this.data.emitTimeDelay))),this.emitter&&this.started){let t=this.actualTime/1e3;this.emitter.update(t,e)}this.scale.set(1,1,1),this.updateMatrix()}isReady(){return!!this.emitter}hasCollider(e){return this.colliderEntities.some(t=>t.identity===e)}getColliderData(e){let t=this.colliderEntities.find(t=>t.identity===e);return t?t.data:null}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),pX(e.path,["renderMaterial"])&&this.updateParticleState({renderMaterial:{...this.data.renderMaterial,...p$.drop(e,1).props}}),pX(e.path,["shape"])&&this.updateParticleState({shape:{...this.data.shape,...p$.drop(e,1).props}})}updateState(e,t){super.updateState(e,t),this.updateParticleState(e)}updateParticleState(e){if(this.emitter){if(void 0!==e.colliderEntityId&&null!==e.colliderEntityId){let t=this.context.scene.find(e.colliderEntityId);this.colliderEntities=t?[t]:[]}null===e.colliderEntityId&&(this.colliderEntities=[]),this.emitter.updateState(e),e.emitTimeCycle&&this.started&&this.start()}}updateFromColliderEntity(e){this.emitter&&(this.emitter.updateForceFieldParameters(e),this.stop(),this.start())}start(e=0){if(this.currentLoopTime=0,e){this.timeoutId=window.setTimeout(()=>{this.start(0)},e);return}this.started=!0,this.stopped=!1,this.isFrozen=!1,this.emitter?.startEmitting(this.actualTime/1e3)}froze(){this.isFrozen=!0}unFroze(){this.isFrozen=!1}stop(){this.stopped=!0,this.currentLoopTime=0,this.emitter?.stopEmitting(),clearTimeout(this.timeoutId)}reset(){this.started=!1,this.stopped=!1,this.emitter?.reset()}wakeUp(){this.isIdle=!1}sleep(){this.isIdle=!0,this.reset()}},P7=function(){try{let e=window.location.href;if(e.includes("reducesubdiv=")){let t=e.indexOf("reducesubdiv=")+13;return parseInt(e.slice(t,t+1))}}catch{}}();function De(e,t,i){return console.assert(void 0!==t.type),"Mesh"===t.type?(void 0!==P7&&(t?.geometry?.subdivisions??0)>P7&&(console.log("reducing subdivisions",t.name,t.geometry.subdivisions),t.geometry.subdivisions=P7),"TextGeometry"===t.geometry.type?new MK(e,t,i):"InputGeometry"===t.geometry.type?new PL(e,t,i):"SubdivGeometry"===t.geometry.type?new MM(e,t,i):"PathGeometry"===t.geometry.type?new PR(e,t,i):"VectorGeometry"===t.geometry.type?new PO(e,t,i):"BooleanGeometry"===t.geometry.type?new Eb(e,t,i):"ShapeBlendGeometry"===t.geometry.type?new Do(e,t,i):"UIGeometry"===t.geometry.type?new Pk(e,t,i):new Mb(e,t,i)):"Empty"===t.type?new EO(e,t):"Particle"===t.type?new P9(e,t,i):"ParticleCollider"===t.type?new ER(e,t,i):"Splat"===t.type?new EO(e,t):"Bone"===t.type?new PN(e,t):"Page"===t.type?new PD(e,t,i):"PointLight"===t.type?new PI(e,t,i):"SpotLight"===t.type?new TU(e,t,i):"DirectionalLight"===t.type?new Tz(e,t,i):"Component"===t.type||"Instance"===t.type?new PB(e,t,i):gc.is(t.type)?new Eg(e,t):(console.error(t),new EO(e,t))}xP.createEntity=De,xP.changeEntityProptotype=function(e,t,i){let r=De(e.identity,t,i),s=e.children,a=e.attachedPaths,o=e.parent,l=e.component,h=e.instances,c=e.overrideData,d=e.uuid,u=e.stateSelection;
7570for(let t of(e.dispose(),Object.keys(e)))delete e[t];for(let t of(Object.setPrototypeOf(e,Object.getPrototypeOf(r)),Object.keys(r)))e[t]=r[t];e.children=[...e.children,...s],e.attachedPaths=a,e.parent=o,e.component=l,e.instances=h,e.uuid=d,e.overrideData=c,e.updateState(e.data,i),u&&e.changeSelectedState(u,i),e.resetBBoxNeedsUpdate()},xP.Cloner=M9;var Dt=new rz;Dt.setAttribute("position",new rM(new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),3));var Di=class extends oB{constructor(e){super({...e,depthTest:!1,depthWrite:!1,glslVersion:tR,vertexShader:` 7571 precision highp float; 7572 in vec3 position; 7573 void main() { 7574 gl_Position = vec4(position, 1); 7575 } 7576 `})}customProgramCacheKey(){return""}},Dr=new r6,Ds=class{constructor(){this.pyramidPassScene=new nb,this.pyramidPassMaterial=new Di({name:"PyramidPass"}),this.pyramidPassUniforms={inputTexture:{value:void 0},inputWidth:{value:0},inputHeight:{value:0},inputShiftX:{value:0},outputShiftX:{value:0}},this.pyramidTopLevelReadPixelBuffer=new Float32Array(4);let e=` 7577 precision highp float; 7578 precision highp sampler2D; 7579 layout(location = 0) out vec4 pc_FragColor; 7580 uniform sampler2D inputTexture; 7581 uniform float inputWidth; 7582 uniform float inputHeight; 7583 uniform float inputShiftX; 7584 uniform float outputShiftX; 7585 const vec2 half_unit_coord = vec2(0.5); 7586 const vec4 one = vec4(1.0); 7587 void main() { 7588 vec2 inputSize = vec2(inputWidth, inputHeight); 7589 vec2 input_pixel_uv = 1. / inputSize; 7590 vec2 coord = gl_FragCoord.xy - half_unit_coord; 7591 coord.x -= outputShiftX; 7592 coord = coord * 2. + half_unit_coord; 7593 coord.x += inputShiftX; 7594 7595 // sample bottom left corner 7596 vec2 input_uv = coord / inputSize; 7597 float bl = texture(inputTexture, input_uv).r; 7598 7599 // sample bottom right corner 7600 input_uv.x += input_pixel_uv.x; 7601 float br = texture(inputTexture, input_uv).r; 7602 7603 // sample top right corner 7604 input_uv.y += input_pixel_uv.y; 7605 float tr = texture(inputTexture, input_uv).r; 7606 7607 // sample top left corner 7608 input_uv.x -= input_pixel_uv.x; 7609 float tl = texture(inputTexture, input_uv).r; 7610 7611 pc_FragColor.a = bl; 7612 pc_FragColor.b = pc_FragColor.a + br; 7613 pc_FragColor.g = pc_FragColor.b + tr; 7614 pc_FragColor.r = pc_FragColor.g + tl; 7615 } 7616 `;this.pyramidPassMaterial.fragmentShader=e,this.pyramidPassMaterial.uniforms=this.pyramidPassUniforms,this.pyramidPassMaterial.depthTest=!1,this.pyramidPassMaterial.depthWrite=!1;let t=new rK(Dt,this.pyramidPassMaterial);t.frustumCulled=!1,this.pyramidPassScene.add(t)}renderPyramid(e,t,i,r,s){new lz().min.setScalar(0);let a=t.length-1,o=new ic;i.getViewport(o),this.pyramidPassUniforms.inputShiftX.value=0,this.pyramidPassUniforms.outputShiftX.value=0;let l=a-1;for(let a=l;a>=0;a--){let o=a%2==l%2?s[0]:s[1],h=a===l?r:a%2==l%2?s[1]:s[0];this.pyramidPassUniforms.inputTexture.value=Array.isArray(h.texture)?h.texture[1]:h.texture,this.pyramidPassUniforms.inputWidth.value=h.width,this.pyramidPassUniforms.inputHeight.value=h.height,i.setRenderTarget(o);let c=t[a],d=i.getPixelRatio();i.setViewport(this.pyramidPassUniforms.outputShiftX.value/d,0,c/d,c/d),2===a&&e%2!=0&&i.setViewport(this.pyramidPassUniforms.outputShiftX.value/d,0,3/d,3/d),i.render(this.pyramidPassScene,Dr);let u=this.pyramidPassUniforms.inputShiftX.value;this.pyramidPassUniforms.inputShiftX.value=this.pyramidPassUniforms.outputShiftX.value,this.pyramidPassUniforms.outputShiftX.value=u,a<l&&(this.pyramidPassUniforms.outputShiftX.value+=t[a+1])}i.setViewport(o);let h=t.length%2==0?0:1;return i.readRenderTargetPixelsAsync(s[h],s[h].width-1,0,1,1,this.pyramidTopLevelReadPixelBuffer).then(()=>this.pyramidTopLevelReadPixelBuffer[0])}},Da={shapeInput:()=>` 7617 const float posRowCoord = 0.1; // vec4: px py pz opType 7618 const float quatRowCoord = 0.3; // vec4: qx qy qz qw 7619 const float param1RowCoord = 0.5;// vec4: type param1 param2 param3 7620 const float param2RowCoord = 0.7;// vec4: blendRange roundness scale param4 7621 const float colorRowCoord = 0.9; // vec4: r g b a 7622 uniform sampler2D shapesDataTexture; 7623 vec4 shapePos(float iin) { 7624 vec4 r = texture(shapesDataTexture, vec2(iin, posRowCoord)); 7625 return r; 7626 } 7627 vec4 shapeQuat(float iin) { 7628 vec4 r = texture(shapesDataTexture, vec2(iin, quatRowCoord)); 7629 return r; 7630 } 7631 vec4 shapeParams1(float iin) { 7632 vec4 r = texture(shapesDataTexture, vec2(iin, param1RowCoord)); 7633 return r; 7634 } 7635 vec4 shapeParams2(float iin) { 7636 vec4 r = texture(shapesDataTexture, vec2(iin, param2RowCoord)); 7637 return r; 7638 } 7639 vec4 shapeColor(float iin) {
7640 vec4 r = texture(shapesDataTexture, vec2(iin, colorRowCoord)); 7641 return r; 7642 } 7643 `,getxyzi:` 7644 // this code must complement lookup 7645 float xi = mod(gl_FragCoord.x - 0.5, VOXEL_RESOLUTION); 7646 float yi = mod(gl_FragCoord.y - 0.5, VOXEL_RESOLUTION); 7647 float zi = floor((gl_FragCoord.x - 0.5) * INV_VOXEL_RESOLUTION) + floor((gl_FragCoord.y - 0.5) * INV_VOXEL_RESOLUTION) * Z_LAYERS_PER_ROW; 7648 `,lookup:` 7649 uniform sampler2D potentialPassTexture; 7650 uniform sampler2D voxelPassTexture; // includes normal (in xyz) and key (in w) 7651 7652 // box or marching cube lookup value in value texture, integer box coord inputs 7653 // this code must complement codebits.getxyzi 7654 vec4 look(float xi, float yi, float zi, sampler2D rt) {// range 0 .. numv etc 7655 vec2 uv = vec2( 7656 mod(zi, Z_LAYERS_PER_ROW) + (xi + 0.5) / VOXEL_RESOLUTION, 7657 floor(zi / Z_LAYERS_PER_ROW) + (yi + 0.5) / VOXEL_RESOLUTION 7658 ); 7659 uv /= Z_LAYERS_PER_ROW; 7660 return texture(rt, uv); 7661 } 7662 `,getpart:` 7663 float getpart(inout float a, float b) { 7664 float t = floor(a/b); 7665 float r = a - t*b; 7666 a = t; 7667 return r; 7668 } 7669 `,triTable:new Float32Array([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,1,1,8,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,2,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,0,10,2,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,2,9,9,2,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,2,8,10,2,8,9,10,-1,-1,-1,-1,-1,-1,-1,2,11,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,11,0,0,11,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,9,1,11,3,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,11,1,11,9,1,11,8,9,-1,-1,-1,-1,-1,-1,-1,1,10,3,3,10,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,10,0,10,8,0,10,11,8,-1,-1,-1,-1,-1,-1,-1,0,9,3,9,11,3,9,10,11,-1,-1,-1,-1,-1,-1,-1,10,8,9,11,8,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,7,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,3,4,4,3,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,1,0,7,4,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,1,4,1,7,4,1,3,7,-1,-1,-1,-1,-1,-1,-1,10,2,1,7,4,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,4,3,4,0,3,10,2,1,-1,-1,-1,-1,-1,-1,-1,10,2,9,2,0,9,7,4,8,-1,-1,-1,-1,-1,-1,-1,9,10,2,7,9,2,3,7,2,4,9,7,-1,-1,-1,-1,7,4,8,2,11,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,4,11,4,2,11,4,0,2,-1,-1,-1,-1,-1,-1,-1,1,0,9,7,4,8,11,3,2,-1,-1,-1,-1,-1,-1,-1,11,7,4,11,4,9,2,11,9,1,2,9,-1,-1,-1,-1,1,10,3,10,11,3,4,8,7,-1,-1,-1,-1,-1,-1,-1,10,11,1,11,4,1,4,0,1,4,11,7,-1,-1,-1,-1,8,7,4,11,0,9,10,11,9,3,0,11,-1,-1,-1,-1,11,7,4,9,11,4,10,11,9,-1,-1,-1,-1,-1,-1,-1,4,5,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,5,9,3,8,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,5,0,0,5,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,5,8,5,3,8,5,1,3,-1,-1,-1,-1,-1,-1,-1,10,2,1,4,5,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,0,3,10,2,1,5,9,4,-1,-1,-1,-1,-1,-1,-1,10,2,5,2,4,5,2,0,4,-1,-1,-1,-1,-1,-1,-1,5,10,2,5,2,3,4,5,3,8,4,3,-1,-1,-1,-1,4,5,9,11,3,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,11,0,11,8,0,5,9,4,-1,-1,-1,-1,-1,-1,-1,4,5,0,5,1,0,11,3,2,-1,-1,-1,-1,-1,-1,-1,5,1,2,8,5,2,11,8,2,5,8,4,-1,-1,-1,-1,11,3,10,3,1,10,4,5,9,-1,-1,-1,-1,-1,-1,-1,5,9,4,1,8,0,1,10,8,10,11,8,-1,-1,-1,-1,0,4,5,11,0,5,10,11,5,3,0,11,-1,-1,-1,-1,8,4,5,10,8,5,11,8,10,-1,-1,-1,-1,-1,-1,-1,8,7,9,9,7,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,3,9,3,5,9,3,7,5,-1,-1,-1,-1,-1,-1,-1,8,7,0,7,1,0,7,5,1,-1,-1,-1,-1,-1,-1,-1,3,5,1,7,5,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,7,9,7,5,9,2,1,10,-1,-1,-1,-1,-1,-1,-1,2,1,10,0,5,9,0,3,5,3,7,5,-1,-1,-1,-1,2,0,8,5,2,8,7,5,8,2,5,10,-1,-1,-1,-1,5,10,2,3,5,2,7,5,3,-1,-1,-1,-1,-1,-1,-1,5,9,7,9,8,7,2,11,3,-1,-1,-1,-1,-1,-1,-1,7,5,9,2,7,9,0,2,9,11,7,2,-1,-1,-1,-1,11,3,2,8,1,0,8,7,1,7,5,1,-1,-1,-1,-1,1,2,11,7,1,11,5,1,7,-1,-1,-1,-1,-1,-1,-1,8,5,9,7,5,8,3,1,10,11,3,10,-1,-1,-1,-1,0,7,5,9,0,5,0,11,7,10,0,1,0,10,11,-1,0,10,11,3,0,11,0,5,10,7,0,8,0,7,5,-1,5,10,11,5,11,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,6,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,0,6,10,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,0,9,6,10,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,1,8,9,1,6,10,5,-1,-1,-1,-1,-1,-1,-1,5,6,1,1,6,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,6,1,6,2,1,8,0,3,-1,-1,-1,-1,-1,-1,-1,5,6,9,6,0,9,6,2,0,-1,-1,-1,-1,-1,-1,-1,8,9,5,2,8,5,6,2,5,8,2,3,-1,-1,-1,-1,11,3,2,5,6,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,0,11,0,2,11,5,6,10,-1,-1,-1,-1,-1,-1,-1,9,1,0,11,3,2,6,10,5,-1,-1,-1,-1,-1,-1,-1,6,10,5,2,9,1,2,11,9,11,8,9,-1,-1,-1,-1,11,3,6,3,5,6,3,1,5,-1,-1,-1,-1,-1,-1,-1,11,8,0,5,11,0,1,5,0,6,11,5,-1,-1,-1,-1,6,11,3,6,3,0,5,6,0,9,5,0,-1,-1,-1,-1,9,5,6,11,9,6,8,9,11,-1,-1,-1,-1,-1,-1,-1,6,10,5,8,7,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,3,4,3,7,4,10,5,6,-1,-1,-1,-1,-1,-1,-1,0,9,1,6,10,5,7,4,8,-1,-1,-1,-1,-1,-1,-1,5,6,10,7,9,1,3,7,1,4,9,7,-1,-1,-1,-1,2,1,6,1,5,6,8,7,4,-1,-1,-1,-1,-1,-1,-1,5,2,1,6,2,5,4,0,3,7,4,3,-1,-1,-1,-1,7,4,8,5,0,9,5,6,0,6,2,0,-1,-1,-1,-1,9,3,7,4,9,7,9,2,3,6,9,5,9,6,2,-1,2,11,3,4,8,7,5,6,10,-1,-1,-1,-1,-1,-1,-1,6,10,5,2,7,4,0,2,4,11,7,2,-1,-1,-1,-1,9,1,0,8,7,4,11,3,2,6,10,5,-1,-1,-1,-1,1,2,9,2,11,9,11,4,9,4,11,7,6,10,5,-1,7,4,8,5,11,3,1,5,3,6,11,5,-1,-1,-1,-1,11,1,5,6,11,5,11,0,1,4,11,7,11,4,0,-1,9,5,0,5,6,0,6,3,0,3,6,11,7,4,8,-1,9,5,6,11,9,6,9,7,4,9,11,7,-1,-1,-1,-1,9,4,10,10,4,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6,10,4,10,9,4,3,8,0,-1,-1,-1,-1,-1,-1,-1,1,0,10,0,6,10,0,4,6,-1,-1,-1,-1,-1,-1,-1,1,3,8,6,1,8,4,6,8,10,1,6,-1,-1,-1,-1,9,4,1,4,2,1,4,6,2,-1,-1,-1,-1,-1,-1,-1,8,0,3,9,2,1,9,4,2,4,6,2,-1,-1,-1,-1,4,2,0,6,2,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,3,8,4,2,8,6,2,4,-1,-1,-1,-1,-1,-1,-1,9,4,10,4,6,10,3,2,11,-1,-1,-1,-1,-1,-1,-1,2,8,0,11,8,2,10,9,4,6,10,4,-1,-1,-1,-1,2,11,3,6,1,0,4,6,0,10,1,6,-1,-1,-1,-1,1,4,6,10,1,6,1,8,4,11,1,2,1,11,8,-1,4,6,9,6,3,9,3,1,9,3,6,11,-1,-1,-1,-1,1,11,8,0,1,8,1,6,11,4,1,9,1,4,6,-1,6,11,3,0,6,3,4,6,0,-1,-1,-1,-1,-1,-1,-1,8,4,6,8,6,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6,10,7,10,8,7,10,9,8,-1,-1,-1,-1,-1,-1,-1,3,7,0,7,10,0,10,9,0,10,7,6,-1,-1,-1,-1,7,6,10,7,10,1,8,7,1,0,8,1,-1,-1,-1,-1,7,6,10,1,7,10,3,7,1,-1,-1,-1,-1,-1,-1,-1,6,2,1,8,6,1,9,8,1,7,6,8,-1,-1,-1,-1,9,6,2,1,9,2,9,7,6,3,9,0,9,3,7,-1,0,8,7,6,0,7,2,0,6,-1,-1,-1,-1,-1,-1,-1,2,3,7,2,7,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,3,2,8,6,10,9,8,10,7,6,8,-1,-1,-1,-1,7,0,2,11,7,2,7,9,0,10,7,6,7,10,9,-1,0,8,1,8,7,1,7,10,1,10,7,6,11,3,2,-1,1,2,11,7,1,11,1,6,10,1,7,
76696,-1,-1,-1,-1,6,9,8,7,6,8,6,1,9,3,6,11,6,3,1,-1,1,9,0,7,6,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,7,6,0,7,0,11,3,0,6,11,-1,-1,-1,-1,6,11,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,6,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,0,3,6,7,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,1,0,6,7,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,1,8,1,3,8,6,7,11,-1,-1,-1,-1,-1,-1,-1,2,1,10,7,11,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,2,1,8,0,3,7,11,6,-1,-1,-1,-1,-1,-1,-1,0,9,2,9,10,2,7,11,6,-1,-1,-1,-1,-1,-1,-1,7,11,6,3,10,2,3,8,10,8,9,10,-1,-1,-1,-1,3,2,7,7,2,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,0,7,0,6,7,0,2,6,-1,-1,-1,-1,-1,-1,-1,6,7,2,7,3,2,9,1,0,-1,-1,-1,-1,-1,-1,-1,2,6,1,6,8,1,8,9,1,6,7,8,-1,-1,-1,-1,6,7,10,7,1,10,7,3,1,-1,-1,-1,-1,-1,-1,-1,6,7,10,10,7,1,7,8,1,8,0,1,-1,-1,-1,-1,7,3,0,10,7,0,9,10,0,7,10,6,-1,-1,-1,-1,10,6,7,8,10,7,9,10,8,-1,-1,-1,-1,-1,-1,-1,4,8,6,6,8,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,6,3,6,0,3,6,4,0,-1,-1,-1,-1,-1,-1,-1,11,6,8,6,4,8,1,0,9,-1,-1,-1,-1,-1,-1,-1,6,4,9,3,6,9,1,3,9,6,3,11,-1,-1,-1,-1,4,8,6,8,11,6,1,10,2,-1,-1,-1,-1,-1,-1,-1,10,2,1,11,0,3,11,6,0,6,4,0,-1,-1,-1,-1,8,11,4,11,6,4,9,2,0,9,10,2,-1,-1,-1,-1,3,9,10,2,3,10,3,4,9,6,3,11,3,6,4,-1,3,2,8,2,4,8,2,6,4,-1,-1,-1,-1,-1,-1,-1,2,4,0,2,6,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,9,1,4,3,2,6,4,2,8,3,4,-1,-1,-1,-1,4,9,1,2,4,1,6,4,2,-1,-1,-1,-1,-1,-1,-1,3,1,8,1,6,8,6,4,8,1,10,6,-1,-1,-1,-1,0,1,10,6,0,10,4,0,6,-1,-1,-1,-1,-1,-1,-1,3,6,4,8,3,4,3,10,6,9,3,0,3,9,10,-1,4,9,10,4,10,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,9,4,11,6,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,0,5,9,4,6,7,11,-1,-1,-1,-1,-1,-1,-1,1,0,5,0,4,5,11,6,7,-1,-1,-1,-1,-1,-1,-1,6,7,11,4,3,8,4,5,3,5,1,3,-1,-1,-1,-1,4,5,9,2,1,10,11,6,7,-1,-1,-1,-1,-1,-1,-1,7,11,6,10,2,1,3,8,0,5,9,4,-1,-1,-1,-1,11,6,7,10,4,5,10,2,4,2,0,4,-1,-1,-1,-1,8,4,3,4,5,3,5,2,3,2,5,10,6,7,11,-1,3,2,7,2,6,7,9,4,5,-1,-1,-1,-1,-1,-1,-1,4,5,9,6,8,0,2,6,0,7,8,6,-1,-1,-1,-1,2,6,3,6,7,3,0,5,1,0,4,5,-1,-1,-1,-1,8,2,6,7,8,6,8,1,2,5,8,4,8,5,1,-1,4,5,9,6,1,10,6,7,1,7,3,1,-1,-1,-1,-1,10,6,1,6,7,1,7,0,1,0,7,8,4,5,9,-1,10,0,4,5,10,4,10,3,0,7,10,6,10,7,3,-1,10,6,7,8,10,7,10,4,5,10,8,4,-1,-1,-1,-1,5,9,6,9,11,6,9,8,11,-1,-1,-1,-1,-1,-1,-1,11,6,3,3,6,0,6,5,0,5,9,0,-1,-1,-1,-1,8,11,0,11,5,0,5,1,0,11,6,5,-1,-1,-1,-1,3,11,6,5,3,6,1,3,5,-1,-1,-1,-1,-1,-1,-1,10,2,1,11,5,9,8,11,9,6,5,11,-1,-1,-1,-1,3,11,0,11,6,0,6,9,0,9,6,5,10,2,1,-1,5,8,11,6,5,11,5,0,8,2,5,10,5,2,0,-1,3,11,6,5,3,6,3,10,2,3,5,10,-1,-1,-1,-1,9,8,5,8,2,5,2,6,5,2,8,3,-1,-1,-1,-1,6,5,9,0,6,9,2,6,0,-1,-1,-1,-1,-1,-1,-1,8,5,1,0,8,1,8,6,5,2,8,3,8,2,6,-1,6,5,1,6,1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6,3,1,10,6,1,6,8,3,9,6,5,6,9,8,-1,0,1,10,6,0,10,0,5,9,0,6,5,-1,-1,-1,-1,8,3,0,10,6,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6,5,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,5,11,11,5,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,5,11,5,7,11,0,3,8,-1,-1,-1,-1,-1,-1,-1,7,11,5,11,10,5,0,9,1,-1,-1,-1,-1,-1,-1,-1,5,7,10,7,11,10,1,8,9,1,3,8,-1,-1,-1,-1,2,1,11,1,7,11,1,5,7,-1,-1,-1,-1,-1,-1,-1,3,8,0,7,2,1,5,7,1,11,2,7,-1,-1,-1,-1,5,7,9,7,2,9,2,0,9,7,11,2,-1,-1,-1,-1,2,5,7,11,2,7,2,9,5,8,2,3,2,8,9,-1,10,5,2,5,3,2,5,7,3,-1,-1,-1,-1,-1,-1,-1,0,2,8,2,5,8,5,7,8,5,2,10,-1,-1,-1,-1,1,0,9,3,10,5,7,3,5,2,10,3,-1,-1,-1,-1,2,8,9,1,2,9,2,7,8,5,2,10,2,5,7,-1,5,3,1,5,7,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,8,0,1,7,0,5,7,1,-1,-1,-1,-1,-1,-1,-1,3,0,9,5,3,9,7,3,5,-1,-1,-1,-1,-1,-1,-1,7,8,9,7,9,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,8,5,8,10,5,8,11,10,-1,-1,-1,-1,-1,-1,-1,4,0,5,0,11,5,11,10,5,0,3,11,-1,-1,-1,-1,9,1,0,10,4,8,11,10,8,5,4,10,-1,-1,-1,-1,4,11,10,5,4,10,4,3,11,1,4,9,4,1,3,-1,1,5,2,5,8,2,8,11,2,8,5,4,-1,-1,-1,-1,11,4,0,3,11,0,11,5,4,1,11,2,11,1,5,-1,5,2,0,9,5,0,5,11,2,8,5,4,5,8,11,-1,5,4,9,3,11,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,5,2,2,5,3,5,4,3,4,8,3,-1,-1,-1,-1,2,10,5,4,2,5,0,2,4,-1,-1,-1,-1,-1,-1,-1,2,10,3,10,5,3,5,8,3,8,5,4,9,1,0,-1,2,10,5,4,2,5,2,9,1,2,4,9,-1,-1,-1,-1,5,4,8,3,5,8,1,5,3,-1,-1,-1,-1,-1,-1,-1,5,4,0,5,0,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,4,8,3,5,8,5,0,9,5,3,0,-1,-1,-1,-1,5,4,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,11,4,11,9,4,11,10,9,-1,-1,-1,-1,-1,-1,-1,3,8,0,7,9,4,7,11,9,11,10,9,-1,-1,-1,-1,11,10,1,4,11,1,0,4,1,11,4,7,-1,-1,-1,-1,4,1,3,8,4,3,4,10,1,11,4,7,4,11,10,-1,7,11,4,4,11,9,11,2,9,2,1,9,-1,-1,-1,-1,4,7,9,7,11,9,11,1,9,1,11,2,3,8,0,-1,4,7,11,2,4,11,0,4,2,-1,-1,-1,-1,-1,-1,-1,4,7,11,2,4,11,4,3,8,4,2,3,-1,-1,-1,-1,10,9,2,9,7,2,7,3,2,9,4,7,-1,-1,-1,-1,7,10,9,4,7,9,7,2,10,0,7,8,7,0,2,-1,10,7,3,2,10,3,10,4,7,0,10,1,10,0,4,-1,2,10,1,4,7,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,9,4,7,1,4,3,1,7,-1,-1,-1,-1,-1,-1,-1,1,9,4,7,1,4,1,8,0,1,7,8,-1,-1,-1,-1,3,0,4,3,4,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,8,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,10,9,8,11,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,0,3,11,9,3,10,9,11,-1,-1,-1,-1,-1,-1,-1,10,1,0,8,10,0,11,10,8,-1,-1,-1,-1,-1,-1,-1,10,1,3,10,3,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,2,1,9,11,1,8,11,9,-1,-1,-1,-1,-1,-1,-1,9,0,3,11,9,3,9,2,1,9,11,2,-1,-1,-1,-1,11,2,0,11,0,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,2,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,3,2,10,8,2,9,8,10,-1,-1,-1,-1,-1,-1,-1,2,10,9,2,9,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,3,2,10,8,2,8,1,0,8,10,1,-1,-1,-1,-1,2,10,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,3,1,8,1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,9,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,3,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]),numTrisTable:new Float32Array([0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,2,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,3,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,3,2,3,3,2,3,4,4,3,3,4,4,3,4,5,5,2,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,3,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,4,2,3,3,4,3,4,2,3,3,4,4,5,4,5,3,2,3,4,4,3,4,5,3,2,4,5,5,4,5,2,4,1,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,3,2,3,3,4,3,4,4,5,3,2,4,3,4,3,5,2,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,4,3,4,4,3,4,5,5,4,4,3,5,2,5,4,2,1,2,3,3,4,3,4,4,5,3,4,4,5,2,3,3,2,3,4,4,5,4,5,5,2,4,3,5,4,3,2,4,1,3,4,4,5,4,5,3,4,4,5,5,2,3,4,2,1,2,3,3,2,3,4,2,1,3,2,4,1,2,1,1,0])},Dn=class extends Mb{constructor(e,t,i){super(e,t,i),this.data=t,this.needsRebuild=!0,this.customDepthMaterialNeedsUpdate=!1,this._npart=-1,this.spatialn=1,this.drawRangeNeedsForceUpdate=!0,this._resolutionLevel=-1,this.resolution=64,this.spatialDivisions=25,this.zLayersPerRow=8,this.basePyramidSize=512,this.pyramidTexture1Width=341,this.pyramidTexture1Height=256,this.pyramidTexture2Width=170,this.pyramidTexture2Height=128,this.numLevels=9,this.pyramidLevelSizes=[1,2,4,8,16,32,64,128,256,512],this.bboxSize=0,this.bboxOffset=0,this.shapesDataTexture={value:void 0},this.spatialscene=new nb,this.potentialPassScene=new nb,this.voxelPassScene=new nb,this._spatialPassRenderTargets=[],this._potentialPassRenderTargets=[],this._voxelPassRenderTargets=[],this._pyramidRenderTargets=[],this.geometry=new rz,this.geometry.drawRange.count=0,this.spatialPassUniforms={span:{value:-1},shapesDataTexture:this.shapesDataTexture,npart:{value:this.npart},spatialn:{value:this.spatialn}},this.spatialMesh=new rK(Dt,this.spatialPassMaterial()),this.spatialMesh.frustumCulled=!1,this.spatialscene.add(this.spatialMesh);let r=new nM(Da.triTable,16,256,1028,1015);r.needsUpdate=!0;let s=new nM(Da.numTrisTable,256,1,1028,1015);s.needsUpdate=!0,this.voxelPassUniforms={potentialPassTexture:{value:void 0},numTrisTable:{value:s}},this.voxelMesh=new rK(Dt,this.voxelPassMaterial()),this.voxelMesh.frustumCulled=!1,this.voxelPassScene.add(this.voxelMesh),this.potentialPassUniforms={shapesDataTexture:this.shapesDataTexture,spatialPassTexture:{value:void 0},npart:{value:this.npart},spatialn:{value:this.spatialn}},this.potentialMesh=new rK(Dt,this.potentialPassMaterial()),this.potentialMesh.frustumCulled=!1,this.potentialPassScene.add(this.potentialMesh),this.marchPassUniforms={triTable:{value:r},potentialPassTexture:{value:void 0},voxelPassTexture:{value:void 0},pyramidTexture1:{value:void 0},pyramidTexture1Size:{value:void 0},pyramidTexture2:{value:void 0}
7669,pyramidTexture2Size:{value:void 0}},this.frustumCulled=!1,this.onBeforeShadowPass=e=>{if(Dg.call(this),0===this.npart){this.geometry.drawRange.count=0;return}let t=this.material.root;if(t.shadersPatchedForShapeBlend){if(this.customDepthMaterialNeedsUpdate){this.customDepthMaterialNeedsUpdate=!1,this.customDepthMaterial=new r5({vertexShader:t.vertexShader,fragmentShader:` 7670 #include <packing> 7671 void main() 7672 { 7673 gl_FragColor = packDepthToRGBA(gl_FragCoord.z); 7674 } 7675 `,uniforms:t.uniforms,defines:this.material.defines}),this.isMeshDepthMaterial=!0,this.customDistanceMaterial=new r5({vertexShader:t.vertexShader,fragmentShader:` 7676 #include <common> 7677 #include <packing> 7678 uniform vec3 referencePosition; 7679 uniform float nearDistance; 7680 uniform float farDistance; 7681 // World-space position 7682 varying vec3 vWPosition; 7683 void main() 7684 { 7685 float dist = length(vWPosition - referencePosition); 7686 dist = (dist - nearDistance) / (farDistance - nearDistance); 7687 dist = saturate(dist); 7688 // Required by Three.js for this to work 7689 gl_FragColor = packDepthToRGBA( dist ); 7690 }`,uniforms:{nearDistance:{value:0},farDistance:{value:0},referencePosition:{value:new iv},opacity:{value:0},...t.uniforms},defines:this.material.defines});let e=this.customDistanceMaterial;e.referencePosition=new iv,e.nearDistance=0,e.farDistance=0,e.opacity=1,e.isMeshDistanceMaterial=!0}}else this.patchVertexShaderForShapeBlend(t),t.shadersPatchedForShapeBlend=!0,this.customDepthMaterialNeedsUpdate=!0;if(this.spatialPassUniforms.npart.value=this.npart,this.spatialPassUniforms.spatialn.value=this.spatialn,this.potentialPassUniforms.npart.value=this.npart,this.potentialPassUniforms.spatialn.value=this.spatialn,this.needsRebuild){this.needsRebuild=!1,this.spatialMesh.material.defines.RES=this.resolutionLevel,this.spatialMesh.material.needsUpdate=!0,this.potentialMesh.material.defines.RES=this.resolutionLevel,this.potentialPassUniforms.spatialPassTexture.value=this.spatialPassRenderTarget.texture,this.potentialMesh.material.needsUpdate=!0,this.voxelMesh.material.defines.RES=this.resolutionLevel,this.voxelMesh.material.needsUpdate=!0,this.voxelPassUniforms.potentialPassTexture.value=this.potentialPassRenderTarget.texture,this.marchPassUniforms.potentialPassTexture.value=this.potentialPassRenderTarget.texture,this.marchPassUniforms.voxelPassTexture.value=this.voxelPassRenderTarget.texture[0],this.material.defines.RES=this.resolutionLevel,this.material.defines.LEVELS=this.pyramidLevelSizes.length,this.material.defines.LOOP=this.pyramidLevelSizes.length%2==0?this.pyramidLevelSizes.length-3:this.pyramidLevelSizes.length-2,this.material.defines.HALF=this.pyramidLevelSizes.length%2==0?1:0,this.material.needsUpdate=!0;let e=this.pyramidLevelSizes.length%2==0?0:1,t=this.pyramidLevelSizes.length%2==0?1:0;this.marchPassUniforms.pyramidTexture2.value=this.pyramidRenderTarget[e].texture,this.marchPassUniforms.pyramidTexture2Size.value=new tQ(this.pyramidRenderTarget[e].width,this.pyramidRenderTarget[e].height),this.marchPassUniforms.pyramidTexture1.value=this.pyramidRenderTarget[t].texture,this.marchPassUniforms.pyramidTexture1Size.value=new tQ(this.pyramidRenderTarget[t].width,this.pyramidRenderTarget[t].height),Object.assign(this.material.uniforms,this.marchPassUniforms)}let i=e.shadowMap.enabled;e.shadowMap.enabled=!1;let r=e.getRenderTarget();e.setRenderTarget(this.spatialPassRenderTarget),e.render(this.spatialscene,Dr),e.setRenderTarget(this.potentialPassRenderTarget),e.render(this.potentialPassScene,Dr),e.setRenderTarget(this.voxelPassRenderTarget),e.render(this.voxelPassScene,Dr),Dn.streamCompaction.renderPyramid(this.resolutionLevel,this.pyramidLevelSizes,e,this.voxelPassRenderTarget,this.pyramidRenderTarget).then(e=>{this.material.wireframe&&(3*e>this.geometry.attributes.position.count||this.drawRangeNeedsForceUpdate)&&(this.geometry.dispose(),this.geometry=new rz,this.geometry.userData.parameters={width:this.bboxSize,height:this.bboxSize,depth:this.bboxSize,centerOffset:[this.bboxOffset,this.bboxOffset,this.bboxOffset]},this.geometry.attributes.position=new rM(new Float32Array(6*e),3)),(3*e>this.geometry.drawRange.count||this.drawRangeNeedsForceUpdate)&&(this.geometry.drawRange.count=3*Math.floor(1.2*e)),this.drawRangeNeedsForceUpdate=!1}),e.shadowMap.enabled=i,e.setRenderTarget(r)}}set npart(e){e!==this._npart&&(this.drawRangeNeedsForceUpdate=!0,this._npart=e,this.spatialn=Math.ceil(e/96))}get npart(){return this._npart}set resolutionLevel(e){let t=Math.min(8,Math.max(5,e));if(t!==this._resolutionLevel){switch(this._resolutionLevel=t,this.resolution=Math.pow(2,t),this.resolutionLevel){case 5:this.pyramidLevelSizes=[1,2,4,6,12,24,48,96,192],this.bboxSize=496,this.bboxOffset=-8;break;case 6:this.pyramidLevelSizes=[1,2,4,8,16,32,64,128,256,512],this.bboxSize=504,this.bboxOffset=-4;break;case 7:this.pyramidLevelSizes=[1,2,4,6,12,24,48,96,192,384,768,1536],this.bboxSize=508,this.bboxOffset=-2;break;case 8:this.pyramidLevelSizes=[1,2,4,8,16,32,64,128,256,512,1024,2048,4096],this.bboxSize=510,this.bboxOffset=-1}this.pyramidTexture1Width=0,this.pyramidTexture2Width=0,this.pyramidTexture1Height=this.pyramidLevelSizes[this.pyramidLevelSizes.length-2],this.pyramidTexture2Height=this.pyramidLevelSizes[this.pyramidLevelSizes.length-3];for(let e=this.pyramidLevelSizes.length-2;e>=0;e--)(this.pyramidLevelSizes.length-2)%2==e%2?this.pyramidTexture1Width+=this.pyramidLevelSizes[e]:this.pyramidTexture2Width+=this.pyramidLevelSizes[e];this.basePyramidSize=this.pyramidLevelSizes[this.pyramidLevelSizes.length-1],this.zLayersPerRow=this.basePyramidSize/this.resolution,this.numLevels=this.pyramidLevelSizes.length-1,this.geometry.userData.parameters={width:this.bboxSize,height:this.bboxSize,depth:this.bboxSize,centerOffset:[this.bboxOffset,this.bboxOffset,this.bboxOffset]},this.needsRebuild=!0}}get resolutionLevel(){return this._resolutionLevel}get spatialPassRenderTarget(){let e=this._spatialPassRenderTargets[this.resolutionLevel];return e||(e=new id(this.spatialDivisions*this.spatialn,this.spatialDivisions**2,{format:1023,type:1015,stencilBuffer:!1,depthBuffer:!1,generateMipmaps:!1,minFilter:1003,magFilter:1003}),this._spatialPassRenderTargets[this.resolutionLevel]=e),e}get potentialPassRenderTarget(){let e=this._potentialPassRenderTargets[this.resolutionLevel];return e||(e=new id(this.basePyramidSize,this.basePyramidSize,{format:1023,type:1015,stencilBuffer:!1,depthBuffer:!1,generateMipmaps:!1,minFilter:1003,magFilter:1003}),this._potentialPassRenderTargets[this.resolutionLevel]=e),e}get voxelPassRenderTarget(){let e=this._voxelPassRenderTargets[this.resolutionLevel];return e||((e=new im(this.basePyramidSize,this.basePyramidSize,2,{stencilBuffer:!1,depthBuffer:!1,generateMipmaps:!1,minFilter:1003,magFilter:1003})).texture[0].format=1023,e.texture[0].type=1015,e.texture[1].format=1028,e.texture[1].type=1015,this._voxelPassRenderTargets[this.resolutionLevel]=e),e}get pyramidRenderTarget(){let e=this._pyramidRenderTargets[this.resolutionLevel];return e||(e=[new id(this.pyramidTexture1Width,this.pyramidTexture1Height,{format:1023,type:1015,stencilBuffer:!1,depthBuffer:!1,magFilter:1003,minFilter:1003}),new id(this.pyramidTexture2Width,this.pyramidTexture2Height,{format:1023,type:1015,stencilBuffer:!1,depthBuffer:!1,magFilter:1003,minFilter:1003})],this._pyramidRenderTargets[this.resolutionLevel]=e),e}updateState(e,t){let i=this.material;super.updateState(e,t),i!==this.material&&(this.needsRebuild=!0),e.geometry&&(this.resolutionLevel=e.geometry.resolutionLevel,this.geometry.userData.parameters={width:this.bboxSize,height:this.bboxSize,depth:this.bboxSize,centerOffset:[this.bboxOffset,this.bboxOffset,this.bboxOffset]}),e.wireframe&&!this.geometry.getAttribute("position")?this.geometry.setAttribute("position",new rM(new Float32Array(3*this.geometry.drawRange.count),3)):!e.wireframe&&this.geometry.getAttribute("position")&&this.geometry.deleteAttribute("position")}spatialPassMaterial(){return new Di({name:"Spatial Pass",fragmentShader:` 7691 precision highp float; 7692 out vec4 pc_FragColor; 7693 const float spatialDivisions = ${this.spatialDivisions}.; 7694 uniform float span; 7695 uniform float npart; 7696 uniform float spatialn; 7697 ${Da.shapeInput()} 7698 7699 vec3 low, high; // range of current div; subset of -1 .. 1 with span border 7700 7701 // lookup one element/channel's worth of spheres for current division 7702 // stating with low sphere number lowi 7703 // gives a key to which spheres from lowi..lowi+23 are active within given div (low..high) 7704 float spatialKey(float lowi) { 7705 float t = 0.; 7706 for (float ii = 23.; ii >= 0.; ii--) { 7707 float i = ii + lowi; 7708 float iin = (i + 0.5) / 96.; 7709 vec4 shape = shapePos(iin); 7710 vec3 d = shape.xyz; 7711 float op = shape.w; 7712 7713 t *= 2.; 7714 t += ( 7715 low.x < d.x && d.x < high.x && 7716 low.y < d.y && d.y < high.y && 7717 low.z < d.z && d.z < high.z && 7718 i < npart || op == -2. // always include if op is -2, which is the intersection operation 7719 ) ? 1. : 0.; 7720 } 7721 return t; 7722 } 7723 7724 ${Da.getpart} 7725 7726 void main() { // spatialial fragment shader 7727 // find active div 7728 vec3 div; // which div is current 7729 // out holds x=> x, lowi faster moving and y=> z, y faster moving 7730 float yz = float(gl_FragCoord.y - 0.5); // contains z, y faster moving 7731 div.y = getpart(yz, spatialDivisions); 7732 div.z = yz; // getpart(yz, spatialDivisions.z); // what's left, should be the same as getpart 7733 7734 float lx = float(gl_FragCoord.x - 0.5); // contains x, lowi faster moving 7735 float lowi = getpart(lx, spatialn) * 96.; 7736 div.x = lx; 7737 7738 low = div / spatialDivisions * 2. - 1. - span; 7739 high = (div+1.) / spatialDivisions * 2. - 1. + span; 7740 7741 // find active range of spheres 7742 pc_FragColor.x = spatialKey(lowi); 7743 pc_FragColor.y = spatialKey(lowi+24.); 7744 pc_FragColor.z = spatialKey(lowi+48.); 7745 pc_FragColor.w = spatialKey(lowi+72.); 7746 } 7747 `,uniforms:this.spatialPassUniforms})}potentialPassMaterial(){return new Di({name:"PotentialPass",fragmentShader:` 7748 precision highp float; 7749 out vec4 pc_FragColor; 7750 7751 ${Da.shapeInput()} 7752 uniform sampler2D spatialPassTexture; 7753 7754 const float res = float(RES); 7755 const float VOXEL_RESOLUTION = pow(2., res); 7756 const float Z_LAYERS_PER_ROW = ceil(pow(2., res / 2.)); 7757 const float VOXEL_RESOLUTION_SUB1 = VOXEL_RESOLUTION - 1.; 7758 const float INV_VOXEL_RESOLUTION = 1.0 / VOXEL_RESOLUTION; 7759 7760 uniform float npart; 7761 uniform float spatialn; 7762 const float spatialDivisions = ${this.spatialDivisions}.; 7763 const float spatialDivisions2 = spatialDivisions * spatialDivisions; 7764 const float spatialDivisionsSub1 = spatialDivisions - 1.; 7765 7766 ${Da.getpart} 7767 7768 vec3 packRGBAToVec3(vec4 color) { 7769 uint r = uint(color.r * 255.); 7770 uint g = uint(color.g * 255.); 7771 uint combined = (r << 8) | g; 7772 return vec3(float(combined) * 0.00001525902, color.b, color.a); // 1/65535 7773 } 7774 7775 void applyQuaternionToVector(in vec4 q, inout vec3 v) { 7776 v += 2.0 * cross(q.xyz, cross(q.xyz, v) + q.w * v); 7777 } 7778 7779 /** 7780 * SDF functions (reference: https://iquilezles.org/articles/distfunctions/) 7781 */ 7782 7783 // branchless version of "Smooth Union, Subtraction and Intersection - bound, bound, bound" in above reference 7784 float smoothOperation(float op, float sdf, float d, float k) { 7785 // union: op = 1 =>
7785 signSubtract = 1, signIntersection = 1 7786 // subtract: op = -1 => signSubtract = -1, signIntersection = 1 7787 // intersection: op = -2 => signSubtract = -1, signIntersection = -1 7788 7789 float signSubtract = clamp(op, -1., 1.); 7790 float signIntersection = 2. * (op - signSubtract) + 1.; 7791 float h = clamp( 7792 0.5 + signSubtract * 0.5 * (sdf - signSubtract * signIntersection * d) / k, 7793 0.0, 7794 1.0 7795 ); 7796 return mix(sdf, signSubtract * signIntersection * d, h) - 7797 signSubtract * k * h * (1.0 - h); 7798 } 7799 7800 float sdSphere( vec3 p, float s ) 7801 { 7802 return length(p)-s; 7803 } 7804 7805 float sdEllipsoid( vec3 p, vec3 r ) 7806 { 7807 float k0 = length(p/r); 7808 float k1 = length(p/(r*r)); 7809 return k0*(k0-1.0)/k1; 7810 } 7811 7812 float sdBox( vec3 p, vec3 b ) 7813 { 7814 vec3 q = abs(p) - b; 7815 return length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0); 7816 } 7817 7818 float sdTorus( vec3 p, vec2 t ) 7819 { 7820 vec2 q = vec2(length(p.xy)-t.x,p.z); 7821 return length(q)-t.y; 7822 } 7823 7824 float sdCappedTorus( vec3 p, vec2 sc, float ra, float rb) 7825 { 7826 p.x = abs(p.x); 7827 float k = (sc.y*p.x>sc.x*p.y) ? dot(p.xy,sc) : length(p.xy); 7828 return sqrt( dot(p,p) + ra*ra - 2.0*ra*k ) - rb; 7829 } 7830 7831 float dot2( in vec2 v ) { return dot(v,v); } 7832 float sdCappedCone( vec3 p, float h, float r1, float r2 ) 7833 { 7834 vec2 q = vec2( length(p.xz), p.y ); 7835 vec2 k1 = vec2(r2,h); 7836 vec2 k2 = vec2(r2-r1,2.0*h); 7837 vec2 ca = vec2(q.x-min(q.x,(q.y<0.0)?r1:r2), abs(q.y)-h); 7838 vec2 cb = q - k1 + k2*clamp( dot(k1-q,k2)/dot2(k2), 0.0, 1.0 ); 7839 float s = (cb.x<0.0 && ca.y<0.0) ? -1.0 : 1.0; 7840 return s*sqrt( min(dot2(ca),dot2(cb)) ); 7841 } 7842 7843 float sdCappedCylinder( vec3 p, float h, float r ) 7844 { 7845 vec2 d = abs(vec2(length(p.xz),p.y)) - vec2(r,h); 7846 return min(max(d.x,d.y),0.0) + length(max(d,0.0)); 7847 } 7848 7849 float maxBlend = 0.0; 7850 // compute potential from A (=24) spheres, using the bit flags in 'activeKey' 7851 // to avoid lookup/compute for inactive spheres 7852 // return field potential, side effect updates track, 7853 // compute and return +ve and -ve values separately 7854 void fillSpatialInner( 7855 float ii, 7856 float activeKey, 7857 vec3 corner, 7858 inout float sdf, 7859 inout float colorDivisor, 7860 inout vec4 trackColor 7861 ) { 7862 for (float i = 0.; i < 24.; i++) { 7863 if (activeKey < 1.) break; // activeKey exhausted, no more active spheres 7864 activeKey *= 0.5; 7865 if (fract(activeKey) < 0.5) continue; 7866 7867 float iin = (i + ii + 0.5) * 0.010416666666666666; 7868 vec4 shape = shapePos(iin); 7869 vec4 quat = shapeQuat(iin); 7870 vec4 params1 = shapeParams1(iin); 7871 vec4 params2 = shapeParams2(iin); 7872 7873 vec3 p = corner - shape.xyz; 7874 applyQuaternionToVector(quat, p); 7875 p /= params2.z; // scale 7876 float d; // d in -1..1 coordinates 7877 switch (int(params1.x)) { 7878 case 0: d = sdSphere(p, params1.y); break; 7879 case 1: d = sdEllipsoid(p, params1.yzw); break; 7880 case 2: d = sdBox(p, params1.yzw); break; 7881 case 3: d = sdCappedCylinder(p, params1.y, params1.z); break; 7882 case 4: d = sdCappedCone(p, params1.y, params1.z, params1.w); break; 7883 case 5: d = sdTorus(p, params1.yz); break; 7884 case 6: d = sdCappedTorus(p, params1.yz, params1.w, params2.w); break; 7885 } 7886 d -= params2.y; // rounded edge 7887 d *= params2.z; // scale 7888 7889 float k = params2.x; 7890 float op = shape.w; 7891 7892 sdf = smoothOperation(shape.w, sdf, d, k); 7893 7894 float isNegativeOne = step(-1.5, op) * step(op, -0.5); // 1 when op == -1, 0 otherwise 7895 float colorCull = smoothstep(maxBlend, 0., -d); 7896 float cullFactor = mix(1.0, colorCull, isNegativeOne); 7897 trackColor *= cullFactor; 7898 colorDivisor *= cullFactor; 7899 7900 maxBlend = max(maxBlend, k); 7901 7902 k += 2. * INV_VOXEL_RESOLUTION; // avoid division by zero, and other color artifacts with very small k 7903 float nearness = smoothstep(k, 0., d); 7904 7905 vec4 color = shapeColor(iin); 7906 nearness *= float(color.a >= 0.); 7907 7908 colorDivisor += nearness; 7909 trackColor += color * nearness; 7910 } 7911 } 7912 7913 vec3 div; 7914 // compute potential from all spheres; collect +ve and =ve values separately 7915 // work in blocks of A*4 (=96) spheres, using the bit flags in 4 float channel 'activeKey' values 7916 // TODO check if extra vec3 output useful, not really used at present 7917 float fillSpatial(vec3 corner, inout vec4 trackColor) { 7918 float sdf = 1e3; // hack: initialize to large value 7919 float colorDivisor = 0.; 7920 // spatialPassTexture holds x=> lowi, x faster moving and y=> z, y faster moving 7921 float divyz = (div.y + div.z * spatialDivisions + 0.5) / (spatialDivisions2); 7922 for (float ii = 0.; ii < spatialn; ii++) { 7923 float i = ii * 96.; 7924 7925 vec4 activeKey = texture(spatialPassTexture, vec2((div.x * spatialn + ii + 0.5)/(spatialn * spatialDivisions), divyz)); 7926 fillSpatialInner(i, activeKey.x, corner, sdf, colorDivisor, trackColor); 7927 fillSpatialInner(i+24., activeKey.y, corner, sdf, colorDivisor, trackColor); 7928 fillSpatialInner(i+48., activeKey.z, corner, sdf, colorDivisor, trackColor); 7929 fillSpatialInner(i+72., activeKey.w, corner, sdf, colorDivisor, trackColor); 7930 } 7931 7932 trackColor /= colorDivisor; 7933 return mix(sdf, 0.0, step(1e20 - 0.1, sdf)); 7934 } 7935 7936 void main() { 7937 ${Da.getxyzi} // get xi yi zi from 2d position 7938 7939 vec3 xyzi = vec3(xi,yi,zi); 7940 vec3 corner = xyzi / VOXEL_RESOLUTION_SUB1 * 2. - 1.; // -1..1 coords 7941 7942 div = floor(xyzi / VOXEL_RESOLUTION_SUB1 * spatialDivisionsSub1); 7943 7944 vec4 c = vec4(0.); 7945 float t = fillSpatial(corner, c); 7946 7947 pc_FragColor = vec4(t, packRGBAToVec3(c)); // RGB texture 7948 } 7949 `,uniforms:this.potentialPassUniforms})}voxelPassMaterial(){return new Di({name:"VoxelPass",fragmentShader:` 7950 precision highp float; 7951 layout(location = 0) out vec4 pc_FragColor; 7952 layout(location = 1) out vec4 numTris; 7953 7954 const float res = float(RES); 7955 const float VOXEL_RESOLUTION = pow(2., res); 7956 const float VOXEL_RESOLUTION_SUB1 = VOXEL_RESOLUTION - 1.; 7957 const float Z_LAYERS_PER_ROW = ceil(pow(2., res / 2.)); 7958 const float INV_VOXEL_RESOLUTION = 1.0 / VOXEL_RESOLUTION; 7959 uniform sampler2D numTrisTable; // 256 x 1 7960 7961 float keyi(float f000, float f100, float f010, float f110, float f001, float f101, float f011, float f111) { 7962 return (float(f000 < 0.) * 1.) + 7963 (float(f100 < 0.) * 2.) + 7964 (float(f010 < 0.) * 8.) + 7965 (float(f110 < 0.) * 4.) + 7966 (float(f001 < 0.) * 16.) + 7967 (float(f101 < 0.) * 32.) + 7968 (float(f011 < 0.) * 128.) + 7969 (float(f111 < 0.) * 64.); 7970 } 7971 7972 ${Da.lookup} 7973 7974 vec3 compNormi(float xi, float yi, float zi) { 7975 float dx = look(xi + 1., yi, zi, potentialPassTexture).r - look(xi - 1., yi, zi, potentialPassTexture).r; 7976 float dy = look(xi, yi + 1., zi, potentialPassTexture).r - look(xi, yi - 1., zi, potentialPassTexture).r; 7977 float dz = look(xi, yi, zi + 1., potentialPassTexture).r - look(xi, yi, zi - 1., potentialPassTexture).r; 7978 // if we allow (common) 0,0,0 case through then NaN can spread 7979 // eg r = vec4(compNorm i(???), 1.) will pollute r.w 7980 if (dx == 0.0 && dy == 0.0 && dz == 0.0) { 7981 return vec3(0.199, 0.299, 0.399); 7982 } 7983 return normalize(vec3(dx, dy, dz)); 7984 } 7985 7986 void main() { 7987 ${Da.getxyzi} // get xi yi zi from 2d 7988 7989 vec3 normal = compNormi(xi, yi, zi); // even if our key is -1 this may be needed by a neighbouring voxel 7990 7991 if (xi >= VOXEL_RESOLUTION_SUB1 || yi >= VOXEL_RESOLUTION_SUB1 || zi >= VOXEL_RESOLUTION_SUB1) { 7992 pc_FragColor = vec4(normal, 0.); 7993 numTris = vec4(0.); 7994 return; 7995 } 7996 7997 float 7998 f000 = look(xi, yi, zi, potentialPassTexture).r, 7999 f100 = look(xi+1., yi, zi, potentialPassTexture).r, 8000 f010 = look(xi, yi+1., zi, potentialPassTexture).r, 8001 f110 = look(xi+1., yi+1., zi, potentialPassTexture).r, 8002 f001 = look(xi, yi, zi+1., potentialPassTexture).r, 8003 f101 = look(xi+1., yi, zi+1., potentialPassTexture).r, 8004 f011 = look(xi, yi+1., zi+1., potentialPassTexture).r, 8005 f111 = look(xi+1., yi+1., zi+1., potentialPassTexture).r; 8006 float key = keyi(f000, f100, f010, f110, f001, f101, f011, f111); 8007 8008 pc_FragColor = vec4(normal, key); 8009 8010 numTris = texture(numTrisTable, vec2((key + 0.5) / 256., 0.5)); 8011 } 8012 `,uniforms:this.voxelPassUniforms})}
8012patchVertexShaderForShapeBlend(e){let t=` 8013 #ifdef SHAPEBLEND 8014 precision highp sampler2D; 8015 8016 uniform float isol; 8017 8018 uniform sampler2D triTable; // 256 x 16 8019 uniform sampler2D pyramidTexture1; 8020 uniform vec2 pyramidTexture1Size; 8021 uniform sampler2D pyramidTexture2; 8022 uniform vec2 pyramidTexture2Size; 8023 8024 const vec2 halfPixelOffset = vec2(0.5, 0.5); 8025 8026 const vec2 rShift = vec2(0., 1.); 8027 const vec2 gShift = vec2(1., 1.); 8028 const vec2 bShift = vec2(1., 0.); 8029 8030 const float res = float(RES); 8031 const float VOXEL_RESOLUTION = pow(2., res); 8032 const float Z_LAYERS_PER_ROW = ceil(pow(2., res / 2.)); 8033 const float INV_VOXEL_RESOLUTION = 1.0 / VOXEL_RESOLUTION; 8034 8035 const float scale_factor = 2.; 8036 8037 #if SHAPEBLEND == 5 8038 const float levelShiftX[7] = float[7](4., 6., 12., 24., 48., 96., 192.); 8039 const float scale = 8. * scale_factor; 8040 const vec3 originOffset = vec3(16.); 8041 #elif SHAPEBLEND == 7 8042 const float levelShiftX[10] = float[10](4., 6., 12., 24., 48., 96., 192., 384., 768., 1536.); 8043 const float scale = 2. * scale_factor; 8044 const vec3 originOffset = vec3(64.); 8045 #elif SHAPEBLEND == 8 8046 const float levelShiftX[11] = float[11](4., 8., 16., 32., 64., 128., 256., 512., 1024., 2048., 4096.); 8047 const float scale = scale_factor; 8048 const vec3 originOffset = vec3(128.); 8049 #else 8050 const float levelShiftX[8] = float[8](4., 8., 16., 32., 64., 128., 256., 512.); 8051 const float scale = 4. * scale_factor; 8052 const vec3 originOffset = vec3(32.); 8053 #endif 8054 8055 ${Da.lookup} 8056 8057 const vec3 offsets[24] = vec3[]( 8058 vec3(0., 0., 0.), vec3(1., 0., 0.), 8059 vec3(1., 0., 0.), vec3(1., 1., 0.), 8060 vec3(0., 1., 0.), vec3(1., 1., 0.), 8061 vec3(0., 0., 0.), vec3(0., 1., 0.), 8062 vec3(0., 0., 1.), vec3(1., 0., 1.), 8063 vec3(1., 0., 1.), vec3(1., 1., 1.), 8064 vec3(0., 1., 1.), vec3(1., 1., 1.), 8065 vec3(0., 0., 1.), vec3(0., 1., 1.), 8066 vec3(0., 0., 0.), vec3(0., 0., 1.), 8067 vec3(1., 0., 0.), vec3(1., 0., 1.), 8068 vec3(1., 1., 0.), vec3(1., 1., 1.), 8069 vec3(0., 1., 0.), vec3(0., 1., 1.) 8070 ); 8071 8072 vec2 computeShiftedPosition1(vec2 xy, float levelOriginX) { 8073 vec2 xyShifted = xy; 8074 xyShifted.x += levelOriginX; 8075 return (xyShifted + halfPixelOffset) / pyramidTexture1Size; 8076 } 8077 8078 vec2 computeShiftedPosition2(vec2 xy, float levelOriginX) { 8079 vec2 xyShifted = xy; 8080 xyShifted.x += levelOriginX; 8081 return (xyShifted + halfPixelOffset) / pyramidTexture2Size; 8082 } 8083 8084 vec4 unpackVec3ToRGBA(vec3 vec) { 8085 uint combined = uint(vec.x * 65535.0 + 0.5); // Add 0.5 for rounding 8086 float g = float(combined & uint(0xFF)) * 0.00392156862; // 1/255 8087 float r = float((combined >> 8) & uint(0xFF)) * 0.00392156862; 8088 8089 return vec4(r, g, vec.y, vec.z); 8090 } 8091 8092 out vec4 marchColor; 8093 // end of marchvertPre 8094 #endif 8095 `,i=` 8096 #ifdef SHAPEBLEND 8097 float triIndex = floor(float(gl_VertexID/3)); 8098 float vertexIndex = float(gl_VertexID); 8099 8100 // Initial pyramid lookup 8101 float levelOriginX1 = pyramidTexture1Size.x - 2.; 8102 float levelOriginX2 = pyramidTexture2Size.x - 1.; 8103 vec2 xy = vec2(0.); 8104 vec4 lookUp = texture(pyramidTexture2, computeShiftedPosition2(xy, levelOriginX2)); 8105 8106 // Early exit check 8107 if (triIndex >= lookUp.r) return; 8108 8109 // Optimize loop variables 8110 float start = 0.; 8111 vec4 triIndexVec = vec4(triIndex); 8112 8113 // Main position computation loop 8114 for (int i = 0; i < LOOP;) { 8115 // Compute boundaries 8116 vec4 ends = lookUp + vec4(start); 8117 vec4 starts = vec4(ends.gba, start); 8118 vec4 check = vec4(greaterThanEqual(triIndexVec, starts)) * 8119 vec4(lessThan(triIndexVec, ends)); 8120 8121 // Update position 8122 xy *= 2.; 8123 xy += check.r * rShift + check.g * gShift + check.b * bShift; 8124 8125 // Update loop variables 8126 start = dot(check, starts); 8127 levelOriginX2 -= levelShiftX[i]; 8128 8129 // Update lookup 8130 lookUp = texture(pyramidTexture1, computeShiftedPosition1(xy, levelOriginX1)); 8131 i++; 8132 8133 ends = lookUp + vec4(start); 8134 starts = vec4(ends.gba, start); 8135 check = vec4(greaterThanEqual(triIndexVec, starts)) * 8136 vec4(lessThan(triIndexVec, ends)); 8137 8138 // Update position 8139 xy *= 2.; 8140 xy += check.r * rShift + check.g * gShift + check.b * bShift; 8141 8142 // Update loop variables 8143 start = dot(check, starts); 8144 levelOriginX1 -= levelShiftX[i]; 8145 8146 // Update lookup 8147 lookUp = texture(pyramidTexture2, computeShiftedPosition2(xy, levelOriginX2)); 8148 8149 i++; 8150 } 8151 8152 #if HALF == 1 8153 vec4 ends = lookUp + vec4(start); 8154 vec4 starts = vec4(ends.gba, start); 8155 vec4 check = vec4(greaterThanEqual(triIndexVec, starts)) * vec4(lessThan(triIndexVec, ends)); 8156 8157 // Update position 8158 xy *= 2.; 8159 xy += check.r * rShift + check.g * gShift + check.b * bShift; 8160 8161 // Update loop variables 8162 start = dot(check, starts); 8163 #endif 8164 8165 // Compute final coordinates 8166 vec3 gridPos; 8167 gridPos.x = mod(xy.x, VOXEL_RESOLUTION); 8168 gridPos.y = mod(xy.y, VOXEL_RESOLUTION); 8169 gridPos.z = floor(xy.x * INV_VOXEL_RESOLUTION) + 8170 floor(xy.y * INV_VOXEL_RESOLUTION) * Z_LAYERS_PER_ROW; 8171 8172 // Vertex key computation 8173 vertexIndex -= start * 3.; 8174 float vk = vertexIndex * 0.0625 + 0.03125; // Optimized division by 16 and addition of 1/32 8175 8176 // Voxel lookup and edge computation 8177 vec4 voxel = look(gridPos.x, gridPos.y, gridPos.z, voxelPassTexture); 8178 float key = (voxel.w + 0.5) * 0.00390625; // Optimized division by 256 8179 8180 // Edge lookup and offset computation 8181 float edgeNum = texture(triTable, vec2(vk, key)).x; 8182 int edgeIndex = int(edgeNum) * 2; 8183 8184 // Compute edge positions 8185 vec3 p1 = gridPos + offsets[edgeIndex]; 8186 vec3 p2 = gridPos + offsets[edgeIndex + 1]; 8187 8188 // Compute potentials and normals 8189 vec4 potential1 = look(p1.x, p1.y, p1.z, potentialPassTexture); 8190 vec4 potential2 = look(p2.x, p2.y, p2.z, potentialPassTexture); 8191 8192 // Final position and normal computation 8193 float mu = potential1.r / (potential1.r - potential2.r); 8194 8195 marchColor = mix( 8196 unpackVec3ToRGBA(potential1.gba), 8197 unpackVec3ToRGBA(potential2.gba), 8198 mu 8199 ); 8200 8201 transformed = p1 + (p2 - p1) * mu; 8202 transformed -= originOffset; 8203 transformed *= scale; 8204 vec4 data1 = look(p1.x, p1.y, p1.z, voxelPassTexture); 8205 vec4 data2 = look(p2.x, p2.y, p2.z, voxelPassTexture); 8206 objectNormal = normalize(mix(data1.xyz, data2.xyz, mu)); 8207 transformedNormal = normalMatrix * objectNormal; 8208 #ifndef FLAT_SHADED 8209 vNormal = transformedNormal; 8210 #endif 8211 #endif 8212 `;e.vertexShader=t+e.vertexShader.replace("#include <project_vertex>",i+` 8213#include <project_vertex>`);let r=e.fragmentShader.match(/vec3 diffuseColor[^\n]*\n/);if(!r)return;let s=` 8214 #ifdef SHAPEBLEND_C 8215 #if SHAPEBLEND_C == 1 8216 ${r[0].replace(/nodeU0,/g,"marchColor.rgb,").replace(/nodeU\d+(?=,g_uid\d+_calpha\))/g,"marchColor.a")} 8217 #else 8218 ${r[0]} 8219 #endif 8220 #else 8221 ${r[0]} 8222 #endif 8223 `;e.fragmentShader=`in vec4 marchColor; 8224`+e.fragmentShader.replace(r[0],s),Object.assign(e.uniforms,this.marchPassUniforms)}initDebugPass(e){console.log("fboToDebug.width",e.width,e.height),this.geometry=new sc(e.width,e.height),this.geometry.userData={parameters:{width:4,height:4}};let t={inputTexture:{value:Array.isArray(e.texture)?e.texture[1]:e.texture},pyramidTextureSize:{value:void 0}},i=e=>{e.vertexShader=` 8225 precision highp float; 8226 8227 varying vec2 vUv; 8228 8229 void main() { 8230 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); 8231 vUv = uv; 8232 } 8233 `,e.fragmentShader=` 8234 layout(location = 1) out vec4 gVelocity; 8235 8236 precision highp float; 8237 8238 uniform sampler2D inputTexture; 8239 varying vec2 vUv; 8240 8241 uniform vec2 pyramidTextureSize; 8242 8243 void main() { 8244 // Sample the input texture using UV coordinates 8245 gl_FragColor = texture(inputTexture, vUv); 8246 gVelocity = vec4(0.0); 8247 } 8248 `,t.pyramidTextureSize.value=new tQ(this.pyramidRenderTarget.width,this.pyramidRenderTarget.height),Object.assign(e.uniforms,t)};this.material.shapeBlendhack=i,this.material.root.shapeBlendhack=i}},Do=Dn;Do.streamCompaction=new Ds;var Dl=new iX,Dh=new iX,Dc=new ig,Dd=new iv,Du=new iv,Dp=new ig;function Df(e,t=0){let i=this.children.length;for(;i--;){let r=this.children[i];xc.is(r)&&Dm.call(r,e,t+1)}}function Dm(e,t=0){if(!0!==e(this,t)){let i=this.children.length;for(;i--;){let r=this.children[i];xc.is(r)&&Dm.call(r,e,t+1)}}}function Dg(){if(void 0===this.shapesDataTexture.value){let e=new nM(new Float32Array(1920),96,5,1023,1015);this.shapesDataTexture.value=e}let e=this.shapesDataTexture.value,t=e.image.data;e.needsUpdate=!0;let i=0,r=this.data.geometry.blendRange,s=Dl.copy(this.matrixWorld).invert(),a=0;Df.call(this,e=>{let o;if(!1===e.visible)return!0;
8248if(e instanceof M9||e instanceof ER||e instanceof P9)return;o=e instanceof xb?e.object:e;let l=e.data?.cloner;if(wQ.is(e)&&l&&!l.hideBase&&"radial"!==l.type&&!0!==l.disabled||!(o instanceof Mb))return;let h=o.geometry.userData.parameters,c=h.shapeBlendNode;if(void 0===c)return;if(Dh.multiplyMatrices(s,e.matrixWorld).decompose(Du,Dc,Dd),"TorusGeometry"===h.type&&360!==h.arc){let e=h.arc*Math.PI/180;e/=4,Dc.multiply(Dp.set(0,0,Math.sin(e),Math.cos(e)))}let d=c.overrideGlobalBlend?c.blendRange:r;d=d/this.bboxSize*2,t[4*a]=(Du.x-this.bboxOffset)/this.bboxSize*2,t[4*a+1]=(Du.y-this.bboxOffset)/this.bboxSize*2,t[4*a+2]=(Du.z-this.bboxOffset)/this.bboxSize*2,t[4*a+3]=0===c.operation?1:2===c.operation?-1:-2,t[384+4*a]=-Dc.x,t[384+4*a+1]=-Dc.y,t[384+4*a+2]=-Dc.z,t[384+4*a+3]=Dc.w;let u=new Float32Array(4),p=0;if("SphereGeometry"===h.type)h.width===h.height&&h.width===h.depth?u[0]=0:u[0]=1,u[1]=h.width/this.bboxSize,u[2]=h.height/this.bboxSize,u[3]=h.depth/this.bboxSize,i=Math.max(i,u[1]*Dd.x+d,u[2]*Dd.x+d,u[3]*Dd.x+d);else if("CubeGeometry"===h.type){p=h.cornerRadius;let e=h.width,t=h.height,r=h.depth;u[0]=2,u[1]=(e-2*p)/this.bboxSize,u[2]=(t-2*p)/this.bboxSize,u[3]=(r-2*p)/this.bboxSize,i=Math.max(i,Math.sqrt(e**2+t**2+r**2)/this.bboxSize*Dd.x+d)}else if("CylinderGeometry"===h.type){p=h.cornerRadius;let e=h.height,t=h.radiusBottom,r=h.radiusTop;if(r>=t){let i=(Math.PI/2-Math.atan2(r-t,e))/2;r-=p/Math.tan(i),t-=p*Math.tan(i)}else if(t>r){let i=(Math.PI/2-Math.atan2(t-r,e))/2;r-=p*Math.tan(i),t-=p/Math.tan(i)}u[1]=(h.height-2*p)/this.bboxSize,t===r?(u[0]=3,u[2]=t/this.bboxSize*2):(u[0]=4,u[2]=t/this.bboxSize*2,u[3]=r/this.bboxSize*2),i=Math.max(i,4*u[1]*Dd.x+d)}else if("TorusGeometry"===h.type){if(u[0]=5,u[1]=(h.width-h.depth)/this.bboxSize,u[2]=h.depth/this.bboxSize,360!==h.arc){u[0]=6,u[3]=u[1],t[1152+4*a+3]=u[2];let e=2*Math.atan2(u[2]/2,u[1]),i=h.arc*Math.PI/180/2-e;u[1]=Math.sin(i),u[2]=Math.cos(i)}i=Math.max(i,h.width*Dd.x/this.bboxSize+d)}t.set(u,768+4*a),t[1152+4*a]=d,t[1152+4*a+1]=p/this.bboxSize*2,t[1152+4*a+2]=Dd.x;let f=o.material,m=f.uniforms.nodeU0.node.value,g=f.uniforms.nodeU1.value;0===c.operation||c.useColor||(g=-1),t[1536+4*a]=m.r,t[1536+4*a+1]=m.g,t[1536+4*a+2]=m.b,t[1536+4*a+3]=g,g<1&&1===this.material.defines.SHAPEBLEND_C&&(this.material.transparent=!0),a++}),this.npart=a,this.spatialPassUniforms.span.value=1.4*i}function Dv(e,t){let i=!1,r=512&e.layers.mask,s=t.getLayersOfType("transmission"),a=t.getLayersOfType("outline");return a.length>0&&(e.layers.set(8),s.length>0&&e.layers.enable(3),i=!0,MS(e),Mw(e)),0===s.length&&0===a.length&&e.layers.set(0),r&&e.layers.set(9),e instanceof Mf&&e.needsAO&&e.layers.enable(5),i}function Dy(e,t){if(!t.layers)return!1;let i=512&e.layers.mask,r=!1,s=t.getLayersOfType("transmission").filter(e=>e.data.visible),a=t.getLayersOfType("outline").filter(e=>e.data.visible);return s.length>0&&(e.layers.set(3),a.length>0&&e.layers.enable(8),r=!0),0===s.length&&0===a.length&&e.layers.set(0),i&&e.layers.set(9),e.needsAO&&e.layers.enable(5),r}var Dx=new lI,Db=new iX,Dw=new iq;function DS(e,t,i,r=!1){let s=e.cloner;if(s)for(let a of s.children){let s=Db.copy(a.matrixWorld).invert(),o=Dw.copy(t.ray).applyMatrix4(s),l=e.matrixWorld;o.applyMatrix4(l),Dx.set(o.origin,o.direction),Dx.near=t.near,Dx.far=t.far;let h=Dx.intersectObject(e,!1);h.length>0&&i.push({...h[0],object:r?a:e})}}var D_=class{constructor(){this._constraints=new Map}setConstraint(e,t){null===t?this._constraints.delete(e):this._constraints.set(e,t)}removeDependencies(e){this._constraints.delete(e)}applyConstraints(e){let t=new Set;this._constraints.forEach((i,r)=>{let s=[r,i],a=i;for(;this._constraints.has(a);){if(a=this._constraints.get(a),s.includes(a)){console.warn(`circular dependency detected: ${s.join(" -> ")}`);break}t.has(a)||s.push(a)}for(let i=s.length-2;i>=0;i--)if(!t.has(s[i])){let r=e.find(s[i]);r?r.applyPathSnapping(e):console.warn(`missing entity ${s[i]}`),t.add(s[i])}})}findDependency(e,t){let i=e;for(;this._constraints.has(i);)if((i=this._constraints.get(i))===t)return!0;return!1}},DA=class{};function DM(e){let t,i,r,s,a,o,l,h,c,d,u,p,f,m,g;function v(e,t,o){let l=new Float32Array(d,a,3*i);r=0;let h=new Uint32Array(d,s,i);for(let i=0;i<o.length-1;i++){let s=t[i],a=e[i].elements,c=s.filter(e=>e.enabled&&"Include"===e.mode).map(e=>"Box"===e.type?x(e):w(e)),d=s.filter(e=>e.enabled&&"Exclude"===e.mode).map(e=>"Box"===e.type?x(e):w(e));for(let e=o[i];e<o[i+1];e++){let t=p[3*e],i=p[3*e+1],s=p[3*e+2];
8248if((0===c.length||y(t,i,s,c))&&(0===d.length||!y(t,i,s,d))){let o=1/(a[3]*t+a[7]*i+a[11]*s+a[15]);l[3*r]=(a[0]*t+a[4]*i+a[8]*s+a[12])*o,l[3*r+1]=(a[1]*t+a[5]*i+a[9]*s+a[13])*o,l[3*r+2]=(a[2]*t+a[6]*i+a[10]*s+a[14])*o,h[r]=e,r++}}}}function y(e,t,i,r,s){return r["Intersect"===s?"every":"some"](r=>{var s,a,o,l,h,c,d,u;let p,f,m,g,v,y,x;let b=(s=r.invRotationMatrix,p=e-(a=r.cropCenter)[0],f=t-a[1],m=i-a[2],g=1/(s[3]*p+s[7]*f+s[11]*m+s[15]),{x:(s[0]*p+s[4]*f+s[8]*m+s[12])*g+a[0],y:(s[1]*p+s[5]*f+s[9]*m+s[13])*g+a[1],z:(s[2]*p+s[6]*f+s[10]*m+s[14])*g+a[2]});return Array.isArray(r)?(o=b.x,l=b.y,h=b.z,o>=r[0]&&o<=r[3]&&l>=r[1]&&l<=r[4]&&h>=r[2]&&h<=r[5]):(c=b.x,d=b.y,u=b.z,v=(c-r.cropCenter[0])*r.invRadiusX,v*v+(y=(d-r.cropCenter[1])*r.invRadiusY)*y+(x=(u-r.cropCenter[2])*r.invRadiusZ)*x<=1)})}function x(e){let t=e.cropSize[0]/2,i=e.cropSize[1]/2,r=e.cropSize[2]/2;return Object.assign([e.cropCenter[0]-t,e.cropCenter[1]-i,e.cropCenter[2]-r,e.cropCenter[0]+t,e.cropCenter[1]+i,e.cropCenter[2]+r],{invRotationMatrix:b(e.cropRotation),cropCenter:e.cropCenter})}function b(e){let t=[],i=e[0]*Math.PI/180,r=e[1]*Math.PI/180,s=e[2]*Math.PI/180,a=Math.cos(i),o=Math.sin(i),l=Math.cos(r),h=Math.sin(r),c=Math.cos(s),d=Math.sin(s),u=a*c,p=a*d,f=o*c,m=o*d;return t[0]=l*c,t[1]=-l*d,t[2]=h,t[4]=p+f*h,t[5]=u-m*h,t[6]=-o*l,t[8]=m-u*h,t[9]=f+p*h,t[10]=a*l,t[12]=0,t[13]=0,t[14]=0,t[3]=0,t[7]=0,t[11]=0,t[15]=1,t}function w(e){let t=2/e.cropSize[0],i=2/e.cropSize[1],r=2/e.cropSize[2],s=b(e.cropRotation);return{invRadiusX:t,invRadiusY:i,invRadiusZ:r,cropCenter:e.cropCenter,invRotationMatrix:s}}e.onmessage=b=>{if(b.data.getCroppedIndexes){let t=new Uint32Array(function(e,t){let i=[],r=t.filter(e=>e.enabled&&"Include"===e.mode).map(e=>"Box"===e.type?x(e):w(e)),s=t.filter(e=>e.enabled&&"Exclude"===e.mode).map(e=>"Box"===e.type?x(e):w(e)),a=e.length;for(let t=0;t<a;t+=3){let a=e[t],o=e[t+1],l=e[t+2];(0===r.length||y(a,o,l,r))&&(0===s.length||!y(a,o,l,s))||i.push(t/3)}return i}(new Float32Array(b.data.positions),b.data.crops)).buffer;e.postMessage({outOfBoundsIndexes:t},[t])}else if(b.data.positions)p=new Float32Array(b.data.positions),m=b.data.meshMatrixWorlds,g=b.data.cropsArray,f=b.data.meshIndexIntervals,v(m,g,f),e.postMessage({sortSetupComplete:!0});else if(b.data.sort||b.data.newMatrixWorlds||b.data.newCropsArray)(b.data.newMatrixWorlds||b.data.newCropsArray)&&(g=b.data.newCropsArray||g,v(m=b.data.newMatrixWorlds||m,g,f)),function(p){let f,m=new Float64Array(d,o,16);for(let e=0;e<16;e++)m[e]=p[e];if(r>1){t.exports.sortIndexes(s,a,c,o,l,h,u.DepthMapRange,r);let e=new Uint32Array(r);f=e.buffer,e.set(new Uint32Array(d,h,r))}else if(1===r){let e=new Uint32Array(r);e[0]=new Uint32Array(d,s,i)[0],f=e.buffer}else f=new ArrayBuffer(0);e.postMessage({sortDone:!0,indexesBuffer:f},[f])}(b.data.sort.view,b.data.sort.cameraPosition);else if(b.data.init){u=b.data.init.Constants,i=b.data.init.splatCount;let r=u.BytesPerInt,p=3*u.BytesPerFloat,f=new Uint8Array(b.data.init.sorterWasmBytes),m=Math.floor((i*(r+p)+(i*u.BytesPerInt*2+u.DepthMapRange*u.BytesPerInt*2)+32*u.MemoryPageSize)/u.MemoryPageSize)+1,g={module:{},env:{memory:new WebAssembly.Memory({initial:2*m,maximum:3*m,shared:!0})}};WebAssembly.compile(f).then(e=>WebAssembly.instantiate(e,g)).then(f=>{t=f,s=0,h=(l=(c=(o=(a=i*r)+i*p)+16*u.BytesPerFloat*2)+i*u.BytesPerInt)+u.DepthMapRange*u.BytesPerInt,d=g.env.memory.buffer,e.postMessage({sortSetupPhase1Complete:!0})})}}}tS(DA,"DepthMapRange",65536),tS(DA,"MemoryPageSize",65536),tS(DA,"BytesPerFloat",4),tS(DA,"BytesPerInt",4);var DE=(ti=new Int32Array((tt=new Float32Array(1)).buffer),function(e){return tt[0]=e,ti[0]}),DC=new tQ;function DT(e){let t=!1;return e.scene.objects.traverse((e,i)=>{if(!1===i.visible)return!0;"Splat"===i.type&&(t=!0)}),t}var DP,DD,DI,DO,DR,DL=class extends rK{constructor(e,t,i,r,s=!1,a=1,o,l){super(i,r),this.splatCount=t,this.meshIndexIntervals=o,this.meshMatrixWorlds=l,this.splatBuffers=e,this.geometry=i,this.material=r,this.splatDataTextures=null,this.halfPrecisionCovariancesOnGPU=s,this.devicePixelRatio=a,this.resetLocalSplatDataAndTexturesFromSplatBuffer()}static buildMesh(e,t,i=!1,r=1,s,a){let o=DL.buildGeomtery(t),l=DL.buildMaterial(s);return new DL(e,t,o,l,i,r,s,a)}static buildMaterial(e){let t=` 8249 precision highp float; 8250 #include <common> 8251 8252 attribute uint splatIndex; 8253 8254 uniform highp sampler2D covariancesTexture; 8255 uniform highp usampler2D centersColorsTexture; 8256 uniform vec2 focal; 8257 uniform vec2 viewport; 8258 uniform vec2 basisViewport; 8259 uniform vec2 covariancesTextureSize; 8260 uniform vec2 centersColorsTextureSize; 8261 uniform highp sampler2D meshMatrixWorldsTexture; 8262 uniform uint meshIndexIntervals[257]; 8263 uniform float orthoZoom; 8264 8265 varying vec4 vColor; 8266 varying vec2 vUv; 8267 8268 varying vec2 vPosition; 8269 8270 const vec4 encodeNorm4 = vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0); 8271 const uvec4 mask4 = uvec4(uint(0x000000FF), uint(0x0000FF00), uint(0x00FF0000), uint(0xFF000000)); 8272 const uvec4 shift4 = uvec4(0, 8, 16, 24); 8273 vec4 uintToRGBAVec (uint u) { 8274 uvec4 urgba = mask4 & u; 8275 urgba = urgba >> shift4; 8276 vec4 rgba = vec4(urgba) * encodeNorm4; 8277 return rgba; 8278 } 8279 8280 vec2 getDataUV(in int stride, in int offset, in vec2 dimensions) { 8281 vec2 samplerUV = vec2(0.0, 0.0); 8282 float d = float(splatIndex * uint(stride) + uint(
8282offset)) / dimensions.x; 8283 samplerUV.y = float(floor(d)) / dimensions.y; 8284 samplerUV.x = fract(d); 8285 return samplerUV; 8286 } 8287 8288 void main () { 8289 uvec4 sampledCenterColor = texture(centersColorsTexture, getDataUV(1, 0, centersColorsTextureSize)); 8290 vec3 splatCenter = uintBitsToFloat(uvec3(sampledCenterColor.gba)); 8291 vColor = uintToRGBAVec(sampledCenterColor.r); 8292 8293 vPosition = position.xy * 2.0; 8294 8295 uint meshIndex; 8296 for (int i = 1; i < 257; i++) { 8297 if (splatIndex < meshIndexIntervals[i]) { 8298 meshIndex = uint(i - 1); 8299 break; 8300 } 8301 } 8302 8303 float strideMulmeshIndex = float(4u*meshIndex); 8304 float meshMatrixWorldsTextureLength = float(256*4); 8305 8306 mat4 modelMat = mat4( 8307 texture(meshMatrixWorldsTexture, vec2((strideMulmeshIndex+0.0)/meshMatrixWorldsTextureLength, 0)), 8308 texture(meshMatrixWorldsTexture, vec2((strideMulmeshIndex+1.0)/meshMatrixWorldsTextureLength, 0)), 8309 texture(meshMatrixWorldsTexture, vec2((strideMulmeshIndex+2.0)/meshMatrixWorldsTextureLength, 0)), 8310 texture(meshMatrixWorldsTexture, vec2((strideMulmeshIndex+3.0)/meshMatrixWorldsTextureLength, 0)) 8311 ); 8312 mat4 modelViewMat = viewMatrix * modelMat; 8313 vec4 viewCenter = modelViewMat * vec4(splatCenter, 1.0); 8314 vec4 clipCenter = projectionMatrix * viewCenter; 8315 8316 vec2 sampledCovarianceA = texture(covariancesTexture, getDataUV(3, 0, covariancesTextureSize)).rg; 8317 vec2 sampledCovarianceB = texture(covariancesTexture, getDataUV(3, 1, covariancesTextureSize)).rg; 8318 vec2 sampledCovarianceC = texture(covariancesTexture, getDataUV(3, 2, covariancesTextureSize)).rg; 8319 8320 vec3 cov3D_M11_M12_M13 = vec3(sampledCovarianceA.rg, sampledCovarianceB.r); 8321 vec3 cov3D_M22_M23_M33 = vec3(sampledCovarianceB.g, sampledCovarianceC.rg); 8322 8323 // Compute the 2D covariance matrix from the upper-right portion of the 3D covariance matrix 8324 mat3 Vrk = mat3( 8325 cov3D_M11_M12_M13.x, cov3D_M11_M12_M13.y, cov3D_M11_M12_M13.z, 8326 cov3D_M11_M12_M13.y, cov3D_M22_M23_M33.x, cov3D_M22_M23_M33.y, 8327 cov3D_M11_M12_M13.z, cov3D_M22_M23_M33.y, cov3D_M22_M23_M33.z 8328 ); 8329 float s = 1.0 / (viewCenter.z * viewCenter.z); 8330 8331 mat3 W = transpose(mat3(modelViewMat)); 8332 mat3 T = orthoZoom > 0.0 ? W : W * mat3( 8333 focal.x / viewCenter.z, 0., -(focal.x * viewCenter.x) * s, 8334 0., focal.y / viewCenter.z, -(focal.y * viewCenter.y) * s, 8335 0., 0., 0. 8336 ); 8337 mat3 cov2Dm = transpose(T) * Vrk * T; 8338 cov2Dm[0][0] += 0.3; 8339 cov2Dm[1][1] += 0.3; 8340 8341 // We are interested in the upper-left 2x2 portion of the projected 3D covariance matrix because 8342 // we only care about the X and Y values. We want the X-diagonal, cov2Dm[0][0], 8343 // the Y-diagonal, cov2Dm[1][1], and the correlation between the two cov2Dm[0][1]. We don't 8344 // need cov2Dm[1][0] because it is a symetric matrix. 8345 vec3 cov2Dv = vec3(cov2Dm[0][0], cov2Dm[0][1], cov2Dm[1][1]); 8346 8347 vec3 ndcCenter = clipCenter.xyz / clipCenter.w; 8348 8349 // We now need to solve for the eigen-values and eigen vectors of the 2D covariance matrix 8350 // so that we can determine the 2D basis for the splat. This is done using the method described 8351 // here: https://people.math.harvard.edu/~knill/teaching/math21b2004/exhibits/2dmatrices/index.html 8352 // 8353 // This is a different approach than in the original work at INRIA. In that work they compute the 8354 // max extents of the 2D covariance matrix in screen space to form an axis aligned bounding rectangle 8355 // which forms the geometry that is actually rasterized. They then use the inverse 2D covariance 8356 // matrix (called 'conic') to determine fragment opacity. 8357 float a = cov2Dv.x; 8358 float d = cov2Dv.z;
8359 float b = cov2Dv.y; 8360 float D = a * d - b * b; 8361 float trace = a + d; 8362 float traceOver2 = 0.5 * trace; 8363 float term2 = sqrt(trace * trace / 4.0 - D); 8364 float eigenValue1 = traceOver2 + term2; 8365 float eigenValue2 = max(traceOver2 - term2, 0.00); // prevent negative eigen value 8366 8367 const float maxSplatSize = 1024.0; 8368 vec2 eigenVector1 = normalize(vec2(b, eigenValue1 - a)); 8369 // since the eigen vectors are orthogonal, we derive the second one from the first 8370 vec2 eigenVector2 = vec2(eigenVector1.y, -eigenVector1.x); 8371 vec2 basisVector1 = eigenVector1 * min(sqrt(2.0 * eigenValue1), maxSplatSize); 8372 vec2 basisVector2 = eigenVector2 * min(sqrt(2.0 * eigenValue2), maxSplatSize); 8373 8374 vec2 ndcOffset = vec2(vPosition.x * basisVector1 + vPosition.y * basisVector2) * basisViewport; 8375 8376 if (orthoZoom > 0.0) { 8377 ndcOffset *= orthoZoom; 8378 } 8379 8380 gl_Position = vec4(ndcCenter.xy + ndcOffset, ndcCenter.z, 1.0); 8381 }`,i=` 8382 precision highp float; 8383 #include <common> 8384 8385 uniform vec3 debugColor; 8386 8387 varying vec4 vColor; 8388 varying vec2 vUv; 8389 8390 varying vec2 vPosition; 8391 layout(location = 1) out vec4 gVelocity; 8392 8393 void main () { 8394 // compute the negative squared distance from the center of the splat to the 8395 // current fragment in the splat's local space. 8396 float A = -dot(vPosition, vPosition); 8397 if (A < -4.0) discard; 8398 vec3 color = vColor.rgb; 8399 A = exp(A) * vColor.a; 8400 gl_FragColor = vec4(color.rgb, A); 8401 gVelocity = vec4(0.0); // so it is ignored by TAA 8402 }`;return new r5({uniforms:{covariancesTexture:{type:"t",value:null},centersColorsTexture:{type:"t",value:null},meshIndexIntervals:{value:e},meshMatrixWorldsTexture:{type:"t",value:null},focal:{type:"v2",value:new tQ},viewport:{type:"v2",value:new tQ},basisViewport:{type:"v2",value:new tQ},debugColor:{type:"v3",value:new ii},covariancesTextureSize:{type:"v2",value:new tQ(1024,1024)},centersColorsTextureSize:{type:"v2",value:new tQ(1024,1024)},orthoZoom:{type:"f",value:-1}},vertexShader:t,fragmentShader:i,transparent:!0,alphaTest:1,blending:1,depthTest:!0,depthWrite:!1,side:2})}static buildGeomtery(e){let t=new rz;t.setIndex([0,1,2,0,2,3]);let i=new rM(new Float32Array(12),3);t.setAttribute("position",i),i.setXYZ(0,-1,-1,0),i.setXYZ(1,-1,1,0),i.setXYZ(2,1,1,0),i.setXYZ(3,1,-1,0),i.needsUpdate=!0;let r=new lf().copy(t),s=new nP(new Uint32Array(e),1,!1);return s.setUsage(35048),r.setAttribute("splatIndex",s),r.instanceCount=e,r}resetLocalSplatDataAndTexturesFromSplatBuffer(){this.updateLocalSplatDataFromSplatBuffer(),this.allocateAndStoreLocalSplatDataInTextures()}updateLocalSplatDataFromSplatBuffer(){this.splatBuffers.forEach(e=>e.buildPreComputedBuffers()),this.covariances=new Float32Array(6*this.splatCount),this.colors=new Uint8Array(4*this.splatCount),this.centers=new Float32Array(3*this.splatCount);let e=0,t=0,i=0;for(let r of this.splatBuffers){let s=r.nsplats;this.colors.subarray(e,e+4*s).set(r.colorsA),e+=4*s,this.centers.subarray(t,t+3*s).set(r.decoded.xyz.denormDequant().data),t+=3*s,this.covariances.subarray(i,i+6*s).set(new Float32Array(r.precomputedCovarianceBufferData)),i+=6*s}}allocateAndStoreLocalSplatDataInTextures(){let e,t,i=this.splatCount,r=new tQ(4096,1024);for(;r.x*r.y*2<6*i;)r.y*=2;let s=new tQ(4096,1024);for(;s.x*s.y*4<4*i;)s.y*=2;if(this.halfPrecisionCovariancesOnGPU){t=new Uint16Array(r.x*r.y*2);for(let e=0;e<this.covariances.length;e++)t[e]=l0.toHalfFloat(this.covariances[e]);e=new nM(t,r.x,r.y,1030,1016)}else(t=new Float32Array(r.x*r.y*2)).set(this.covariances),e=new nM(t,r.x,r.y,1030,1015);e.needsUpdate=!0,this.material.uniforms.covariancesTexture.value=e,this.material.uniforms.covariancesTextureSize.value.copy(r);let a=new Uint32Array(s.x*s.y*4);for(let e=0;e<i;e++){var o;let t=4*e,i=3*e,r=4*e;a[r]=(o=this.colors[t],o+(this.colors[t+1]<<8)+(this.colors[t+2]<<16)+(this.colors[t+3]<<24)),a[r+1]=DE(this.centers[i]),a[r+2]=DE(this.centers[i+1]),a[r+3]=DE(this.centers[i+2])}let l=new nM(a,s.x,s.y,1033,1014);l.internalFormat="RGBA32UI",l.needsUpdate=!0,this.material.uniforms.centersColorsTexture.value=l,this.material.uniforms.centersColorsTextureSize.value.copy(s);let h=new Float32Array(4096);for(let e=0;e<this.meshMatrixWorlds.length;e++)h.set(this.meshMatrixWorlds[e].elements,16*e);let c=new nM(h,1024,1,1023,1015);c.needsUpdate=!0,this.material.uniforms.meshMatrixWorldsTexture.value=c,this.material.uniformsNeedUpdate=!0,this.splatDataTextures={covariances:{data:t,texture:e,size:r},centerColors:{data:a,texture:l,size:s},meshMatrixWorlds:{data:h,texture:c}}}updateIndexes(e){let t=this.geometry;t.attributes.splatIndex.set(e),t.attributes.splatIndex.needsUpdate=!0,t.instanceCount=e.length}updateUniforms(e,t,i,r){this.splatCount>0&&(DC.set(e.x*this.devicePixelRatio,e.y*this.devicePixelRatio),this.material.uniforms.viewport.value.copy(DC),this.material.uniforms.basisViewport.value.set(2/DC.x,2/DC.y),this.material.uniforms.focal.value.set(t,i),this.material.uniforms.orthoZoom.value=r,this.material.uniformsNeedUpdate=!0)}getSplatDataTextures(){return this.splatDataTextures}getSplatCount(){return this.splatCount}getCenters(){return this.centers}getColors(){return this.colors}getCovariances(){return this.covariances}dispose(){this.geometry.dispose(),this.material.dispose(),this.splatDataTextures&&(this.splatDataTextures.covariances.texture.dispose(),this.splatDataTextures.centerColors.texture.dispose(),this.splatDataTextures.meshMatrixWorlds.texture.dispose()),this.removeFromParent()}},DB=new Promise(e=>{DR=e}),Dz=!1;DB.then(e=>D9=e);var DF=class{constructor(e={}){let t,i,r,s,a,o;tS(this,"updateView",(t=new iX,i=[],r=new iv(0,0,-1),s=new iv(0,0,-1),a=new iv,o=new iv,function(e=!1,l){let h=this.updateMatrixWorldsInWorkerIfNeeded(),c=this.cropsChanged();if(!e){s.set(0,0,-1).applyQuaternion(l.quaternion);let e=!1,t=!1;if(.95>=s.dot(r)&&(e=!0),o.copy(l.position).sub(a).length()>=1&&(t=!0),!e&&!t&&!h&&!c&&!this.needsInitialRender)return}this.needsInitialRender=!1,a.copy(l.position),r.copy(s),t.copy(l.matrixWorld).invert(),t.premultiply(this.dummyPerspectiveMatrix),i[0]=l.position.x,i[1]=l.position.y,i[2]=l.position.z;let d={sort:{view:t.elements,cameraPosition:i,splatRenderCount:this.splatRenderCount,splatSortCount:this.splatRenderCount},...h?{newMatrixWorlds:this.meshMatrixWorlds}:{},...c?{newCropsArray:this.cropsArray}:{}};this.sortRunning?this.queuedMessage=d:(this.queuedMessage=null,this.sortRunning=!0,this.sortWorker.postMessage(d))})),this.scene=e.scene,this.currentPage=null,this.devicePixelRatio=window.devicePixelRatio,this.sortWorker=null,this.splatRenderCount=0,this.splatSortCount=0,this.splatMesh=null,this.sortRunning=!1,this.meshMatrixWorlds=null,this.meshMatrixWorldsOld=null,this.cropsArray=null,this.splatEntries=null,this.queuedMessage=null,this.needsInitialRender=!0,this.dummyPerspectiveMatrix=new iX().makePerspective(-1,1,-1,1,.1,1e3)}updateSplatMeshUniforms(e,t){let i=new tQ;null!==this.splatMesh&&this.splatMesh.getSplatCount()>0&&(e.getSize(i),this.cameraFocalLengthX=t.projectionMatrix.elements[0]*this.devicePixelRatio*i.x*.45,this.cameraFocalLengthY=t.projectionMatrix.elements[5]*this.devicePixelRatio*i.y*.45,this.splatMesh.updateUniforms(i,this.cameraFocalLengthX,this.cameraFocalLengthY,t.isPerspectiveCamera?-1:t.zoom*this.devicePixelRatio))}loadSplat(e={}){this.activePage=this.scene.activePage,e.position&&(e.position=new iv().fromArray(e.position)),e.orientation&&(e.orientation=new ig().fromArray(e.orientation)),e.halfPrecisionCovariances=!!e.halfPrecisionCovariances;let t=[];if(this.splatEntries=t,this.activePage.traverseVisibleEntity(e=>{"Splat"===e.data.type&&t.push(e)}),this.splatMesh&&this.splatMesh.dispose(),0===t.length)return this.splatMesh=null,!1;this.meshMatrixWorlds=t.map(e=>e.matrixWorld),this.meshMatrixWorldsOld=t.map(e=>e.matrixWorld.clone()),this.cropsArray=t.map(e=>e.data.crops.map(e=>e.data));let i=t.map(e=>new D9.GSplineBuffer(new Uint8Array(e.data.buffer).buffer)),r=0,s=[0];for(let e of i)r+=e.getSplatCount(),s.push(r);return this.setupSplatMesh(i,r,e.position,e.orientation,e.halfPrecisionCovariances,this.devicePixelRatio,s,this.meshMatrixWorlds),this.setupSortWorker(r),!0}updateMatrixWorldsInWorkerIfNeeded(){let e=this.splatDataTextures.meshMatrixWorlds.data;for(let t=0;t<this.meshMatrixWorlds.length;t++)e.set(this.meshMatrixWorlds[t].elements,16*t);return this.splatDataTextures.meshMatrixWorlds.texture.needsUpdate=!0,!this.meshMatrixWorlds.every((e,t)=>e.equals(this.meshMatrixWorldsOld[t]))&&(this.meshMatrixWorldsOld=this.meshMatrixWorlds.map(e=>e.clone()),!0)}cropsChanged(){let e=!1;
8402return this.splatEntries.forEach((t,i)=>{t.data.crops.forEach((t,r)=>{void 0===this.cropsArray[i][r]?(e=!0,this.cropsArray[i][r]=t.data):Object.entries(t.data).forEach(([t,s])=>{Array.isArray(s)&&s.some((e,s)=>e!==this.cropsArray[i][r][t][s])?(e=!0,this.cropsArray[i][r][t]=s):s!==this.cropsArray[i][r]?.[t]&&(e=!0,this.cropsArray[i][r][t]=s)})}),t.data.crops.length!==this.cropsArray[i]?.length&&(this.cropsArray[i].length=t.data.crops.length,e=!0)}),e}setupSplatMesh(e,t,i=new iv,r=new ig,s=!1,a=1,o,l){this.splatMesh=DL.buildMesh(e,t,s,a,o,l),this.splatMesh.position.copy(i),this.splatMesh.quaternion.copy(r),this.splatMesh.frustumCulled=!1,this.splatMesh.renderOrder=99999,this.splatRenderCount=t,this.splatMesh.onBeforeRender=(e,t,i)=>this.update(e,i)}setupSortWorker(e){this.sortWorker=function(e){let t=new Worker(URL.createObjectURL(new Blob(["(",DM.toString(),")(self)"],{type:"application/javascript"}))),i=atob("AGFzbQEAAAAADwhkeWxpbmsuMAEEAAAAAAETA2AAAGAIf39/f39/f38AYAABfwISAQNlbnYGbWVtb3J5AgMAgIAEAwQDAAECBzkDEV9fd2FzbV9jYWxsX2N0b3JzAAALc29ydEluZGV4ZXMAARNlbXNjcmlwdGVuX3Rsc19pbml0AAIK3gMDAwABC9IDAwF/BnwBfgJAIAdFDQAgAysDUCEMIAMrAzAhDSADKwMQIQ5BACEDRP///////+9/IQtEAAAAAAAAEAAhCgNAIAIgA0ECdGoCfyAOIAEgA0EMbGoiCCoCALuiIA0gCCoCBLuioCAMIAgqAgi7oqBEAAAAAAAAsECiIgmZRAAAAAAAAOBBYwRAIAmqDAELQYCAgIB4CzYCACAJIAsgCSALYxshCyAJIAogCSAKZBshCiADQQFqIgMgB0cNAAsgB0UNACAGuCAKIAuhoyEJQQAhAwNAAn8gCSACIANBAnRqIgEoAgC3IAuhoiIKmUQAAAAAAADgQWMEQCAKqgwBC0GAgICAeAshCCABIAg2AgAgBCAIQQJ0aiIBIAEoAgBBAWo2AgAgA0EBaiIDIAdHDQALCyAGQQJPBEAgBCgCACEIQQEhAwNAIAQgA0ECdGoiASABKAIAIAhqIgg2AgAgA0EBaiIDIAZHDQALCyAHQQFrIgGtIQ8DQCAEIAIgD6dBAnQiA2ooAgBBAnRqIgcgBygCAEEBayIHNgIAIAUgASAHa0ECdGogACADaigCADYCACAPUCEDIA9CAX0hDyADRQ0ACyAGBEAgBEEAIAZBAnT8CwALCwQAQQAL"),r=new Uint8Array(i.length);for(let e=0;e<i.length;e++)r[e]=i.charCodeAt(e);return t.postMessage({init:{sorterWasmBytes:r.buffer,splatCount:e,Constants:{BytesPerFloat:DA.BytesPerFloat,BytesPerInt:DA.BytesPerInt,DepthMapRange:DA.DepthMapRange,MemoryPageSize:DA.MemoryPageSize}}}),t}(e),this.sortWorker.onmessage=e=>{e.data.sortDone?(this.sortRunning=!1,this.splatMesh?.updateIndexes(new Uint32Array(e.data.indexesBuffer)),this.lastSortTime=e.data.sortTime,this.queuedMessage&&(this.sortWorker.postMessage(this.queuedMessage),this.queuedMessage=null)):e.data.sortCanceled?this.sortRunning=!1:e.data.sortSetupPhase1Complete?this.sortWorker.postMessage({positions:this.splatMesh.getCenters().buffer,meshMatrixWorlds:this.splatMesh.meshMatrixWorlds,meshIndexIntervals:this.splatMesh.meshIndexIntervals,cropsArray:this.cropsArray}):e.data.sortSetupComplete&&(this.splatDataTextures=this.splatMesh.getSplatDataTextures(),this.scene.activePage.add(this.splatMesh),this.needsInitialRender=!0)}}update(e,t){null!==this.splatMesh&&(this.updateSplatMeshUniforms(e,t),this.updateView(!1,t))}getSplatMesh(){return this.splatMesh}},DN=new rS;DN.wireframe=!0;var Dk=new iv,DU=class extends nb{constructor(e,t){super(),this.data=e,this.sharedAssets=t,this.enableHelpers=!1,this.wireframeState=!1,this.needsTransmissionDirty=!0,this.needsNormalDirty=!0,this._needsTransmission=!1,this._needsNormal=!1,this.geometryCacheChanged=!1,this.splatViewer=null,this.shapeBlendIntances=[],this.entityByUuid={},this.entityIdentityToEntity={},this.toExpandCloner=new Set,this.toUpdateCloner=new Set,this.pendingCommands=[],this.pathConstraints=new D_,this.invisibleObjects=new EO("jflkdsafjasdifjaslk",{...v4.defaultData,visible:!1,name:"buildin invisible"}),this.needsRecomputeInstances=!1,this.init(e,t),this.matrixAutoUpdate=!1,this.errorPage=new PD("fdasfa",{...yr.defaultData,name:""},{shared:t,scene:this})}markGeometryCacheDirty(){this.geometryCacheChanged=!0}markNeedsUpdateRendererDirty(){this.needsTransmissionDirty=!0,this.needsNormalDirty=!0}needsTransmission(){let e;return this.needsTransmissionDirty&&(this._needsTransmission=(e=!1,this.traverseEntity(t=>{if(t instanceof Mf){if(Array.isArray(t.material))for(let i=0;i<t.material.length;i++)Dy(t,t.material[i])&&(e=!0);else Dy(t,t.material)&&(e=!0)}}),e),this.needsTransmissionDirty=!1),this._needsTransmission}needsNormal(){let e;return this.needsNormalDirty&&(this._needsNormal=(e=!1,this.traverseEntity(t=>{if(t instanceof Mf){if(Array.isArray(t.material))for(let i=0;i<t.material.length;
8402i++)Dv(t,t.material[i])&&(e=!0);else Dv(t,t.material)&&(e=!0)}}),e),this.needsNormalDirty=!1),this._needsNormal}registerInstanceAndSetUuid(e){let t=e.identity.join("-"),i=this.entityIdentityToEntity[t];i&&(e.uuid=i.uuid),this.entityIdentityToEntity[t]=e,this.entityByUuid[e.uuid]=e}markPenumbraSizeDirty(){for(let e of this.children)e instanceof PD&&(e.penumbraSizeArrayCache=null)}findInstance(e){return this.entityIdentityToEntity[e.join("-")]}get bgColor(){return this.activePage.bgColor}get postprocessing(){return this.activePage.data.postprocessing}getWithSortKey(e){let t=this.find(e);if(void 0===t)return;let i=[],r=t;for(;r!==this;){let e=r,t=(r=r.parent).children.indexOf(e);i.splice(0,0,t)}return{entity:t,sortKey:i}}getAllSorted(e){let t=[];for(let i of e){let e=this.getWithSortKey(i.id);void 0!==e&&t.push(e)}return t.sort((e,t)=>u$(e.sortKey,t.sortKey)),t.map(e=>e.entity)}nonExistOrDescendantOf(e,t){let i=this.find(e);if(void 0===i)return!0;for(;i;){if(i.uuid===t)return!0;i=i.parent}return!1}find(e){if(this.activePage&&this.activePage.personalCamera.parent&&("f23858d0-4a3b-4bd8-8173-66ed0af7f6fb-personalCamera"===e||e===mh))return this.activePage.personalCamera;if(""===e||void 0===e)return;let t=this.entityByUuid[e];return void 0===t?this.getObjectByProperty("uuid",e):t}find2D(e){for(let t of this.children)if(t instanceof PD&&t.uiScene){let i=t.uiScene.find(e);if(i)return i}}findScene2DfromObject2D(e){for(let t of this.children)if(t instanceof PD&&t.uiScene&&t.uiScene.find(e))return t.uiScene}find2DInUIObjects(e){let t;return this.traverseEntity(i=>{void 0===t&&i instanceof Pk&&(t=i.uiCanvas.find(e))}),t}traverse2D(e){for(let t of this.children)t instanceof PD&&t.uiScene&&t.uiScene.traverse(e)}debugEnsureEntity(e){let t=this.find(e);t?Array.isArray(t.identity)&&void 0===this.findInstance(t.identity)&&console.error("not found instance"):console.error("not found")}addPendingExpandCloner(e){this.toExpandCloner.add(e)}addPendingUpdateCloner(e){this.toUpdateCloner.add(e)}markToExpandCloner(e){this.toExpandCloner.add(e),e.traverseEntityAncestors(e=>{this.toExpandCloner.add(e)})}doPendingExpandCloner(){this.toExpandCloner.forEach(e=>{e.expandCloner(this)}),this.toExpandCloner.clear()}doPendingUpdateCloner(){this.toUpdateCloner.forEach(e=>{e.cloner?.update()}),this.toUpdateCloner.clear()}doPendingUpdates(){this.doPendingExpandCloner(),this.doPendingUpdateCloner(),this.applyPendingCommands()}addPendingCommand(e){this.pendingCommands.push(e)}applyPendingCommands(){this.pendingCommands.forEach(e=>e()),this.pendingCommands.length=0}updateByLibOp(e,t){1===e.path.length&&"components"===e.path[0]&&1===e.type&&this.createChildrenObjects([{...e.data.asset,id:e.id}],this.invisibleObjects,t)}updateTreeByOp(e,t){if(0===e.path.length&&7===e.type){let i=null===e.parent?this:this.find(e.parent);if(void 0===i)throw Error("unexpected");let r=this.createObject(e.id,e.data,e.children,i,e.localIndex,t);r.updateVisible(this),r.resetBBoxNeedsUpdate(),ES(r)&&E_(r.parent)&&(r.invali
vendor: 9,708 bytes, line 8402
8402dateUpstreamBooleanData(),r.parent.invalidateDownstreamBooleanData().recomputeBoolean()),this.markNeedsRecomputeInstancesForAncessors(i),this.markNeedsRecomputeInstancesForChildren(r),this.markToExpandCloner(r),this.markPenumbraSizeDirty(),r.updatePathSnapping()}else if(0===e.path.length&&8===e.type){let t=this.find(e.id);if(void 0===t)throw Error("unexpected");t.traverseEntity(e=>{e instanceof Do&&(this.shapeBlendIntances=this.shapeBlendIntances.filter(t=>t!==e))}),this.markToExpandCloner(t),t.resetBBoxNeedsUpdate(),this.unregisterObject(t);let i=t.parent;this.markNeedsRecomputeInstancesForAncessors(i),this.markNeedsRecomputeInstancesForChildren(t),this.markPenumbraSizeDirty(),t.parent.remove(t),E_(t.parent)&&(t.parent.invalidateUpstreamBooleanData(),t.parent.invalidateDownstreamBooleanData().recomputeBoolean()),ES(t)&&(t.freeBooleanPointer(),i instanceof Eb&&i.invalidateDownstreamBooleanData().recomputeBoolean()),t instanceof PR&&t.detachShape(),this.disposeAndUnregisterEntityRecursivelyIfNotReregistered(t),this.pathConstraints.removeDependencies(t.uuid),t.updatePathSnapping()}else if(0===e.path.length&&9===e.type){let t=this.find(e.id);if(void 0===t)throw Error("unexpected");this.markNeedsRecomputeInstancesForChildren(t);let i=t.parent;this.markNeedsRecomputeInstancesForAncessors(i),t.cloner?.resetOnMove(),this.markToExpandCloner(t);let r=null===e.parent?this:this.find(e.parent);if(void 0===r)throw Error("unexpected");r.add(t),this.markNeedsRecomputeInstancesForAncessors(r),this.markToExpandCloner(t),t.invalidateClonerTransform(t),t.updateVisible(this),t.resetBBoxNeedsUpdate(),this.markPenumbraSizeDirty();let s=e.localIndex;r.children.splice(s,0,r.children.pop()),ES(t)&&(t.invalidateUpstreamBooleanData(),E_(t.parent)?t.parent.invalidateDownstreamBooleanData().recomputeBoolean():i instanceof Eb&&i.invalidateDownstreamBooleanData().recomputeBoolean()),t.updatePathSnapping()}this.markNeedsUpdateRendererDirty(),this.markGeometryCacheDirty()}get playPage(){return this.find(this.data.publish.playPage)??this.errorPage}updatePage(e){for(let t of(this.activePage&&this.activePage.onDeactive(),this.activePage=this.errorPage,this.children))t instanceof PD&&(t.visible=t.uuid===e,t.visible&&(this.activePage=t,this.activePage.onActive(this)));this.activePage!==this.splatViewer?.activePage&&this.reloadSplats()}updateEntityByOp(e,t,i,r){if(0===t.type){if(("overrides"in t.props||"component"in t.props)&&this.markNeedsRecomputeInstances(),"visible"in t.props&&this.markPenumbraSizeDirty(),t.path.includes("overrides")&&"states"in t.props){let{rest:e}=t.props;t={...t,props:e},this.markNeedsRecomputeInstances()}"pathSnapping"===t.path[0]&&void 0!==t.props.pathId&&this.pathConstraints.setConstraint(e,t.props.pathId)}let s=this.find(e);if(s)try{(function(e,t,i,r){e.updateByOp(t,i,r,!1)})(s,t,i,{scene:this,shared:r}),s instanceof Mb&&s.updateGeometryGroupsIfNeeded()}catch(e){console.error(e)}}updateEntity2DByOp(e,t,i,r,s,a=[]){e.updateEntityByOp(t,i,r,s),this.traverseEntity(e=>{(e instanceof Pk||e instanceof PD)&&(a.includes(e.frameId??"")||e.frameId===t)&&e.updateEntity2DByOp(t,i,r,s)})}get activeCamera(){return this.activePage.activeCamera}switchActiveCamera(e){this.activePage.switchActiveCamera(e)}isInvisibleObjects(e){return e===this.invisibleObjects||e.hasAnccestor(this.invisibleObjects)}init(e,t){let i=Object.entries(t.data.lib.components).map((e,t)=>({data:e[1].asset.data,children:e[1].asset.children,id:e[0],fi:t}));this.invisibleObjects.updateState(this.invisibleObjects.data,{scene:this,shared:t}),this.add(this.invisibleObjects),this.createChildrenObjects(i,this.invisibleObjects,t),this.createChildrenObjects(e.objects,this,t),this.updatePage(e.publish.playPage),this.activePage.switchToPlayCamera(),this.expandInstances(t,!0),this.traverseEntity(e=>{e instanceof Eg&&e.updateUp()}),this.doPendingExpandCloner(),this.applyPendingCommands()}markNeedsRecomputeInstances(){this.needsRecomputeInstances=!0}markNeedsRecomputeInstancesForChildren(e){e.traverseEntity(e=>{("Component"===e.data.type||"Instance"===e.data.type)&&this.markNeedsRecomputeInstances()})}markNeedsRecomputeInstancesForAncessors(e){wQ.is(e)&&("Component"===e.data.type&&this.markNeedsRecomputeInstances(),e.traverseAncestors(e=>{wQ.is(e)&&"Component"===e.data.type&&this.markNeedsRecomputeInstances()}))}relativeizeInner(e,t,i,r,s,a,o){if(e){let l=r.find(e);l&&l!==r&&s.forInstancesRec(r=>{r.data=pW(r.data,s=>{let l=s.events.data(o.id),h=r.goUp(a);if(h){let r=[...uJ(h.identity),e].join("-"),s=this.entityIdentityToEntity[r];if(s){let e=s.uuid;p1.zoom(l,t)[i]=e}else console.warn("cannot find instance")}}).data})}}rewriteActions(e,t,i,r,s,a){e.forEach(e=>{"Transition"===e.data.type?this.relativeizeInner(e.data.object,[...t,e.id],"object",i,r,s,a):"Animation"===e.data.type?this.relativeizeInner(e.data.object,[...t,e.id],"object",i,r,s,a):"Conditional"===e.data.type&&(this.rewriteActions(e.data.ifActions,[...t,e.id,"ifActions"],i,r,s,a),this.rewriteActions(e.data.elseActions,[...t,e.id,"elseActions"],i,r,s,a))})}rewriteEventsBeforeGoToPlayMode(){this.traverseEntity(e=>{if(e instanceof PB&&"string"==typeof e.identity&&"Component"===e.data.type)return e.traverseEntity((t,i)=>{t.data.events.forEach(r=>{if("GameControl"===r.data.type){let s=!1;if(t.forInstancesRec(e=>{e.data=pW(e.data,t=>{e.isInstanceRoot||(t.events.delete(r.id),s=!0)}).data}),!1===s)for(let s of yS.list)this.rewriteActions(r.data.gameActions[s],["gameActions",s],e,t,i,r)}else"Conditional"===r.data.type?("Distance"===r.data.condition.type?(this.relativeizeInner(r.data.condition.fromObject,["condition"],"fromObject",e,t,i,r),this.relativeizeInner(r.data.condition.toObject,["condition"],"toObject",e,t,i,r)):"State"===r.data.condition.type?this.relativeizeInner(r.data.condition.object,["condition"],"object",e,t,i,r):"Comparison"===r.data.condition.type&&("Property"===r.data.condition.lOperand.type&&this.relativeizeInner(r.data.condition.lOperand.value[0],["condition","lOperand","value"],0,e,t,i,r),"Property"===r.data.condition.rOperand.type&&this.relativeizeInner(r.data.condition.rOperand.value[0],["condition","rOperand","value"],0,e,t,i,r)),this.rewriteActions(r.data.inActions,["inActions"],e,t,i,r),this.rewriteActions(r.data.outActions,["outActions"],e,t,i,r)):"actions"in r.data&&this.rewriteActions(r.data.actions,["actions"],e,t,i,r)})}),!0})}expandInstances(e,t,i){let r=new Set;for(let s of(this.traverseEntity(s=>{if(s instanceof PB&&s.isInstanceRoot)return s.expandInstanceChildren({scene:this,shared:e,pendingDeletes:r}),t||s.resetBBoxNeedsUpdate(),i&&s.traverseEntity(e=>{i.addClip(e)}),!0}),r))this.disposeAndUnregisterEntityRecursivelyIfNotReregistered(s),Pz(s)}recomputeInstances(e,t){this.needsRecomputeInstances&&(this.needsRecomputeInstances=!1,this.traverseEntity(e=>{e instanceof PB&&e.isInstanceRoot&&(e.component=void 0)}),this.expandInstances(e,!1,t))}disposeAndUnregisterEntityRecursivelyIfNotReregistered(e){e.traverseEntity(e=>{let t="string"==typeof e.identity?e.identity:e.identity.join("-");this.entityIdentityToEntity[t]===e&&(delete this.entityByUuid[e.uuid],delete this.entityIdentityToEntity[t]),e.dispose()})}clearScene(){for(let e of this.children)wQ.is(e)&&e.disposeRecursively();this.children.length=0}resetAfterClear(e,t){this.init(e,t)}raycast(e){return this.raycast1(e,!1)}raycast1(e,t){let i=[],r=s=>{for(let a of s.children){let s=a.cloner;if(wQ.is(a)&&!a.raycastLock&&(a.visible||s?.object.data.visible)){if(!0===t&&a.isInstanceRoot){let t=[];if(e.intersectObject(a,!0,t),t.length){let e=t[0];e.object=a,e.point.applyMatrix4(e.object.matrixWorld);let r=a.matrixWorld.clone().invert();e.point.applyMatrix4(r),i.push(e)}}else(ES(a)||EE(a)&&this.enableHelpers&&a.objectHelper.visible)&&(e.intersectObject(a,!1,i),DS(a,e,i)),r(a)}}};return r(this.activePage),i}raycastWithClones(e){let t=[],i=r=>{for(let s of r.children){let r=s.cloner;wQ.is(s)&&(s.visible||r?.object.data.visible)&&((ES(s)||EE(s)&&this.enableHelpers&&s.objectHelper.visible)&&(e.intersectObject(s,!1,t),DS(s,e,t,!0)),i(s))}};return i(this),t}forEachEntity(e){for(let t of this.children)wQ.is(t)&&e(t)}traverseConcreteEntity(e){for(let t of this.children)wQ.is(t)&&t.isConcreteEntity&&t.traverseEntity(e)}traverseEntity(e){for(let t of this.children)wQ.is(t)&&t.traverseEntity(e)}updateFont(e,t){this.traverseEntity(i=>{if(i instanceof Mb&&"Mesh"===i.data.type&&("TextGeometry"===i.data.geometry.type||"InputGeometry"===i.data.geometry.type)&&i.data.geometry.font===e){let r=i.geometry,s=i.data.geometry;r.updateFont(e,t).then(()=>{r.update(s);let e=i.invalidateDownstreamBooleanData();E_(e)&&e.recomputeBoolean()})}})}traverseObject(e){for(let t of this.children)xc.is(t)&&t.traverseObject(e)}traverseVisibleEntity(e){for(let t of this.children)wQ.is(t)&&t.visible&&t.traverseVisibleEntity(e)}dispose(){this.clearScene()}createChildrenObjects(e,t,i){let r=0;for(let s of e)this.createObject(s.id,s.data,s.children,t,r,i),r+=1}registerObjectCreatedInLegacy(e){this.entityByUuid[e.uuid]=e}unregisterObject(e){for(let t of(delete this.entityByUuid[e.uuid],e.children))this.unregisterObject(t)}createObject(e,t,i,r,s,a){let o={scene:this,shared:a},l=De(e,t,o);return l instanceof Do&&this.shapeBlendIntances.push(l),l&&(this.entityByUuid[e]=l,r.add(l),r.children.splice(s,0,r.children.pop()),i.length>0&&(l.isInstanceRoot?console.error("instance should not have children!"):this.createChildrenObjects(i,l,a)),l.updateState(t,o),l instanceof Mb&&l.updateGeometryGroupsIfNeeded(),l.updateVisible(this),l.cloner&&this.toExpandCloner.add(l),t.pathSnapping?.pathId&&this.pathConstraints.setConstraint(e,t.pathSnapping.pathId)),"Empty"===t.type&&t.animations&&l.traverseEntity(e=>{let t=e.dataPatched;
8402if(e instanceof Mb&&t.bones&&t.boneInverses){let i=new nT(t.bones.map(e=>this.find(e)),t.boneInverses.map(e=>new iX().fromArray(e)));e.bind(i,e.bindMatrix)}else e.matrixAutoUpdate=!0}),l}getCenter(e){let t=[];for(let i=0,r=e.length;i<r;++i){let{id:r,recursive:s}=e[i],a=this.find(r),o=s?a.recursiveBBox:a.singleBBox;t.push(...o.vertices)}let i=new ib;return i.setFromPoints(t),i.getCenter(Dk),Dk}copyMatrixWorld(e,t){if(null===e){t.identity();return}let i=this.find(e);i?t.copy(i.matrixWorld):t.identity()}copyParentMatrixWorld(e,t){if(null===e){t.identity();return}let i=this.find(e)?.parent;i?t.copy(i.matrixWorld):t.identity()}traverseMaterial(e){this.traverseEntity(t=>{if(t instanceof SP){if(Array.isArray(t.material))for(let i=0;i<t.material.length;i++)t.material[i]instanceof AC&&e(t.material[i]);else t.material instanceof AC&&e(t.material)}})}updateViewPlaneSize(e,t,i=!1){this.traverseConcreteEntity(r=>{r instanceof Eg&&r.setViewplaneSize(e,t,i)})}initializeSplatViewer(){this.splatViewer=new DF({scene:this}),this.reloadSplats()}reloadSplats(){this.splatViewer?.loadSplat()}},DV=(e,t)=>{let i=t.x-e.x,r=t.y-e.y;return Math.sqrt(i*i+r*r)},Dj=(e,t)=>{let i=t.x-e.x;return DW(Math.atan2(t.y-e.y,i))},DG=(e,t,i)=>{let r={x:0,y:0};return i=DH(i),r.x=e.x-t*Math.cos(i),r.y=e.y-t*Math.sin(i),r},DH=e=>Math.PI/180*e,DW=e=>180/Math.PI*e,Dq=e=>isNaN(e.buttons)?0!==e.pressure:0!==e.buttons,DX=new Map,DY=e=>{DX.has(e)&&clearTimeout(DX.get(e)),DX.set(e,setTimeout(e,100))},DQ=(e,t,i)=>{let r=t.split(/[ ,]+/g),s;for(let t=0;t<r.length;t+=1)s=r[t],e.addEventListener?e.addEventListener(s,i,!1):e.attachEvent&&e.attachEvent(s,i)},DK=(e,t,i)=>{let r=t.split(/[ ,]+/g),s;for(let t=0;t<r.length;t+=1)s=r[t],e.removeEventListener?e.removeEventListener(s,i):e.detachEvent&&e.detachEvent(s,i)},DZ=e=>(e.preventDefault(),e.type.match(/^touch/)?e.changedTouches:e),DJ=()=>{if(!(typeof window>"u"))return{x:void 0!==window.pageXOffset?window.pageXOffset:(document.documentElement||document.body.parentNode||document.body).scrollLeft,y:void 0!==window.pageYOffset?window.pageYOffset:(document.documentElement||document.body.parentNode||document.body).scrollTop}},D$=(e,t)=>{t.top||t.right||t.bottom||t.left?(e.style.top=t.top,e.style.right=t.right,e.style.bottom=t.bottom,e.style.left=t.left):(e.style.left=t.x+"px",e.style.top=t.y+"px")},D0=(e,t,i)=>{let r=D2(e);for(let e in r)if(r.hasOwnProperty(e)){if("string"==typeof t)r[e]=t+" "+i;else{let s="";for(let e=0,r=t.length;e<r;e+=1)s+=t[e]+" "+i+", ";r[e]=s.slice(0,-2)}}return r},D1=(e,t)=>{let i=D2(e);for(let e in i)i.hasOwnProperty(e)&&(i[e]=t);return i},D2=e=>{let t={};return t[e]="",["webkit","Moz","o"].forEach(function(i){t[i+e.charAt(0).toUpperCase()+e.slice(1)]=""}),t},D3=(e,t)=>{for(let i in t)t.hasOwnProperty(i)&&(e[i]=t[i]);return e},D4=(e,t)=>{let i={};for(let r in e)e.hasOwnProperty(r)&&t.hasOwnProperty(r)?i[r]=t[r]:e.hasOwnProperty(r)&&(i[r]=e[r]);return i},D5=(e,t)=>{if(e.length)for(let i=0,r=e.length;i<r;i+=1)t(e[i]);else t(e)},D6=(e,t,i)=>({x:Math.min(Math.max(e.x,t.x-i),t.x+i),y:Math.min(Math.max(e.y,t.y-i),t.y+i)});"u">typeof window&&(D7="ontouchstart"in window,Ie=!!window.PointerEvent,It=!!window.MSPointerEvent);var D8,D9,D7,Ie,It,Ii,Ir={touch:{start:"touchstart",move:"touchmove",end:"touchend, touchcancel"},mouse:{start:"mousedown",move:"mousemove",end:"mouseup"},pointer:{start:"pointerdown",move:"pointermove",end:"pointerup, pointercancel"},MSPointer:{start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}},Is={};function Ia(){}function In(e,t){return this.identifier=t.identifier,this.position=t.position,this.frontPosition=t.frontPosition,this.collection=e,this.defaults={size:100,threshold:.1,color:"white",fadeTime:250,dataOnly:!1,restJoystick:!0,restOpacity:1,mode:"dynamic",zone:document.body,lockX:!1,lockY:!1,shape:"circle"},this.config(t),"dynamic"===this.options.mode&&(this.options.restOpacity=0),this.id=In.id,In.id+=1,this.buildEl().stylize(),this.instance={el:this.ui.el,on:this.on.bind(this),off:this.off.bind(this),show:this.show.bind(this),hide:this.hide.bind(this),add:this.addToDom.bind(this),remove:this.removeFromDom.bind(this),destroy:this.destroy.bind(this),setPosition:this.setPosition.bind(this),resetDirection:this.resetDirection.bind(this),computeDirection:this.computeDirection.bind(this),trigger:this.trigger.bind(this),position:this.position,frontPosition:this.frontPosition,ui:this.ui,identifier:this.identifier,id:this.id,options:this.options},this.instance}function Io(e,t){this.nipples=[],this.idles=[],this.actives=[],this.ids=[],this.pressureIntervals={},this.manager=e,this.id=Io.id,Io.id+=1,this.defaults={zone:document.body,multitouch:!1,maxNumberOfNipples:10,mode:"dynamic",position:{top:0,left:0},catchDistance:200,size:100,threshold:.1,color:"white",fadeTime:250,dataOnly:!1,restJoystick:!0,restOpacity:1,lockX:!1,lockY:!1,shape:"circle",dynamicPage:!1,follow:!1},this.config(t),("static"===this.options.mode||"semi"===this.options.mode)&&(this.options.multitouch=!1),this.options.multitouch||(this.options.maxNumberOfNipples=1);let i=getComputedStyle(this.options.zone.parentElement);return i&&"flex"===i.display&&(this.parentIsFlex=!0),this.updateBox(),this.prepareNipples(),this.bindings(),this.begin(),this.nipples}function Il(e){var t=this;t.ids={},t.index=0,t.collections=[],t.scroll=DJ(),t.config(e),t.prepareCollections();var i=function(){var e;
8402t.collections.forEach(function(i){i.forEach(function(i){e=i.el.getBoundingClientRect(),i.position={x:t.scroll.x+e.left,y:t.scroll.y+e.top}})})};if(typeof window>"u")return t.collections;DQ(window,"resize",function(){DY(i)});var r=function(){t.scroll=DJ()};return DQ(window,"scroll",function(){DY(r)}),t.collections}Ie?Ii=Ir.pointer:It?Ii=Ir.MSPointer:D7?(Ii=Ir.touch,Is=Ir.mouse):Ii=Ir.mouse,Ia.prototype.on=function(e,t){var i,r=e.split(/[ ,]+/g);this._handlers_=this._handlers_||{};for(var s=0;s<r.length;s+=1)i=r[s],this._handlers_[i]=this._handlers_[i]||[],this._handlers_[i].push(t);return this},Ia.prototype.off=function(e,t){return this._handlers_=this._handlers_||{},void 0===e?this._handlers_={}:void 0===t?this._handlers_[e]=null:this._handlers_[e]&&this._handlers_[e].indexOf(t)>=0&&this._handlers_[e].splice(this._handlers_[e].indexOf(t),1),this},Ia.prototype.trigger=function(e,t){var i,r=this,s=e.split(/[ ,]+/g);r._handlers_=r._handlers_||{};for(var a=0;a<s.length;a+=1)i=s[a],r._handlers_[i]&&r._handlers_[i].length&&r._handlers_[i].forEach(function(e){e.call(r,{type:i,target:r},t)})},Ia.prototype.config=function(e){this.options=this.defaults||{},e&&(this.options=D4(this.options,e))},Ia.prototype.bindEvt=function(e,t){var i=this;return i._domHandlers_=i._domHandlers_||{}
8402,i._domHandlers_[t]=function(){"function"==typeof i["on"+t]?i["on"+t].apply(i,arguments):console.warn('[WARNING] : Missing "on'+t+'" handler.')},DQ(e,Ii[t],i._domHandlers_[t]),Is[t]&&DQ(e,Is[t],i._domHandlers_[t]),i},Ia.prototype.unbindEvt=function(e,t){return this._domHandlers_=this._domHandlers_||{},DK(e,Ii[t],this._domHandlers_[t]),Is[t]&&DK(e,Is[t],this._domHandlers_[t]),delete this._domHandlers_[t],this},In.prototype=new Ia,In.constructor=In,In.id=0,In.prototype.buildEl=function(e){return this.ui={},this.options.dataOnly||(this.ui.el=document.createElement("div"),this.ui.back=document.createElement("div"),this.ui.front=document.createElement("div"),this.ui.el.className="nipple collection_"+this.collection.id,this.ui.back.className="back",this.ui.front.className="front",this.ui.el.setAttribute("id","nipple_"+this.collection.id+"_"+this.id),this.ui.el.appendChild(this.ui.back),this.ui.el.appendChild(this.ui.front)),this},In.prototype.stylize=function(){if(this.options.dataOnly)return this;var e=this.options.fadeTime+"ms",t=D1("borderRadius","50%"),i=D0("transition","opacity",e),r={};return r.el={position:"absolute",opacity:this.options.restOpacity,display:"block",zIndex:999},r.back={position:"absolute",display:"block",width:this.options.size+"px",height:this.options.size+"px",marginLeft:-this.options.size/2+"px",marginTop:-this.options.size/2+"px",background:"rgba(255, 255, 255, .4)",border:"solid 2px rgba(0, 0, 0, .1)"},r.front={width:this.options.size/2+"px",height:this.options.size/2+"px",position:"absolute",display:"block",marginLeft:-this.options.size/4+"px",marginTop:-this.options.size/4+"px",background:"rgba(255, 255, 255, .8)",border:"solid 2px rgba(0, 0, 0, .1)"},D3(r.el,i),"circle"===this.options.shape&&D3(r.back,t),D3(r.front,t),this.applyStyles(r),this},In.prototype.applyStyles=function(e){for(var t in this.ui)if(this.ui.hasOwnProperty(t))for(var i in e[t])this.ui[t].style[i]=e[t][i];return this},In.prototype.addToDom=function(){return this.options.dataOnly||document.body.contains(this.ui.el)||this.options.zone.appendChild(this.ui.el),this},In.prototype.removeFromDom=function(){return this.options.dataOnly||!document.body.contains(this.ui.el)||this.options.zone.removeChild(this.ui.el),this},In.prototype.destroy=function(){clearTimeout(this.removeTimeout),clearTimeout(this.showTimeout),clearTimeout(this.restTimeout),this.trigger("destroyed",this.instance),this.removeFromDom(),this.off()},In.prototype.show=function(e){var t=this;return t.options.dataOnly||(clearTimeout(t.removeTimeout),clearTimeout(t.showTimeout),clearTimeout(t.restTimeout),t.addToDom(),t.restCallback(),setTimeout(function(){t.ui.el.style.opacity=1},0),t.showTimeout=setTimeout(function(){t.trigger("shown",t.instance),"function"==typeof e&&e.call(this)},t.options.fadeTime)),t},In.prototype.hide=function(e){var t=this;if(t.options.dataOnly)return t;if(t.ui.el.style.opacity=t.options.restOpacity,clearTimeout(t.removeTimeout),clearTimeout(t.showTimeout),clearTimeout(t.restTimeout),t.removeTimeout=setTimeout(function(){var i="dynamic"===t.options.mode?"none":"block";t.ui.el.style.display=i,"function"==typeof e&&e.call(t),t.trigger("hidden",t.instance)},t.options.fadeTime),t.options.restJoystick){let i=t.options.restJoystick,r={};r.x=!0===i||!1!==i.x?0:t.instance.frontPosition.x,r.y=!0===i||!1!==i.y?0:t.instance.frontPosition.y,t.setPosition(e,r)}return t},In.prototype.setPosition=function(e,t){var i=this;i.frontPosition={x:t.x,y:t.y};var r=i.options.fadeTime+"ms",s={};s.front=D0("transition",["top","left"],r);var a={front:{}};a.front={left:i.frontPosition.x+"px",top:i.frontPosition.y+"px"},i.applyStyles(s),i.applyStyles(a),i.restTimeout=setTimeout(function(){"function"==typeof e&&e.call(i),i.restCallback()},i.options.fadeTime)},In.prototype.restCallback=function(){var e={};e.front=D0("transition","none",""),this.applyStyles(e),this.trigger("rested",this.instance)},In.prototype.resetDirection=function(){this.direction={x:!1,y:!1,angle:!1}},In.prototype.computeDirection=function(e){var t,i,r,s=e.angle.radian,a=Math.PI/4,o=Math.PI/2;if(s>a&&s<3*a&&!e.lockX?t="up":s>-a&&s<=a&&!e.lockY?t="left":s>-(3*a)&&s<=-a&&!e.lockX?t="down":e.lockY||(t="right"),e.lockY||(i=s>-o&&s<o?"left":"right"),e.lockX||(r=s>0?"up":"down"),e.force>this.options.threshold){var l,h={};for(l in this.direction)this.direction.hasOwnProperty(l)&&(h[l]=this.direction[l]);var c={};for(l in this.direction={x:i,y:r,angle:t},e.direction=this.direction,h)h[l]===this.direction[l]&&(c[l]=!0);if(c.x&&c.y&&c.angle)return e;c.x&&c.y||this.trigger("plain",e),c.x||this.trigger("plain:"+i,e),
8402c.y||this.trigger("plain:"+r,e),c.angle||this.trigger("dir dir:"+t,e)}else this.resetDirection();return e},Io.prototype=new Ia,Io.constructor=Io,Io.id=0,Io.prototype.prepareNipples=function(){var e=this.nipples;e.on=this.on.bind(this),e.off=this.off.bind(this),e.options=this.options,e.destroy=this.destroy.bind(this),e.ids=this.ids,e.id=this.id,e.processOnMove=this.processOnMove.bind(this),e.processOnEnd=this.processOnEnd.bind(this),e.get=function(t){if(void 0===t)return e[0];for(var i=0,r=e.length;i<r;i+=1)if(e[i].identifier===t)return e[i];return!1}},Io.prototype.bindings=function(){this.bindEvt(this.options.zone,"start"),this.options.zone.style.touchAction="none",this.options.zone.style.msTouchAction="none"},Io.prototype.begin=function(){var e=this.options;if("static"===e.mode){var t=this.createNipple(e.position,this.manager.getIdentifier());t.add(),this.idles.push(t)}},Io.prototype.createNipple=function(e,t){var i=this.manager.scroll,r={},s=this.options,a={x:this.parentIsFlex?i.x:i.x+this.box.left,y:this.parentIsFlex?i.y:i.y+this.box.top};if(e.x&&e.y)r={x:e.x-a.x,y:e.y-a.y};else if(e.top||e.right||e.bottom||e.left){var o=document.createElement("DIV");o.style.display="hidden",o.style.top=e.top,o.style.right=e.right,o.style.bottom=e.bottom,o.style.left=e.left,o.style.position="absolute",s.zone.appendChild(o);var l=o.getBoundingClientRect();s.zone.removeChild(o),r=e,e={x:l.left+i.x,y:l.top+i.y}}var h=new In(this,{color:s.color,size:s.size,threshold:s.threshold,fadeTime:s.fadeTime,dataOnly:s.dataOnly,restJoystick:s.restJoystick,restOpacity:s.restOpacity,mode:s.mode,identifier:t,position:e,zone:s.zone,frontPosition:{x:0,y:0},shape:s.shape});return s.dataOnly||(D$(h.ui.el,r),D$(h.ui.front,h.frontPosition)),this.nipples.push(h),this.trigger("added "+h.identifier+":added",h),this.manager.trigger("added "+h.identifier+":added",h),this.bindNipple(h),h},Io.prototype.updateBox=function(){this.box=this.options.zone.getBoundingClientRect()},Io.prototype.bindNipple=function(e){var t,i=this,r=function(e,r){t=e.type+" "+r.id+":"+e.type,i.trigger(t,r)};e.on("destroyed",i.onDestroyed.bind(i)),e.on("shown hidden rested dir plain",r),e.on("dir:up dir:right dir:down dir:left",r),e.on("plain:up plain:right plain:down plain:left",r)},Io.prototype.pressureFn=function(e,t,i){var r=this,s=0;clearInterval(r.pressureIntervals[i]),r.pressureIntervals[i]=setInterval((function(){var i=e.force||e.pressure||e.webkitForce||0;i!==s&&(t.trigger("pressure",i),r.trigger("pressure "+t.identifier+":pressure",i),s=i)}).bind(r),100)},Io.prototype.onstart=function(e){var t=this,i=t.options,r=e;return e=DZ(e),t.updateBox(),D5(e,function(s){t.actives.length<i.maxNumberOfNipples?t.processOnStart(s):r.type.match(/^touch/)&&(Object.keys(t.manager.ids).forEach(function(i){if(0>Object.values(r.touches).findIndex(function(e){return e.identifier===i})){var s=[e[0]];s.identifier=i,t.processOnEnd(s)}}),t.actives.length<i.maxNumberOfNipples&&t.processOnStart(s))}),t.manager.bindDocument(),!1},Io.prototype.processOnStart=function(e){var t,i=this,r=i.options,s=i.manager.getIdentifier(e),a=e.force||e.pressure||e.webkitForce||0,o={x:e.pageX,y:e.pageY},l=i.getOrCreate(s,o);l.identifier!==s&&i.manager.removeIdentifier(l.identifier),l.identifier=s;var h=function(t){t.trigger("start",t),i.trigger("start "+t.id+":start",t),t.show(),a>0&&i.pressureFn(e,t,t.identifier),i.processOnMove(e)};if((t=i.idles.indexOf(l))>=0&&i.idles.splice(t,1),i.actives.push(l),i.ids.push(l.identifier),"semi"!==r.mode)h(l);else if(DV(o,l.position)<=r.catchDistance)h(l);else{l.destroy(),i.processOnStart(e);return}return l},Io.prototype.getOrCreate=function(e,t){var i,r=this.options;return/(semi|static)/.test(r.mode)?(i=this.idles[0])?(this.idles.splice(0,1),i):"semi"===r.mode?this.createNipple(t,e):(console.warn("Coudln't find the needed nipple."),!1):i=this.createNipple(t,e)},Io.prototype.processOnMove=function(e){var t=this.options,i=this.manager.getIdentifier(e),r=this.nipples.get(i),s=this.manager.scroll;if(!Dq(e)){this.processOnEnd(e);return}if(!r){console.error("Found zombie joystick with ID "+i),this.manager.removeIdentifier(i);return}if(t.dynamicPage){var a=r.el.getBoundingClientRect();r.position={x:s.x+a.left,y:s.y+a.top}}r.identifier=i;var o=r.options.size/2,l={x:e.pageX,y:e.pageY};t.lockX&&(l.y=r.position.y),t.lockY&&(l.x=r.position.x);var h,c,d=DV(l,r.position),u=Dj(l,r.position),p=DH(u),f=d/o,m={distance:d,position:l};if("circle"===r.options.shape?(h=Math.min(d,o),c=DG(r.position,h,u)):h=DV(c=D6(l,r.position,o),r.position),t.follow){if(d>o){let e=l.x-c.x,t=l.y-c.y;r.position.x+=e,r.position.y+=t,r.el.style.top=r.position.y-(this.box.top+s.y)+"px",r.el.style.left=r.position.x-(this.box.left+s.x)+"px",d=DV(l,r.position)}}else l=c,d=h;var g=l.x-r.position.x,v=l.y-r.position.y;r.frontPosition={x:g,y:v},t.dataOnly||D$(r.ui.front,r.frontPosition);var y={identifier:r.identifier,position:l,force:f,pressure:e.force||e.pressure||e.webkitForce||0,distance:d,angle:{radian:p,degree:u},vector:{x:g/o,y:-v/o},raw:m,instance:r,lockX:t.lockX,lockY:t.lockY};(y=r.computeDirection(y)).angle={radian:DH(180-u),degree:180-u}
8402,r.trigger("move",y),this.trigger("move "+r.id+":move",y)},Io.prototype.processOnEnd=function(e){var t=this,i=t.options,r=t.manager.getIdentifier(e),s=t.nipples.get(r),a=t.manager.removeIdentifier(s.identifier);!s||(i.dataOnly||s.hide(function(){"dynamic"===i.mode&&(s.trigger("removed",s),t.trigger("removed "+s.id+":removed",s),t.manager.trigger("removed "+s.id+":removed",s),s.destroy())}),clearInterval(t.pressureIntervals[s.identifier]),s.resetDirection(),s.trigger("end",s),t.trigger("end "+s.id+":end",s),t.ids.indexOf(s.identifier)>=0&&t.ids.splice(t.ids.indexOf(s.identifier),1),t.actives.indexOf(s)>=0&&t.actives.splice(t.actives.indexOf(s),1),/(semi|static)/.test(i.mode)?t.idles.push(s):t.nipples.indexOf(s)>=0&&t.nipples.splice(t.nipples.indexOf(s),1),t.manager.unbindDocument(),/(semi|static)/.test(i.mode)&&(t.manager.ids[a.id]=a.identifier))},Io.prototype.onDestroyed=function(e,t){this.nipples.indexOf(t)>=0&&this.nipples.splice(this.nipples.indexOf(t),1),this.actives.indexOf(t)>=0&&this.actives.splice(this.actives.indexOf(t),1),this.idles.indexOf(t)>=0&&this.idles.splice(this.idles.indexOf(t),1),this.ids.indexOf(t.identifier)>=0&&this.ids.splice(this.ids.indexOf(t.identifier),1),this.manager.removeIdentifier(t.identifier),this.manager.unbindDocument()},Io.prototype.destroy=function(){for(var e in this.unbindEvt(this.options.zone,"start"),this.nipples.forEach(function(e){e.destroy()}),this.pressureIntervals)this.pressureIntervals.hasOwnProperty(e)&&clearInterval(this.pressureIntervals[e]);this.trigger("destroyed",this.nipples),this.manager.unbindDocument(),this.off()},Il.prototype=new Ia,Il.constructor=Il,Il.prototype.prepareCollections=function(){var e=this;e.collections.create=e.create.bind(e),e.collections.on=e.on.bind(e),e.collections.off=e.off.bind(e),e.collections.destroy=e.destroy.bind(e),e.collections.get=function(t){var i;return e.collections.every(function(e){return!(i=e.get(t))}),i}},Il.prototype.create=function(e){return this.createCollection(e)},Il.prototype.createCollection=function(e){var t=new Io(this,e);return this.bindCollection(t),this.collections.push(t),t},Il.prototype.bindCollection=function(e){var t,i=this,r=function(e,r){t=e.type+" "+r.id+":"+e.type,i.trigger(t,r)};e.on("destroyed",i.onDestroyed.bind(i)),e.on("shown hidden rested dir plain",r),e.on("dir:up dir:right dir:down dir:left",r),e.on("plain:up plain:right plain:down plain:left",r)},Il.prototype.bindDocument=function(){this.binded||(this.bindEvt(document,"move").bindEvt(document,"end"),this.binded=!0)},Il.prototype.unbindDocument=function(e){Object.keys(this.ids).length&&!0!==e||(this.unbindEvt(document,"move").unbindEvt(document,"end"),this.binded=!1)},Il.prototype.getIdentifier=function(e){var t;return e?void 0===(t=void 0===e.identifier?e.pointerId:e.identifier)&&(t=this.latest||0):t=this.index,void 0===this.ids[t]&&(this.ids[t]=this.index,this.index+=1),this.latest=t,this.ids[t]},Il.prototype.removeIdentifier=function(e){var t={};for(var i in this.ids)if(this.ids[i]===e){t.id=i,t.identifier=this.ids[i],delete this.ids[i];break}return t},Il.prototype.onmove=function(e){return this.onAny("move",e),!1},Il.prototype.onend=function(e){return this.onAny("end",e),!1},Il.prototype.oncancel=function(e){return this.onAny("end",e),!1},Il.prototype.onAny=function(e,t){var i,r=this,s="processOn"+e.charAt(0).toUpperCase()+e.slice(1);t=DZ(t);var a=function(e,t,i){i.ids.indexOf(t)>=0&&(i[s](e),e._found_=!0)};return D5(t,function(e){i=r.getIdentifier(e),D5(r.collections,a.bind(null,e,i)),e._found_||r.removeIdentifier(i)}),!1},Il.prototype.destroy=function(){this.unbindDocument(!0),this.ids={},this.index=0,this.collections.forEach(function(e){e.destroy()}),this.off()},Il.prototype.onDestroyed=function(e,t){if(0>this.collections.indexOf(t))return!1;this.collections.splice(this.collections.indexOf(t),1)};var Ih=new Il,Ic={create:function(e){return Ih.create(e)}},Id=new Map,Iu=new Map,Ip=class{constructor(e,t,i,r){this.data=t;let{audio:s,volume:a,delay:o,loop:l}=t;if(!s)throw Error("Missing property");let h="string"==typeof s?r.getAudio(s).src:s.data;this.audioPlayer=new AN({src:h,volume:a,delay:o,loop:l}),Iu.has(i.uuid)?Iu.get(i.uuid).push(this):Iu.set(i.uuid,[this]),Id.set(e,this)}
8402playByToggle(){"stop"===this.data.toggle?"playing"===this.audioPlayer.status?this.audioPlayer.stop():(this.audioPlayer.stop(),this.audioPlayer.play()):"pause"===this.data.toggle?"playing"===this.audioPlayer.status?this.audioPlayer.pause():this.audioPlayer.play():(this.audioPlayer.stop(),this.audioPlayer.play())}dispose(){this.audioPlayer.stop()}},If=class{constructor(e){this.data=e}dispatch(){this.data.playAudio?this.pauseAudio(this.data.playAudio):this.data.object?this.pauseAllAudiosFromObject(this.data.object):this.pauseAllAudios()}pauseAudio(e){let t=Id.get(e);t&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{t.audioPlayer[this.data.interaction](),this.disposeDelay()},this.data.delay)):t.audioPlayer[this.data.interaction]())}pauseAllAudiosFromObject(e){let t=Iu.get(e);t?.length&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{t.forEach(e=>e.audioPlayer[this.data.interaction]()),this.disposeDelay()},this.data.delay)):t.forEach(e=>e.audioPlayer[this.data.interaction]()))}pauseAllAudios(){let e=[...Iu.values()];e.length&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{e.forEach(e=>{e.forEach(e=>{e.audioPlayer[this.data.interaction]()})}),this.disposeDelay()},this.data.delay)):e.forEach(e=>{e.forEach(e=>{e.audioPlayer[this.data.interaction]()})}))}disposeDelay(){clearTimeout(this.timeoutId),delete this.timeoutId}dispose(){clearTimeout(this.timeoutId),delete this.timeoutId}},Im=class{constructor(e,t,i,r,s){if(this.data=t,this.shared=r,this.condition=s,"play"===t.interaction)this.interaction=new Ip(e,t,i,r);else if("pause"===t.interaction||"stop"===t.interaction)this.interaction=new If(t);else throw Error("Missing property")}dispatchBasic(){if(!1===Oq(this.shared,this.condition))return!1;this.interaction instanceof Ip?this.interaction.playByToggle():this.interaction.dispatch()}dispatchConditional(){if(!1===Oq(this.shared,this.condition))return!1;this.interaction instanceof Ip?this.interaction.audioPlayer.play():this.interaction.dispatch()}dispatchGameControl(e){if(!1===Oq(this.shared,this.condition))return!1;this.interaction instanceof Ip&&("start"===e?this.interaction.audioPlayer.play():this.interaction.audioPlayer.stop())}dispose(){this.interaction.dispose()}},Ig=class{constructor(e,t,i,r){this.data=e,this.page=t,this.shared=i,this.condition=r,this.delay=0,this.emission=e.emission,void 0!==e.delay&&(this.delay=e.delay),this.particleSystem=this.page.scene.find(this.data.emitterObjectId)}toggleEmitting(){this.particleSystem.started&&!this.particleSystem.stopped?this.stop(this.delay):this.start(this.delay)}toggleFroze(){this.particleSystem.started&&!this.particleSystem.isFrozen?this.freeze(this.delay):this.unFreeze(this.delay)}start(e=0){if(e){this.delayTimerId=window.setTimeout(()=>{this.start(0),this.clearDelay()},e);return}this.particleSystem.start()}stop(e=0){if(e){this.delayTimerId=window.setTimeout(()=>{this.stop(0),this.clearDelay()},e);return}this.particleSystem.stop()}freeze(e=0){if(e){this.delayTimerId=window.setTimeout(()=>{this.freeze(0),this.clearDelay()},e);return}this.particleSystem.froze()}unFreeze(e=0){if(e){this.delayTimerId=window.setTimeout(()=>{this.unFreeze(0),this.clearDelay()},e);return}this.particleSystem.unFroze()}reset(e=0){if(e){this.delayTimerId=window.setTimeout(()=>{this.reset(0),this.clearDelay()},e);return}this.particleSystem.reset()}reverseFromCurrent(){switch(this.emission){case"emitToggle":this.toggleEmitting();break;case"pauseToggle":this.toggleFroze()}}dispatchBasic(){if(!1===Oq(this.shared,this.condition)||!this.particleSystem)return!1;switch(this.emission){case"start":this.start(this.delay);break;case"emitToggle":this.toggleEmitting();break;case"pause":this.freeze(this.delay);break;case"pauseToggle":this.toggleFroze();break;case"stop":this.stop(this.delay);break;case"reset":this.reset(this.delay)}}dispatchConditional(){if(!1===Oq(this.shared,this.condition)||!this.particleSystem)return!1;switch(this.emission){case"start":this.start(this.delay);break;case"stop":this.stop(this.delay);break;case"reset":this.reset(this.delay)}}dispatchGameControl(e){if(!1===Oq(this.shared,this.condition)||!this.particleSystem)return!1;"start"===e?this.start(this.delay):this.stop(this.delay)}dispose(){this.particleSystem&&(this.particleSystem.reset(),this.clearDelay())}clearDelay(){this.delayTimerId&&(clearTimeout(this.delayTimerId),delete this.delayTimerId)}},Iv=(e,t)=>t.some(t=>t instanceof RegExp?t.test(e):t===e),Iy=(e,{stripHash:t})=>{let i=/^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(e);if(!i)throw Error(`Invalid URL: ${e}`);let{type:r,data:s,hash:a}=i.groups,o=r.split(";");a=t?"":a;let l=!1;"base64"===o[o.length-1]&&(o.pop(),l=!0);let h=(o.shift()||"").toLowerCase(),c=[...o.map(e=>{let[t,i=""]=e.split("=").map(e=>e.trim());return"charset"===t&&"us-ascii"===(i=i.toLowerCase())?"":`${t}${i?`=${i}`:""}`}
8402).filter(Boolean)];return l&&c.push("base64"),(c.length>0||h&&"text/plain"!==h)&&c.unshift(h),`data:${c.join(";")},${l?s.trim():s}${a?`#${a}`:""}`},Ix=class{constructor({url:e,context:t},i,r,s){if(this.controlsManager=i,this.shared=r,this.condition=s,!e)throw Error("Missing property");this.url=e.startsWith("mailto:")?e:function(e,t){if(t={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...t},e=e.trim(),/^data:/i.test(e))return Iy(e,t);if(/^view-source:/i.test(e))throw Error("`view-source:` is not supported as it is a non-standard protocol");let i=e.startsWith("//");!i&&/^\.*\//.test(e)||(e=e.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,t.defaultProtocol));let r=new URL(e);if(t.forceHttp&&t.forceHttps)throw Error("The `forceHttp` and `forceHttps` options cannot be used together");if(t.forceHttp&&"https:"===r.protocol&&(r.protocol="http:"),t.forceHttps&&"http:"===r.protocol&&(r.protocol="https:"),t.stripAuthentication&&(r.username="",r.password=""),t.stripHash?r.hash="":t.stripTextFragment&&(r.hash=r.hash.replace(/#?:~:text.*?$/i,"")),r.pathname){let e=/\b[a-z][a-z\d+\-.]{1,50}:\/\//g,t=0,i="";for(;;){let s=e.exec(r.pathname);if(!s)break;let a=s[0],o=s.index;i+=r.pathname.slice(t,o).replace(/\/{2,}/g,"/")+a,t=o+a.length}i+=r.pathname.slice(t,r.pathname.length).replace(/\/{2,}/g,"/"),r.pathname=i}if(r.pathname)try{r.pathname=decodeURI(r.pathname)}catch{}if(!0===t.removeDirectoryIndex&&(t.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(t.removeDirectoryIndex)&&t.removeDirectoryIndex.length>0){let e=r.pathname.split("/");Iv(e[e.length-1],t.removeDirectoryIndex)&&(e=e.slice(0,-1),r.pathname=e.slice(1).join("/")+"/")}if(r.hostname&&(r.hostname=r.hostname.replace(/\.$/,""),t.stripWWW&&/^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(r.hostname)&&(r.hostname=r.hostname.replace(/^www\./,""))),Array.isArray(t.removeQueryParameters))for(let e of[...r.searchParams.keys()])Iv(e,t.removeQueryParameters)&&r.searchParams.delete(e);if(!0===t.removeQueryParameters&&(r.search=""),t.sortQueryParameters){r.searchParams.sort();try{r.search=decodeURIComponent(r.search)}catch{}}t.removeTrailingSlash&&(r.pathname=r.pathname.replace(/\/$/,""));let s=e;return e=r.toString(),t.removeSingleSlash||"/"!==r.pathname||s.endsWith("/")||""!==r.hash||(e=e.replace(/\/$/,"")),(t.removeTrailingSlash||"/"===r.pathname)&&""===r.hash&&t.removeSingleSlash&&(e=e.replace(/\/$/,"")),i&&!t.normalizeProtocol&&(e=e.replace(/^http:\/\//,"//")),t.stripProtocol&&(e=e.replace(/^(?:https?:)?\/\//,"")),e}(e,{removeTrailingSlash:!1,removeSingleSlash:!1,stripWWW:!1}),this.context=t??"tab"}dispatch(){if(!1===Oq(this.shared,this.condition))return!1;uX?window.location.assign(this.url):("tab"===this.context||uW&&"none"===this.context?window.open(this.url,"_blank"):"window"===this.context?window.open(this.url,"_blank",`width=${window.innerWidth}, height=${window.innerHeight}`):window.open(this.url,"_parent"),this.controlsManager.orbitControls?.onPointerUp(u1[0]),u1.splice(0,u1.length))}},Ib=class{constructor(e,t,i,r,s){this.data=e,this.page=t,this.controlsManager=i,this.shared=r,this.condition=s,this.timeoutIdQueue=[],this.dispatchInner=()=>{this.objects.forEach(this.destroyCallback)},this.destroyCallback=e=>{this.timeoutIdQueue.shift();let t=this.page.scene.find(e);if(void 0===t)return;let i=this.controlsManager.sharedGameControlGlobals.rapierWorld,r=!i||t.dataPatched.physics?.fusedBody;if(t.cloner){for(let e of t.cloner.children)r?(e.playModeVisible=!1,e.rigidBody&&t.dataPatched.physics?.rigidBody==="positioned"&&(this.controlsManager.sharedGameControlGlobals.colliderToEntity.delete(e.rigidBody.collider(0).handle),i.removeRigidBody(e.rigidBody),e.rigidBody=void 0),e.bvhGeometry&&(e.bvhGeometry=void 0)):void 0===this.clone||this.clone===e?(e.playModeVisible=!1,e.rigidBody&&(this.controlsManager.sharedGameControlGlobals.colliderToEntity.delete(e.rigidBody.collider(0).handle),i.removeRigidBody(e.rigidBody),e.rigidBody=void 0)):void 0===e.playModeVisible&&(e.playModeVisible=!0);(r||void 0===this.clone||!1===this.clone)&&(t.visible=!1,t.rigidBody&&(this.controlsManager.sharedGameControlGlobals.colliderToEntity.delete(t.rigidBody.collider(0).handle),i.removeRigidBody(t.rigidBody),t.rigidBody=void 0),t.bvhGeometry&&(t.bvhGeometry=void 0))}else t.rigidBody&&(this.controlsManager.sharedGameControlGlobals.colliderToEntity.delete(t.rigidBody.collider(0).handle),i.removeRigidBody(t.rigidBody),t.rigidBody=void 0),t.bvhGeometry&&(t.bvhGeometry=void 0),t.visible=!1;void 0===i?this.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim=this.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim.filter(e=>void 0!==e.bvhGeometry):this.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim=this.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim.filter(e=>void 0!==e.rigidBody),t.destroyedInAction=!0,this.controlsManager.requestRender()},this.objects=[...e.objects]}dispatch(e){if(!1===Oq(this.shared,this.condition))return!1;this.clone=e,this.data.delay?this.timeoutIdQueue.push(window.setTimeout(this.dispatchInner,1e3*this.data.delay)):this.dispatchInner()}
8402dispatchFromStart(){if(!1===Oq(this.shared,this.condition))return!1;this.timeoutIdQueue.push(window.setTimeout(this.dispatchInner,1e3*this.data.delay))}dispose(){this.timeoutIdQueue.forEach(e=>window.clearTimeout(e))}},Iw=class{constructor(e,t,i,r,s){this.data=e,this.page=t,this.shared=i,this.eventManager=r,this.condition=s,this.shared=i}dispatch(){if(!1===Oq(this.shared,this.condition))return!1;clearTimeout(this.timeoutId),delete this.timeoutId,this.timeoutId=window.setTimeout(()=>{this.shared.reset(this.shared.data,!0),OM(this.page,this.shared,!0),this.eventManager.reset(),this.eventManager.controlsManager.gameControl?.reset(!0),this.page.switchToPlayCamera(),this.eventManager.controlsManager.requestRender(),delete this.timeoutId},(this.data.delay??0)*1e3)}dispose(){clearTimeout(this.timeoutId),delete this.timeoutId}},IS={update:null,begin:null,loopBegin:null,changeBegin:null,change:null,changeComplete:null,timelineChangeComplete:null,loopComplete:null,complete:null,loop:1,direction:"normal",autoplay:!0,timelineOffset:0,rewind:!0},I_={duration:1e3,delay:0,endDelay:0,startOnceDelay:0,pingPongDelayCorrection:0,pingPongEndDelayCorrection:0,easing:"easeOutElastic(1, .5)",round:0},IA=["translateX","translateY","translateZ","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ","skew","skewX","skewY","perspective","matrix","matrix3d"],IM={CSS:{},springs:{}};function IE(e,t,i){return Math.min(Math.max(e,t),i)}function IC(e,t){return e.indexOf(t)>-1}function IT(e,t){return e.apply(null,t)}var IP={arr:function(e){return Array.isArray(e)},obj:function(e){return IC(Object.prototype.toString.call(e),"Object")},pth:function(e){return IP.obj(e)&&e.hasOwnProperty("totalLength")},svg:function(e){return e instanceof SVGElement},inp:function(e){return e instanceof HTMLInputElement},dom:function(e){return!("isNode"in e)&&(e.nodeType||IP.svg(e))},str:function(e){return"string"==typeof e},fnc:function(e){return"function"==typeof e},und:function(e){return typeof e>"u"},hex:function(e){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(e)},rgb:function(e){return/^rgb/.test(e)},hsl:function(e){return/^hsl/.test(e)},col:function(e){return IP.hex(e)||IP.rgb(e)||IP.hsl(e)},key:function(e){return!IS.hasOwnProperty(e)&&!I_.hasOwnProperty(e)&&"targets"!==e&&"keyframes"!==e}};function ID(e){var t=/\(([^)]+)\)/.exec(e);return t?t[1].split(",").map(function(e){return parseFloat(e)}):[]}function II(e,t){var i=ID(e),r=IE(IP.und(i[0])?1:i[0],.1,100),s=IE(IP.und(i[1])?100:i[1],.1,100),a=IE(IP.und(i[2])?10:i[2],.1,100),o=IE(IP.und(i[3])?0:i[3],.1,100),l=Math.sqrt(s/r),h=a/(2*Math.sqrt(s*r)),c=h<1?l*Math.sqrt(1-h*h):0,d=h<1?(h*l+-o)/c:-o+l;function u(e){var i=t?t*e/1e3:e;return i=h<1?Math.exp(-i*h*l)*(1*Math.cos(c*i)+d*Math.sin(c*i)):(1+d*i)*Math.exp(-i*l),0===e||1===e?e:1-i}return t?u:function(){var t=IM.springs[e];if(t)return t;for(var i=1/6,r=0,s=0;;)if(1===u(r+=i)){if(++s>=16)break}else s=0;var a=r*i*1e3;return IM.springs[e]=a,a}}function IO(e){return void 0===e&&(e=10),function(t){return Math.ceil(IE(t,1e-6,1)*e)*(1/e)}}var IR=function(){function e(e,t,i){return(((1-3*i+3*t)*e+(3*i-6*t))*e+3*t)*e}function t(e,t,i){return 3*(1-3*i+3*t)*e*e+2*(3*i-6*t)*e+3*t}return function(i,r,s,a){if(0<=i&&i<=1&&0<=s&&s<=1){var o=new Float32Array(11);if(i!==r||s!==a)for(var l=0;l<11;++l)o[l]=e(.1*l,i,s);return function(l){return i===r&&s===a||0===l||1===l?l:e(function(r){for(var a=0,l=1;10!==l&&o[l]<=r;++l)a+=.1;var h=a+(r-o[--l])/(o[l+1]-o[l])*.1,c=t(h,i,s);return c>=.001?function(i,r,s,a){for(var o=0;o<4;++o){var l=t(r,s,a);if(0===l)break;var h=e(r,s,a)-i;r-=h/l}return r}(r,h,i,s):0===c?h:function(t,i,r,s,a){var o,l,h=0;do(o=e(l=i+(r-i)/2,s,a)-t)>0?r=l:i=l;while(Math.abs(o)>1e-7&&++h<10);return l}(r,a,a+.1,i,s)}(l),r,a)}}}}(),IL=(Oe={linear:function(){return function(e){return e}}},Ot={Sine:function(){return function(e){return 1-Math.cos(e*Math.PI/2)}},Circ:function(){return function(e){return 1-Math.sqrt(1-e*e)}},Back:function(){return function(e){return e*e*(3*e-2)}},Bounce:function(){return function(e){for(var t,i=4;e<((t=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}},Elastic:function(e,t){void 0===e&&(e=1),void 0===t&&(t=.5);var i=IE(e,1,10),r=IE(t,.1,2);return function(e){return 0===e||1===e?e:-i*Math.pow(2,10*(e-1))*Math.sin(2*Math.PI*(e-1-r/(2*Math.PI)*Math.asin(1/i))/r)}}},["Quad","Cubic","Quart","Quint","Expo"].forEach(function(e,t){Ot[e]=function(){return function(e){return Math.pow(e,t+2)}}}),Object.keys(Ot).forEach(function(e){var t=Ot[e];Oe["easeIn"+e]=t,Oe["easeOut"+e]=function(e,i){return function(r){return 1-t(e,i)(1-r)}},Oe["easeInOut"+e]=function(e,i){return function(r){return r<.5?t(e,i
8402)(2*r)/2:1-t(e,i)(-2*r+2)/2}}}),Oe);function IB(e,t){if(IP.fnc(e))return e;var i=e.split("(")[0],r=IL[i],s=ID(e);switch(i){case"spring":return II(e,t);case"cubicBezier":return IT(IR,s);case"steps":return IT(IO,s);default:return IT(r,s)}}function Iz(e){try{return document.querySelectorAll(e)}catch{return}}function IF(e,t){for(var i=e.length,r=arguments.length>=2?arguments[1]:void 0,s=[],a=0;a<i;a++)if(a in e){var o=e[a];t.call(r,o,a,e)&&s.push(o)}return s}function IN(e){return e.reduce(function(e,t){return e.concat(IP.arr(t)?IN(t):t)},[])}function Ik(e){return IP.arr(e)?e:(IP.str(e)&&(e=Iz(e)||e),e instanceof NodeList||e instanceof HTMLCollection?[].slice.call(e):[e])}function IU(e,t){return e.some(function(e){return e===t})}function IV(e){var t={};for(var i in e)t[i]=e[i];return t}function Ij(e,t){var i=IV(e);for(var r in e)i[r]=t.hasOwnProperty(r)?t[r]:e[r];return i}function IG(e,t){var i=IV(e);for(var r in t)i[r]=IP.und(e[r])?t[r]:e[r];return i}function IH(e){var t=/[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(e);if(t)return t[1]}function IW(e,t){return IP.fnc(e)?e(t.target,t.id,t.total):e}function Iq(e,t){return e.getAttribute(t)}function IX(e,t,i){if(IU([i,"deg","rad","turn"],IH(t)))return t;var r=IM.CSS[t+i];if(!IP.und(r))return r;var s=document.createElement(e.tagName),a=e.parentNode&&e.parentNode!==document?e.parentNode:document.body;a.appendChild(s),s.style.position="absolute",s.style.width=100+i;var o=100/s.offsetWidth;a.removeChild(s);var l=o*parseFloat(t);return IM.CSS[t+i]=l,l}function IY(e,t,i){if(t in e.style){var r=t.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase(),s=e.style[t]||getComputedStyle(e).getPropertyValue(r)||"0";return i?IX(e,s,i):s}}function IQ(e,t){return IP.dom(e)&&!IP.inp(e)&&(Iq(e,t)||IP.svg(e)&&e[t])?"attribute":IP.dom(e)&&IU(IA,t)?"transform":IP.dom(e)&&"transform"!==t&&IY(e,t)?"css":null!=e[t]?"object":void 0}function IK(e){if(IP.dom(e)){for(var t,i=e.style.transform||"",r=/(\w+)\(([^)]*)\)/g,s=new Map;t=r.exec(i);)s.set(t[1],t[2]);return s}}function IZ(e,t,i,r){switch(IQ(e,t)){case"transform":var s,a;return s=IC(t,"scale")?1:0+(IC(t,"translate")||"perspective"===t?"px":IC(t,"rotate")||IC(t,"skew")?"deg":void 0),a=IK(e).get(t)||s,r&&(r.transforms.list.set(t,a),r.transforms.last=t),i?IX(e,a,i):a;case"css":return IY(e,t,i);case"attribute":return Iq(e,t);default:return e[t]||0}}function IJ(e,t){var i=/^(\*=|\+=|-=)/.exec(e);if(!i)return e;var r=IH(e)||0,s=parseFloat(t),a=parseFloat(e.replace(i[0],""));switch(i[0][0]){case"+":return s+a+r;case"-":return s-a+r;case"*":return s*a+r}}function I$(e,t){if(IP.col(e)){var i,r,s,a;return i=e,IP.rgb(i)?(r=/rgb\((\d+,\s*[\d]+,\s*[\d]+)\)/g.exec(i))?"rgba("+r[1]+",1)":i:IP.hex(i)?(s=i.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(e,t,i,r){return t+t+i+i+r+r}),"rgba("+parseInt((a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(s))[1],16)+","+parseInt(a[2],16)+","+parseInt(a[3],16)+",1)"):IP.hsl(i)?function(e){var t,i,r,s=/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.exec(e)||/hsla\((\d+),\s*([\d.]+)%,\s*([\d.]+)%,\s*([\d.]+)\)/g.exec(e),a=parseInt(s[1],10)/360,o=parseInt(s[2],10)/100,l=parseInt(s[3],10)/100,h=s[4]||1;function c(e,t,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+(t-e)*6*i:i<.5?t:i<2/3?e+(t-e)*(2/3-i)*6:e}if(0==o)t=i=r=l;else{var d=l<.5?l*(1+o):l+o-l*o,u=2*l-d;t=c(u,d,a+1/3),i=c(u,d,a),r=c(u,d,a-1/3)}return"rgba("+255*t+","+255*i+","+255*r+","+h+")"}(i):void 0}if(/\s/g.test(e))return e;var o=IH(e),l=o?e.substr(0,e.length-o.length):e;return t?l+t:l}function I0(e,t){return Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2))}function I1(e){for(var t,i=e.points,r=0,s=0;s<i.numberOfItems;s++){var a=i.getItem(s);s>0&&(r+=I0(t,a)),t=a}return r}function I2(e){var t;if(e.getTotalLength)return e.getTotalLength();switch(e.tagName.toLowerCase()){case"circle":return 2*Math.PI*Iq(e,"r");case"rect":return 2*Iq(e,"width")+2*Iq(e,"height");case"line":return I0({x:Iq(e,"x1"),y:Iq(e,"y1")},{x:Iq(e,"x2"),y:Iq(e,"y2")});case"polyline":return I1(e);case"polygon":return t=e.points,I1(e)+I0(t.getItem(t.numberOfItems-1),t.getItem(0))}}function I3(e,t){var i=t||{},r=i.el||function(e){for(var t=e.parentNode;IP.svg(t)&&IP.svg(t.parentNode);)t=t.parentNode;return t}(e),s=r.getBoundingClientRect(),a=Iq(r,"viewBox"),o=s.width,l=s.height,h=i.viewBox||(a?a.split(" "):[0,0,o,l]);
8402return{el:r,viewBox:h,x:h[0]/1,y:h[1]/1,w:o/h[2],h:l/h[3]}}function I4(e,t){var i=/[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g,r=I$(IP.pth(e)?e.totalLength:e,t)+"";return{original:r,numbers:r.match(i)?r.match(i).map(Number):[0],strings:IP.str(e)||t?r.split(i):[]}}function I5(e){return IF(e?IN(IP.arr(e)?e.map(Ik):Ik(e)):[],function(e,t,i){return i.indexOf(e)===t})}function I6(e){var t=I5(e);return t.map(function(e,i){return{target:e,id:i,total:t.length,transforms:{list:IK(e)}}})}var I8={css:function(e,t,i){return e.style[t]=i},attribute:function(e,t,i){return e.setAttribute(t,i)},object:function(e,t,i){return e[t]=i},transform:function(e,t,i,r,s){if(r.list.set(t,i),t===r.last||s){var a="";r.list.forEach(function(e,t){a+=t+"("+e+") "}),e.style.transform=a}}};function I9(e,t){I6(e).forEach(function(e){for(var i in t){var r=IW(t[i],e),s=e.target,a=IH(r),o=IZ(s,i,a,e),l=IJ(I$(r,a||IH(o)),o);I8[IQ(s,i)](s,i,l,e.transforms,!0)}})}function I7(e,t){var i=e.length,r=function(e){return e.timelineOffset?e.timelineOffset:0},s={};return s.duration=i?Math.max.apply(Math,e.map(function(e){let t=e.startOnceDelay??0,i=e.pingPongDelayCorrection??0,s=e.pingPongEndDelayCorrection??0;return r(e)+t+i+s+e.duration*(e.loop??1)})):t.duration,s.delay=i?Math.min.apply(Math,e.map(function(e){let t=e.startOnceDelay??0,i=e.pingPongDelayCorrection??0;return r(e)+t+i+e.delay})):t.delay,s.endDelay=i?s.duration-Math.max.apply(Math,e.map(function(e){let t=e.startOnceDelay??0,i=e.pingPongDelayCorrection??0,s=e.pingPongEndDelayCorrection??0;return r(e)+t+i+e.duration*(e.loop??1)-e.endDelay-s})):t.endDelay,s}var Oe,Ot,Oi,Or=0,Os=[],Oa=[],On=function(){function e(){Oi=requestAnimationFrame(t)}function t(t){var i=Os.length;if(i){for(var r=0;r<i;){var s=Os[r];s.paused?(Os.splice(r,1),i-=1):(s.tick(t),r++)}e()}else Oi=cancelAnimationFrame(Oi)}return e}();function Oo(e){void 0===e&&(e={});var t,i,r,s,a,o,l,h,c,d,u=0,p=0,f=0,m=0,g=null;function v(e){var t=window.Promise&&new Promise(function(e){return g=e});return e.finished=t,t}var y=(i=Ij(IS,t=e),s=function(e,t){var i=[],r=t.keyframes;for(var s in r&&(t=IG(function(e){for(var t=IF(IN(e.map(function(e){return Object.keys(e)})),function(e){return IP.key(e)}).reduce(function(e,t){return 0>e.indexOf(t)&&e.push(t),e},[]),i={},r=0;r<t.length;r++)!function(r){var s=t[r];i[s]=e.map(function(e){var t={};for(var i in e)IP.key(i)?i==s&&(t.value=e[i]):t[i]=e[i];return t})}(r);return i}(r),t)),t)IP.key(s)&&i.push({name:s,tweens:function(e,t){var i=IV(t);if(/^spring/.test(i.easing)&&(i.duration=II(i.easing)),IP.arr(e)){var r=e.length;2!==r||IP.obj(e[0])?IP.fnc(t.duration)||(i.duration=t.duration/r):e={value:e}}var s=IP.arr(e)?e:[e];return s.map(function(e,i){var r=IP.obj(e)&&!IP.pth(e)?e:{value:e};return IP.und(r.delay)&&(r.delay=i?0:t.delay),IP.und(r.endDelay)&&(r.endDelay=i===s.length-1?t.endDelay:0),r}).map(function(e){return IG(e,i)})}(t[s],e)});return i}(r=Ij(I_,t),t),l=I7(o=IF(IN((a=I6(t.targets)).map(function(e){return s.map(function(t){return function(e,t){var i=IQ(e.target,t.name);if(i){var r,s=t.tweens.map(function(i){var s=function(e,t){var i={};for(var r in e){var s=IW(e[r],t);IP.arr(s)&&1===(s=s.map(function(e){return IW(e,t)})).length&&(s=s[0]),i[r]=s}return i.duration=parseFloat(i.duration),i.delay=parseFloat(i.delay),i}(i,e),a=s.value,o=IP.arr(a)?a[1]:a,l=IH(o),h=IZ(e.target,t.name,l,e),c=r?r.to.original:h,d=IP.arr(a)?a[0]:c,u=IH(d)||IH(h),p=l||u;return IP.und(o)&&(o=c),s.from=I4(d,p),s.to=I4(IJ(o,d),p),s.start=r?r.end:0,s.end=s.start+s.delay+s.duration+s.endDelay,s.easing=IB(s.easing,s.duration),s.isPath=IP.pth(a),s.isColor=IP.col(s.from.original),s.isColor&&(s.round=1),r=s,s}),a=s[s.length-1];return{type:i,property:t.name,animatable:e,tweens:s,duration:a.end,delay:s[0].delay,endDelay:a.endDelay}}}(e,t)})})),function(e){return!IP.und(e)}),r),h=Or,Or++,IG(i,{id:h,children:[],animatables:a,animations:o,duration:l.duration,delay:l.delay,endDelay:l.endDelay,startOnceDelay:r.startOnceDelay,pingPongDelayCorrection:r.pingPongDelayCorrection,pingPongEndDelayCorrection:r.pingPongEndDelayCorrection}));function x(){var e=y.direction;"alternate"!==e&&(y.direction="normal"!==e?"normal":"reverse"),y.reversed=!y.reversed,d.forEach(function(e){(1===e.loop||e.loop%2==0)&&(e.reversed=y.reversed)})}function b(e){return y.reversed?y.duration-e:e}function w(e,t,i=!1){t&&(y.reversed?t.seek(t.duration*t.loop-(e-t.timelineOffset-t.pingPongDelayCorrection),i):t.seek(e-t.timelineOffset-t.startOnceDelay-t.pingPongDelayCorrection,i))}function S(e){var t=0,i=y.animations,r=i.length;for("alternate"!==y.direction&&y.parent?.direction==="alternate"?y.parent?.rewind===!1&&!0===y.reversePlayback&&!1===y.rewind&&(e=y.parent?.reversed&&"alternate"===y.direction?y.duration-y.delay+y.endDelay-e:y.duration+y.delay-y.endDelay-e):M(!1,y.parent?.rewind,y.rewind,y.parent?.reversePlayback,y.reversePlayback)&&(e=y.parent?.reversed&&"alternate"===y.direction?y.duration-y.delay+y.endDelay-e:y.duration+y.delay-y.endDelay-e);t<r;){let r;var s=i[t],a=s.animatable,o=s.tweens,l=o.length-1,h=o[l];l&&(h=IF(o,function(t){return e<t.end})[0]||h),r=y.parent?.reversed&&"alternate"===y.direction?IE(e-h.start-h.endDelay,0,h.duration)/h.duration:IE(e-h.start-h.delay,0,h.duration)/h.duration;for(var c=isNaN(r)?1:h.easing(r),d=h.to.strings,u=h.round,p=[],f=h.to.numbers.length,m=void 0,g=0;g<f;g++){let e,t;var v=void 0;"alternate"!==y.direction?y.parent?.rewind===!1&&!0===y.reversePlayback&&!1===y.rewind?(e=h.to.numbers[g],t=h.from.numbers[g]||0):(t=h.to.numbers[g],e=h.from.numbers[g]||0):M(!0,y.parent?.rewind,y.rewind,y.parent?.reversePlayback,y.reversePlayback)?(e=h.to.numbers[g],t=h.from.numbers[g]||0):(t=h.to.numbers[g],e=h.from.numbers[g]||0),v=h.isPath?function(e,t){function i(i){void 0===i&&(i=0);var r=t+i>=1?t+i:0;return e.el.getPointAtLength(r)}var r=I3(e.el,e.svg),s=i(),a=i(-1),o=i(1);switch(e.property){case"x":return(s.x-r.x)*r.w;case"y":return(s.y-r.y)*r.h;case"angle":return 180*Math.atan2(o.y-a.y,o.x-a.x)/Math.PI}}(h.value,c*t):e+c*(t-e),u&&(h.isColor&&g>2||(v=Math.round(v*u)/u)),p.push(v)}var x=d.length;if(x){m=d[0];for(var b=0;b<x;b++){d[b];var w=d[b+1],S=p[b];isNaN(S)||(w?m+=S+w:m+=S+" ")}}else m=p[0];I8[s.type](a.target,s.property,m,a.transforms),s.currentValue=m,t++}}function _(e){y[e]&&!y.passThrough&&y[e](y)}v(y);let A={0:!1,1:!0,2:!1,3:!0,4:!1,5:!1,6:!1,7:!1,8:!1,9:!0,10:!0,11:!1,12:!1,13:!1,14:!0,15:!0,16:!1,17:!0,18:!0,19:!1,20:!1,21:!1,22:!0,23:!0,24:!1,25:!0,26:!1,27:!0,28:!1,29:!1,30:!1,31:!1};function M(e,t,i,r,s){return A[e<<4|t<<3|i<<2|r<<1|s]}function E(e,t=!1){var i=y.duration;let r=y.delay,s=i-y.endDelay;y.parent?.reversed&&"alternate"===y.direction&&(r=y.endDelay,s=i-y.delay);var a=b(e);if(y.progress=IE(a/i*100,0,100),t||(y.reversePlayback=a<y.currentTime),m&&function(e,t=!1){if(y.reversed)for(var i=m;i--;)w(e,d[i],t);else for(var r=0;r<m;r++)w(e,d[r],t)}(a,t),!y.began&&y.currentTime>=0&&(y.began=!0,_("begin")),!y.loopBegan&&y.currentTime>0&&(y.loopBegan=!0,_("loopBegin")),(y.reversed||a>
8402=0)&&a<=r&&0!==y.currentTime&&(S(0),_("change")),(a>=s&&y.currentTime!==i+y.pingPongDelayCorrection||!i)&&(S(i),_("change")),a>r&&a<s?(y.changeBegan||(y.changeBegan=!0,y.changeCompleted=!1,_("changeBegin")),S(a),_("change")):y.changeBegan?(y.changeCompleted=!0,y.changeBegan=!1,_("change"),m&&_("timelineChangeComplete")):y.began&&a>s&&_("changeComplete"),y.currentTime=IE(a,0,i+y.pingPongDelayCorrection),y.began&&_("update"),e>=i){if(y.remaining&&!0!==y.remaining&&y.remaining--,y.remaining){for(let e of(m?u+=y.duration/Oo.speed:u+=y.duration,d))e.setStartTime(0),e.remaining=e.loop;_("loopComplete"),y.loopBegan=!1,"alternate"===y.direction?x():m&&(y.direction="normal",y.reversed=!1,d.forEach(function(e){return e.reversed=!1}))}else y.paused=!0,y.completed||(y.completed=!0,_("loopComplete"),_("complete"),!y.passThrough&&"Promise"in window&&(g(),v(y)))}}return y.reset=function(){var e=y.direction;y.passThrough=!1,y.currentTime=0,y.progress=0,y.paused=!0,y.began=!1,y.loopBegan=!1,y.changeBegan=!1,y.completed=!1,y.changeCompleted=!1,y.reversePlayback=!1,y.reversed="reverse"===e,y.remaining=y.loop,m=(d=y.children).length;for(var t=m;t--;)y.children[t].reset();S(y.reversed?y.duration:0)},y.setStartTime=function(e){u=e},y.set=function(e,t){return I9(e,t),y},y.tick=function(e){f=e,u||(u=f),E((f+(p-u))*Oo.speed)},y.seek=function(e,t=!1){E(e-u,t)},y.pause=function(e){y.paused=!0,m&&(c=e??performance.now())},y.play=function(e){!y.paused||(y.completed&&y.reset(),y.paused=!1,Os.push(y),m&&void 0!==c&&(u+=(e??performance.now())-c),Oi||On())},y.reverse=function(){x(),y.completed=!y.reversed,u=0,p=b(y.currentTime)*(1/Oo.speed)},y.restart=function(){y.reset(),y.play()},y.reset(),y.autoplay&&y.play(),y}function Ol(e,t){for(var i=t.length;i--;)IU(e,t[i].animatable.target)&&t.splice(i,1)}"u">typeof document&&document.addEventListener("visibilitychange",function(e){document.hidden?(Os.forEac
8402h(function(t){return t.pause(e.timeStamp)}),Oa=Os.slice(0),Oo.running=Os=[]):Oa.forEach(function(t){return t.play(e.timeStamp)})}),Oo.version="3.2.0",Oo.speed=1,Oo.running=Os,Oo.remove=function(e){for(var t=I5(e),i=Os.length;i--;){var r=Os[i],s=r.animations,a=r.children;Ol(t,s);for(var o=a.length;o--;){var l=a[o],h=l.animations;Ol(t,h),h.length||l.children.length||a.splice(o,1)}s.length||a.length||r.pause()}},Oo.get=IZ,Oo.set=I9,Oo.convertPx=IX,Oo.path=function(e,t){var i=IP.str(e)?Iz(e)[0]:e,r=t||100;return function(e){return{property:e,el:i,svg:I3(i),totalLength:I2(i)*(r/100)}}},Oo.setDashoffset=function(e){var t=I2(e);return e.setAttribute("stroke-dasharray",t),t},Oo.stagger=function(e,t){void 0===t&&(t={});var i=t.direction||"normal",r=t.easing?IB(t.easing):null,s=t.grid,a=t.axis,o=t.from||0,l="first"===o,h="center"===o,c="last"===o,d=IP.arr(e),u=parseFloat(d?e[0]:e),p=d?parseFloat(e[1]):0,f=IH(d?e[1]:e)||0,m=t.start||0+(d?u:0),g=[],v=0;return function(e,t,y){if(l&&(o=0),h&&(o=(y-1)/2),c&&(o=y-1),!g.length){for(var x=0;x<y;x++){if(s){var b=h?(s[0]-1)/2:o%s[0],w=h?(s[1]-1)/2:Math.floor(o/s[0]),S=x%s[0],_=Math.floor(x/s[0]),A=b-S,M=w-_,E=Math.sqrt(A*A+M*M);"x"===a&&(E=-A),"y"===a&&(E=-M),g.push(E)}else g.push(Math.abs(o-x));v=Math.max.apply(Math,g)}r&&(g=g.map(function(e){return r(e/v)*v})),"reverse"===i&&(g=g.map(function(e){return a?e<0?-1*e:-e:Math.abs(v-e)}))}var C=d?(p-u)/v:u;return m+Math.round(100*g[t])/100*C+f}},Oo.timeline=function(e){void 0===e&&(e={});var t=Oo(e);return t.duration=0,t.add=function(i,r){var s=Os.indexOf(t),a=t.children;function o(e){e.passThrough=!0}s>-1&&Os.splice(s,1);for(var l=0;l<a.length;l++)o(a[l]);var h=IG(i,Ij(I_,e));h.targets=h.targets||e.targets;var c=t.duration;h.autoplay=!1,h.timelineOffset=IP.und(r)?c:IJ(r,c),o(t);var d=Oo(h);o(d),a.push(d),d.parent=t;var u=I7(a,e);return t.delay=u.delay,t.endDelay=u.endDelay,t.duration=u.duration,!0===d.loop&&(t.duration=1/0),t.seek(0),t.reset(),t.autoplay&&t.play(),t},t},Oo.easing=IB,Oo.penner=IL,Oo.random=function(e,t){return Math.floor(Math.random()*(t-e+1))+e};var Oh=new iv,Oc=new iv,Od=new ig;function Ou(e,t,i,r,s,a){let o=void 0!==i[e]?i[e]:void 0,l=r[e];if(null==l)return;let h=null!=o?"string"==typeof o?Number(s.getVariable(o)??0):o:t[e],c="string"==typeof l?Number(s.getVariable(l)??0):l;if(h!==c)return{update:i=>{let r=tY.lerp(h,c,i);a?t[e]=Math.trunc(r):t[e]=r},start:()=>{t[e]=h},end:()=>{t[e]=c}}}function Op(e,t,i,r,s,a){let o=i[e]?i[e]:void 0,l=r[e];if(!l)return;let h=t[e],c=[...o??h].map(e=>"string"==typeof e?Number(s.getVariable(e)??0):e),d=[...l].map(e=>"string"==typeof e?Number(s.getVariable(e)??0):e);if(!(c.length!==d.length||uL(c,d)))return{update:i=>{c.forEach((r,s)=>{let o=tY.lerp(r,d[s],i);t[e][s]=a?Math.trunc(o):o})},start:()=>{Object.assign(t[e],c)},end:()=>{Object.assign(t[e],d)}}}function Of(e,t,i){return t.forEach((t,r)=>{e.setComponent(r,"string"==typeof t?Number(i.getVariable(t)??0):t)}),e}function Om(e,t,i,r,s){let a=i[e]?i[e]:void 0,o=r[e];if(!o)return;let l=t[e],h=a?Of(new iv,a,s):l.clone(),c=Of(new iv,o,s);if(!h.equals(c))return{update:e=>{l.lerpVectors(h,c,e)},start:()=>{l.copy(h)},end:()=>{l.copy(c)}}}function Og(e,t,i){return t.forEach((t,r)=>{e.setComponent(r,"string"==typeof t?Number(i.getVariable(t)??0):t)}),e}function Ov(e,t,i,r,s){let a=i[e]?i[e]:void 0,o=r[e];if(!o)return;let l=t[e],h=!(l instanceof tQ),c=l instanceof tQ?l:new tQ().fromArray(l),d=a?Og(new tQ,a,s):c.clone(),u=Og(new tQ,o,s);if(!d.equals(u))return{update:i=>{c.lerpVectors(d,u,i),h&&(t[e]=c.toArray())},start:()=>{c.copy(d),h&&(t[e]=c.toArray())},end:()=>{c.copy(u),h&&(t[e]=c.toArray())}}}function Oy(e,t,i,r,s){let a=i[e]?i[e]:void 0,o=r[e];if(!o)return;let l=t[e],h=new SN(l.r,l.g,l.b,l.a),c=a?"string"==typeof a?s.getColor(a).clone():new SN(a.r,a.g,a.b,a.a):h.clone(),d="string"==typeof o?s.getColor(o).clone():new SN(o.r,o.g,o.b,o.a);if(!c.equals(d))return{update:i=>{h.lerpColors(c,d,i);let r=tY.lerp(c.a,d.a,i);h.a=r,t[e]={r:h.r,g:h.g,b:h.b,a:h.a}},start:()=>{h.copy(c)},end:()=>{h.copy(d)}}}function Ox(e,t,i,r,s){return"number"==typeof t[e]?Ou(e,t,i??{},r,s):Array.isArray(t[e])?Op(e,t,i??{},r,s):void 0}function Ob(e,t,i,r){let s=[],a=AE(i,r)||!!t.layers&&AE(t,r);for(let o of(s.push({update:()=>{e.transparent=a}}),e.layers)){let e=t.layers?.data(o.uuid),a=i.layers.data(o.uuid);if(a&&("light"===o.type||(o.visible??!0)&&(a.visible??!0)))for(let t of o.getNames().filter(e=>!gE.some(t=>e.includes(t))))try{let i=o.getValue(t),l;if("colors"===t)l=function(e,t,i,r="colors"){if(!e.hasValue(r)||!(r in i))return;let s=[],a=e.getValue(r),o=t?t[r]:a.map(e=>e.toArray()),l=i[r];for(let e=0;e<a.length;++e){let t=[...o[e]],i=[...l[e]];
8402gt.isEqual(t,i)||s.push({update:r=>{a[e].fromArray(gt.lerp(t,i,r))},start:()=>{a[e].fromArray(t)},end:()=>{a[e].fromArray(i)}})}return s.length?s:void 0}(o,e,a,t);else if(Array.isArray(i))"steps"===t&&(l=function(e,t,i,r="steps"){if(!e.hasValue(r)||!(r in i))return;let s=[],a=e.getValue(r),o=t?t[r]:a,l=i[r];return uL(o,l)||s.push({update:t=>{let i=[...a];for(let e=0;e<a.length;++e){let r=o[e],s=l[e];i[e]=tY.lerp(r,s,t)}e.setValue(r,i)},start:()=>{e.setValue(r,o)},end:()=>{e.setValue(r,l)}}),s.length?s:void 0}(o,e,a,t));else if("number"==typeof i)l=function(e,t,i,r,s){if(!e.hasValue(r)||!(r in i))return;let a=t?t[r]:e.getValue(r),o=i[r],l="string"==typeof a?Number(s.getVariable(a)??0):a,h="string"==typeof o?Number(s.getVariable(o)??0):o;if(l!==h)return{update:t=>{e.setValue(r,tY.lerp(l,h,t))},start:()=>{e.setValue(r,l)},end:()=>{e.setValue(r,h)}}}(o,e,a,t,r);else{if("boolean"==typeof i)continue;i instanceof tQ?l=function(e,t,i,r){if(!e.hasValue(r)||!(r in i))return;let s=e.getValue(r),a=t?new tQ().fromArray(t[r]):s.clone(),o=new tQ().fromArray(i[r]);if(!a.equals(o))return{update:e=>{s.lerpVectors(a,o,e)},start:()=>{s.copy(a)},end:()=>{s.copy(o)}}}(o,e,a,t):i instanceof iv?l=function(e,t,i,r,s){if(!e.hasValue(r)||!(r in i))return;let a=e.getValue(r),o=t?t[r]:void 0,l=i[r],h=o?Of(new iv,o,s):a.clone(),c=Of(new iv,l,s);if(!h.equals(c))return{update:e=>{a.lerpVectors(h,c,e)},start:()=>{a.copy(h)},end:()=>{a.copy(c)}}}(o,e,a,t,r):i instanceof SN?l=function(e,t,i,r,s){if(!e.hasValue(r)||!(r in i))return;let a=t?t[r]:void 0,o=i[r],l=e.getValue(r),h=a?"string"==typeof a?s.getColor(a).clone():new ii().setRGB(a.r,a.g,a.b):l.clone(),c="string"==typeof o?s.getColor(o).clone():new SN(o.r,o.g,o.b,o.a);if(h.equals(c))return;let d=l.clone();return{update:t=>{e.getValue(r)!==d&&e.setValue(r,d),d.lerpColors(h,c,t)},start:()=>{d.copy(h)},end:()=>{d.copy(c)}}}(o,e,a,t,r):i instanceof ii?l=function(e,t,i,r,s){if(!e.hasValue(r)||!(r in i))return;let a=t?t[r]:void 0,o=i[r],l=e.getValue(r),h=a?"string"==typeof a?s.getColor(a).clone():new ii().setRGB(a.r,a.g,a.b):l.clone(),c="string"==typeof o?s.getColor(o).clone():new ii().setRGB(o.r,o.g,o.b);if(h.equals(c))return;let d=l.clone();return{update:t=>{e.getValue(r)!==d&&e.setValue(r,d),d.lerpColors(h,c,t)},start:()=>{d.copy(h)},end:()=>{d.copy(c)}}}(o,e,a,t,r):"isTexture"in i&&(l=function(e,t,i,r="texture"){if(!e.hasValue(r)||!(r in i))return;let s=e.getNode("rotation"),a=t?.[r]?.rotation??0,o=i[r]?.rotation??0;if(s&&a!==o)return{update:e=>{s.value=tY.lerp(a,o,e)*tY.DEG2RAD},start:()=>{s.value=a*tY.DEG2RAD},end:()=>{s.value=o*tY.DEG2RAD}};let l=e.getNode("mat");if(!l)return;let h=t?t[r]:l,c=i[r],d=[...h.repeat],u=[...h.offset],p=[...c.repeat],f=[...c.offset],m=h.rotation??0,g=c.rotation??0;if(!m7.isEqual(d,p)||!m7.isEqual(u,f)||m!==g)return{update:e=>{l.repeat=m7.lerp(d,p,e),l.offset=m7.lerp(u,f,e),l.rotation=tY.lerp(m,g,e),l.updateMatrix()},start:()=>{l.repeat=[...d],l.offset=[...u],l.rotation=m,l.updateMatrix()},end:()=>{l.repeat=[...p],l.offset=[...f],l.rotation=g,l.updateMatrix()}}}(o,e,a,t))}l&&(Array.isArray(l)?s.push(...l):s.push(l))}catch(e){console.error(`lerpMaterial: unexpected material layer for ${t}`,e)}}return s}var Ow=new iv,OS=new i3;function O_(e,t,i,r,s){let a=[];return e.data.visible&&a.push(...function(e,t,i,r,s){let a=[],o,l,h,c,d,u,p,f;if(e instanceof TY?((o=Ov("position",e,t,i,s))&&a.push(o),(h=Ou("rotation",e,t,i,s))&&a.push(h),(c=Ov("shear",e,t,i,s))&&a.push(c)):((u=Ou("slide",f={slide:t.pathSnapping?.slide??e.updatedPathSnapping?.slide??e.dataPatched.pathSnapping?.slide??0,offset:t.pathSnapping?.offset??e.updatedPathSnapping?.offset??e.dataPatched.pathSnapping?.offset??0},t.pathSnapping??e.updatedPathSnapping??e.dataPatched.pathSnapping,i.pathSnapping??e.dataPatched.pathSnapping,s))&&a.push(u),(p=Ou("offset",f,t.pathSnapping??e.updatedPathSnapping??e.dataPatched.pathSnapping,i.pathSnapping??e.dataPatched.pathSnapping,s))&&a.push(p),!u&&!p&&((o=Om("position",e,t,i,s))&&a.push(o),(l=Om("scale",e,t,i,s))&&a.push(l),(h=function(e,t,i,r,s){let a=t?.rotation?t.rotation.map(e=>("string"==typeof e?Number(s.getVariable(e)??0):e)*tY.DEG2RAD):void 0,o=i.rotation?.map(e=>("string"==typeof e?Number(s.getVariable(e)??0):e)*tY.DEG2RAD);if(!o)return;let l=a?new iv().fromArray(a):new iv().setFromEuler(e.rotation),h=new iv().fromArray(o);if(l.equals(h))return;let c=Ow.subVectors(h,l);
8402if(!(r&&c.toArray().every(e=>Math.abs(e)<2*Math.PI)))return{update:t=>{Ow.lerpVectors(l,h,t),e.rotation.setFromVector3(Ow)},start:()=>{e.rotation.setFromVector3(l)},end:()=>{e.rotation.setFromVector3(h)}};{let t=new ig().setFromEuler(OS.setFromVector3(l)),i=new ig().setFromEuler(OS.setFromVector3(h));return{update:r=>{!function(e,t,i,r){if(0===r)return i.copy(e);if(1===r)return i.copy(t);let s=e.w*t.w+e.x*t.x+e.y*t.y+e.z*t.z;if(s>=1)return i.copy(e);let a=1-s*s;if(a<=Number.EPSILON){let s=1-r;return i.w=s*e.w+r*t.w,i.x=s*e.x+r*t.x,i.y=s*e.y+r*t.y,i.z=s*e.z+r*t.z,i.normalize()}let o=Math.sqrt(a),l=Math.atan2(o,s),h=Math.sin((1-r)*l)/o,c=Math.sin(r*l)/o;i.w=e.w*h+t.w*c,i.x=e.x*h+t.x*c,i.y=e.y*h+t.y*c,i.z=e.z*h+t.z*c}(t,i,e.quaternion,r)},start:()=>{e.rotation.setFromVector3(l)},end:()=>{e.rotation.setFromVector3(h)}}}}(e,t,i,r,s))&&a.push(h),(d=function(e,t,i,r){let s=i[e]?i[e]:void 0,a=r[e];if(!a)return;let o=t[e],l=s?new iX().fromArray(s):o.clone(),h=new iv,c=new ig,d=new iv;l.decompose(h,c,d);let u=new iX().fromArray(a),p=new iv,f=new ig,m=new iv;if(u.decompose(p,f,m),!l.equals(u))return{update:e=>{Od.slerpQuaternions(c,f,e),Oh.lerpVectors(h,p,e),Oc.lerpVectors(d,m,e),o.compose(Oh,Od,Oc)},start:()=>{o.compose(h,c,d)},end:()=>{o.compose(p,f,m)}}}("hiddenMatrix",e,t,i))&&a.push(d))),o||l||h||d||u||p){let i=e instanceof TY?()=>{e.updateWorldMatrix(!0,!1,!0),e.resetBBoxNeedsUpdate()}:()=>{e.updateMatrix(),e.hasNonUniformScale&&(e.updateMatrixWorld(),e.updateMatrixWorldSVD()),e.parent?.matrixWorldFusedFalse&&(e.matrixWorld.multiplyMatrices(e.parent.matrixWorldFusedFalse,e.matrix),e.matrixWorldNeedsUpdate=!1),ES(e)&&E_(e.parent)&&e.invali
8402dateDownstreamBooleanData(!0),e.updatePathSnapping(Object.assign({},t.pathSnapping,f))};a.push({update:i,start:i,end:i})}return a}(e,t,i,s,r)),e instanceof TY?a.push(...function(e,t,i,r,s){let a=[],o,l,h,c,d,u,p,f,m,g,v,y,x,b,w;if("width"in e&&(o=Ou("width",e,t,i,s))&&a.push(o),"height"in e&&(l=Ou("height",e,t,i,s))&&a.push(l),e instanceof Pn||e instanceof Pd){let r={...t.fill},o={...i.fill};void 0!==r.enabled&&r.enabled!==o.enabled&&(a.push({update:()=>{e instanceof Pn&&(e.fill.enabled=!0)}}),r.enabled||Object.assign(r,{enabled:!0,color:{...r.color,a:0}}),o.enabled||Object.assign(o,{enabled:!0,color:{...o.color,a:0}})),(h=Oy("color",e.fill,r,o,s))&&a.push(h)}if(e instanceof Pn){let r={...t.stroke},o={...i.stroke};(r.enabled||o.enabled)&&(a.push({update:()=>{e instanceof Pn&&(e.stroke.enabled=!0)}}),r.enabled||Object.assign(r,{enabled:!0,color:{...r.color,a:0}}),o.enabled||Object.assign(o,{enabled:!0,color:{...o.color,a:0}})),(c=Oy("color",e.stroke,r,o,s))&&a.push(c),(d=Ou("thickness",e.stroke,r,o,s))&&a.push(d)}if(e instanceof Pn){let r={...t.dropShadow},o={...i.dropShadow};(r.enabled||o.enabled)&&(a.push({update:()=>{e instanceof Pn&&(e.dropShadow.enabled=!0)}}),r.enabled||Object.assign(r,{enabled:!0,color:{...r.color,a:0}}),o.enabled||Object.assign(o,{enabled:!0,color:{...o.color,a:0}})),(u=Oy("color",e.dropShadow,r,o,s))&&a.push(u),(p=Ou("blurRadius",e.dropShadow,r,o,s))&&a.push(p),(m=Ou("spread",e.dropShadow,r,o,s))&&a.push(m),(f=Ov("offset",e.dropShadow,r,o,s))&&a.push(f)}if(e instanceof Pn){let r={...t.innerShadow},o={...i.innerShadow};(r.enabled||o.enabled)&&(a.push({update:()=>{e instanceof Pn&&(e.innerShadow.enabled=!0)}}),r.enabled||Object.assign(r,{enabled:!0,color:{...r.color,a:0}}),o.enabled||Object.assign(o,{enabled:!0,color:{...o.color,a:0}})),(g=Oy("color",e.innerShadow,r,o,s))&&a.push(g),(v=Ou("blurRadius",e.innerShadow,r,o,s))&&a.push(v),(x=Ou("spread",e.innerShadow,r,o,s))&&a.push(x),(y=Ov("offset",e.innerShadow,r,o,s))&&a.push(y)}if(e instanceof Pn||e instanceof Pd){let r={...t.backgroundBlur},o={...i.backgroundBlur};(r.enabled||o.enabled)&&(a.push({update:()=>{e instanceof Pn&&(e.backgroundBlur.enabled=!0)}}),r.enabled||Object.assign(r,{enabled:!0,radius:0}),o.enabled||Object.assign(o,{enabled:!0,radius:0})),(b=Ou("radius",e.backgroundBlur,r,o,s))&&a.push(b)}if(e instanceof Pn){let r={...t.layerBlur},o={...i.layerBlur};(r.enabled||o.enabled)&&(a.push({update:()=>{e instanceof Pn&&(e.layerBlur.enabled=!0)}}),r.enabled||Object.assign(r,{enabled:!0,radius:0}),o.enabled||Object.assign(o,{enabled:!0,radius:0})),(w=Ou("radius",e.layerBlur,r,o,s))&&a.push(w)}if(e instanceof Pd||e instanceof Pl){let r=Op("cornerRadius",e,t,i,s);r&&a.push(r)}return a}(e,t,i,0,r)):(e.data.visible&&a.push(...function(e,t,i,r){let s=[];if(!("cloner"in i)||!e.cloner)return s;let a=e.cloner,o="cloner"in t?t.cloner:{},l=i.cloner;mu.forEach(e=>{let t;(t="count"===e?Ou("count",a.parameters,o,l,r,!0):Ox(e,a.parameters,o??{},l,r))&&s.push(t)});let h=function(e,t,i,r){if("radial"!==e.parameters.type)return;let s=t.radial,a=i.radial;if(!a)return;let o=e.parameters.radial,l=[];return mp.forEach(e=>{let t=Ox(e,o,s??{},a,r);t&&l.push(t)}),l}(a,o,l,r);h?.length&&s.push(...h);let c=function(e,t,i,r){if("linear"!==e.parameters.type)return;let s=t.linear,a=i.linear;if(!a)return;let o=[],l=e.parameters.linear;return mf.forEach(e=>{let t=Ox(e,l,s??{},a,r);t&&o.push(t)}),o}(a,o,l,r);c?.length&&s.push(...c);let d=function(e,t,i,r){if("grid"!==e.parameters.type)return;let s=t.grid,a=i.grid;if(!a)return;let o=[],l=e.parameters.grid;return mm.forEach(e=>{let t;(t="count"===e?Op(e,l,s??{},a,r,!0):Ox(e,l,s??{},a,r))&&o.push(t)}),o}(a,o,l,r);d?.length&&s.push(...d);let u=function(e,t,i,r){if("toObject"!==e.parameters.type)return;let s=t.toObject,a=i.toObject;if(!a)return;let o=[],l=e.parameters.toObject;return mg.forEach(e=>{let t;(t="count"===e?Ou(e,l,s??{},a,r,!0):Ox(e,l,s??{},a,r))&&o.push(t)}),o}(a,o,l,r);u?.length&&s.push(...u);let p=function(e,t,i,r){if(!e.parameters.randomness)return;let s=t.randomnessObject,a=i.randomnessObject;if(!a)return;let o=[],l=e.parameters.randomnessObject;
8402return mv.forEach(e=>{let t=Ox(e,l,s??{},a,r);t&&o.push(t)}),o}(a,o,l,r);return p?.length&&s.push(...p),s.length&&s.push({update:()=>{a.update()}}),s}(e,t,i,r)),ES(e)?(e instanceof Mb&&e.data.visible&&a.push(...function(e,t,i,r){let s=[];if(!("geometry"in i))return s;let a=e.geometry.userData.parameters,o="geometry"in t?t.geometry:{},l=i.geometry;if(e instanceof MM){let t=function(e,t,i,r){if(void 0===i.scaleBaked)return;let s=(t.scaleBaked??e.data.geometry.scaleBaked).map(e=>"string"==typeof e?Number(r.getVariable(e)??0):e),a=i.scaleBaked.map(e=>"string"==typeof e?Number(r.getVariable(e)??0):e);if(ge.isEqual(s,a))return;let o=[];return o.push({update:t=>{e.updateGeometryInteractions({scaleBaked:[tY.lerp(s[0],a[0],t),tY.lerp(s[1],a[1],t),tY.lerp(s[2],a[2],t)]},r),e.invalidateDownstreamBooleanData(),e.refreshAttachedClonersInteractions()},start:()=>{e.updateGeometryInteractions({scaleBaked:s},r),e.invalidateDownstreamBooleanData(),e.refreshAttachedClonersInteractions()},end:()=>{e.updateGeometryInteractions({scaleBaked:a},r),e.invalidateDownstreamBooleanData(),e.refreshAttachedClonersInteractions()}}),o}(e,o,l,r);t&&s.push(...t)}else{let t={};if(Object.assign(t,uV(a,gI),uV(o,gI)),gI.forEach(e=>{let i=Ox(e,t,o,l,r);i&&s.push(i)}),e instanceof PR){Object.assign(t,{extrusion:{...a.extrusion}});let e=function(e,t,i,r){if(!i.extrusion)return;let s=e.extrusion,a=t.extrusion??{},o=i.extrusion,l=[];return gD.forEach(e=>{let t=Ox(e,s,a,o,r);t&&l.push(t)}),l}(t,o,l,r);e&&s.push(...e)}s.length&&s.push({update:i=>{e.updateGeometryInteractions(t,r),e.updateGeometryGroupsIfNeeded(),e.refreshAttachedClonersInteractions()},start:i=>{e.updateGeometryInteractions(t,r),e.updateGeometryGroupsIfNeeded(),e.refreshAttachedClonersInteractions()},end:i=>{e.updateGeometryInteractions(t,r),e.updateGeometryGroupsIfNeeded(),e.refreshAttachedClonersInteractions()}})}return s}(e,t,i,r)),e.data.visible&&a.push(...function(e,t,i,r){let s=[];if(Array.isArray(e.material)){if(!("materials"in i&&i.materials))return s;let a="materials"in t&&t.materials?t.materials:[],o=i.materials;e.material.forEach((e,t)=>{if(!o[t])return;let i=a[t]??{},l=o[t];"string"==typeof i||"string"==typeof l||s.push(...Ob(e,i,l,r))})}else{if(!("material"in i&&i.material))return s;let a="material"in t&&t.material?t.material:{},o=i.material;if("string"==typeof a||"string"==typeof o)return s;s.push(...Ob(e.material,a,o,r))}return s}(e,t,i,r))):EM(e)?e.data.visible&&a.push(...function(e,t,i,r){let s=[];if(void 0!==i.intensity){let a=Ou("intensity",e,t,i,r);a&&s.push(a)}if(void 0!==i.color){let a=function(e,t,i,r,s){let a=i[e]?i[e]:void 0,o=r[e];if(!o)return;let l=t[e],h=a?"string"==typeof a?s.getColor(a).clone():new ii().setRGB(a.r,a.g,a.b):l.clone(),c="string"==typeof o?s.getColor(o).clone():new ii().setRGB(o.r,o.g,o.b);if(h.equals(c))return;let d=l.clone();return{update:i=>{d.lerpColors(h,c,i),t[e]?.copy?.(d)},start:()=>{d.copy(h)},end:()=>{d.copy(c)}}}("color",e,t,i,r);a&&s.push(a)}return s}(e,t,i,r)):EA(e)&&a.push(...function(e,t,i,r){let s=[],a="OrthographicCamera"===e.cameraType?t.orthographic?.zoom:t.perspective?.zoom,o="OrthographicCamera"===e.cameraType?i.orthographic?.zoom:i.perspective?.zoom;if(void 0!==o){let t=a??e.zoom;t!==o&&s.push({update:i=>{e.zoom=tY.lerp(t,o,i),e.updateProjectionMatrix()},start:()=>{e.zoom=t,e.updateProjectionMatrix()},end:()=>{e.zoom=o,e.updateProjectionMatrix()}})}if(void 0!==i.targetOffset){let a=Ou("targetOffset",e,t,i,r);a&&s.push(a)}return s}(e,t,i,r))),a.length?{update:e=>{a.forEach(t=>t.update(e))},start:e=>{a.forEach(t=>t.start?.(e))},end:e=>{a.forEach(t=>t.end?.(e))}}:void 0}var OA=new iv;function OM(e,t,i=!1){let r=[],s=i=>{let r=i.data;for(let e of(delete i.states,i.currentState=null,i.reversibleToState=null,i.currentTransitionEvent=null,r.states)){let t={...e.data};i.states||(i.states={}),i.states[e.id]=yI.patch(r,t)}OC(e.scene,i,null,t,void 0!==r.events.find(e=>"Follow"===e.data.type||"LookAt"===e.data.type)),OE(e)};e.scene.traverse2D(s),e.traverseChildren(a=>{if(i&&(a.rigidBody?.setTranslation(a.position0,!0),a.rigidBody?.setRotation(a.rotation0,!0),a.rigidBody?.setLinvel(OA,!0),a.rigidBody?.setAngvel(OA,!0)),!wQ.is(a))return;let o=a.uuid,l=a.data;if(delete a.states,a.uuid===mh)return;let h=!1;for(let t of(r.some(t=>e.scene.find(o)?.isDescendantOf(t))?h=!0:l.physics?.fusedBody===!0&&"dynamic"===l.physics.rigidBody&&r.push(o),a.data=l,a.currentState=null,a.reversibleToState=null,a.currentTransitionEvent=null,l.states)){let i={...t.data};!0===e.data.globalPhysics.usePhysics&&l.physics&&("dynamic"===l.physics.rigidBody||h)&&(void 0!==t.data.position&&delete i.position,void 0!==t.data.rotation&&delete i.rotation,void 0!==t.data.hiddenMatrix&&delete i.hiddenMatrix),a.states||(a.states={}),a.states[t.id]=ya.patch(l,i)}OC(e.scene,a,null,t,void 0!==l.events.find(e=>
8402"Follow"===e.data.type||"LookAt"===e.data.type)),a instanceof Pk&&a.frame&&(a.frame.traverse(e=>s(e)),a.uiCanvas?.applySize())}),OE(e),e.frame&&(e.frame.traverse(e=>s(e)),e.uiCanvas?.applySize())}function OE(e){e.traverseEntity(t=>{for(let i of t.data.events){let t=[];switch(i.data.type){case"Follow":case"MouseHover":case"Scroll":case"MouseDown":case"MouseUp":case"MousePress":case"KeyUp":case"KeyDown":case"KeyPress":case"Collision":t.push(...i.data.actions);break;case"GameControl":for(let e of Object.values(i.data.gameActions))t.push(...e);break;case"DragDrop":t.push(...i.data.dragDropActions.drag,...i.data.dragDropActions.drop);break;case"Conditional":t.push(...i.data.inActions,...i.data.outActions)}for(let i of t)if("Create"===i.data.type&&"Yes"===i.data.hideBase){let t=e.scene.find(i.data.object);t&&(t.visible=!1)}}})}function OC(e,t,i,r,s=!1){if(t instanceof Mb&&!(t instanceof Do)&&t.removeInteractionGeometry(r),t instanceof TY?t.changeSelectedState(i,{shared:r},s):t.changeSelectedState(i,{scene:e,shared:r},s),t instanceof Mb&&t.updateGeometryGroupsIfNeeded(),t instanceof Eg&&t.updateCameraState(t.dataPatched,{scene:e,shared:r}),!(t instanceof TY)){if(t.cloner)for(let e of t.cloner.children)e.playModeVisible=void 0;t.updateVisible()}}function OT(e){let t;if(5===e.easing){let{control1:i,control2:r}=e;t=`cubicBezier( 8403 ${i[0]}, ${i[1]}, ${r[0]}, ${r[1]} 8404 )`}else if(6===e.easing){let{mass:i,stiffness:r,damping:s,velocity:a}=e;t=`spring( ${i}, ${r}, ${s}, ${a} )`}else{let i;switch(e.easing){case 0:default:i=gh.linear;break;case 1:i=gh.ease;break;case 2:i=gh.easeIn;break;case 3:i=gh.easeOut;break;case 4:i=gh.easeInOut}let[r,s,a,o]=i;t=`cubicBezier( ${r}, ${s}, ${a}, ${o} )`}return{duration:Math.max(e.duration,1e-4),easing:t}}function OP(e){let t={delay:0,loop:-1===e.repeat||e.repeat+1};if(0===e.repeat)t.direction="normal",t.rewind=!1;else switch(e.direction){case"pingpong":t.direction="alternate",t.rewind=!1;break;case"pingpong-rewind":t.direction="alternate",t.rewind=!0;break;default:t.direction="normal",t.rewind=!1}switch(t.delay=0,t.endDelay=0,t.startOnceDelay=0,t.pingPongDelayCorrection=0,t.pingPongEndDelayCorrection=0,e.delayDirection){case"start-once":t.startOnceDelay=e.delay;break;case"start":t.delay=e.delay;break;case"end":t.endDelay=e.delay;break;case"start-end":case void 0:t.delay=e.delay,t.endDelay=e.delay}return"alternate"===t.direction&&(t.delay/=2,t.endDelay/=2,"start"===e.delayDirection?(t.pingPongDelayCorrection=t.delay,"number"==typeof t.loop&&t.loop%2==0&&(t.pingPongEndDelayCorrection=t.delay)):"end"===e.delayDirection?"number"==typeof t.loop&&t.loop%2!=0&&(t.pingPongEndDelayCorrection=t.endDelay):"start-end"===e.delayDirection&&(t.pingPongDelayCorrection=t.delay,t.pingPongEndDelayCorrection=t.endDelay)),t}var OD={type:"beginState"},OI={type:"completeState",isfromEntity:!1},OO=class{constructor(e,t,i,r,s,a){if(this.object=e,this.data=r,this.sharedAssets=s,this.allowSlerp=a,this.targets={t:0},this.firstLoop=!0,this._changeBegan=!1,this._changeCompleted=!0,this.onChange=()=>{this.callback&&(this.callback.update(this.targets.t),this.object.requestRender()),0===this.targets.t||1===this.targets.t?this._changeCompleted||(this._changeCompleted=!0,this._changeBegan=!1,this.onChangeComplete()):(this._changeCompleted&&(this._changeCompleted=!1),this._changeBegan||(this._changeBegan=!0,this.onChangeBegin()))},this.onChangeBegin=()=>{this.object.reversibleToState=this.to.id;let e=this.targets.t>.5?this.from.id:this.to.id;this.object.prevState!==this.object.currentState&&(this.object.prevState=this.object.currentState),this.object.currentState=e,this.object.dispatchEvent({type:"beginState",state:e}),this.object instanceof TY||this.object.traverseEntity(e=>{e!==this.object&&e instanceof Eg&&e.dispatchEvent(OD)})},this.onChangeComplete=()=>{this.firstLoop&&(this.onFirstLoop(),this.firstLoop=!1),this.object.reversibleToState=this.to.id;let e=this.targets.t<.5?this.from.id:this.to.id;this.object.prevState!==this.object.currentState&&(this.object.prevState=this.object.currentState),this.object.currentState=e,this.object.dispatchEvent({type:"completeState",state:e}),this.object instanceof TY||this.object.traverseEntity(e=>{e!==this.object&&e instanceof Eg&&e.dispatchEvent(OI)})},this.onFirstLoop=()=>{this.useCurrentState&&(this.callback=O_(this.object,this.from.data,this.to.data,this.sharedAssets,this.allowSlerp))},void 0===t){let e=OL(this.object,this.object.currentState===i?this.object.prevState:this.object.currentState);if(!e)throw Error("Missing property");this.from=e}else{let e=OL(this.object,t);if(!e)throw Error("Missing property");this.from=e}if(void 0===i)throw Error("Missing property");{let e=OL(this.object,i);if(!e)throw Error("Missing property");this.to=e}this.useCurrentState=void 0===t||void 0===i,this.params={targets:this.targets,t:1,autoplay:!1,...OP(r),...OT(r),
8404change:this.onChange},this.callback=O_(this.object,void 0===t?{}:this.from.data,void 0===i?{}:this.to.data,this.sharedAssets,this.allowSlerp)}get changeBegan(){return this._changeBegan}get changeCompleted(){return this._changeCompleted}},OR=class extends tL{constructor(e,t,i,r,s){if(super(),this.eventType=e,this.data=t,this.page=i,this.shared=r,this.condition=s,this.toggleIsForward=!1,this.timelineNeedsRebuild=!1,this.hasPlayedOnce=!1,this.onTimelineChangeComplete=()=>{"normal"!==this.data.tweens[0].data.direction&&(this.toggleIsForward=!this.toggleIsForward),!1!==this.timelineNeedsRebuild&&(this.timeline?.pause(),this.buildTimeline({isForward:this.toggleIsForward,needsRebuild:!1,isRebuild:!0}),this.timeline.play())},!t.object)throw Error("Missing property");let a=this.page.scene.find(t.object)??this.page.uiCanvas?.find(t.object)??this.page.scene.find2DInUIObjects(t.object);if(!a||!a.states||(this.object=a,t.tweens.length<2))throw Error("Missing property");this.tweens=Array(this.data.tweens.length-1),this.startOnceDelay="start-once"===t.tweens[0].data.delayDirection?t.tweens[0].data.delay:0,this.init()}get playing(){return this.timeline?.paused===!1}get changeBegan(){return this.tweens.some(e=>e.changeBegan)??!1}init(){this.initialCurrentState=OL(this.object,this.object.currentState).id,this.toggleIsForward=!1}get currentState(){return"Toggle"===this.data.runMode&&mr(this.eventType)?this.initialCurrentState:this.object.currentState}buildTimeline({isForward:e=!0,needsRebuild:t=!1,isRebuild:i=!1}={}){try{let r=OP(this.data.tweens[0].data);i&&"number"==typeof r.loop&&r.loop--,this.timeline?.pause(),this.timeline=Oo.timeline({autoplay:!1,...r,...!0===r.loop||r.loop>1?{timelineChangeComplete:this.onTimelineChangeComplete}:{}});let s=this.tweens.findIndex(e=>e?.changeBegan);if(!0===t&&(this.timelineNeedsRebuild=!0),e){let e=-1===s?0:s;for(let t=e;t<this.data.tweens.length-1;t++){let i=this.data.tweens[t],a=this.data.tweens[t+1],o;t===e&&(!0===this.object.wasMovedByUser||this.object.previousAction?.changeBegan===!0)?(o=void 0,this.object instanceof Eg&&(this.object.wasMovedByUser=!1)):o=void 0===i.data.state?this.currentState:i.data.state;let l=new OO(this.object,o,void 0===a.data.state?this.currentState:a.data.state,a.data,this.shared,this.data.allowSlerp??!1);-1!==s&&t===e&&Object.assign(l.params,{startOnceDelay:0}),this.tweens[t]=l,this.timeline.add(l.params,this.timeline.duration+(t===e?r.delay:0))}this.timeline.duration+=r.endDelay}else{let e=-1===s?this.data.tweens.length-1:s+1;for(let t=e;t>0;t--){let i=this.data.tweens[t],a=this.data.tweens[t-1],o;t===e&&(!0===this.object.wasMovedByUser||this.object.previousAction?.changeBegan===!0)?(o=void 0,this.object instanceof Eg&&(this.object.wasMovedByUser=!1)):o=void 0===i.data.state?this.currentState:i.data.state;let l=new OO(this.object,o,void 0===a.data.state?this.currentState:a.data.state,i.data,this.shared,this.data.allowSlerp??!1);-1!==s&&t===e&&Object.assign(l.params,{startOnceDelay:0}),this.tweens[t-1]=l,this.timeline.add(l.params,this.timeline.duration+(t===e?r.endDelay:0))}this.timeline.duration+=r.delay}}catch(e){e instanceof Error&&console.error(e.message)}this.object.previousAction?.playing===!0&&this.object.previousAction.pause(),this.object.previousAction=this}play(){if(!1===Oq(this.shared,this.condition)||mr(this.eventType)&&"Once"===this.data.runMode&&this.hasPlayedOnce||(this.hasPlayedOnce=!0,this.playing))return!1;clearTimeout(this.timeoutId);let e=OP(this.data.tweens[0].data).pingPongDelayCorrection;this.timeoutId=window.setTimeout(()=>{try{this.buildTimeline(),this.timeline.play()}catch(e){e instanceof Error&&console.error(e.message)}},this.startOnceDelay+e)}pause(){this.timeline?.pause(),clearTimeout(this.timeoutId),this.tweens=Array(this.data.tweens.length-1),delete this.timeoutId}stop(){this.pause();let e=void 0===this.data.tweens[0].data.state?this.initialCurrentState:this.data.tweens[0].data.state;this.object instanceof TY?this.object.changeSelectedState(e,{shared:this.shared}):this.object.changeSelectedState(e,{scene:this.page.scene,shared:this.shared}),this.object.currentState=e}seek(e){if(!1===Oq(this.shared,this.condition))return!1;void 0===this.timeline&&this.buildTimeline(),this.timeline?.seek(e*this.timeline.duration,!0)}toggle(e){if(!1===Oq(this.shared,this.condition))return!1;clearTimeout(this.timeoutId),this.toggleIsForward=e??!this.toggleIsForward,this.playing?(this.timeline?.pause(),this.buildTimeline({isForward:this.toggleIsForward,needsRebuild:!0}),this.timeline.play()):this.timeoutId=window.setTimeout(()=>{this.timeline?.pause(),this.buildTimeline({isForward:this.toggleIsForward}),this.timeline.play()},this.startOnceDelay)}playFromCurrent(){this.toggle(!0)}reverseFromCurrent(){this.toggle(!1)}dispose(){this.pause()}};function OL(e,t){let i,r;if("string"==typeof t?(i=t,r=e.states?.[i]):null===t&&(i=null,r=e.data),!(void 0===i||void 0===r))return{id:i,data:r}}var OB={type:"beginState"},Oz={type:"completeState",isfromEntity:!1},OF={type:"requestRender"},ON=class extends tL{constructor(e,t,i,r){super(),this.data=e,this.page=t,this.shared=i,this.condition=r,this.toggleIsForward=!1,this.posStart=new iv,this.posEnd=new iv,this.qStart=new ig,this.qEnd=new ig,this.zoomStart=1,this.zoomEnd=1}init(){}get playing(){return this.animation&&this.animation.began&&!this.animation.completed}buildAnimation(e=!1){if(!this.data.animate)return;let t=this.page.scene.find(this.data.targetCamera);if(!t||!t.visible)throw ReferenceError("Target camera not founded or not visible");let i={t:0};this.posStart.copy(this.page.activeCamera.position),this.qStart.copy(this.page.activeCamera.quaternion),this.zoomStart=this.page.activeCamera.zoom,this.animation=Oo({targets:i,t:1,...OT(this.data),update:()=>{0===i.t&&("Toggle"!==this.data.runMode||this.toggleIsForward?(this.posEnd.copy(t.position),this.qEnd.copy(t.quaternion),this.zoomEnd=t.zoom,this.fromCamera=this.page.activeCamera,this.switchCamera(t.uuid)):this.fromCamera&&(this.posEnd.copy(this.fromCamera.position),this.qEnd.copy(this.fromCamera.quaternion),this.zoomEnd=this.fromCamera.zoom,this.switchCamera(this.fromCamera.uuid)),this.page.activeCamera.dispatchEvent(OB));let e=this.page.activeCamera;e.position.lerpVectors(this.posStart,this.posEnd,i.t),e.quaternion.slerp
8404Quaternions(this.qStart,this.qEnd,i.t),e.zoom=this.zoomStart+(this.zoomEnd-this.zoomStart)*i.t,e.wasMovedBySwitchCameraAction=!0,e.updateMatrix(),e.updateMatrixWorld(),e.updateProjectionMatrix(),e.dispatchEvent(OF),1===i.t&&e.dispatchEvent(Oz)}})}switchCamera(e){let t=this.page.activeCamera,i=this.page.scene.find(e);if(!i||!i.visible)throw ReferenceError("Target camera not founded or not visible");this.page.switchActiveCamera(i),t.dispatchEvent({type:"cameraChange",camera:i})}play(){if(!1===Oq(this.shared,this.condition))return!1;if(!this.playing&&this.page.activeCamera.uuid!==this.data.targetCamera)try{clearTimeout(this.timeoutId),this.timeoutId=window.setTimeout(()=>{delete this.timeoutId,this.data.animate?(this.buildAnimation(),this.animation?.play()):this.switchCamera(this.data.targetCamera)},1e3*this.data.delay)}catch{}}pause(){this.animation?.pause(),clearTimeout(this.timeoutId),delete this.timeoutId}toggle(e){if(!1===Oq(this.shared,this.condition))return!1;if(window.clearTimeout(this.timeoutId),delete this.timeoutId,e!==this.toggleIsForward)try{this.playing?(this.animation?.pause(),this.toggleIsForward=e??!this.toggleIsForward,this.buildAnimation(!0),this.animation?.play()):this.timeoutId=window.setTimeout(()=>{this.toggleIsForward=e??!this.toggleIsForward,this.data.animate?(this.animation?.pause(),this.buildAnimation(),this.animation?.play()):(this.toggleIsForward?(this.fromCamera=this.page.activeCamera,this.switchCamera(this.data.targetCamera)):this.fromCamera&&this.switchCamera(this.fromCamera.uuid),this.page.activeCamera.dispatchEvent(Oz),this.page.activeCamera.dispatchEvent(OF))},1e3*this.data.delay)}catch{}}playFromCurrent(){this.toggle(!0)}reverseFromCurrent(){this.toggle(!1)}dispose(){this.pause(),this.toggleIsForward=!1}};function Ok(e){let t=e?.tracks.filter(e=>"vector"===e.ValueTypeName||"quaternion"===e.ValueTypeName).map(e=>e.times.length);if(t?.length){let e=t&&t.length?uB(t,h1,uR):void 0;return e&&e>2?e:2}return 2}var OU=class extends tL{constructor(e,t,i,r,s){super(),this.data=e,this.page=t,this.animationControls=i,this.shared=r,this.condition=s,this.startOnceDelay=0,this.toggleIsForward=!1;let a=e.object,o=t.scene.find(e.object);o&&Array.isArray(o.identity)&&(a=o.identity[0]),this.data={...e,object:a};let l=this.animationControls.clipIdToAction[e.clipId+"/"+a];if(this.duration=l?.getClip()?.duration??1,this.data.crop2){let e=Ok(l?.getClip());this.leftFrameTime=this.data.crop2[0]/(e-1)*this.duration,this.rightFrameTime=this.data.crop2[1]/(e-1)*this.duration}else{let e=l?.getClip()?.tracks[0]?.times.length;e&&e>1?(this.leftFrameTime=this.data.crop[0]/e*this.duration,this.rightFrameTime=this.data.crop[1]/e*this.duration):(this.leftFrameTime=0,this.rightFrameTime=this.duration)}this.startOnceDelay=e.delay}get playing(){return this.threeAnimAction?.isRunning()??!1}play(e=!1){if(!1===Oq(this.shared,this.condition))return!1;window.clearTimeout(this.timeoutId),this.timeoutId=window.setTimeout(()=>{if(this.threeAnimAction=this.animationControls.play(this.data),!this.threeAnimAction)return;this.threeAnimAction.reset(),this.threeAnimAction.time=this.leftFrameTime,this.threeAnimAction._clip.start=this.leftFrameTime,this.threeAnimAction._clip.duration=this.rightFrameTime;let t=this.data.object;Object.entries(this.animationControls.clipIdToAction).forEach(([i,r])=>{let s=i.split("/")[1];this.threeAnimAction!==r&&s===t&&r.isRunning()&&(e?r.fadeOut(.2):r.stop())}),e&&this.threeAnimAction?.fadeIn(.2)},this.startOnceDelay)}pause(){this.threeAnimAction&&(this.threeAnimAction.paused=!0),window.clearTimeout(this.timeoutId),delete this.timeoutId}stop(){this.threeAnimAction?.fadeOut(.2)}seek(e){this.threeAnimAction=this.animationControls.play(this.data),this.threeAnimAction&&(this.threeAnimAction.paused=!0,this.threeAnimAction.time=tY.clamp(this.threeAnimAction.time+1/60*e,this.leftFrameTime,this.rightFrameTime-16e-5),this.animationControls.needsUpdate=!0,this.animationControls.requestRender())}toggle(e,t=!1){if(!1===Oq(this.shared,this.condition))return!1;this.toggleIsForward=e??!this.toggleIsForward,this.threeAnimAction&&(this.threeAnimAction._loopCount=0),this.playing?this.threeAnimAction&&(this.threeAnimAction.timeScale=this.toggleIsForward?1:-1,this.toggleIsForward?(this.threeAnimAction._clip.start=this.leftFrameTime,this.threeAnimAction._clip.duration=this.rightFrameTime):(this.threeAnimAction._clip.start=this.rightFrameTime,this.threeAnimAction._clip.duration=this.leftFrameTime)):this.timeoutId=window.setTimeout(()=>{if(this.threeAnimAction=this.animationControls.play(this.data),this.threeAnimAction){this.toggleIsForward?(this.threeAnimAction.time=this.leftFrameTime,this.threeAnimAction._clip.start=this.leftFrameTime,this.threeAnimAction._clip.duration=this.rightFrameTime):(this.threeAnimAction.time=this.rightFrameTime,this.threeAnimAction._clip.start=this.rightFrameTime,this.threeAnimAction._clip.duration=this.leftFrameTime),this.threeAnimAction.paused=!1,this.threeAnimAction.timeScale=this.toggleIsForward?1:-1;let e=this.data.clipId.split("/")[1];
vendor: 4,213 bytes, line 8404
8404Object.entries(this.animationControls.clipIdToAction).forEach(([i,r])=>{let s=i.split("/")[1];this.threeAnimAction!==r&&s===e&&r.isRunning()&&(t?r.fadeOut(.2):r.stop())}),t&&this.threeAnimAction?.fadeIn(.2)}},this.startOnceDelay)}playFromCurrent(){this.toggle(!0)}reverseFromCurrent(){this.toggle(!1)}dispose(){let e=this.animationControls.clipIdToAction[this.data.clipId+"/"+this.data.object]?.getClip();e&&(e.duration=this.duration),this.pause()}},OV=class{constructor(e,t,i,r,s){this.data=e,this.page=t,this.eventManager=i,this.shared=r,this.condition=s,this.timeOutId=-1,this.scene=t.scene}dispatch(){if(!1===Oq(this.shared,this.condition))return!1;this.data.target!==this.page.uuid&&(window.clearTimeout(this.timeOutId),this.timeOutId=window.setTimeout(()=>{this.play()},1e3*this.data.delay))}dispose(){window.clearTimeout(this.timeOutId)}play(){if(this.scene.children.every(e=>e.uuid!==this.data.target||e.data.uiScene))return;"fade"===this.data.transition&&this.data.duration>0&&this.eventManager.eventContext.renderer.renderFromSceneForSceneTransitionPass(this.scene,this.scene.activeCamera,1e3*this.data.duration),this.eventManager.deactivate(),this.eventManager.controlsManager.deactivate();let e=this.scene.activeCamera;this.scene.updatePage(this.data.target),this.scene.traverseVisibleEntity(e=>{"ParticleSystem"===e.type&&(e.sleep(),e.wakeUp(),e.data.autoPlay?e.start():e.stop())}),this.scene.activePage.switchToPlayCamera(),this.scene.activeCamera.copyViewPlaneSize(e),OM(this.scene.activePage,this.shared),this.eventManager.activate(),this.eventManager.controlsManager.activate(this.eventManager)}},Oj=class{constructor(e,t,i,r){this.data=e,this.page=t,this.shared=i,this.condition=r,this.evaluatedCondition=!1}checkConditions(){this.evaluatedCondition=Oq(this.shared,this.condition)}dispatch(){if(!1===this.evaluatedCondition)return!1;let e=this.shared.getVariable(this.data.variableId),t=wV(this.data.expression,this.shared,yg.typeOfVariable(e));void 0!==t&&this.shared.updateVariable(this.data.variableId,"string"==typeof t?{textValue:t}:t)}dispose(){}},OG=class{constructor(e,t,i,r){this.data=e,this.page=t,this.shared=i,this.condition=r,this.timeoutId=null}dispatchInner(){if(!1===Oq(this.shared,this.condition))return!1;let e=this.shared.getDynamicVariablePlayState(this.data.variableId);if("PlayPause"===this.data.mode)void 0===this.shared.getDynamicVariableToggleIsForward(this.data.variableId)&&this.shared.setDynamicVariableToggleIsForward(this.data.variableId,!0),this.shared.setDynamicVariablePlayState(this.data.variableId,"Playing"===e?"Paused":"Playing");else if("Play"===this.data.mode&&"Playing"!==e)void 0===this.shared.getDynamicVariableToggleIsForward(this.data.variableId)&&this.shared.setDynamicVariableToggleIsForward(this.data.variableId,!0),this.shared.setDynamicVariablePlayState(this.data.variableId,"Playing");else if("Stop"===this.data.mode&&"Stopped"!==e)this.shared.setDynamicVariablePlayState(this.data.variableId,"Stopped");else if("Pause"===this.data.mode&&"Paused"!==e)this.shared.setDynamicVariablePlayState(this.data.variableId,"Paused");else if("Restart"===this.data.mode)this.shared.setDynamicVariablePlayState(this.data.variableId,"Restarted");else if("Toggle"===this.data.mode){let t=this.shared.getDynamicVariableToggleIsForward(this.data.variableId);"Playing"===e?this.shared.setDynamicVariableToggleIsForward(this.data.variableId,void 0!==t&&!t):(this.shared.setDynamicVariableToggleIsForward(this.data.variableId,!t),this.shared.setDynamicVariablePlayState(this.data.variableId,"Playing"))}}dispatch(){let e=this.data.delay,t=this.shared.getDynamicVariablePlayState(this.data.variableId);"PlayPause"===this.data.mode&&"Playing"===t&&(e=this.data.pauseDelay),0!==e?(this.timeoutId&&window.clearTimeout(this.timeoutId),this.timeoutId=window.setTimeout(()=>{this.timeoutId=null,this.dispatchInner()},e)):this.dispatchInner()}dispose(){this.timeoutId&&window.clearTimeout(this.timeoutId)}},OH=class{constructor(e,t,i,r){this.data=e,this.page=t,this.shared=i,this.condition=r}dispatch(){if(!1===Oq(this.shared,this.condition))return!1;("single"===this.data.target?this.data.variableId?[this.data.variableId]:[]:Object.keys(this.shared.getVariables())).forEac
8404h(e=>{this.shared.getVariable(e);let t=this.shared.data.variables.data(e)?.value;void 0!==t&&this.shared.updateVariable(e,t),this.shared.enableLocalStorageForPersistentVariables&&localStorage.removeItem(Md(e))})}dispose(){}},OW=class{constructor(e,t,i,r){this.data=e,this.page=t,this.shared=i,this.condition=r}dispatch(){if(!1===Oq(this.shared,this.condition))return!1;this.data.userAPIId&&this.shared.getUserAPI(this.data.userAPIId)?.callUserAPI(this.shared)}dispose(){}};function Oq(e,t){if(void 0===t)return!0;if(0===t.expression.length)return!1;let i=wV(t.expression,e,"boolean");return t.negate?!i:!!i}function OX(e,t,i,r,s,a){let o={Audio:[],Video:[],Particles:[],Link:[],Destroy:[],Create:[],Reset:[],Transition:[],SwitchCamera:[],Animation:[],SceneTransition:[],SetVariable:[],DynamicVariablePlay:[],ClearLocalStorage:[],UserAPI:[]},l=t=>({id:h,data:c})=>{try{"Audio"===c.type?ml[e.type].includes("Audio")&&o.Audio.push(new Im(h,c,a,r,t)):"Video"!==c.type||a instanceof TY?"Particles"===c.type?ml[e.type].includes("Particles")&&o.Particles.push(new Ig(c,i,r,t)):"Link"===c.type?ml[e.type].includes("Link")&&o.Link.push(new Ix(c,s.controlsManager,r,t)):"Create"===c.type?ml[e.type].includes("Create")&&o.Create.push(new O5(c,i,s.controlsManager,r,t)):"Destroy"===c.type?ml[e.type].includes("Destroy")&&o.Destroy.push(new Ib(c,i,s.controlsManager,r,t)):"Reset"===c.type?ml[e.type].includes("Reset")&&o.Reset.push(new Iw(c,i,r,s,t)):"Transition"===c.type?ml[e.type].includes("Transition")&&o.Transition.push(new OR(e.type,c,i,r,t)):"SwitchCamera"===c.type?ml[e.type].includes("SwitchCamera")&&o.SwitchCamera.push(new ON(c,i,r,t)):"SceneTransition"===c.type?ml[e.type].includes("SceneTransition")&&o.SceneTransition.push(new OV(c,i,s,r,t)):"Animation"===c.type?ml[e.type].includes("Animation")&&o.Animation.push(new OU(c,i,s.animationControls,r,t)):"SetVariable"===c.type?ml[e.type].includes("SetVariable")&&o.SetVariable.push(new Oj(c,i,r,t)):"DynamicVariablePlay"===c.type?ml[e.type].includes("DynamicVariablePlay")&&o.DynamicVariablePlay.push(new OG(c,i,r,t)):"Conditional"===c.type?ml[e.type].includes("Conditional")&&(c.ifActions.forEach(l({expression:c.condition,negate:!1})),c.elseActions.forEach(l({expression:c.condition,negate:!0}))):"ClearLocalStorage"===c.type?ml[e.type].includes("ClearLocalStorage")&&o.ClearLocalStorage.push(new OH(c,i,r,t)):"UserAPI"===c.type&&ml[e.type].includes("UserAPI")&&o.UserAPI.push(new OW(c,i,r,t)):ml[e.type].includes("Video")&&o.Video.push(new O$(h,c,a,r,t))}catch(e){}};return t.forEach(l()),o}function OY(e){Object.values(e).forEach(e=>{e.forEach(e=>{(e instanceof Im||e instanceof O$||e instanceof Ig||e instanceof OU||e instanceof OR||e instanceof O5||e instanceof Ib||e instanceof ON||e instanceof OV||e instanceof Iw||e instanceof Oj||e instanceof OG)&&e.dispose()})})}var OQ=new Map,OK=new Map,OZ=class{constructor(e,t,i){this.data=t,this.delay=0,this.status="stopped";let{layerId:r,loop:s,volume:a,delay:o}=t;if(this.object=i,void 0===r)throw Error("Missing property");let l=function(e,t){let i;if("material"in e&&(i=Array.isArray(e.material)?e.material[0].layers.find(e=>e.uuid===t):e.material.layers.find(e=>e.uuid===t)),i)return i.color.texture.image.img instanceof HTMLVideoElement?i.color.texture.image.img:void 0}(i,r);l&&(this.videoElement=l,this.videoElement.loop=s===1/0,uX&&(this.videoElement.autoplay=!0),void 0!==a&&(this.videoElement.volume=a)),void 0!==o&&(this.delay=o),OK.has(i.uuid)?OK.get(i.uuid).push(this):OK.set(i.uuid,[this]),OQ.set(e,this),this.pause()}mute(){this.videoElement&&(this.videoElement.muted=!0)}unMute(){this.videoElement&&(this.videoElement.muted=!1)}play(e){if(!this.videoElement)return;let t=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);e?(this.mute(),this.delay+=150):t?(this.mute(),window.setTimeout(()=>{this.unMute()},100)):this.unMute(),this.delayTimerId=window.setTimeout(()=>{if(!this.videoElement)return;let e=this.videoElement.play();void 0!==e&&e.then(e=>{}).catch(e=>{this.play()}),this.clearDelay()},this.delay),this.status="playing"}clearDelay(){this.delayTimerId&&(clearTimeout(this.delayTimerId),delete this.delayTimerId)}pause(){this.videoElement&&(this.videoElement.pause(),this.status="paused")}stop(){this.videoElement&&(this.videoElement.pause(),this.videoElement.currentTime=0,this.status="stopped",this.clearDelay())}
8404playByToggle(){"stop"===this.data.toggle?"playing"===this.status?this.stop():(this.stop(),this.play()):"pause"===this.data.toggle?"playing"===this.status?this.pause():this.play():(this.stop(),this.play())}dispose(){this.videoElement&&(this.stop(),this.videoElement.muted=!0)}},OJ=class{constructor(e){this.data=e}dispatch(){this.data.playVideo?this.pauseVideo(this.data.playVideo):this.data.object?this.pauseAllVideosFromObject(this.data.object):this.pauseAllVideos()}pauseVideo(e){let t=OQ.get(e);t&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{t[this.data.interaction](),this.disposeDelay()},this.data.delay)):t[this.data.interaction]())}pauseAllVideosFromObject(e){let t=OK.get(e);t?.length&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{t.forEach(e=>e[this.data.interaction]()),this.disposeDelay()},this.data.delay)):t.forEach(e=>e[this.data.interaction]()))}pauseAllVideos(){let e=[...OK.values()];e.length&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{e.forEach(e=>{e.forEach(e=>{e[this.data.interaction]()})}),this.disposeDelay()},this.data.delay)):e.forEach(e=>{e.forEach(e=>{e[this.data.interaction]()})}))}disposeDelay(){clearTimeout(this.timeoutId),delete this.timeoutId}dispose(){clearTimeout(this.timeoutId),delete this.timeoutId}},O$=class{constructor(e,t,i,r,s){if(this.data=t,this.shared=r,this.condition=s,"play"===t.interaction)this.interaction=new OZ(e,t,i);else if("pause"===t.interaction||"stop"===t.interaction)this.interaction=new OJ(t);else throw Error("Missing property")}dispatchBasic(){if(!1===Oq(this.shared,this.condition))return!1;this.interaction instanceof OZ?this.interaction.playByToggle():this.interaction.dispatch()}dispatchConditional(){if(!1===Oq(this.shared,this.condition))return!1;this.interaction instanceof OZ?this.interaction.play():this.interaction.dispatch()}dispose(){this.interaction.dispose()}},O0=(()=>{let e,t,i,r;function s(i){!e&&!O1()&&t?.sharedGameControlGlobals.createdObjects.length>0&&(e=requestAnimationFrame(a)),i&&(t=i,r=i.requestRender)}function a(s){let o=i?s-i:0,l=t.sharedGameControlGlobals.createdObjects,h=t.sharedGameControlGlobals.nCreatedPerAction,c=l.length,d=0;for(;d<c;){let e=l[d];void 0===e.userData.createdTime&&(e.userData.createdTime=s),void 0===e.userData.lifetime&&void 0===e.userData.quantity||e.userData.lifetime&&s-e.userData.createdTime<e.userData.lifetime||e.userData.quantity&&h[e.userData.actionId]<=e.userData.quantity?(e.userData.velocity&&(e.position.addScaledVector(e.userData.velocity,o/1e3),e.updateMatrix(),r()),d++):(h[e.userData.actionId]>e.userData.quantity&&h[e.userData.actionId]--,l.splice(d,1),e.removeFromParent(),t.sharedGameControlGlobals.rapierWorld&&e.rigidBody?(t.sharedGameControlGlobals.colliderToEntity.delete(e.rigidBody.collider(0).handle),t.sharedGameControlGlobals.rapierWorld.removeRigidBody(e.rigidBody)):(e.bvhGeometry=void 0,t.sharedGameControlGlobals.entitiesWithTransformAnim=t.sharedGameControlGlobals.entitiesWithTransformAnim.filter(e=>void 0!==e.bvhGeometry)),c--,r())}e=d>0?requestAnimationFrame(a):void 0,i=d>0?s:void 0}return"u">typeof document&&document.addEventListener("visibilitychange",function(){O1()?e&&(cancelAnimationFrame(e),e=void 0,i=void 0):s()}),s})();function O1(){return!!document&&document.hidden}var O2=new ig,O3=new iv,O4=new iv,O5=class{constructor(e,t,i,r,s){this.data=e,this.page=t,this.controlsManager=i,this.shared=r,this.condition=s,this.intervalId=null,this.timeoutIdQueue=[],this.uniqueId=tY.generateUUID(),this.dispatch=()=>{if(!1===Oq(this.shared,this.condition))return!1;this.data.delay?this.timeoutIdQueue.push(window.setTimeout(this.dispatchInner,1e3*this.data.delay)):this.dispatchInner()},this.dispatchFromStart=()=>{if(!1===Oq(this.shared,this.condition))return!1;this.timeoutIdQueue.push(window.setTimeout(this.dispatchInner,1e3*this.data.delay))},this.dispatchThrottled=uj(this.dispatch,1e3/this.data.creationSpeed),this.dispatchStart=()=>{null===this.intervalId&&(this.intervalId=window.setInterval(this.dispatch,1e3/this.data.creationSpeed))},this.dispatchStop=()=>{null!==this.intervalId&&(window.clearInterval(this.intervalId),this.intervalId=null)},this.dispatchInner=()=>{this.timeoutIdQueue.shift();let e=new xb(this.object);if(e.playModeVisible=!0,e.expand(),"world"!==this.data.coordinateSystem){let t=this.data.coordinateSystem,i=this.page.scene.find(t);i&&(i.updateMatrixWorldSVD(),e.hiddenMatrix.copy(i.matrixWorldRigid))}e.scale.copy(this.object.scale),e.position.fromArray(this.data.position),e.rotation.fromArray(this.data.rotation),e.updateMatrix(),this.page.add(e);let t=this.controlsManager.sharedGameControlGlobals;t.createdObjects.push(e),void 0===t.nCreatedPerAction[this.uniqueId]?t.nCreatedPerAction[this.uniqueId]=1:t.nCreatedPerAction[this.uniqueId]++,e.updateWorldMatrix(!0,!0),e.traverseObject(this.traverseObjectCB),O0(),this.controlsManager.requestRender()},this.traverseObjectCB=e=>{let t;if(e.hasNonUniformScale&&e.updateMatrixWorldSVD(),this.controlsManager.sharedGameControlGlobals.rapierWorld){if(e instanceof M9){if(!e.objectForSample)return!0===e.object.dataPatched.physics.fusedBody&&"dynamic"===e.object.dataPatched.physics.rigidBody||void 0;if(e.objectForSample.dataPatched.physics.fusedBody)return;t=e.object}else if(e instanceof xb)t=e.object;else if(t=e,t.dataPatched.cloner?.hideBase)return!0}else{if(e instanceof M9)return;t=e instanceof xb?e.object:e}"Time"===this.data.destroy?e.userData.lifetime=1e3*this.data.lifetime:"Quantity"===this.data.destroy&&(e.userData.quantity=this.data.destroyAfterQuantity,e.userData.actionId=this.uniqueId);let i=new iv().fromArray(this.data.velocity),r=t.dataPatched;
8404if(!("visibility"===r.physics.enabled?!r.visible:!r.physics.enabled)&&(this.controlsManager.sharedGameControlGlobals.rapierWorld?(this.controlsManager.addRigidBody(e,t,{fromCreate:!0,dynamic:this.data.dynamic}),"Collision"===this.data.destroy&&(e.rigidBody?.collider(0).setActiveEvents(1),e.userData.hasCollisionDestroy=!0),e.matrixWorld.decompose(O3,O2,O4),i.applyQuaternion(O2),this.data.velocity.some(e=>0!==e)&&this.data.dynamic&&e.rigidBody?.setLinvel(i.divideScalar(this.controlsManager.pixelsPerMeter),!0)):("geometry"in e.object&&this.controlsManager.addBoundsTree(e),this.data.velocity.some(e=>0!==e)&&this.data.dynamic&&(e.userData.velocity=i)),t.dataPatched.physics?.fusedBody===!0))return!0};let a=this.page.scene.find(this.data.object);if(!a||(this.object=a,"world"!==this.data.coordinateSystem&&!this.page.scene.find(this.data.coordinateSystem)))throw Error("Missing Property");O0(i)}dispose(){null!==this.intervalId&&(window.clearInterval(this.intervalId),this.intervalId=null),this.timeoutIdQueue.forEach(e=>window.clearTimeout(e)),this.dispatchThrottled.cancel(),this.page.remove(...this.controlsManager.sharedGameControlGlobals.createdObjects),this.controlsManager.sharedGameControlGlobals.createdObjects=[]}};new iv;var O6=new iv,O8=new iv,O9=new iv,O7=new iv,Re=new iv,Rt=new iv,Ri=new iX,Rr=new iX,Rs=new iX,Ra=(new iX,new ig),Rn=new ig,Ro=new i3(0,0,0,"YXZ"),Rl=new iv(1,0,0),Rh=new iv(0,1,0),Rc=new iv(0,0,1),Rd=new iv(1,1,1),Ru=(new iN,new lk),Rp=new ib,Rf={type:"requestRender"},Rm={type:"updateMatrix"},Rg=Math.PI/6,Rv=class extends tL{constructor(e,t,i,r,s,a,o,l,h){super(),this.object=e,this.domElement=t,this.data=i,this.gloabalPhysics=r,this.controlsManager=s,this.cameraFollow=a,this.camera=o,this.page=l,this.sharedAssets=h,this.enableDamping=!0,this.hiddenMatrix0=new iX,this.target0=new iv,this.zoom0=1,this.rotForce=1,this.moveForce=1,this.pixelsPerMeter=200,this.euler0=new i3(0,0,0,"YXZ"),this.position0Cam=new iv,this.quat0Cam=new ig,this.scale0Cam=new iv,this.hiddenMatrix0Cam=new iX,this.threshEndTranslate=.01,this.threshEndRotate=1e-8,this.threshEndRotVel=.005,this.collider={type:"capsule",radius:40,segment:new lk(new iv(0,-40,0),new iv(0,40,0)),matrix:new iX,position:new iv,rotation:new ig},this.euler=new i3(0,0,0,"YXZ"),this.eulerDelta=new iv,this.lastPosition=new iv,this.lastCameraQuaternion=new ig,this.lastCameraPosition=new iv,this.PI_2=Math.PI/2,this.prevMouse=new tQ,this.velocityTarget=new iv,this.velocity=new iv,this.directionXZ=new iv,this.rotVelocityStick=new iv,this.rotVelocityTarget=new iv,this.rotVelocity=new iv,this.rotDirection=new iv,this.nonColliderRotOffset=new iX,this.nonColliderPosOffset=new iX,this.firstPointerId=-1,this.rot=new iv,this.path=[],this.movementState={moveNegZ:0,movePosZ:0,moveNegX:0,movePosX:0,moveNegY:0,movePosY:0,rotPosX:0,rotNegX:0,rotPosY:0,rotNegY:0,jump:0,run:0},this.vrEulerYOffset=0,this.onObject=!1,this.actionState={},this.keyAssignments=[["moveNegZ","W"],["moveNegX","A"],["movePosZ","S"],["movePosX","D"],["rotPosX","ArrowUp"],["rotPosY","ArrowLeft"],["rotNegX","ArrowDown"],["rotNegY","ArrowRight"],["jump"," "]],this.collisionEnabled=!0,this.offsetMatrix=new iX,this.objectToTarget=new iv,this.objectToTarget0=new iv,this.objectToCamXZ=new iv,this.objectToCamXZ0=new iv,this.targetToCamera=new iv,this.targetToCamera0=new iv,this.cameraPolarAxis0=new iv,this.targetPos=new iv,this.targetQuat=new ig,this.lerpFactorPos=new iv().setScalar(.3),this.lerpFactorPosStart=.3,this.lerpFactorPosEnd=.3,this.lerpFactorRotStart=.3,this.lerpFactorRotEnd=.3,this.lerpFactorPosCamera=.3,this.lerpFactorRotCamera=.3,this.objXZQuat=new ig,this.objXZQuatInv=new ig,this.objXZRotMat=new iX,this.isFirstPerson=!1,this.didHit=!1,this.groundVelocity=new iv,this.pushedVelocity=new iv,this.groundYRotation=0,this.objectRealQuat=new ig,this.colliderWorldQuat=new ig,this.groundNormal=new iv,this.groundTilt=new ig,this.groundTiltInv=new ig,this.lastHitObj=null,this.isFirstFrame=!0,this.rotationAccumWhenOrientWithCamera=0,this.navMeshPathDest=null,this.position=new iv,this.quaternion=new ig,this.scale=new iv,this.initialAction=!0,this.onPointerDown=e=>{(e.target===this.domElement||e.target instanceof HTMLElement&&"SPLINE-VIEWER"===e.target.tagName&&e.target.shadowRoot?.contains(this.domElement))&&-1===this.firstPointerId&&(this.firstPointerId=e.pointerId,this.domElement.ownerDocument.addEventListener("pointermove",this.onPointerMove),this.domElement.ownerDocument.addEventListener("pointerup",this.onPointerUp),"keys"===this.rotBy||uQ||uK||this.domElement.requestPointerLock(),this.prevMouse.set(e.clientX,e.clientY))},this.onPointerUp=e=>{this.firstPointerId=-1,this.domElement.ownerDocument.removeEventListener("pointermove",this.onPointerMove),this.domElement.ownerDocument.removeEventListener("pointerup",this.onPointerUp),"mouse"===e.pointerType&&this.domElement.ownerDocument.exitPointerLock()},this.onPointerMove=e=>{if(e.pointerId!==this.firstPointerId)return;let t=e.clientX-this.prevMouse.x,i=e.clientY-this.prevMouse.y;this.prevMouse.set(e.clientX,e.clientY),"mouse"===e.pointerType&&"keys"!==this.rotBy&&(uK&&uZ<15.5&&!uQ?(this.eulerDelta.y=-t*this.mouseOrbitSensitivity,this.eulerDelta.x=-i*this.mouseOrbitSensitivity):(this.eulerDelta.y=-e.movementX*this.mouseOrbitSensitivity,this.eulerDelta.x=-e.movementY*this.mouseOrbitSensitivity)),"mouse"!==e.pointerType&&"drag"===this.rotByTouch&&(this.eulerDelta.y=-t*this.mouseOrbitSensitivity*5,this.eulerDelta.x=-i*this.mouseOrbitSensitivity*5),this.controlsManager.requestRender()},this.onPointerlockChange=e=>{this.domElement.ownerDocument.pointerLockElement===this.domElement?Rv.isLocked=!0:Rv.isLocked=!1},this.onPointerlockError=()=>{console.error("SPE.GameControls: Unable to use Pointer Lock API")},this.handleVisibilityChange=()=>{if(document?.hidden)for(let e in this.movementState)this.movementState[e]=0},this.onKeyDown=e=>{for(let t of(e.target instanceof HTMLInputElement||"ArrowLeft"!==e.code&&"ArrowUp"!==e.code&&"ArrowRight"!==e.code&&"ArrowDown"!==e.code&&"Space"!==e.code||e.preventDefault(),this.keyAssignments))if(e.key.toUpperCase()===t[1]||e.key===t[1]){this.movementState[t[0]]=1;break}this.controlsManager.requestRender()},this.onKeyUp=e=>{for(let t of this.keyAssignments)if(e.key.toUpperCase()===t[1]||e.key===t[1]||e.code.slice(3,e.code.length).toUpperCase()===t[1]){this.movementState[t[0]]=0;break}},this.copyVRGamePadValues=(e,t)=>{for(let i=2;i<4;i++){let r=e.axes[i];0===t?2===i?this.movementState.movePosX=r:this.movementState.movePosZ=r:(e.buttons[3].pressed?this.movementState.jump=1:this.movementState.jump=0,2===i?(.3>Math.abs(this.movementState.rotPosY)&&Math.abs(r)>=.3&&(this.vrEulerYOffset+=r<0?1:-1),this.movementState.rotPosY=r):"fly"===this.moveMode&&(this.movementState.moveNegY=r))}},this.sharedGameControlGlobals=s.sharedGameControlGlobals,e===o&&(this.isFirstPerson=!0),this.hiddenMatrix0.copy(this.object.hiddenMatrix),this.object.parent?this.object.hiddenMatrix.copy(this.object.parent.matrixWorld).invert():this.object.hiddenMatrix.identity(),this.object.matrix.copy(this.object.matrixWorld),this.object.matrix.decompose(this.position,this.quaternion,this.scale),this.euler0.setFromQuaternion(this.quaternion,"YXZ");let c=this.euler0.clone(),d=c.y;if(this.objectRealQuat.copy(this.quaternion),c.y=0,this.quaternion.setFromEuler(c),this.objXZQuat.copy(this.quaternion),this.objXZQuatInv.copy(this.objXZQuat).invert(),this.objXZ
8404RotMat.makeRotationFromQuaternion(this.quaternion),c.set(0,d,0),this.quaternion.setFromEuler(c),this.rot.setFromEuler(c),this.object.matrixAutoUpdate=!1,(this.isFirstPerson||!0===this.cameraFollow)&&(this.target0.copy(this.camera.getTarget()),this.zoom0=this.camera.zoom),!0===this.cameraFollow){let e,t;this.position0Cam.copy(this.camera.position),this.quat0Cam.copy(this.camera.quaternion),this.scale0Cam.copy(this.camera.scale),this.hiddenMatrix0Cam.copy(this.camera.hiddenMatrix),this.camera.parent?(this.camera.hiddenMatrix.copy(this.camera?.parent.matrixWorld),this.camera.matrix.copy(this.camera.matrixWorld)):this.camera.hiddenMatrix.identity(),this.camera.matrix.copy(this.camera.matrixWorld),this.camera.matrix.decompose(this.camera.position,this.camera.quaternion,this.camera.scale),this.camera.matrixAutoUpdate=!1,this.offsetMatrix.copy(this.object.matrix).invert().multiply(this.camera.matrix);let i=new iv(0,0,-1).applyQuaternion(this.camera.quaternion),r=new iv().subVectors(this.position,this.camera.position);this.objectToCamXZ.copy(r),this.objectToCamXZ.y=0,this.objectToCamXZ0.copy(this.objectToCamXZ),1e-6>Math.abs(i.y)?(r.y=0,i.y=0,t=r.projectOnVector(i)):t=r.y/i.y>0?i.multiplyScalar(r.y/i.y):i.multiplyScalar(r.length()),this.targetToCamera0.copy(t).negate(),e=this.camera.position.clone().add(t),this.objectToTarget0.subVectors(e,this.position);let s=new i3().setFromQuaternion(this.camera.quaternion,"YXZ");this.cameraPolarOffset=-s.x,s.x=0,s.z=0,s.y-=Math.PI/2,this.cameraPolarAxis0.set(0,0,-1).applyEuler(s)}if(this.object instanceof Eg&&(this.object.matrixAutoUpdate=!1),this.euler.setFromQuaternion(this.quaternion,"YXZ"),this.rotByTouch=i.rotByTouch??"joystick",this.rotBy=i.rotBy??"keys",this.rotationMode=i.rotationMode??"normal",this.moveMode=i.moveMode??"walk",this.collisionEnabled=i.collisionEnabled,this.speedTranslate=(i.speedTranslate??250)*1,this.speedOrbit=(i.speedRotate??100)*.025,this.mouseOrbitSensitivity=(i.speedRotate??100)*16e-6,this.keyAssignments=i.keyAssignments.map(e=>{let t=[e[0],e[1]];return"▲"===t[1]?t[1]="ArrowUp":"◀"===t[1]?t[1]="ArrowLeft":"▼"===t[1]?t[1]="ArrowDown":"▶"===t[1]?t[1]="ArrowRight":"⇧"===t[1]?t[1]="Shift":"↵"===t[1]?t[1]="Enter":"Space"===t[1]?t[1]=" ":"⌘"===t[1]?t[1]="Meta":"Ctrl"===t[1]?t[1]="Control":"Esc"===t[1]&&(t[1]="Escape"),t}),"mouse"===i.rotBy){let e;-1!==(e=this.keyAssignments.findIndex(e=>"rotNegX"===e[0]))&&(this.keyAssignments[e][1]=""),-1!==(e=this.keyAssignments.findIndex(e=>"rotPosX"===e[0]))&&(this.keyAssignments[e][1]=""),-1!==(e=this.keyAssignments.findIndex(e=>"rotPosY"===e[0]))&&(this.keyAssignments[e][1]=""),-1!==(e=this.keyAssignments.findIndex(e=>"rotNegY"===e[0]))&&(this.keyAssignments[e][1]="")}this.lerpFactorPosStart=1-.02**(1/((i.delayPos[0]??.3)*60)),this.lerpFactorPosEnd=1-.02**(1/((i.delayPos[1]??.3)*60)),this.lerpFactorPos.setScalar(this.lerpFactorPosStart),this.lerpFactorRotStart=1-.02**(1/((i.delayRot[0]??.3)*60)),this.lerpFactorRotEnd=1-.02**(1/((i.delayRot[1]??.3)*60)),this.lerpFactorPosCamera=1-.02**(1/((i.delayPosCamera??.3)*60)),this.lerpFactorRotCamera=1-.02**(1/((i.delayRotCamera??.3)*60)),this.gravity=(this.gloabalPhysics.gravity??vZ.defaultData.gravity)*12,this.usePhysics=this.gloabalPhysics.usePhysics??vZ.defaultData.usePhysics,this.jumpPower=20*i.jumpPower,this.resetYPosition=this.position.y+Math.abs(i.resetYPosition)*(this.gravity>0?1:-1),this.alignToGround=i.alignToGround??!1,this.orientMode=i.autoOrientMove?i.orientMode:"none",this.orientWith=i.orientWith??y_.defaultDataThirdPerson.orientWith,this.slopeThresh=65*Math.PI/180,"capsule"===i.collider.type?(this.collider.radius=i.collider.radius,this.collider.segment.start.y=i.collider.height/2-i.collider.radius,this.collider.segment.end.y=-this.collider.segment.start.y,this.offset=.02*i.collider.height/this.pixelsPerMeter,this.stepThresh=.3*i.collider.height/this.pixelsPerMeter,this.colliderHeight=i.collider.height):"sphere"===i.collider.type?(this.collider.radius=i.collider.radius,this.collider.segment.start.y=0,this.collider.segment.end.y=0,this.offset=2*i.collider.radius*.02/this.pixelsPerMeter,this.stepThresh=2*i.collider.radiu
8404s*.3/this.pixelsPerMeter,this.colliderHeight=2*i.collider.radius):(this.offset=.02*i.collider.height/this.pixelsPerMeter,this.stepThresh=.3*i.collider.height/this.pixelsPerMeter,this.colliderHeight=i.collider.height),this.collider.type=i.collider.type;let u=new iv().fromArray(i.collider.position),p=new ig().setFromEuler(new i3().fromArray([...i.collider.rotation,"XYZ"]));this.collider.position.copy(u).multiply(this.scale),this.collider.rotation.copy(p),this.collider.matrix.compose(u,p,Rd),void 0!==i.cameraXAxis&&(this.cameraXAxis=i.cameraXAxis,this.cameraYAxis=i.cameraYAxis,this.minPolarAngle=i.cameraRotXLimits[0],this.maxPolarAngle=i.cameraRotXLimits[1],this.minAzimuthAngleRel=i.cameraRotYLimits[0],this.maxAzimuthAngleRel=i.cameraRotYLimits[1]),this.forwardDir=i.forwardDirection??"-z",this.isFirstPerson&&(this.forwardDir="-z"),this.runMultiplier=i.runMultiplier??2;let f=2*i.navmesh.destinationHelperRadius;if(f>0){let e=new px;e.push({fi:0,data:{...gM.defaultData("light","phong"),alpha:0},id:"layer1"}),e.push({fi:0,data:{...gM.defaultData("color"),color:i.navmesh.destinationHelperColor,alpha:i.navmesh.destinationHelperColor.a},id:"layer2"});let t=new AP({layers:e},{scene:this.page.scene,shared:this.sharedAssets});this.navMeshPathDest=new rK(xU.create({parameters:{width:f,height:f/10,hollow:.7}}),t),this.navMeshPathDest.material.userData.opacity0=i.navmesh.destinationHelperColor.a}this.activate()}reset(e=!1){if(this.object.hiddenMatrix.copy(this.hiddenMatrix0),e){this.object.updateMatrix(),this.object.updateMatrixWorld(),this.object.matrix.copy(this.object.matrixWorld),this.object.matrix.decompose(this.position,this.quaternion,this.scale),this.object.parent?this.object.hiddenMatrix.copy(this.object.parent.matrixWorld).invert():this.object.hiddenMatrix.identity();let e=new i3().setFromQuaternion(this.quaternion,"YXZ"),t=e.y;this.objectRealQuat.copy(this.quaternion),e.y=0,this.quaternion.setFromEuler(e),this.objXZQuat.copy(this.quaternion),this.objXZQuatInv.copy(this.objXZQuat).invert(),this.objXZRotMat.makeRotationFromQuaternion(this.quaternion),e.set(0,t,0),this.quaternion.setFromEuler(e),this.rot.setFromEuler(e),this.euler.setFromQuaternion(this.quaternion,"YXZ"),this.velocityTarget.set(0,0,0),this.velocity.set(0,0,0)}else this.object instanceof Eg?this.object.matrixAutoUpdate=!0:this.object.updateMatrix();!0===this.cameraFollow&&(this.camera.quaternion.copy(this.quat0Cam),this.camera.position.copy(this.position0Cam),this.camera.scale.copy(this.scale0Cam),this.camera.hiddenMatrix.copy(this.hiddenMatrix0Cam),this.camera.matrixAutoUpdate=!0),this.controlsManager.requestRender()}activate(){this.instantiateActions(),this.domElement.ownerDocument.addEventListener("pointerdown",this.onPointerDown),this.domElement.ownerDocument.addEventListener("keydown",this.onKeyDown),this.domElement.ownerDocument.addEventListener("keyup",this.onKeyUp),this.domElement.ownerDocument.addEventListener("pointerlockchange",this.onPointerlockChange),this.domElement.ownerDocument.addEventListener("pointerlockerror",this.onPointerlockError),this.domElement.ownerDocument.addEventListener("visibilitychange",this.handleVisibilityChange)}deactivate(){this.disposeActions(),this.domElement.ownerDocument.removeEventListener("pointerdown",this.onPointerDown),this.domElement.ownerDocument.removeEventListener("keydown",this.onKeyDown),this.domElement.ownerDocument.removeEventListener("keyup",this.onKeyUp),this.domElement.ownerDocument.removeEventListener("pointerlockchange",this.onPointerlockChange),this.domElement.ownerDocument.removeEventListener("pointerlockerror",this.onPointerlockError),this.domElement.ownerDocument.removeEventListener("visibilitychange",this.handleVisibilityChange)}dispose(){this.deactivate(),this.navMeshPathDest?.parent&&this.page.remove(this.navMeshPathDest)}instantiateActions(){let e=this.data,t=this.sharedAssets;void 0!==e.gameActions&&(this.actions={},yS.list.forEach(i=>{this.actions[i]=OX({...e,disabled:!1,type:"GameControl"},e.gameActions[i],this.page,t,this.controlsManager.eventManager,this.object)})),this.dispatchStopEvent("move"),this.dispatchStopEvent("run"),this.dispatchStopEvent("jump"),this.dispatchStartEvent("idle"),this.initialAction&&(this.initialAction=!1)}disposeActions(){this.initialAction=!1,this.dispatchStopEvent("idle"),this.dispatchStopEvent("move"),this.dispatchStopEvent("run"),this.dispatchStopEvent("jump"),OY(this.actions.idle),OY(this.actions.move),OY(this.actions.run),OY(this.actions.jump)}dispatchStartEvent(e){void 0!==this.actions[e]&&(this.actionState[e]||(this.actionState[e]=!0,this.actions[e].Transition.forEach(e
8404=>{e.play()}),this.actions[e].Animation.forEach(e=>{e.play(!1===this.initialAction)}),this.actions[e].Create.forEach(e=>{e.dispatchStart()}),this.actions[e].Audio.forEach(e=>{e.dispatchGameControl("start")}),this.actions[e].Particles.forEach(e=>{e.dispatchGameControl("start")})))}dispatchStopEvent(e){void 0===this.actions[e]||this.actionState[e]&&(this.actionState[e]=!1,this.actions[e].Transition.forEach(e=>{e.stop(),null!==e.object.currentState&&e.object.changeSelectedState(null,{scene:this.page.scene,shared:this.sharedAssets})}),this.actions[e].Create.forEach(e=>{e.dispatchStop()}),this.actions[e].Audio.forEach(e=>{e.dispatchGameControl("stop")}),this.actions[e].Particles.forEach(e=>{e.dispatchGameControl("stop")}))}get colliderWorldPosition(){return O7.copy(this.collider.position).applyQuaternion(this.objectRealQuat).add(this.position)}update(e,t,i){if(this.gravity<0?this.position.y<this.resetYPosition:this.position.y>this.resetYPosition)return this.reset(!0),!0;this.sharedGameControlGlobals.gamePads.forEach(this.copyVRGamePadValues);let r=(this.isFirstFrame?16.6:e)/1e3;this.isFirstFrame&&(this.isFirstFrame=!1);let s=60*r,a=!1;if(this.usePhysics&&this.collisionEnabled){let e=Re.set(0,(0===this.velocity.y?this.pixelsPerMeter*Math.max(Math.abs(this.gravity)/120,1)*(this.gravity>0?1:-1):this.velocity.y)*r,0).divideScalar(this.pixelsPerMeter),t=this.sharedGameControlGlobals.rapierWorld.castShape(this.colliderWorldPosition.divideScalar(this.pixelsPerMeter),this.colliderWorldQuat,e,this.object.rigidBody?.collider(0).shape,1,!1,16,void 0,void 0,this.object.rigidBody);if(t){this.onObject=!0,this.groundNormal.set(t.normal2.x,t.normal2.y,t.normal2.z).applyQuaternion(this.colliderWorldQuat).negate(),this.alignToGround&&this.groundTiltAdjustment(this.groundNormal),Math.acos(this.groundNormal.y)<this.slopeThresh&&(a=!0),t.collider.parent()?.bodyType()===0&&Math.acos(this.groundNormal.y)*(180/Math.PI)>45&&(this.onObject=!1);let e=t.collider.parent();for(let t of(this.groundYRotation=0,this.groundVelocity.set(0,0,0),this.sharedGameControlGlobals.entitiesWithTransformAnim))if(t.rigidBody===e&&t.userData.isFollowingObj!==this.object.uuid){(t.hasNonUniformScale?t.matrixWorldRigid:t.matrixWorld).decompose(O7,Rn,Re),this.groundVelocity.subVectors(O7,t.prevT),this.object.getWorldPosition(Re).add(this.collider.position).sub(O7),this.groundYRotation=Ro.setFromQuaternion(Rn).y-t.prevR.y,Rt.copy(Re).applyAxisAngle(Rh,this.groundYRotation),this.groundVelocity.add(Rt.sub(Re)).divideScalar(r);break}}else this.onObject=!1}if("walk"===this.moveMode&&this.collisionEnabled&&(1===this.movementState.jump&&this.onObject&&(this.velocityTarget.y=this.jumpPower,this.movementState.jump=0,this.dispatchStopEvent("idle"),this.dispatchStopEvent("move"),this.dispatchStopEvent("run"),this.dispatchStopEvent("jump"),this.dispatchStartEvent("jump"),this.onObject=!1),this.onObject?this.velocityTarget.y/=2:this.velocityTarget.y+=this.gravity*s),"fly"===this.moveMode&&(this.velocityTarget.y=(this.movementState.movePosY-this.movementState.moveNegY)*this.speedTranslate),this.directionXZ.z=this.movementState.movePosZ-this.movementState.moveNegZ,this.directionXZ.x=this.movementState.movePosX-this.movementState.moveNegX,"+z"===this.forwardDir&&this.directionXZ.multiplyScalar(-1),this.directionXZ.manhattanLength()>0&&(this.path=[]),this.navMeshPathDest){let e=this.navMeshPathDest.material;if("walk"===this.moveMode&&this.path.length>1){this.navMeshPathDest.position.copy(this.path[this.path.length-1]),this.navMeshPathDest.parent||this.page.add(this.navMeshPathDest);let t=O7.subVectors(this.path[1],this.position),i=Re.subVectors(this.path[1],this.path[0]);0>t.dot(i)?this.path.shift():(this.directionXZ.x=i.x,this.directionXZ.z=i.z),e.opacity=e.userData.opacity0}else e.opacity-=.05*e.userData.opacity0,this.navMeshPathDest.material.opacity<=0&&this.navMeshPathDest.parent&&this.page.remove(this.navMeshPathDest)}this.directionXZ.normalize(),this.movementState.run?this.moveForce=this.runMultiplier:this.moveForce=1,this.velocityTarget.z=this.directionXZ.z*this.speedTranslate*this.moveForce,this.velocityTarget.x=this.directionXZ.x*this.speedTranslate*this.moveForce,("walk"===this.moveMode?this.velocityTarget.x+this.velocityTarget.z===0:0===this.velocityTarget.manhattanLength())?this.lerpFactorPos.setScalar(this.lerpFactorPosEnd):this.lerpFactorPos.setScalar(this.lerpFactorPosStart),"walk"===this.moveMode&&(this.lerpFactorPos.y=1),!1===this.didHit&&0===this.pushedVelocity.manhattanLength()||!1===this.usePhysics?(this.velocity.x+=(this.velocityTarget.x-this.velocity.x)*(1-(1-this.lerpFactorPos.x)**s),this.velocity.y+=(this.velocityTarget.y-this.velocity.y)*(1-(1-this.lerpFactorPos.y)**s),this.velocity.z+=(this.velocityTarget.z-this.velocity.z)*(1-(1-this.lerpFactorPos.z)**s)):this.velocity.copy(this.velocityTarget),("walk"===this.moveMode?this.velocity.x**2+this.velocity.z**2<this.speedTranslate:this.velocity.lengthSq()<this.speedTranslate)?(this.dispatchStopEvent("move"),this.dispatchStopEvent("run"),this.onObject&&(this.dispatchStopEvent("jump"),this.dispatchStartEvent("idle"))):(this.dispatchStopEvent("idle"),this.onObject&&(this.dispatchStopEvent("jump"),this.movementState.run?(this.dispatchStopEvent("move"),this.dispatchStartEvent("run")):(this.dispatchStopEvent("run"),this.dispatchStartEvent("move"))));let o=O9.copy(this.velocity);if("none"!==this.orientMode&&!1===this.isFirstPerson){let e=Re.copy(o);e.y=0,o.set(0,o.y,e.length()*("+z"===this.forwardDir?1:-1))}if(this.directionXZ.manhattanLength()>0&&"none"!==this.orientMode&&!1===this.isFirstPerson){if("camera"===this.orientWith&&this.path.length<=1){this.camera.getWorldDirection(O7);let e=Rt.copy(Rh).multiplyScalar(O7.dot(Rh));O7.sub(e);let t=Re.copy(this.directionXZ);t.x*=-1,this.rot.y=O7.angleTo(t)*(O7.cross(t).y>0?-1:1)+this.rotationAccumWhenOrientWithCamera}else this.rot.y=(this.path.length>1?0:this.euler.y)+Math.atan2(-this.directionXZ.z,this.directionXZ.x)+Math.PI/2*("+z"===this.forwardDir?1:-1)}if(Ro.setFromVector3(this.rot),"walk"===this.moveMode&&(Ro.x=0),o.applyEuler(Ro),a&&(Rn.setFromUnitVectors(Rh,this.groundNormal),o.applyQuaternion(Rn)),i){let e=Ro.set(0,this.vrEulerYOffset*Rg,0);i.applyEuler(e),o.x+=i.x,o.z+=i.z,this.nonColliderPosOffset.elements[13]+=i.y*r}if(!0===this.usePhysics){for(let e of(this.pushedVelocity.set(0,0,0),this.sharedGameControlGlobals.entitiesWithTransformAnim)){let t=Rt.setFromMatrixPosition(e.matrixWorld).sub(e.prevT).divideScalar(r).divideScalar(this.pixelsPerMeter),i=e.rigidBody.collider(0).castCollider(t,this.object.rigidBody.collider(0),O7.copy(o).divideScalar(this.pixelsPerMeter),r,!1);t.multiplyScalar(this.pixelsPerMeter);let s=wQ.is(e)?e:e.object;if(null!==i&&this.lastHitObj!==s){let t;e instanceof xb&&(t=e);let i=this.sharedGameControlGlobals.entityToCollisionEvents[s.uuid];
8404if(i)for(let e of i)"character"===e.data.target&&(e.dispatch(t),s.dispatchEvent(By));this.lastHitObj=s}if(null!==i){this.pushedVelocity.copy(t),Re.copy(i.normal1).applyQuaternion(e.quaternion);break}}if(0!==this.pushedVelocity.manhattanLength()){let e=Re.dot(o);e<0&&o.addScaledVector(Re,-e),o.add(this.pushedVelocity)}else o.add(this.groundVelocity)}if(this.rotDirection.y=Number(this.movementState.rotPosY)-Number(this.movementState.rotNegY),this.rotDirection.x=Number(this.movementState.rotPosX)-Number(this.movementState.rotNegX),this.rotDirection.normalize(),"normal"===this.rotationMode&&(this.movementState.rotPosX||this.movementState.rotNegX)||"steer"===this.rotationMode&&(this.movementState.rotPosX||this.movementState.rotNegX)&&(this.movementState.movePosZ||this.movementState.moveNegZ||"walk"===this.moveMode)?this.rotVelocityStick.x=-this.rotDirection.x*this.speedOrbit*this.rotForce:this.rotVelocityStick.x=0,"normal"===this.rotationMode&&(this.movementState.rotPosY||this.movementState.rotNegY)||"steer"===this.rotationMode&&(this.movementState.rotPosY||this.movementState.rotNegY)&&(this.movementState.movePosZ||this.movementState.moveNegZ)?this.rotVelocityStick.y=-this.rotDirection.y*this.speedOrbit*this.rotForce:this.rotVelocityStick.y=0,this.rotVelocityTarget.subVectors(this.eulerDelta.divideScalar(r),this.rotVelocityStick),0===this.rotVelocityTarget.manhattanLength()?this.rotVelocity.lerp(this.rotVelocityTarget,1-(1-this.lerpFactorRotEnd)**s):this.rotVelocity.lerp(this.rotVelocityTarget,1-(1-this.lerpFactorRotStart)**s),this.euler.x+=this.rotVelocity.x*r,this.euler.y+=this.rotVelocity.y*r+this.groundYRotation,0===this.rotVelocityTarget.y&&0===this.directionXZ.manhattanLength()?this.rotationAccumWhenOrientWithCamera=0:(!1===this.cameraFollow||"Locked"===this.cameraYAxis)&&(this.rotationAccumWhenOrientWithCamera+=this.rotVelocity.y*r),!1===this.isFirstPerson&&"none"!==this.orientMode&&this.directionXZ.manhattanLength()>0){if("radial"===this.orientMode){this.objectToCamXZ.copy(this.objectToCamXZ0).applyAxisAngle(Rh,this.euler.y-this.euler0.y);let e=Re.copy(this.objectToCamXZ).normalize(),t=Rt.copy(o).multiplyScalar(r);t.y=0;let i=t.sub(O7.copy(e).multiplyScalar(t.dot(e))).cross(e).y;this.euler.y-=Math.atan2(i,this.objectToCamXZ.length())}}else this.rot.y+=this.rotVelocity.y*r+this.groundYRotation,0!==this.rotVelocityTarget.y&&(!1===this.cameraFollow||"Locked"===this.cameraYAxis)&&(this.euler.y=this.rot.y);if(!0===this.cameraFollow&&("walk"===this.moveMode?"Limit"===this.cameraXAxis?this.euler.x=tY.clamp(this.euler.x,-this.maxPolarAngle+this.cameraPolarOffset+1e-6,-this.minPolarAngle+this.cameraPolarOffset-1e-6):this.euler.x=tY.clamp(this.euler.x,-this.PI_2+this.cameraPolarOffset,this.PI_2+this.cameraPolarOffset):"Limit"===this.cameraXAxis&&(this.euler.x=tY.clamp(this.euler.x,-this.PI_2,this.PI_2))),"fly"===this.moveMode?this.rot.x=this.euler.x:this.isFirstPerson&&(t?Ro.copy(t):Ro.copy(this.euler),Ro.y=0,this.nonColliderRotOffset.makeRotationFromEuler(Ro)),t&&("walk"===this.moveMode?(this.rot.y=t.y,this.rot.x=0,this.rot.z=0):this.rot.setFromEuler(t),this.rot.y+=this.vrEulerYOffset*Rg),Ra.setFromAxisAngle(Rl,this.rot.x),Rn.setFromAxisAngle(Rh,this.rot.y),Rn.multiply(Ra),Ra.setFromAxisAngle(Rc,this.rot.z),Rn.multiply(Ra),this.quaternion.copy(Rn),this.objectRealQuat.multiplyQuaternions(this.quaternion,this.objXZQuat),this.colliderWorldQuat.copy(this.objectRealQuat).multiply(this.collider.rotation),this.collisionEnabled){if(this.usePhysics){let e=Re.copy(o).multiplyScalar(r/this.pixelsPerMeter),t=null;this.didHit=!1;let i=new iv;for(let r=0;r<5;r++){let s=e.length(),a=Rt.copy(e).normalize();if(null!==(t=this.sharedGameControlGlobals.rapierWorld.castShape(this.colliderWorldPosition.divideScalar(this.pixelsPerMeter).add(i),this.colliderWorldQuat,a,this.object.rigidBody?.collider(0).shape,s,!1,24,void 0,void 0,this.object.rigidBody))){this.didHit=!0;let o=this.sharedGameControlGlobals.colliderToEntity.get(t.collider.handle);if(o!==this.lastHitObj&&0===r){this.lastHitObj=o;let e=this.sharedGameControlGlobals.entityToCollisionEvents[o?.uuid];if(e){for(let i of e)if("character"===i.data.target){let e=(this.sharedGameControlGlobals.rapierWorld?.getCollider(t.collider.handle))._parent,r;if(o.cloner){for(let t of o.cloner.children)if(t.rigidBody===e){r=t;break}}i.dispatch(r),o.dispatchEvent(By)}}}let l=O6.set(t.normal2.x,t.normal2.y,t.normal2.z).applyQuaternion(this.colliderWorldQuat),h=O8.copy(a).multiplyScalar(t.toi).dot(l),c=t.toi;if(0===c&&(this.position.y+=this.offset*this.pixelsPerMeter),h>this.offset&&(c=t.toi*(h-this.offset)/h,i.addScaledVector(a,c)),e.copy(a).multiplyScalar(s-c),Math.acos(-l.y)>this.slopeThresh){let r=this.colliderWorldPosition.divideScalar(this.pixelsPerMeter).add(i),s=Rt.copy(t.witness2).applyQuaternion(this.colliderWorldQuat);s.y=0;let a=r.add(s);a.y+=this.stepThresh;let o=this.sharedGameControlGlobals.rapierWorld.castShape(a,this.colliderWorldQuat,e,this.object.rigidBody?.collider(0).shape,1,!1,24,void 0,void 0,this.object.rigidBody);null!==o&&0===o.toi&&(l.y=0,l.normalize())}e.addScaledVector(l,-e.dot(l))}else{0===r&&0!==this.directionXZ.manhattanLength()&&(this.lastHitObj=null),i.add(e);break}}this.position.addScaledVector(i,this.pixelsPerMeter),this.object.rigidBody?.setTranslation(O7.copy(this.position).divideScalar(this.pixelsPerMeter),!0),this.object.rigidBody?.setRotation(Ra.copy(this.quaternion).premultiply(this.groundTilt).multiply(this.objXZQuat),!0)}else{let e=this.onObject?1:5,t=o.multiplyScalar(r/e);for(let i=0;i<e;i++)this.position.add(t),this.collisionAdjustment(r/e)}}else this.position.addScaledVector(o,r);if("walk"===this.moveMode&&this.onObject&&(this.velocityTarget.y=0,this.velocity.y=0),this.quaternion.premultiply(this.groundTilt).multiply(this.objXZQuat),this.object.matrix.compose(this.position,this.quaternion,this.scale),this.object.matrixWorldNeedsUpdate=!0,this.object.matrix.multiply(this.nonColliderPosOffset).multiply(this.nonColliderRotOffset),this.quaternion.premultiply(this.groundTiltInv).multiply(this.objXZQuatInv),!0===this.cameraFollow){this.updateFollowArms();let e=this.objectToTarget.add(this.position),t=this.targetToCamera.add(e);Ri.lookAt(t,e,Rh).setPosition(t),Ri.decompose(this.targetPos,this.targetQuat,O7),this.camera.quaternion.slerp(this.targetQuat,1-(1-this.lerpFactorRotCamera)**s),this.camera.position.lerp(this.targetPos,1-(1-this.lerpFactorPosCamera)**s),this.camera.updateMatrix(),this.camera.updateMatrixWorld(),"Limit"===this.cameraYAxis&&"cartesian"===this.orientMode&&(this.euler.y=tY.clamp(this.euler.y,this.minAzimuthAngleRel,this.maxAzimuthAngleRel)),this.euler.x=tY.clamp(this.euler.x,-this.PI_2+(this.cameraPolarOffset<0?this.cameraPolarOffset:0),this.PI_2+(this.cameraPolarOffset>0?this.cameraPolarOffset:0))}return this.eulerDelta.set(0,0,0),this.object.dispatchEvent(Rm),!(this.path.length<2&&this.lastPosition.distanceToSquared(this.position)<this.threshEndTranslate&&Math.abs(this.rotVelocity.x)<this.threshEndRotVel&&Math.abs(this.rotVelocity.y)<this.threshEndRotVel&&(void 0===this.camera||this.isFirstPerson||this.lastCameraPosition.distanceToSquared(this.camera.position)<this.threshEndTranslate&&8*(1-this.lastCameraQuaternion.dot(this.camera.quaternion))<this.threshEndRotate)&&("fly"===this.moveMode||!0===this.onObject||!1===this.collisionEnabled)&&(null===this.navMeshPathDest||this.navMeshPathDest.material.opacity<-.04*this.navMeshPathDest?.material?.userData.opacity0))&&(this.camera&&(this.lastCameraPosition.copy(this.camera.position),this.lastCameraQuaternion.copy(this.camera.quaternion)),this.lastPosition.copy(this.position),this.object.dispatchEvent(Rf),!0)}updateFollowArms(){let e;this.objectToTarget.copy(this.objectToTarget0),this.targetToCamera.copy(this.targetToCamera0);let t=Ra.setFromAxisAngle(Rh,"Limit"===this.cameraYAxis&&"radial"!==this.orientMode?tY.clamp(this.euler.y-this.euler0.y,this.minAzimuthAngleRel,this.maxAzimuthAngleRel):this.euler.y-this.euler0.y);("Locked"!==this.cameraYAxis||"radial"===this.orientMode)&&this.objectToTarget.applyQuaternion(t),e="Limit"===this.cameraXAxis?tY.clamp(this.euler.x,-this.maxPolarAngle+this.cameraPolarOffset+1e-6,-this.minPolarAngle+this.cameraPolarOffset-1e-6):tY.clamp(this.euler.x,-this.PI_2+this.cameraPolarOffset+1e-6,this.PI_2+this.cameraPolarOffset-1e-6);let i=O7.copy(this.cameraPolarAxis0);("Locked"!==this.cameraYAxis||"radial"===this.orientMode)&&i.applyQuaternion(t);let r=Rn.setFromAxisAngle(i,e);"Locked"!==this.cameraYAxis&&this.targetToCamera.applyQuaternion(t),"Locked"!==this.cameraXAxis&&this.targetToCamera.applyQuaternion(r)}groundTiltAdjustment(e){180*Rh.angleTo(e)/Math.PI<15||180*Rh.angleTo(e)/Math.PI>85?Ra.identity():Ra.setFromUnitVectors(Rh,e),this.groundTilt.slerp(Ra,.06),this.groundTiltInv.copy(this.groundTilt).invert()}collisionAdjustment(e){let t=O8.set(0,0,0);this.object.matrix.compose(this.position,this.quaternion,this.scale);
8404let i=Ri.multiplyMatrices(this.object.matrix,this.objXZRotMat).multiply(this.collider.matrix).decompose(O7,Ra,Re).compose(O7,Ra,Rd);this.sharedGameControlGlobals.entitiesWithTransformAnim.forEach(e=>{if(e===this.object||e.isDescendantOf(this.object))return;Rp.makeEmpty(),e.updateMatrixWorldSVD();let r=e.matrixWorldRigid,s=Rr.copy(r).invert(),a=Rs.copy(Rr).multiply(i);Ru.copy(this.collider.segment),Ru.start.applyMatrix4(a),Ru.end.applyMatrix4(a);let o=O6.copy(this.position).applyMatrix4(s);Rp.expandByPoint(Ru.start),Rp.expandByPoint(Ru.end),Rp.min.addScalar(-this.collider.radius),Rp.max.addScalar(this.collider.radius),e.bvhGeometry.boundsTree.shapecast({traverseBoundsOrder:e=>e.distanceToPoint(Ru.end),intersectsBounds:e=>e.intersectsBox(Rp),intersectsTriangle:e=>{let i=e.closestPointToSegment(Ru,O7,Re);if(i<this.collider.radius){let e=this.collider.radius-i,s=Re.sub(O7).normalize(),a=Rt.copy(o);a.addScaledVector(s,e);let l=a.applyMatrix4(r).sub(this.position);t.add(l),Ru.start.addScaledVector(s,e),Ru.end.addScaledVector(s,e)}}})}),Rp.makeEmpty(),Ru.copy(this.collider.segment),Ru.start.applyMatrix4(i),Ru.end.applyMatrix4(i),Rp.expandByPoint(Ru.start),Rp.expandByPoint(Ru.end),Rp.min.addScalar(-this.collider.radius),Rp.max.addScalar(this.collider.radius),this.sharedGameControlGlobals.staticMeshBVH?.shapecast({traverseBoundsOrder:e=>e.distanceToPoint(Ru.end),intersectsBounds:e=>e.intersectsBox(Rp),intersectsTriangle:e=>{let i=e.closestPointToSegment(Ru,O7,Re);if(i<this.collider.radius){let e=this.collider.radius-i,r=Re.sub(O7).normalize();this.alignToGround&&this.groundTiltAdjustment(r),t.addScaledVector(r,e),Ru.start.addScaledVector(r,e),Ru.end.addScaledVector(r,e)}}}),this.onObject=Math.abs(t.y)>Math.abs(e*this.velocity.y*.25),this.onObject&&this.dispatchStopEvent("jump");let r=Math.max(0,t.length()-1e-5);t.normalize().multiplyScalar(r),this.position.add(t)}};Rv.isLocked=!1;var Ry=tw(tA());function Rx(e){let t=e.elements,i=t[0]**2+t[1]**2+t[2]**2,r=t[4]**2+t[5]**2+t[6]**2,s=t[8]**2+t[9]**2+t[10]**2,a=t[0]**2+t[4]**2+t[8]**2,o=t[1]**2+t[5]**2+t[9]**2,l=t[2]**2+t[6]**2+t[10]**2;return i<1e-8||r<1e-8||s<1e-8||a<1e-8||o<1e-8||l<1e-8}function Rb(e,t){let i=new rz;if(t&&Rx(t)||!e.getAttribute("position"))return i.setAttribute("position",new rT([],3)),i.setIndex([]),i;let{positions:r,triIndices:s}=Sn(e.getAttribute("position"),e.getIndex());return i.setAttribute("position",new rT(r,3)),i.setIndex(s),t&&i.applyMatrix4(t),i}var Rw=new iX,RS=new iX,R_=[[0,0,0],[0,0,0],[0,0,0]];function RA(e){let t=e.elements;R_[0][0]=t[0],R_[0][1]=t[4],R_[0][2]=t[8],R_[1][0]=t[1],R_[1][1]=t[5],R_[1][2]=t[9],R_[2][0]=t[2],R_[2][1]=t[6],R_[2][2]=t[10];let{u:i,v:r}=(0,Ry.SVD)(R_),s=Rw.set(i[0][0],i[0][1],i[0][2],0,i[1][0],i[1][1],i[1][2],0,i[2][0],i[2][1],i[2][2],0,0,0,0,1),a=RS.set(r[0][0],r[0][1],r[0][2],0,r[1][0],r[1][1],r[1][2],0,r[2][0],r[2][1],r[2][2],0,0,0,0,1);return s.multiply(a.transpose())}var RM=class extends lI{constructor(){super(),this.layers.enable(3),this.layers.enable(8),this.layers.enable(9)}setFromCamera(e,t){t.isOrthographicCamera?(this.ray.origin.set(e.x,e.y,-1).unproject(t),this.ray.direction.set(0,0,-1).transformDirection(t.matrixWorld),this.camera=t):t.isPerspectiveCamera?(this.ray.origin.set(e.x,e.y,-1).unproject(t),this.ray.direction.set(e.x,e.y,.5).unproject(t).sub(this.ray.origin).normalize(),this.camera=t):console.error("Raycaster: Unsupported camera type.")}intersectVisibleObjects(e,t=!0,i=[]){return e.forEach(e=>{e.visible&&this.intersectObject(e,t,i)}),i}createRaycastLineHelper(){let e=new nz({color:65280,linewidth:10}),t=new iv(this.ray.origin.x,this.ray.origin.y,this.ray.origin.z),i=new iv(this.ray.direction.x,this.ray.direction.y,this.ray.direction.z),r=this.camera.far-this.camera.near,s=new iv().addVectors(t,i.multiplyScalar(r)),a=new rz;return a.setFromPoints([t,s]),new nj(a,e)}},RE=e=>e instanceof EO||e instanceof PB;function RC(e,t){return e.distance-t.distance}function RT(e,t,i,r=!1){if(!r&&!i.some(t=>void 0!==RI(e,t)))return[];let s=[];return t.children.forEach(t=>(function e(t,i,r){if(!(!xL(i)||!i.visible))for(let s of(ES(i)&&i.raycast(t,r),i.children))e(t,s,r)})(e,t,s)),s.sort(RC),s}function RP(e){let t=[];if(e.length){let i=e[0].object;xL(i)&&t.push(i);let r=i.parent;for(;r;)RE(r)&&t.push(r),r=r.parent}return t}function RD(e,t,i,r){let s=e.frame;if(s){let e=t[0]*s.width,a=(1-t[1])*s.height;for(let t of i){let i=t===s.uuid?s:s.find(t);if(i?.intersects(e,a))return r(i),!0}}return!1}function RI(e,t){if(ES(t)){if(t.visible){let i=[];return t.raycast(e,i),i.length?i[0]:void 0}}else if(RE(t))return function e(t,i){if(!(!xL(i)||!i.visible)){if(ES(i)){let e=[];
8404if(i.raycast(t,e),e.length)return e[0]}for(let r of i.children){let i=e(t,r);if(i)return i}}}(e,t)}var RO=class{constructor(e,t,i,r,s,a,o,l){this.renderer=e,this.publish=t,this.scene=i,this.getCamera=r,this.sharedAssets=s,this.requestRender=a,this.isExport=o,this.frame=l,this.raycaster=new RM,this._useWindowEvents=!1,this.pointerWorld={x:0,y:0},this.pointerScreen={x:0,y:0},this._useWindowEvents="window"===t.mouseEventTarget,this.domElement=e.domElement,this.eventElement=this._useWindowEvents?window:e.domElement,this._domRect=this.domElement.getBoundingClientRect()}get stopRaycast(){return this.publish.stopRaycast}get page(){return this.scene.activePage}set useWindowEvents(e){this._useWindowEvents=e,this.eventElement=e?window:this.renderer.domElement}get useWindowEvents(){return this._useWindowEvents}set domRect(e){this._domRect=e}get domRect(){return this._domRect}updateRaycaster(e){var t,i;let{pageX:r,pageY:s}=e.touches?.length>0?e.touches[0]:e;this.pointerWorld={x:(r-((t=this._domRect).left+window.scrollX))/t.width*2-1,y:-((s-(t.top+window.scrollY))/t.height*2)+1},this.pointerScreen={x:(r-((i=this._domRect).left+window.scrollX))/i.width,y:1-(s-(i.top+window.scrollY))/i.height},this.raycaster.setFromCamera(this.pointerWorld,this.getCamera())}},RR=class{constructor(e){this.eventContext=e,this.domEventsNeeded=new Set,this.hasVideoAction=!1}connect(){}disconnect(){}},RL=[["start","Start"],["keyDown","KeyDown"],["keyUp","KeyUp"],["mouseDown","MouseDown"],["mouseUp","MouseUp"],["mouseHover","MouseHover"],["collision","Collision"],["lookAt","LookAt"],["follow","Follow"],["scroll","Scroll"]],RB=e=>RL.find(([t,i])=>i===e)?.[0],Rz=e=>RL.find(([t])=>t===e)?.[1],RF=(e,t)=>{let i=RB(e);if(i){let e=new CustomEvent(i,{bubbles:!0});return Object.defineProperty(e,"target",{writable:!1,value:t}),e}},RN=class extends RR{constructor(){super(...arguments),this.objectsPerEvents=new Map,this.splineEvents={},this.onBeginEvent=e=>{if(!e.eventName||!e.target||"Scroll"===e.eventName)return;let t=this.splineEvents[RB(e.eventName)]?.[e.target.uuid];if(!t)return;"Scroll"===e.eventName&&void 0!==e.deltaY&&Object.assign(t,{deltaY:e.deltaY});let{domElement:i}=this.eventContext;i.dispatchEvent(t)}}connect(){let{page:e}=this.eventContext;e.traverseEntity(e=>{if(e.data?.events.length){for(let[t,i]of RL)if(e.data.events.some(e=>e.data.type===i&&!e.data.disabled)){this.objectsPerEvents.has(t)?this.objectsPerEvents.get(t)?.push(e):this.objectsPerEvents.set(t,[e]);let r=RF(i,{id:e.uuid,name:e.name}),s=this.splineEvents[t];s?s[e.uuid]=r:this.splineEvents[t]={[e.uuid]:r}}}}),this.objectsPerEvents.forEach(e=>{e.forEach(e=>{e.addEventListener("beginEvent",this.onBeginEvent)})})}disconnect(){this.objectsPerEvents.forEach(e=>{e.forEach(e=>{e.removeEventListener("beginEvent",this.onBeginEvent)})})}},Rk=class{constructor(e,t,i,r,s,a){if(this.id=e,this.data=t,this.object=i,this.entered=!1,("KeyDown"===t.type||"KeyUp"===t.type||"KeyPress"===t.type)&&!t.key)throw Error("Missing property");this.actions=OX(t,t.actions,r,s,a,i)}disconnect(){OY(this.actions)}dispatchHeld(e){this.actions.Create.forEach(t=>{e&&t.dispatchThrottled.cancel(),t.dispatchThrottled()})}dispatch(e=!1){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),"MousePress"===this.data.type||"KeyPress"===this.data.type?this.entered||(this.entered=!0,this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.playFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent()),this.actions.Create.forEach(e=>e.dispatchStart())):(this.actions.Transition.some(e=>e.playing&&"Toggle"!==e.data.runMode)||this.actions.Transition.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.SwitchCamera.some(e=>e.playing&&"Toggle"!==e.data.runMode)||this.actions.SwitchCamera.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.Animation.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()})),this.actions.Link.forEach(e=>{e.dispatch()}
vendor: 1,706 bytes, line 8404
8404),this.actions.SceneTransition.forEach(e=>{e.dispatch()}),!1===e&&this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>{e.dispatch()}),this.actions.Audio.forEach(e=>{e.dispatchBasic()}),this.actions.Video.forEach(e=>{e.dispatchBasic()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()}),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}dispatchRelease(){this.entered&&(this.entered=!1,this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Particles.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent()),this.actions.Create.forEach(e=>e.dispatchStop()))}dispatchUserEvent(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),e?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.playFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent())),this.actions.Link.forEach(e=>{e.dispatch()}),this.actions.SceneTransition.forEach(e=>{e.dispatch()}),this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>{e.dispatch()}
8404),this.actions.Audio.forEach(e=>{e.dispatchBasic()}),this.actions.Video.forEach(e=>{e.dispatchBasic()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()}),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}},RU=class extends RR{constructor(e,t,i){super(e),this.eventManager=t,this.useForRaycastProperty=i,this.objectsPerTypes={MouseDown:[],MouseUp:[],MousePress:[],KeyDown:[],KeyUp:[],KeyPress:[]},this.canvasMouseEvents=[],this.eventsPerObjects={MouseDown:{},MouseUp:{},MousePress:{},KeyDown:{},KeyUp:{},KeyPress:{}},this.heldKeys={},this.heldKeysPress={},this._prevObjects=[],this.sceneInterects=null,this.onCanvasRaycast=e=>{if(!0===this.useForRaycastProperty&&null===this.sceneInterects){this.eventContext.updateRaycaster(e);let{raycaster:t,page:i}=this.eventContext,r=RT(t,i,[],!0);this.sceneInterects=r,r.length&&(this.eventContext.sharedAssets.raycastProperty={x:r[0].point.x,y:r[0].point.y,z:r[0].point.z,objX:r[0].object.matrixWorld.elements[12],objY:r[0].object.matrixWorld.elements[13],objZ:r[0].object.matrixWorld.elements[14]})}},this.onCanvasMouseDown=e=>{(e.target===this.eventContext.domElement||"SPLINE-VIEWER"===e.target.tagName)&&this.canvasMouseEvents.forEach(t=>{("MouseDown"===t.data.type||"MousePress"===t.data.type)&&(this.onCanvasRaycast(e),t.dispatch())})},this.onCanvasMouseUp=e=>{(e.target===this.eventContext.domElement||"SPLINE-VIEWER"===e.target.tagName)&&this.canvasMouseEvents.forEach(t=>{"MouseUp"===t.data.type?(this.onCanvasRaycast(e),t.dispatch()):"MousePress"===t.data.type&&t.dispatchRelease()})},this.onMouseDown=e=>{u1.length>1||(this.eventContext.updateRaycaster(e),this.handleMouseEvent("MouseDown"))},this.onMouseUp=e=>{u1.length>1||(this.eventContext.updateRaycaster(e),this.handleMouseEvent("MouseUp"))},this.onMousePressDown=e=>{u1.length>1||(this.eventContext.updateRaycaster(e),this.handleMousePressEvent())},this.onMousePressRelease=e=>{u1.length>1||(this.eventContext.updateRaycaster(e),this.handleMousePressEvent(!0))},this.onKeyDown=e=>{this.heldKeys[e.key]||(this.handleKeyEvent(e,"KeyDown"),this.handleKeyEventHeld(e,"KeyDown",!0)),this.heldKeys[e.key]=!0},this.onKeyUp=e=>{this.handleKeyEvent(e,"KeyUp"),this.handleKeyEventHeld(e,"KeyUp",!0)},this.onKeyPressDown=e=>{this.heldKeysPress[e.key]?this.handleKeyEventHeld(e,"KeyPress"):(this.handleKeyEvent(e,"KeyPress"),this.handleKeyEventHeld(e,"KeyPress",!0)),this.heldKeysPress[e.key]=!0},this.onKeyPressUp=e=>{this.handleKeyEvent(e,"KeyPress",!0)},this.releaseHeldKey=e=>{delete this.heldKeys[e.key]},this.releaseHeldKeyPress=e=>{delete this.heldKeysPress[e.key]},this._onUserEvent=({eventName:e,target:t,reverse:i})=>{if(!e||!t)return;let r=Rz(e);r&&("MouseDown"===r||"MouseUp"===r||"MousePress"===r?(t.dispatchEvent({type:"beginEvent",eventName:r}),this.eventsPerObjects[r]?.[t.uuid]?.forEach(e=>{e.dispatchUserEvent(i)})):("KeyDown"===r||"KeyUp"===r||"KeyPress"===r)&&(t.dispatchEvent({type:"beginEvent",eventName:r}),this.eventsPerObjects[r]?.[t.uuid]?.forEach(e=>{e.dispatchUserEvent()})))}}connect(){let{page:e,sharedAssets:t,domElement:i}=this.eventContext,r=(i,r)=>{if(i.data?.events.length)for(let s of["MouseDown","MouseUp","MousePress","KeyDown","KeyUp","KeyPress"]){let a=this.eventsPerObjects[s];if(i.data.events.filter(({data:e})=>e.type===s&&!0!==e.disabled).forEach(({id:r,data:s})=>{try{let o=new Rk(r,s,i,e,t,this.eventManager);o.actions.Video.length&&(this.hasVideoAction=!0),("MouseDown"===s.type||"MouseUp"===s.type||"MousePress"===s.type)&&("Canvas"===s.mode||"Window"===s.mode)?this.canvasMouseEvents.push(o):(a[i.uuid]?a[i.uuid].some(e=>e.id===o.id)||a[i.uuid].push(o):a[i.uuid]=[o],i instanceof Do&&i.traverseChildren(e=>{if(!e.visible)return!0;e instanceof Mb&&e.data.geometry.shapeBlendNode?.operation!==2&&(a[e.uuid]?a[e.uuid].push(o):a[e.uuid]=[o])}))}catch(e){}}),a[i.uuid]?.length&&(this.objectsPerTypes[s].push(i instanceof TY&&("MouseDown"===s||"MouseUp"===s||"MousePress"===s)?r:i),i instanceof Do)){let e=this.objectsPerTypes[s];i.traverseChildren(t=>{if(!t.visible)return!0;t instanceof Mb&&-1===e.indexOf(t)&&e.push(t)})}}};e.traverseEntity(e=>{(e instanceof Pk||e instanceof PD)&&e.frame?.traverse(t=>{r(t,e)}),r(e)}),this.heldKeys={},this.heldKeysPress={},this.domEventsNeeded.clear(),i.addEventListener("pointerdown",this.onCanvasMouseDown),i.addEventListener("pointerup",this.onCanvasMouseUp),(this.objectsPerTypes.MouseDown?.length||this.useForRaycastProperty)&&(this.domEventsNeeded.add("pointerdown"),i.addEventListener("pointerdown",this.onMouseDown)),this.objectsPerTypes.MouseUp?.length&&(this.domEventsNeeded.add("pointerup"),i.addEventListener("pointerup",this.onMouseUp)),this.objectsPerTypes.MousePress?.length&&(this.domEventsNeeded.add("pointerdown"),i.addEventListener("pointerdown",this.onMousePressDown),this.domEventsNeeded.add("pointerup"),i.addEventListener("pointerup",this.onMousePressRelease)),this.objectsPerTypes.KeyDown?.length&&(this.domEventsNeeded.add("keydown"),document.addEventListener("keydown",this.onKeyDown),document.addEventListener("keyup",this.releaseHeldKey)),this.objectsPerTypes.KeyUp?.length&&(this.domEventsNeeded.add("keyup"),document.addEventListener("keyup",this.onKeyUp)),this.objectsPerTypes.KeyPress?.length&&(this.domEventsNeeded.add("keydown"),document.addEventListener("keydown",this.onKeyPressDown),document.addEventListener("keyup",this.releaseHeldKeyPress),this.domEventsNeeded.add("keyup"),document.addEventListener("keyup",this.onKeyPressUp)),Object.entries(this.objectsPerTypes).forEac
8404h(([e,t])=>{t.forEach(e=>{e.addEventListener("userEvent",this._onUserEvent)})})}disconnect(){let{domElement:e}=this.eventContext;this.domEventsNeeded.clear(),this.heldKeys={},this.heldKeysPress={},e.removeEventListener("pointerdown",this.onCanvasMouseDown),e.removeEventListener("pointerup",this.onCanvasMouseUp),e.removeEventListener("pointerdown",this.onMouseDown),e.removeEventListener("pointerdown",this.onMousePressDown),e.removeEventListener("pointerup",this.onMouseUp),e.removeEventListener("pointerup",this.onMousePressRelease),document.removeEventListener("keydown",this.onKeyDown),document.removeEventListener("keyup",this.onKeyUp),document.removeEventListener("keydown",this.onKeyPressDown),document.removeEventListener("keyup",this.onKeyPressUp),document.removeEventListener("keyup",this.releaseHeldKey),Object.values(this.eventsPerObjects).forEach(e=>{Object.values(e).forEach(e=>{e.forEach(e=>{e.disconnect()})})}),this.canvasMouseEvents.forEach(e=>{e.disconnect()}),Object.entries(this.objectsPerTypes).forEach(([e,t])=>{t.forEach(e=>{e.removeEventListener("userEvent",this._onUserEvent)})})}handleMouseEvent(e){let{stopRaycast:t,raycaster:i,page:r,pointerScreen:s}=this.eventContext,a=this.objectsPerTypes[e],o=a.filter(e=>!(e instanceof TY));if(!(!a.length&&!this.useForRaycastProperty)&&!(r.uiCanvas&&RD(r,[s.x,s.y],Object.keys(this.eventsPerObjects[e]),t=>{this.handleObjectMouseEventDispatch(t,e)}))){if(t||this.useForRaycastProperty){let s;if(null===this.sceneInterects?s=RT(i,r,o,this.useForRaycastProperty):(s=this.sceneInterects,this.sceneInterects=null),this.useForRaycastProperty&&s.length&&(this.eventContext.sharedAssets.raycastProperty={x:s[0].point.x,y:s[0].point.y,z:s[0].point.z,objX:s[0].object.matrixWorld.elements[12],objY:s[0].object.matrixWorld.elements[13],objZ:s[0].object.matrixWorld.elements[14]}),t){let t=[s[0]?.uv?.x??0,s[0]?.uv?.y??0];RP(s).forEach(i=>{i instanceof Pk&&RD(i,t,Object.keys(this.eventsPerObjects[e]),t=>{this.handleObjectMouseEventDispatch(t,e)}),this.eventsPerObjects[e][i.uuid]&&this.handleObjectMouseEventDispatch(i,e)})}}t||o.forEach(t=>{let r=RI(i,t);r&&(this.handleObjectMouseEventDispatch(t,e),t instanceof Pk&&RD(t,[r?.uv?.x??0,r?.uv?.y??0],Object.keys(this.eventsPerObjects[e]),t=>{this.handleObjectMouseEventDispatch(t,e)}))})}}handleMousePressEvent(e=!1){let t="MousePress",i=this.objectsPerTypes[t],r=i.filter(e=>!(e instanceof TY)),s=[];if(i.length){if(!e){let{stopRaycast:e,raycaster:i,page:a,pointerScreen:o}=this.eventContext,l=!1;if(a.uiCanvas&&(l=RD(a,[o.x,o.y],Object.keys(this.eventsPerObjects[t]),e=>{s.push(e)})),e&&!l){let e=RT(i,a,r);s=RP(e),e.forEach(e=>{e.object instanceof Pk&&RD(e.object,[e?.uv?.x??0,e?.uv?.y??0],Object.keys(this.eventsPerObjects[t]),e=>{s.push(e)})})}else r.forEach(e=>{let r=RI(i,e);r&&(s.push(e),e instanceof Pk&&RD(e,[r?.uv?.x??0,r?.uv?.y??0],Object.keys(this.eventsPerObjects[t]),e=>{s.push(e)}))})}this._prevObjects.length&&this._prevObjects.forEach(e=>{s.includes(e)||this.handleObjectMouseEventDispatchRelease(e,t)}),s.length&&s.forEach(e=>{this.handleObjectMouseEventDispatch(e,t)}),this._prevObjects=s}}handleObjectMouseEventDispatch(e,t){e.dispatchEvent({type:"beginEvent",eventName:t}),this.eventsPerObjects[t]?.[e.uuid]?.forEach(e=>{e.dispatch()})}handleObjectMouseEventDispatchRelease(e,t){e.dispatchEvent({type:"beginEvent",eventName:t}),this.eventsPerObjects[t]?.[e.uuid]?.forEach(e=>{e.dispatchRelease()})}handleKeyEvent(e,t,i=!1){this.objectsPerTypes[t].forEach(r=>{let s=this.eventsPerObjects[t][r.uuid];s.some(({data:t})=>"key"in t&&t.key===e.key)&&r.dispatchEvent({type:"beginEvent",eventName:t}
8404),s.forEach(t=>{"key"in t.data&&t.data.key===e.key&&(i?t.dispatchRelease():t.dispatch(!0))})})}handleKeyEventHeld(e,t,i=!1){this.objectsPerTypes[t].forEach(r=>{this.eventsPerObjects[t][r.uuid].forEach(t=>{"key"in t.data&&t.data.key===e.key&&t.dispatchHeld(i)})})}},RV=new iv,Rj=new iv,RG=class{constructor(e,t,i,r,s){this.actionsIn=OX(e,e.inActions,i,r,s,t),this.actionsOut=OX(e,e.outActions,i,r,s,t)}disconnect(){OY(this.actionsIn),OY(this.actionsOut)}},RH=class extends RG{constructor(e,t,i,r,s,a){super(t,i,r,s,a),this.id=e,this.data=t,this.object=i,this.stage="out",this.objects=[],this.onUpdateMatrixWorld=()=>{for(let e of this.objects)if(!e.visible)return;let e=RV.setFromMatrixPosition(this.objects[0].matrixWorld),t=Rj.setFromMatrixPosition(this.objects[1].matrixWorld),i=e.distanceTo(t)<=this.distance?"in":"out";if(this.stage!==i){this.stage=i;let e="in"===i?this.actionsIn:this.actionsOut;e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Link.forEach(e=>e.dispatch()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}};let{distance:o,fromObject:l,toObject:h}=t.condition;for(let e of(this.distance=o,[l,h])){if(!e)throw Error("Missing property");let t=r.find(e);if(!t)throw Error("Missing property");this.objects.push(t)}}connect(){window.setTimeout(()=>{this.objects.forEach(e=>{e.addEventListener("updateMatrixWorld",this.onUpdateMatrixWorld)}),this.onUpdateMatrixWorld()},0)}disconnect(){super.disconnect(),this.stage="out",this.objects.forEach(e=>{e.removeEventListener("updateMatrixWorld",this.onUpdateMatrixWorld)})}},RW=class extends RG{constructor(e,t,i,r,s,a){super(t,i,r,s,a),this.id=e,this.data=t,this.object=i,this.onBegin=({target:e,state:t})=>
8404{this.toState!==t&&(this.actionsOut.Audio.forEach(e=>e.dispatchConditional()),this.actionsOut.Particles.forEach(e=>e.dispatchConditional()),this.actionsOut.Video.forEach(e=>e.dispatchConditional()),this.actionsOut.Link.forEach(e=>e.dispatch()),this.actionsOut.Create.forEach(e=>e.dispatch()),this.actionsOut.Destroy.forEach(e=>e.dispatch()),this.actionsOut.Reset.forEach(e=>e.dispatch()),this.actionsIn.Transition.forEach(e=>e.pause()),this.object.currentTransitionEvent=this,this.actionsOut.Transition.forEach(e=>e.play()),this.actionsOut.Animation.forEach(e=>e.play()),this.actionsIn.SwitchCamera.forEach(e=>e.pause()),this.actionsOut.SwitchCamera.forEach(e=>e.play()),this.actionsOut.SceneTransition.forEach(e=>e.dispatch()),this.actionsOut.SetVariable.forEach(e=>e.checkConditions()),this.actionsOut.SetVariable.forEach(e=>e.dispatch()),this.actionsOut.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actionsOut.ClearLocalStorage.forEach(e=>e.dispatch()),this.actionsOut.UserAPI.forEach(e=>e.dispatch()))},this.onComplete=({target:e,state:t})=>
8404{this.toState===t&&(this.actionsIn.Audio.forEach(e=>e.dispatchConditional()),this.actionsIn.Particles.forEach(e=>e.dispatchConditional()),this.actionsIn.Video.forEach(e=>e.dispatchConditional()),this.actionsIn.Link.forEach(e=>e.dispatch()),this.actionsIn.Create.forEach(e=>e.dispatch()),this.actionsIn.Destroy.forEach(e=>e.dispatch()),this.actionsIn.Reset.forEach(e=>e.dispatch()),this.actionsOut.Transition.forEach(e=>e.pause()),this.actionsOut.Transition.forEach(e=>e.pause()),this.object.currentTransitionEvent=this,this.actionsIn.Transition.forEach(e=>e.play()),this.actionsIn.Animation.forEach(e=>e.play()),this.actionsOut.SwitchCamera.forEach(e=>e.pause()),this.actionsIn.SwitchCamera.forEach(e=>e.play()),this.actionsIn.SceneTransition.forEach(e=>e.dispatch()),this.actionsIn.SetVariable.forEach(e=>e.checkConditions()),this.actionsIn.SetVariable.forEach(e=>e.dispatch()),this.actionsIn.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actionsOut.ClearLocalStorage.forEach(e=>e.dispatch()),this.actionsOut.UserAPI.forEach(e=>e.dispatch()))};let{condition:o}=t;if(!o.object)throw Error("Missing property");let l=r.find(o.object)??r.scene.find2D(o.object);if(!l||(this.toObject=l,o.state&&!this.toObject.states?.[o.state]))throw Error("Missing property");this.toState=o.state}connect(){cJ(this.actionsOut).forEach(e=>{this.actionsOut[e]?.length&&this.toObject.addEventListener("beginState",this.onBegin)}),cJ(this.actionsIn).forEach(e=>{this.actionsIn[e]?.length&&this.toObject.addEventListener("completeState",this.onComplete)})}disconnect(){super.disconnect(),cJ(this.actionsOut).forEach(e=>{this.actionsIn[e]?.length&&this.toObject.removeEventListener("beginState",this.onBegin)}),cJ(this.actionsIn).forEach(e=>{this.actionsIn[e]?.length&&this.toObject.removeEventListener("completeState",this.onComplete)})}},Rq=class extends RR{constructor(e,t){super(e),this.eventManager=t,this.eventsPerConditions={Comparison:[],Distance:[],State:[]},this.hasVideoAction=!1}connect(){super.connect();let{page:e,sharedAssets:t}=this.eventContext;e.traverseEntity(i=>{if(i.data?.events.length){for(let{id:r,data:s}of i.data.events)if(!s.disabled&&"Conditional"===s.type)try{let a;"Comparison"===s.condition.type||("Distance"===s.condition.type?a=new RH(r,s,i,e,t,this.eventManager):"State"===s.condition.type&&(a=new RW(r,s,i,e,t,this.eventManager))),a&&(this.eventsPerConditions[s.condition.type].push(a),(a.actionsIn.Video.length||a.actionsOut.Video.length)&&(this.hasVideoAction=!0))}catch(e){}}}),Object.values(this.eventsPerConditions).forEach(e=>e.forEach(e=>e.connect()))}disconnect(){super.disconnect(),Object.values(this.eventsPerConditions).forEach(e=>e.forEach(e=>e.disconnect()))}},RX=new iv,RY=new iv,RQ=new iv,RK=new ss,RZ=new iv,RJ=new iv,R$=new iv,R0=new ig,R1=new i3,R2=new iX,R3=new tK,R4=new iv,R5=new iv;function R6(e,t){!t||(t[0]<t[1]&&(e.x=Math.min(Math.max(e.x,t[0]),t[1])),t[2]<t[3]&&(e.y=Math.min(Math.max(e.y,t[2]),t[3])),t[4]<t[5]&&(e.z=Math.min(Math.max(e.z,t[4]),t[5])))}var R8=(tr=new iX,(e,t,i)=>{let r=e.obj;tr.copy(r.hiddenMatrix),null!==r.parent&&tr.premultiply(r.parent.matrixWorld),tr.invert(),r.position.copy(t),"global"===e.reference&&R6(r.position,e.limits),r.position.applyMatrix4(tr),"parent"===e.reference?R6(r.position,e.limits):"local"===e.reference&&(R0.copy(e.quat0).invert(),r.position.sub(e.position0),r.position.applyQuaternion(R0),R6(r.position,e.limits),R0.invert(),r.position.applyQuaternion(R0),r.position.add(e.position0)),tr.multiply(i??r.matrixWorld).decompose(RZ,r.quaternion,RJ),r.updateMatrix(),r.hasNonUniformScale&&(r.updateMatrixWorld(),r.updateMatrixWorldSVD()),r instanceof SP&&E_(r.parent)&&r.invalidateDownstreamBooleanData(!0)}),R9=class{constructor(e,t,i,r,s,a,o){this.object=e,this.id=t,this.data=i,this.dropDestIds=[],this.activeIdx=null,this.wasDragEventTriggered=!1,this.resetDampingFactor=0===this.data.resetSpeed?1:8/this.data.resetSpeed+1,this.snapDampingFactor=0===this.data.snapSpeed?1:8/this.data.snapSpeed+1,this.actionsDrag=OX(i,i.dragDropActions.drag,r,s,a,this.object),this.actionsDrop=OX(i,i.dragDropActions.drop,r,s,a,this.object);let l=[];
8404this.data.objects.forEach(e=>{let t=r.find(e);!t||!1!==t.data.visible&&(l.push(t),o[t.uuid]&&o[t.uuid].forEach(e=>{let t=r.find(e);t&&!1!==t.data.visible&&l.push(t)}))}),this.data.dropDestinations.forEach(e=>{let t=r.find(e);!t||!1!==t.data.visible&&(this.dropDestIds.push(t.uuid),o[t.uuid]&&o[t.uuid].forEach(e=>{let t=r.find(e);t&&!1!==t.data.visible&&this.dropDestIds.push(t.uuid)}))}),this.dragItems=l.map(e=>("locked"===this.data.planeMode&&(e.userData.lockedPlane=!0),e.userData.worldPosition0=new iv().setFromMatrixPosition(e.matrixWorld),{obj:e,fromPosition:new iv().setFromMatrixPosition(e.matrixWorld),pointStart:new iv,pointEnd:new iv,paused:!0,currentDampingFactor:this.data.dampingFactor,reset:!1,position0:new iv().copy(e.position),quat0:new ig().copy(e.quaternion),snapped:!1,orientationMatrix:new iX,limits:this.data.limits,reference:this.data.referenceFrame}))}get activeDragItem(){return null!==this.activeIdx?this.dragItems[this.activeIdx]:null}dispose(){OY(this.actionsDrag),OY(this.actionsDrop),this.dragItems.forEach(e=>{e.fromPosition.copy(e.obj.userData.worldPosition0),e.pointStart.copy(e.fromPosition),e.pointEnd.copy(e.pointStart),e.obj.recursiveBBoxNeedsUpdate=!0,e.obj.userData.lockedPlane=void 0,e.obj.position.copy(e.position0),e.obj.quaternion.copy(e.quat0),e.obj.updateMatrix()})}},R7=class extends RR{constructor(e,t){super(e),this.eventManager=t,this.events=[],this.lastDropDestination=null,this.dragTimeout=null,this.onPointerDown=e=>{if(u1.length>1)return;this.eventContext.updateRaycaster(e);let{raycaster:t,page:i}=this.eventContext,r=i.raycastWithClones(t);if(this.lastDropDestination=null,0===r.length){this.activeEvent=null;return}for(let e of this.events){let t=0;for(let{obj:i,pointEnd:s,pointStart:a}of e.dragItems){if(i===r[0].object||i===r[0].object.object||wQ.is(i)&&i.isAncestorOf(r[0].object.uuid)){if(e.activeIdx=t,e.activeDragItem.reset=!1,e.activeDragItem.currentDampingFactor=e.data.dampingFactor,e.activeDragItem.snapped=!1,"hand"===e.data.cursor&&this.setCursor("grabbing"),this.eventManager.controlsManager.usePhysics){e.activeDragItem.obj.rigidBody&&e.activeDragItem.obj.rigidBody.setBodyType(2,!0);let t=e.activeDragItem.obj;i.hasNonUniformScale&&i.updateMatrixWorldSVD(),(t.hasNonUniformScale?t.matrixWorldRigid:t.matrixWorld).decompose(RZ,R0,RJ),R1.setFromQuaternion(R0),void 0===t.prevR?(t.prevR=R1.clone(),t.prevT=RZ.clone()):(t.prevR.copy(R1),t.prevT.copy(RZ)),this.eventManager.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim.push(e.activeDragItem.obj)}this.calcPlaneIntersectPos(i,a,e.data.plane,e.data.referenceFrame),s.copy(a),(this.eventManager.controlsManager.usePhysics&&i.data.physics?.rigidBody==="dynamic"||!1===e.data.drop||!1===e.data.resetOnSnapFail)&&e.activeDragItem.fromPosition.setFromMatrixPosition(e.activeDragItem.obj.matrixWorld),this.activeEvent=e,this.eventManager.controlsManager.orbitControls&&(this.eventManager.controlsManager.orbitControls.enabled=!1);return}t++}}this.activeEvent=null},this.onPointerMove=e=>{if(u1.length>1)return;this.eventContext.updateRaycaster(e);let{raycaster:t,page:i}=this.eventContext,r=i.raycastWithClones(t);if(0===u1.length){let e=!1;for(let t of this.events){for(let{obj:i}of t.dragItems)if(i===r[0]?.object||i===r[0]?.object?.object||wQ.is(i)&&i.isAncestorOf(r[0]?.object.uuid)){switch(e=!0,t.data.cursor){case"hand":this.setCursor("grab");break;case"move":this.setCursor("move")}break}if(e)break}e||this.setCursor("default");return}if(this.activeEvent&&this.activeEvent.activeDragItem){let e,t=this.activeEvent.activeDragItem;if(t.snapped=!1,this.activeEvent.data.drop&&(e=r.filter(e=>t.obj!==e.object&&!t.obj.isAncestorOf(e.object.uuid)&&!(e.object instanceof EO)&&("all"===this.activeEvent.data.dropOn||this.activeEvent.dropDestIds.some(t=>t===e.object.uuid||i.scene.find(t).isAncestorOf(e.object.uuid))))[0]),e){let i=R$.copy(e.face.normal).applyMatrix3(R3.getNormalMatrix(e.object.matrixWorld));if("center"===this.activeEvent.data.snapTo)t.fromPosition.setFromMatrixPosition(e.object.matrixWorld);else if("surface"===this.activeEvent.data.snapTo){if(t.fromPosition.copy(e.point),"bbox"===this.activeEvent.data.snapSurfaceMode){RZ.copy(i).applyMatrix3(R3.setFromMatrix4(t.obj.matrixWorld).transpose());let e=t.obj;RZ.x>.2?RJ.x=-e.recursiveBBox.min.x:RZ.x<-.2&&(RJ.x=-e.recursiveBBox.max.x),RZ.y>.2?RJ.y=-e.recursiveBBox.min.y:RZ.y<-.2&&(RJ.y=-e.recursiveBBox.max.y),RZ.z>.2?RJ.z=-e.recursiveBBox.min.z:RZ.z<-.2&&(RJ.z=-e.recursiveBBox.max.z),RJ.applyM
8404atrix3(R3.invert())}else RJ.copy(i).multiplyScalar(this.activeEvent.data.snapSurfaceOffset);t.fromPosition.add(RJ)}this.activeEvent.data.autoOrient&&(RZ.set(0,1,0).cross(i),1e-4>RZ.length()&&RZ.set(-1,0,0).cross(i),RJ.crossVectors(R$,RZ),t.orientationMatrix.makeBasis(RZ,RJ,i)),t.pointStart.copy(t.fromPosition),t.pointEnd.copy(t.pointStart),t.currentDampingFactor=this.activeEvent.snapDampingFactor,t.snapped=!0,this.lastDropDestination!==e.object&&(this.lastDropDestination=e.object,this.activeEvent.actionsDrop.Transition.forEach(e=>{e.play()}),this.activeEvent.actionsDrop.Animation.forEach(e=>{e.play()}),this.activeEvent.actionsDrop.Audio.forEach(e=>{e.dispatchGameControl("start")}),this.activeEvent.actionsDrop.Particles.forEach(e=>{e.dispatchGameControl("start")}),this.activeEvent.actionsDrop.Create.forEach(e=>{e.dispatchThrottled()}))}else t.orientationMatrix.makeRotationFromQuaternion(t.quat0),this.lastDropDestination=null,t.currentDampingFactor=this.activeEvent.data.dampingFactor,this.calcPlaneIntersectPos(t.obj,t.pointEnd,this.activeEvent.data.plane,this.activeEvent.data.referenceFrame),this.activeEvent.actionsDrop.Transition.forEach(e=>{e.stop(),null!==e.object.currentState&&e.object.changeSelectedState(null,{scene:this.eventContext.page.scene,shared:this.eventContext.sharedAssets})}),this.activeEvent.actionsDrop.Animation.forEach(e=>{e.stop()}
8404),this.activeEvent.actionsDrop.Audio.forEach(e=>{e.dispatchGameControl("stop")}),this.activeEvent.actionsDrop.Particles.forEach(e=>{e.dispatchGameControl("stop")});this.activeEvent.actionsDrag.Create.forEach(e=>{e.dispatchThrottled()}),this.activeEvent.actionsDrag.SetVariable.forEach(e=>e.checkConditions()),this.activeEvent.actionsDrag.SetVariable.forEach(e=>e.dispatch()),this.activeEvent.actionsDrag.DynamicVariablePlay.forEach(e=>e.dispatch()),this.activeEvent.actionsDrag.ClearLocalStorage.forEach(e=>e.dispatch()),this.activeEvent.actionsDrag.UserAPI.forEach(e=>e.dispatch()),!1===this.activeEvent.wasDragEventTriggered&&(this.activeEvent.wasDragEventTriggered=!0,this.activeEvent.actionsDrag.Transition.forEach(e=>{e.play()}),this.activeEvent.actionsDrag.Animation.forEach(e=>{e.play()}),this.activeEvent.actionsDrag.Audio.forEach(e=>{e.dispatchGameControl("start")}),this.activeEvent.actionsDrag.Particles.forEach(e=>{e.dispatchGameControl("start")})),this.dragTimeout&&window.clearTimeout(this.dragTimeout),this.dragTimeout=window.setTimeout(()=>{this.activeEvent&&(this.activeEvent.wasDragEventTriggered=!1,this.activeEvent.actionsDrag.Audio.forEac
vendor: 5,919 bytes, line 8404
8404h(e=>{e.dispatchGameControl("stop")}),this.activeEvent.actionsDrag.Particles.forEach(e=>{e.dispatchGameControl("stop")}),this.activeEvent.actionsDrag.Transition.forEach(e=>{e.stop(),null!==e.object.currentState&&e.object.changeSelectedState(null,{scene:this.eventContext.page.scene,shared:this.eventContext.sharedAssets})}),this.activeEvent.actionsDrag.Animation.forEach(e=>{e.stop()}))},500),this.updateDragItem(t),t.obj.dispatchEvent({type:"requestRender"})}},this.onPointerUp=e=>{if(this.activeEvent&&this.activeEvent.activeDragItem){"hand"===this.activeEvent.data.cursor&&this.setCursor("grab");let e=this.activeEvent.activeDragItem.obj.data.physics?.rigidBody==="dynamic";!1===this.activeEvent.activeDragItem.snapped&&this.activeEvent.data.drop&&this.activeEvent.data.resetOnSnapFail&&(!1===this.eventManager.controlsManager.usePhysics||!e)&&(this.activeEvent.activeDragItem.reset=this.activeEvent.data.resetOnSnapFail,this.activeEvent.activeDragItem.paused=!1,this.activeEvent.activeDragItem.currentDampingFactor=this.activeEvent.resetDampingFactor),this.eventManager.controlsManager.usePhysics&&e&&(this.eventManager.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim.pop(),this.activeEvent.activeDragItem.obj.rigidBody.setBodyType(0,!0),this.activeEvent.activeDragItem.paused=!0),!0===this.activeEvent.wasDragEventTriggered&&(this.activeEvent.wasDragEventTriggered=!1,this.activeEvent.actionsDrag.Transition.forEach(e=>{e.stop(),null!==e.object.currentState&&e.object.changeSelectedState(null,{scene:this.eventContext.page.scene,shared:this.eventContext.sharedAssets})}),this.activeEvent.actionsDrag.Animation.forEach(e=>{e.stop()}),this.activeEvent.actionsDrag.Audio.forEach(e=>{e.dispatchGameControl("stop")}),this.activeEvent.actionsDrag.Particles.forEach(e=>{e.dispatchGameControl("stop")}),this.activeEvent.actionsDrop.SetVariable.forEach(e=>e.checkConditions()),this.activeEvent.actionsDrop.SetVariable.forEach(e=>e.dispatch()),this.activeEvent.actionsDrop.DynamicVariablePlay.forEach(e=>e.dispatch()),this.activeEvent.actionsDrop.ClearLocalStorage.forEach(e=>e.dispatch()),this.activeEvent.actionsDrop.UserAPI.forEach(e=>e.dispatch())),this.eventManager.controlsManager.orbitControls&&(this.eventManager.controlsManager.orbitControls.enabled=!0)}}}connect(){let e={};if(this.eventContext.page.traverseEntity(t=>{t.component&&(e[t.component.uuid]?e[t.component.uuid].push(t.uuid):e[t.component.uuid]=[t.uuid])}),this.eventContext.page.traverseEntity(t=>{t.data?.events.filter(e=>"DragDrop"===e.data.type&&!e.data.disabled).forEach(i=>{this.events.push(new R9(t,i.id,i.data,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager,e))})}),!this.events.length)return;this.domEventsNeeded.clear(),this.domEventsNeeded.add("pointerdown");let t=this.eventContext.domElement;t.addEventListener("pointerdown",this.onPointerDown),t.addEventListener("pointermove",this.onPointerMove),t.addEventListener("pointerup",this.onPointerUp),this.domEventsNeeded.add("pointermove")}disconnect(){if(!this.events.length)return;this.domEventsNeeded.clear();let e=this.eventContext.domElement;e.removeEventListener("pointerdown",this.onPointerDown),e.removeEventListener("pointermove",this.onPointerMove),e.removeEventListener("pointerup",this.onPointerUp),this.events.forEach(e=>e.dispose())}setCursor(e){this.eventContext.domElement.style.cursor=e}onAnimationFrameDamping(){for(let e of this.events)for(let t of e.dragItems)t.paused||this.updateDragItem(t,!0)}calcPlaneIntersectPos(e,t,i,r){let{getCamera:s,raycaster:a}=this.eventContext;s().getWorldDirection(RY),RY.negate();let o=R0.identity();switch("parent"===r?R2.multiplyMatrices(e.parent.matrixWorld,e.hiddenMatrix).decompose(RZ,o,RJ):"local"===r&&e.matrixWorld.decompose(RZ,o,RJ),i){case"x":RZ.set(1,0,0).applyQuaternion(o),R4.copy(RY).cross(RZ),R5.copy(RZ).cross(R4);break;case"y":RZ.set(0,1,0).applyQuaternion(o),R4.copy(RY).cross(RZ),R5.copy(RZ).cross(R4);break;case"z":RZ.set(0,0,1).applyQuaternion(o),R4.copy(RY).cross(RZ),R5.copy(RZ).cross(R4);break;case"xy":R5.set(0,0,1).applyQuaternion(o);break;case"yz":R5.set(1,0,0).applyQuaternion(o);break;case"xz":R5.set(0,1,0).applyQuaternion(o);break;case"adaptive":RY.angleTo(RJ.set(0,1,0))>Math.PI/6?(RZ.crossVectors(RJ.set(0,1,0),RY),R5.crossVectors(RZ,RJ)):R5.set(0,1,0);break;default:R5.copy(RY)}RQ.setFromMatrixPosition(e.matrixWorld);let l=e.userData.lockedPlane?e.userData.worldPosition0:RQ;if(RK.setFromNormalAndCoplanarPoint(R5,l),a.ray.intersectPlane(RK,t)&&("x"===i||"y"===i||"z"===i)){let e=RJ.subVectors(t,l).dot(RZ);t.copy(l).addScaledVector(RZ,e)}}updateDragItem(e,t=!1){RQ.setFromMatrixPosition(e.obj.matrixWorld),"current"===e.reset?RX.subVectors(e.fromPosition,RQ).divideScalar(e.currentDampingFactor):"original"===e.reset?(RX.subVectors(e.obj.userData.worldPosition0,RQ).divideScalar(e.currentDampingFactor),e.fromPosition.copy(e.obj.userData.worldPosition0),e.pointStart.copy(e.fromPosition),e.pointEnd.copy(e.pointStart)):RX.subVectors(e.pointEnd,e.pointStart).add(e.fromPosition).sub(RQ).divideScalar(e.currentDampingFactor),e.paused=!(e.currentDampingFactor>1)||.01>RX.length(),(this.activeEvent&&1===this.activeEvent.data.dampingFactor||t)&&R8(e,RX.add(RQ),this.activeEvent?.data.drop&&this.activeEvent?.data.autoOrient?e.orientationMatrix:null),e.obj.dispatchEvent({type:"beginEvent",eventName:"DragDrop"}),this.eventManager.requestRender()}},Le=new iv,Lt=new iv,Li=new iv,Lr=new iv,Ls=new ss,La={type:"requestRender"},Ln=(ts=new iv,ta=new iv,(e,t,i)=>i>0?(ts.subVectors(e,t),ts.length()<=i?e:ta.copy(t).add(ts.normalize().multiplyScalar(i))):t),Lo=(tn=new iX,(e,t)=>{e.position.copy(t),null!==e.parent&&(tn.copy(e.parent.matrixWorld).invert(),e.position.applyMatrix4(tn)),tn.copy(e.hiddenMatrix).invert(),e.position.applyMatrix4(tn),e.updateMatrix(),e.hasNonUniformScale&&(e.updateMatrixWorld(),e.updateMatrixWorldSVD()),e instanceof SP&&E_(e.parent)&&e.invali
8404dateDownstreamBooleanData(!0)}),Ll=class{constructor(e,t,i,r,s,a){this.data=e,this.id=t,this.object=i,this.paused=!1,this.currentDampingFactor=1,this.snapComplete=!1,this.isReset=!1,this.worldPosition0=new iv,this.timeoutId=null,this.delayFinished=!0,this.wasOutside=!1,this.data={...mK.defaultData,...e,...void 0===e.resetOnPointerLeave&&{resetOnPointerLeave:!1}},void 0===e.target||"cursor"===e.target||(this.target=r.find(e.target)),this.data.dampingFactor&&(this.currentDampingFactor=this.data.dampingFactor),this.resetDampingFactor=80/this.data.resetSpeed+1,this.object.getWorldPosition(this.worldPosition0),this.actions=OX(e,e.actions,r,s,a,i)}},Lh=class extends RR{constructor(e,t){super(e),this.eventManager=t,this.events=[],this.pairOfEventListeners=[],this.onMouseMove=e=>{if(!(u1.length>1))for(let t of(this.eventContext.updateRaycaster(e),this.events))void 0===t.target&&this.updateSingleEvent(t)},this.onMouseEnter=e=>{for(let e of this.events)void 0===e.target&&(e.isReset=!1,e.currentDampingFactor=e.data.dampingFactor)},this.onMouseLeave=e=>{for(let e of this.events)void 0===e.target&&(e.data.resetOnPointerLeave&&(e.isReset=!0,e.currentDampingFactor=e.resetDampingFactor),this.updateSingleEvent(e))},this.onTargetChange=e=>()=>{this.updateSingleEvent(e)}}connect(){let{page:e}=this.eventContext;if(e.traverseEntity(t=>{let i=t.data?.events.find(e=>"Follow"===e.data.type&&!e.data.disabled);i&&(!e.data.globalPhysics.usePhysics||t.dataPatched.physics?.rigidBody!=="dynamic")&&this.events.push(new Ll(i.data,i.id,t,e,this.eventContext.sharedAssets,this.eventManager))}),!this.events.length)return;let{domElement:t,eventElement:i}=this.eventContext;for(let e of(this.domEventsNeeded.clear(),uQ&&(this.domEventsNeeded.add("pointerdown"),t.addEventListener("pointerdown",this.onMouseMove)),this.domEventsNeeded.add("pointermove"),i.addEventListener("pointermove",this.onMouseMove),this.eventContext.useWindowEvents||(t.addEventListener("pointerenter",this.onMouseEnter),t.addEventListener("pointerleave",this.onMouseLeave)),this.events))if(void 0!==e.target){let t=e.target,i=this.onTargetChange(e);this.pairOfEventListeners.push([t,i]),t.addEventListener("requestRender",i)}}disconnect(){if(!this.events.length)return;let{domElement:e,eventElement:t}=this.eventContext;for(let[i,r]of(this.domEventsNeeded.clear(),uQ&&e.removeEventListener("pointerdown",this.onMouseMove),t.removeEventListener("pointermove",this.onMouseMove),e.removeEventListener("pointerenter",this.onMouseEnter),e.removeEventListener("pointerleave",this.onMouseLeave),this.pairOfEventListeners))i.removeEventListener("requestRender",r);for(let e of this.events)e.paused=!0,e.isReset=!1,OY(e.actions)}onAnimationFrameDamping(){for(let e of this.events)e.paused||this.updateSingleEvent(e,!0)}updateSingleEvent(e,t=!1){this.events.forEach(e=>{e.actions.Create.forEach(e=>{e.dispatchThrottled()})});let{plane:i,limitDistance:r,limitDistanceEnabled:s}=e.data;if(e.object.getWorldPosition(Li),e.isReset)Lr.copy(e.worldPosition0);else if(e.target)e.target.getWorldPosition(Lr);else{let{getCamera:e,raycaster:t}=this.eventContext;if("custom"===i?(e().getWorldDirection(Lt),Lt.negate(),Le.copy(Lt)):"xy"===i?Le.set(0,0,1):"xz"===i?Le.set(0,1,0):"yz"===i&&Le.set(1,0,0),Ls.setFromNormalAndCoplanarPoint(Le,Li),!t.ray.intersectPlane(Ls,Lr))return}if(!e.isReset){if(Lr.distanceTo(e.worldPosition0)>r&&s&&e.target){if(e.snapComplete=!1,e.data.snapDelay&&(e.delayFinished=!1,"u">typeof window&&null!==e.timeoutId&&(window.clearTimeout(e.timeoutId),e.timeoutId=null)),e.wasOutside=!0,!e.data.resetAfterDistanceLimit)return;Lr.copy(e.worldPosition0),e.currentDampingFactor=e.resetDampingFactor}else if(e.wasOutside&&(e.data.snapDelay&&"u">typeof window&&(e.timeoutId=window.setTimeout(()=>{e.delayFinished=!0,e.paused=!1,this.updateSingleEvent(e)},1e3*e.data.snapDelay)),e.currentDampingFactor=e.data.dampingFactor,e.wasOutside=!1),!1===e.delayFinished)return}!1===e.data.enabledTranslation[0]&&(Lr.x=Li.x),!1===e.data.enabledTranslation[1]&&(Lr.y=Li.y),!1===e.data.enabledTranslation[2]&&(Lr.z=Li.z);
8404let a=Ln(Li,Lr,e.wasOutside?0:e.data.maxDelta);if(e.currentDampingFactor>1){let i=Le.subVectors(a,Li).divideScalar(e.currentDampingFactor);Li.add(i),t&&Lo(e.object,Li),e.paused=.01>i.length()}else Lo(e.object,a),e.paused=!0;e.object?.dispatchEvent({type:"beginEvent",eventName:"Follow"}),e.object.dispatchEvent(La)}},Lc=new iv,Ld=new iv,Lu=new iX,Lp=new ig,Lf=new ig,Lm=new iv,Lg=new iv,Lv=new iv,Ly=new iv,Lx=new ss,Lb={type:"requestRender"},Lw={type:"changeRotation"},LS=(to=new iX,function(e,t){null!==e.parent?to.multiplyMatrices(e.parent.matrixWorld,e.hiddenMatrix):to.copy(e.hiddenMatrix),t.premultiply(RA(to).invert()),e.rotation.setFromRotationMatrix(t),e.updateMatrix(),e instanceof SP&&E_(e.parent)&&e.invalidateDownstreamBooleanData(!0)}),L_=class{constructor(e,t,i,r){this.id=t,this.object=i,this.paused=!1,this.currentDampingFactor=1,this.isReset=!1,this.worldQuaternion0=new ig,this.timeoutId=null,this.delayFinished=!0,this.wasOutside=!1,this.data={...mZ.defaultData,...e,...void 0===e.resetOnPointerLeave&&{resetOnPointerLeave:!1}},void 0===e.target||"cursor"===e.target||(this.target=r.find(e.target)),this.data.dampingFactor&&(this.currentDampingFactor=this.data.dampingFactor),this.object.getWorldQuaternion(this.worldQuaternion0),this.resetDampingFactor=80/this.data.resetSpeed+1}},LA=class extends RR{constructor(){super(...arguments),this.events=[],this.pairOfEventListeners=[],this.pairOfUserEventListeners=[],this.onMouseMove=e=>{if(!(u1.length>1))for(let t of(this._lastMouseEvent=e,this.eventContext.updateRaycaster(e),this.events))void 0===t.target&&this.updateSingleEvent(t)},this.onMouseEnter=e=>{for(let e of this.events)void 0===e.target&&(e.isReset=!1,e.currentDampingFactor=e.data.dampingFactor)},this.onMouseLeave=e=>{for(let e of this.events)void 0===e.target&&(e.data.resetOnPointerLeave&&(e.isReset=!0,e.currentDampingFactor=e.resetDampingFactor),this.updateSingleEvent(e))},this.onScroll=e=>{if(this._lastMouseEvent){let e=new PointerEvent("pointermove",{clientX:this._lastMouseEvent.clientX,clientY:this._lastMouseEvent.clientY,bubbles:!0,cancelable:!0,view:window});this.eventContext.eventElement.dispatchEvent(e)}},this.onTargetChange=e=>()=>{this.updateSingleEvent(e)},this.createUserEventListener=e=>({eventName:t,target:i})=>{if(!t||!i)return;let r=Rz(t);r&&"LookAt"===r&&this.updateSingleEvent(e)}}connect(){let{page:e}=this.eventContext;if(e.traverseEntity(t=>{let i=t.data?.events.find(e=>"LookAt"===e.data.type&&!e.data.disabled);i&&(!e.data.globalPhysics.usePhysics||t.dataPatched.physics?.rigidBody!=="dynamic")&&this.events.push(new L_(i.data,i.id,t,e))}),!this.events.length)return;let{domElement:t,eventElement:i}=this.eventContext;for(let e of(this.domEventsNeeded.clear(),uQ&&(this.domEventsNeeded.add("pointerdown"),t.addEventListener("pointerdown",this.onMouseMove)),this.domEventsNeeded.add("pointermove"),i.addEventListener("pointermove",this.onMouseMove),this.eventContext.useWindowEvents?i.addEventListener("scroll",this.onScroll):(t.addEventListener("pointerenter",this.onMouseEnter),t.addEventListener("pointerleave",this.onMouseLeave)),this.events)){if(void 0!==e.target){let t=this.onTargetChange(e),i=e.target;this.pairOfEventListeners.push([i,t]),i.addEventListener("requestRender",t)}let t=this.createUserEventListener(e),i=e.object;this.pairOfUserEventListeners.push([i,t]),i.addEventListener("userEvent",t)}}disconnect(){if(!this.events.length)return;let{domElement:e,eventElement:t}=this.eventContext;for(let[i,r]of(this.domEventsNeeded.clear(),uQ&&e.removeEventListener("pointerdown",this.onMouseMove),t.removeEventListener("pointermove",this.onMouseMove),e.removeEventListener("pointerenter",this.onMouseEnter),e.removeEventListener("pointerleave",this.onMouseLeave),t.removeEventListener("scroll",this.onScroll),this.pairOfEventListeners))i.removeEventListener("requestRender",r);for(let[e,t]of this.pairOfUserEventListeners)e.removeEventListener("userEvent",t);for(let e of this.events)e.paused=!0,e.isReset=!1}onAnimationFrameDamping(){for(let e of this.events)e.paused||this.updateSingleEvent(e)}updateSingleEvent(e){let{tilt:t,axis:i,distance:r,plane:s,limitDistance:a,enabledRotation:o,limitDistanceEnabled:l}=e.data,{getCamera:h,raycaster:c}=this.eventContext,{object:d,target:u}=e;if(d.getWorldPosition(Lm),!e.isReset){if(e.target)e.target.getWorldPosition(Lg);else{if("custom"===s?(h().getWorldDirection(Ld),Ld.negate(),Lx.setFromNormalAndCoplanarPoint(Ld,Lm)):("xy"===s?Lc.set(0,0,1):"xz"===s?Lc.set(0,1,0):"yz"===s&&Lc.set(1,0,0),Lx.setFromNormalAndCoplanarPoint(Lc,Lm)),!c.ray.intersectPlane(Lx,Lg))return;r>0&&("custom"===s||void 0===s)&&Lg.addScaledVector(Ld,r)}}if(e.isReset||(u?"target"===t?Lv.copy(u.up).applyMatrix4(Lu.extractRotation(u.matrixWorld)).normalize():o.some(e=>!1===e)?("x"===i?(Ly.set(0,0,1),!1===o[2]&&Ly.set(0,1,0)):"y"===i?(Ly.set(1,0,0),!1===o[0]&&Ly.set(0,0,1)):(Ly.set(0,1,0),!1===o[1]&&Ly.set(1,0,0)),Lv.copy(Ly).applyQuaternion(e.worldQuaternion0).normalize()):Lv.set(0,1,0):"custom"===s?Lv.set(0,1,0):Lv.copy(Lc)),e.isReset)Lf.copy(e.worldQuaternion0);else if(Lm.distanceTo(Lg)>a&&l&&u){if(e.data.snapDelay&&(e.delayFinished=!1,"u">typeof window&&null!==e.timeoutId&&(window.clearTimeout(e.timeoutId),e.timeoutId=null)),e.wasOutside=!0,!e.data.resetAfterDistanceLimit)return;Lf.copy(e.worldQuaternion0),e.currentDampingFactor=e.resetDampingFactor}else{let r;if(e.wasOutside&&(e.data.snapDelay&&"u">typeof window&&(e.timeoutId=window.setTimeout(()=>{e.delayFinished=!0,e.paused=!1,this.updateSingleEvent(e)},1e3*e.data.snapDelay)),e.currentDampingFactor=e.data.dampingFactor,e.wasOutside=!1),!1===e.delayFinished)return;r=Lu.elements,LC.subVectors(Lg,Lm),0===LC.lengthSq()&&(LC.z=1),LC.normalize(),LE.crossVectors(Lv,LC),0===LE.lengthSq()&&(1===Math.abs(Lv.z)?LC.x+=1e-4:LC.z+=1e-4,LC.normalize(),LE.crossVectors(Lv,LC)),LE.normalize(),LM.crossVectors(LC,LE),"x"===i?1===Ly.z?[LE,LM,LC]=[LC,LE,LM]:(LE.negate(),[LE,LC]=[LC,LE]):"y"===i?1===Ly.x?[LE,LM,LC]=[LM,LC,LE]:(LE.negate(),[LM,LC]=[LC,LM]):1===Ly.x&&(LE.negate(),[LE,LM]=[LM,LE]),r[0]=LE.x,r[4]=LM.x,r[8]=LC.x,r[1]=LE.y,r[5]=LM.y,r[9]=LC.y,r[2]=LE.z,r[6]=LM.z,r[10]=LC.z,Lf.setFromRotationMatrix(Lu),Lp.setFromUnitVectors(Ly.applyQuaternion(Lf),Lv),o.some(e=>!1===e)&&"target"!==t&&Lf.premultiply(Lp).normalize()}e.currentDampingFactor>1?(d.updateWorldMatrix(!0,!1),Lp.setFromRotationMatrix(RA(d.matrixWorld)),Lp.slerp(Lf,1/e.currentDampingFactor),LS(d,Lu.makeRotationFromQuaternion(Lp)),e.paused=8*(1-L
vendor: 13,068 bytes, line 8404
8404p.dot(Lf))<1e-6):(LS(d,Lu.makeRotationFromQuaternion(Lf)),e.paused=!0),e.object?.dispatchEvent({type:"beginEvent",eventName:"LookAt"}),d.dispatchEvent(Lb),d.dispatchEvent(Lw)}},LM=new iv,LE=new iv,LC=new iv,LT=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.entered=!1,this.actions=OX(t,t.actions,r,s,a,i)}disconnect(){OY(this.actions)}dispatchEnter(){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.entered||(this.entered=!0,this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.play()),this.actions.Create.forEach(e=>e.dispatchStart()),this.actions.Particles.forEach(e=>e.dispatchBasic()),this.actions.Destroy.forEach(e=>e.dispatch()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent()),this.actions.SceneTransition.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()))}dispatchLeave(){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.entered&&(this.entered=!1,this.actions.Create.forEach(e=>e.dispatchStop()),this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Particles.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent()))}dispatchUserEvent(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),e?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Particles.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.playFromCurrent()),this.actions.Create.forEach(e=>e.dispatch()),this.actions.Particles.forEach(e=>e.dispatchBasic()),this.actions.Destroy.forEach(e=>e.dispatch()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent())),this.actions.SceneTransition.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}},LP=class extends RR{constructor(e,t){super(e),this.eventManager=t,this.eventsPerObjects={},this.objects=[],this.objects2D=[],this._prevObjects=[],this.onMouseDown=e=>{u1.length>1||(this.eventContext.updateRaycaster(e),this.handleMouseHoverEvent())},this.onMouseUp=e=>{u1.length>1||this.handleMouseHoverEvent(!0)},this.onMouseMove=e=>{u1.length>1||(this.eventContext.updateRaycaster(e),this.handleMouseHoverEvent())},this.onUserEvent=({eventName:e,target:t,reverse:i})=>{if(!e||!t)return;let r=Rz(e);r&&"MouseHover"===r&&(t.dispatchEvent({type:"beginEvent",eventName:"MouseHover"}),this.eventsPerObjects[t.uuid]?.forEach(e=>e.dispatchUserEvent(i)))}}connect(){let{page:e,sharedAssets:t}=this.eventContext,i=(i,r)=>{if(!(!i.visible||!i.data?.events.length)){for(let{id:r,data:s}of i.data.events)if(!s.disabled&&"MouseHover"===s.type)try{let a=new LT(r,s,i,e,t,this.eventManager);this.eventsPerObjects[i.uuid]?this.eventsPerObjects[i.uuid].push(a):this.eventsPerObjects[i.uuid]=[a]}catch(e){}this.eventsPerObjects[i.uuid]?.length&&this.objects.push(i instanceof TY?r:i)}};if(e.traverseEntity(e=>{(e instanceof Pk||e instanceof PD)&&e.frame?.traverse(t=>{i(t,e)}),i(e)}),!this.objects.length)return;let{domElement:r}=this.eventContext;this.domEventsNeeded.clear(),uQ&&(this.domEventsNeeded.add("pointerdown"),r.addEventListener("pointerdown",this.onMouseDown),this.domEventsNeeded.add("pointerup"),r.addEventListener("pointerup",this.onMouseUp)),this.domEventsNeeded.add("pointermove"),r.addEventListener("pointermove",this.onMouseMove),this.objects.forEach(e=>{e.addEventListener("userEvent",this.onUserEvent)})}disconnect(){if(!this.objects.length)return;let{domElement:e}=this.eventContext;this.domEventsNeeded.clear(),uQ&&(e.removeEventListener("pointerdown",this.onMouseDown),e.removeEventListener("pointerup",this.onMouseUp)),e.removeEventListener("pointermove",this.onMouseMove),Object.values(this.eventsPerObjects).forEach(e=>{e.forEach(e=>{e.disconnect()})}),this.objects.forEach(e=>{e.removeEventListener("userEvent",this.onUserEvent)})}handleMouseHoverEvent(e=!1){let t=[];if(!e){let{stopRaycast:e,raycaster:i,page:r,pointerScreen:s}=this.eventContext,a=!1;if(r.uiCanvas&&(a=RD(r,[s.x,s.y],Object.keys(this.eventsPerObjects),e=>{t.push(e)})),e&&!a){let e=RT(i,r,this.objects);t=RP(e),e.forEach(e=>{e.object instanceof Pk&&RD(e.object,[e?.uv?.x??0,e?.uv?.y??0],Object.keys(this.eventsPerObjects),e=>{t.push(e)})})}else this.objects.forEach(e=>{let r=RI(i,e);r&&(t.push(e),e instanceof Pk&&RD(e,[r?.uv?.x??0,r?.uv?.y??0],Object.keys(this.eventsPerObjects),e=>{t.push(e)}))})}this._prevObjects.length&&this._prevObjects.forEach(e=>{t.includes(e)||(e.dispatchEvent({type:"beginEvent",eventName:"MouseHover"}),this.eventsPerObjects[e.uuid]?.forEach(e=>e.dispatchLeave()))}),t.length&&t.forEach(e=>{e.dispatchEvent({type:"beginEvent",eventName:"MouseHover"}),this.eventsPerObjects[e.uuid]?.forEach(e=>e.dispatchEnter())}),this._prevObjects=t}},LD=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.scrollCounter=0,this.actions=OX(t,t.actions,r,s,a,i)}connect(){this.scrollCounter=0}disconnect(){OY(this.actions)}dispatch(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())});let t=e>0?1:-1;this.scrollCounter+=t,this.scrollCounter=Math.min(Math.max(this.scrollCounter,0),this.data.steps);let i=this.scrollCounter/this.data.steps;this.actions.Transition.forEach(e=>e.seek(i)),this.actions.Animation.forEach(e=>e.seek(t)),this.actions.Create.forEach(e=>e.dispatchThrottled()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}dispatchUserEvent(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),e?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>{e.playFromCurrent()}),this.actions.Animation.forEach(e=>{e.playFromCurrent()})),this.actions.Create.forEach(e=>e.dispatchThrottled()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}},LI=class{constructor(e,t,i,r,s,a,o){this.id=e,this.data=t,this.object=i,this.domElement=a,this.eventManager=o,this.scrollStart=0,this.scrollEnd=0,this.actions=OX(t,t.actions,r,s,o,i)}getStickyParentElement(){let e=this.domElement;for(;e;){if("sticky"===window.getComputedStyle(e).position)return e;e=e.parentElement}return null}computeScrollBounds(){let e=this.getStickyParentElement(),t=e?.parentElement,i=this.domElement.getBoundingClientRect(),r={top:i.top,bottom:i.bottom,left:i.left,right:i.right,width:i.width,height:i.height};if(t){let s=t.getBoundingClientRect(),a=window.getComputedStyle(e),o=parseFloat(a.marginTop)+parseFloat(a.marginBottom),l=parseFloat(a.top),h=parseFloat(a.bottom),c=s.height-o;if(isNaN(l)){if(!isNaN(h)){let e=document.body.clientHeight??window.innerHeight,t=window.innerWidth-(document.documentElement.clientWidth??window.innerWidth);i.bottom===e-h?(r.top+=s.top-i.height+h+t,r.bottom+=s.top-i.height+h+t):i.bottom<e-h&&(r.top-=c-i.height,r.bottom-=c-i.height)}}else i.top===l?(r.top+=s.top-l,r.bottom+=s.top-l):i.top<0&&(r.top-=c-i.height,r.bottom-=c-i.height)}let s=document.body,a=document.documentElement,o=window.pageYOffset||a.scrollTop||s.scrollTop,l=a.clientTop||s.clientTop||0,h=Math.round(r.top+o-l);if("enter"===this.data.startFrom){let e=window.innerHeight,t=r.height,i=this.data.enterAnchor;this.scrollStart=h-("top"===i?e:"bottom"===i?e-t:e-.5*t)}else this.scrollStart=0;this.scrollStart+=this.data.startOffset??0,this.scrollEnd=this.scrollStart+(this.data.endAfter??400),this.box=r,this.computeScroll({x:window.scrollX,y:window.scrollY})}connect(){this.computeScrollBounds()}disconnect(){OY(this.actions)}handleResize(){this.computeScrollBounds()}get isInvalidBox(){return void 0===this.box||0===this.box.width&&0===this.box.height&&0===this.box.top&&0===this.box.bottom}computeScroll({x:e,y:t}){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())});let i=this.scrollEnd-this.scrollStart,r=Math.min(1,Math.max(0,(t-this.scrollStart)/i));this.actions.Transition.forEach(e=>e.seek(r)),this.actions.Animation.forEach(e=>e.seek(r)),this.actions.Create.forEach(e=>e.dispatchThrottled()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}dispatch(e){this.isInvalidBox&&this.computeScrollBounds(),this.computeScroll(e)}dispatchUserEvent(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),e?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>{e.playFromCurrent()}),this.actions.Animation.forEach(e=>{e.playFromCurrent()})),this.actions.Create.forEach(e=>e.dispatchThrottled()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}},LO=class extends RR{constructor(e,t){super(e),this.managers=t,this.wheelEventsPerObject=new Map,this.scrollEventsPerObject=new Map,this.isInview=!0,this.handleResize=()=>{[...this.scrollEventsPerObject.entries()].forEach(([e,t])=>{t.forEach(e=>e.handleResize())})},this.onScroll=e=>{if(!this.isInview)return;let t={y:window.scrollY,x:window.scrollX};[...this.scrollEventsPerObject.entries()].forEach(([e,i])=>{e.dispatchEvent({type:"beginEvent",eventName:"Scroll",scroll:t}),i.forEach(e=>e.dispatch(t))})},this.onWheel=e=>{!this.isInview||e.ctrlKey||[...this.wheelEventsPerObject.entries()].forEach(([t,i])=>{t.dispatchEvent({type:"beginEvent",eventName:"Scroll",deltaY:e.deltaY}),i.forEach(t=>t.dispatch(e.deltaY))})},this.onUserEvent=({eventName:e,target:t,reverse:i})=>{if(!e||!t)return;let r=Rz(e);r&&"Scroll"===r&&(t.dispatchEvent({type:"beginEvent",eventName:"Scroll"}),this.wheelEventsPerObject.get(t)?.forEach(e=>{e.dispatchUserEvent(i)}))}}connect(){let{page:e,sharedAssets:t,domElement:i,isExport:r}=this.eventContext,s=s=>{if(s.data?.events.length){for(let{id:a,data:o}of s.data.events)if(!o.disabled&&"Scroll"===o.type){if("load"!==o.trigger&&r){let r=new LI(a,o,s,e,t,i,this.managers);this.scrollEventsPerObject.has(s)?this.scrollEventsPerObject.get(s)?.push(r):this.scrollEventsPerObject.set(s,[r])}else{let i=new LD(a,o,s,e,t,this.managers);this.wheelEventsPerObject.has(s)?this.wheelEventsPerObject.get(s)?.push(i):this.wheelEventsPerObject.set(s,[i])}}}};e.traverseEntity(e=>{(e instanceof Pk||e instanceof PD)&&e.frame?.traverse(e=>{s(e)}),s(e)}),this.intersectionObserver=new IntersectionObserver(e=>{let t=e[0];t&&(this.isInview=t.isIntersecting)},{root:null}),this.intersectionObserver.observe(this.eventContext.domElement),[...this.wheelEventsPerObject.entries()].forEach(([e,t])=>{t.forEach(e=>e.connect()),e.addEventListener("userEvent",this.onUserEvent)}),[...this.scrollEventsPerObject.entries()].forEach(([e,t])=>{t.forEach(e=>e.connect()),e.addEventListener("userEvent",this.onUserEvent)}),[...this.wheelEventsPerObject.values()].some(e=>e.length)&&(this.domEventsNeeded.add("wheel"),window.addEventListener("wheel",this.onWheel)),[...this.scrollEventsPerObject.values()].some(e=>e.length)&&(this.domEventsNeeded.add("scroll"),window.addEventListener("scroll",this.onScroll),window.addEventListener("resize",this.handleResize))}disconnect(){window.removeEventListener("wheel",this.onWheel),window.removeEventListener("scroll",this.onScroll),window.removeEventListener("resize",this.handleResize),this.intersectionObserver.unobserve(this.eventContext.domElement),this.domEventsNeeded.clear(),[...this.wheelEventsPerObject.entries()].forEach(([e,t])=>
8404{t.forEach(e=>e.disconnect()),e.removeEventListener("userEvent",this.onUserEvent)}),[...this.scrollEventsPerObject.entries()].forEach(([e,t])=>{t.forEach(e=>e.disconnect()),e.removeEventListener("userEvent",this.onUserEvent)})}},LR=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.actions=OX(t,t.actions,r,s,a,i)}disconnect(){OY(this.actions)}dispatch(){this.actions.Transition.forEach(e=>{e.play()}),this.actions.Animation.forEach(e=>{e.play()}),this.actions.SwitchCamera.forEach(e=>{e.play()}),this.actions.SceneTransition.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()),this.actions.Create.forEach(e=>{e.dispatchFromStart()}),this.actions.Destroy.forEach(e=>{e.dispatchFromStart()})}dispatchAfter(e){this.actions.Audio.forEac
8404h(t=>{(t.interaction.data.triggerAfter??"any")===e&&(t.interaction instanceof Ip?t.interaction.audioPlayer.play():t.interaction instanceof If&&t.interaction.dispatch())}),this.actions.Video.forEach(t=>{let i=t.interaction.data.triggerAfter??"autoplay";i===e&&(t.interaction instanceof OZ?t.interaction.play("autoplay"===i):t.interaction instanceof OJ&&t.interaction.dispatch())}),this.actions.Particles.forEach(t=>{(t.data.triggerAfter??"any")===e&&t.dispatchBasic()})}dispatchUserEvent(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),e?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.playFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent())),this.actions.SceneTransition.forEach(e=>e.dispatch()),this.actions.Reset.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()),this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(e=>{e.dispatch()}
8404),this.actions.Audio.forEach(e=>{e.interaction instanceof Ip?e.interaction.audioPlayer.play():e.interaction instanceof If&&e.interaction.dispatch()}),this.actions.Video.forEach(e=>{e.interaction instanceof OZ?e.interaction.play():e.interaction instanceof OJ&&e.interaction.dispatch()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()})}},LL=class extends RR{constructor(e,t){super(e),this.eventManager=t,this.eventsPerObject=new Map,this.eventsAfterPerObject=new Map,this.onMouseDown=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>{e.dispatchAfter("mouseDown")})})},this.onKeyDown=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>{e.dispatchAfter("keyDown")})})},this.onAny=()=>{let{domElement:e,isExport:t}=this.eventContext,i=t?document:e;i.removeEventListener("pointerdown",this.onAny),i.removeEventListener("mousedown",this.onAny),document.removeEventListener("keydown",this.onAny),[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>{e.dispatchAfter("any")})})},this.onSceneTransitionAudioVideoPlay=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>
vendor: 4,072 bytes, line 8404
8404{e.actions.Audio.forEach(e=>{e.interaction instanceof Ip&&e.interaction.audioPlayer.play()}),e.actions.Video.forEach(e=>{let t=e.interaction.data.triggerAfter??"autoplay";e.interaction instanceof OZ&&e.interaction.play("autoplay"===t)}),e.actions.Particles.forEach(e=>{e.dispatchBasic()})})})},this.onPlay=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>{e.dispatchAfter("autoplay")})})},this.onUserEvent=({eventName:e,target:t,reverse:i})=>{if(!e||!t)return;let r=Rz(e);r&&"Start"===r&&(t instanceof TY||t.dispatchEvent({type:"beginEvent",eventName:"Start"}),this.eventsPerObject.get(t)?.forEach(e=>{e.dispatchUserEvent(i)}),this.eventsAfterPerObject.get(t)?.forEach(e=>{e.dispatchUserEvent(i)}))}}connect(){let{sharedAssets:e,page:t}=this.eventContext,i=i=>{if(i.data?.events.length)for(let{id:r,data:s}of i.data.events){if(s.disabled||"Start"!==s.type)continue;let a=new LR(r,s,i,t,e,this.eventManager);(a.actions.Transition.length||a.actions.Animation.length||a.actions.SwitchCamera.length||a.actions.Create.length||a.actions.Destroy.length||a.actions.SceneTransition.length||a.actions.Reset.length||a.actions.SetVariable.length||a.actions.DynamicVariablePlay.length||a.actions.ClearLocalStorage.length||a.actions.UserAPI.length)&&(this.eventsPerObject.has(i)?this.eventsPerObject.get(i)?.push(a):this.eventsPerObject.set(i,[a])),a.actions.Audio.length&&(this.eventsAfterPerObject.has(i)?this.eventsAfterPerObject.get(i)?.push(a):this.eventsAfterPerObject.set(i,[a])),a.actions.Video.length&&(this.hasVideoAction=!0,this.eventsAfterPerObject.has(i)?this.eventsAfterPerObject.get(i)?.push(a):this.eventsAfterPerObject.set(i,[a])),a.actions.Particles.length&&(this.eventsAfterPerObject.has(i)?this.eventsAfterPerObject.get(i)?.push(a):this.eventsAfterPerObject.set(i,[a]))}};if(t.traverseEntity(e=>{(e instanceof Pk||e instanceof PD)&&e.frame?.traverse(e=>{i(e)}),i(e)}),[...this.eventsAfterPerObject.values()].some(e=>e.length)){if(0===this.eventManager.activateCount){let{domElement:e,isExport:t}=this.eventContext,i=t?document:e;i.addEventListener("pointerdown",this.onMouseDown,{once:!0}),i.addEventListener("mousedown",this.onMouseDown,{once:!0}),document.addEventListener("keydown",this.onKeyDown,{once:!0}),i.addEventListener("pointerdown",this.onAny),i.addEventListener("mousedown",this.onAny),document.addEventListener("keydown",this.onAny),[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.addEventListener("userEvent",this.onUserEvent)})}else this.onSceneTransitionAudioVideoPlay();this.onPlay()}[...this.eventsPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>e.dispatch()),e.addEventListener("userEvent",this.onUserEvent)})}disconnect(){if([...this.eventsAfterPerObject.values()].some(e=>e.length)){let{domElement:e,isExport:t}=this.eventContext,i=t?document:e;i.removeEventListener("pointerdown",this.onMouseDown),i.removeEventListener("mousedown",this.onMouseDown),document.removeEventListener("keydown",this.onKeyDown),i.removeEventListener("pointerdown",this.onAny),i.removeEventListener("mousedown",this.onAny),document.removeEventListener("keydown",this.onAny),[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.removeEventListener("userEvent",this.onUserEvent),t.forEach(e=>e.disconnect())})}[...this.eventsPerObject.entries()].forEach(([e,t])=>{e.removeEventListener("userEvent",this.onUserEvent),t.forEach(e=>e.disconnect())}),this.eventsPerObject.clear(),this.eventsAfterPerObject.clear()}},LB=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.initialDisabled=!1,this.actions=OX(t,t.actions,r,s,a,i),this.target=t.target}disconnect(){OY(this.actions)}dispatch(e){this.initialDisabled||(this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.object.dispatchEvent({type:"beginEvent",eventName:"Collision"}),this.actions.Transition.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}
8404),this.actions.Animation.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.Reset.forEach(e=>{e.dispatch()}),this.actions.Link.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>{e.dispatch()}),this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(t=>{t.dispatch(e??!1)}),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.Audio.forEach(e=>{e.dispatchBasic()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()}),this.actions.Video.forEach(e=>{e.dispatchBasic()}),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()))}},Lz=class extends RR{constructor(e,t,i,r,s){super(e),this.sharedVariables=t,this.eventManager=i,this.needsMouse=r,this.needsRaycast=s,this.dynamicVars=[],this.variablesToWatch=[],this.prevMouseProperty=null,this.prevRaycastProperty=null,this.pauseTime=0,this.isOutOfFocus=!1,this.events=[],this.onFrame=e=>{let t=this.eventContext.sharedAssets;if(this.rafId=window.requestAnimationFrame(this.onFrame),this.isOutOfFocus)return;let i=new Date,r=[],s=[];for(let e=0;e<this.propertiesToWatch.length;e++){let{objectId:t,property:i,prevValue:r}=this.propertiesToWatch[e],a=this.eventContext.scene.find(t),o=m4.propertyPaths[i];if("width"===o[0]||"height"===o[0]||"depth"===o[0])a=a.geometry.userData.parameters[o[0]];else for(let e=0;e<o.length;e++)a=a[o[e]];null===r?this.propertiesToWatch[e].prevValue=a instanceof iv?a.clone():a:(a instanceof iv?a.equals(r):r===a)||(s.push({objId:t,property:i}),a instanceof iv?this.propertiesToWatch[e].prevValue.copy(a):this.propertiesToWatch[e].prevValue=a)}for(let e=0;e<this.variablesToWatch.length;e++){let{id:i,prevValue:s}=this.variablesToWatch[e],a=t.getVariable(i);a!==s&&(r.push(i),this.variablesToWatch[e].prevValue=a)}for(let s=0;s<this.dynamicVars.length;s++){let{id:a,expectedTime:o,last:l,data:h,timerSeconds:c,startValue:d}=this.dynamicVars[s],u=1e3;if(("timer"===h.dynamicVariableType||"stopwatch"===h.dynamicVariableType)&&"number3decimal"===h.format?u=1:"counter"===h.dynamicVariableType?u=h.updateInterval:"random"===h.dynamicVariableType&&(u=h.isStatic?1/0:h.updateInterval),-1===o){this.dynamicVars[s].last=e,this.dynamicVars[s].expectedTime=e+u;continue}if(!(("Stopped"===t.getDynamicVariablePlayState(a)||"Restarted"===t.getDynamicVariablePlayState(a))&&(this.dynamicVars[s].last=e,this.dynamicVars[s].expectedTime=e+u,"counter"===h.dynamicVariableType&&t.getVariable(a)!==d&&(t.updateVariable(a,d),this.eventManager.requestRender()),("timer"===h.dynamicVariableType||"stopwatch"===h.dynamicVariableType)&&this.dynamicVars[s].timerSeconds!==d&&(this.dynamicVars[s].timerSeconds=d,t.updateVariable(a,yw.getFormattedTimerTime(d,h)),this.eventManager.requestRender()),"Restarted"===t.getDynamicVariablePlayState(a)&&t.setDynamicVariablePlayState(a,"Playing"),"Stopped"===t.getDynamicVariablePlayState(a)))){if("Paused"===t.getDynamicVariablePlayState(a)){void 0===this.dynamicVars[s].deltaToExpectedTime&&(this.dynamicVars[s].deltaToExpectedTime=Math.max(this.dynamicVars[s].expectedTime-e,0)),this.dynamicVars[s].last=e-(u-this.dynamicVars[s].deltaToExpectedTime),this.dynamicVars[s].expectedTime=e+this.dynamicVars[s].deltaToExpectedTime;continue}if(this.dynamicVars[s].deltaToExpectedTime=void 0,e>=o){if(this.dynamicVars[s].last=e,this.dynamicVars[s].expectedTime+=u,"random"===h.dynamicVariableType){let e=h.min+Math.random()*(h.max-h.min),i=h.decimals;e=Math.round(e*Math.pow(10,i))/Math.pow(10,i),t.updateVariable(a,e),r.push(a),this.eventManager.requestRender()}else if("counter"===h.dynamicVariableType){let e=t.getVariable(a),i=t.getDynamicVariableToggleIsForward(a)??!0,s=t.getVariable(a)+h.increment*(i?1:-1);h.hasEnd&&((s=h.increment>0?tY.clamp(s,d,h.endValue):tY.clamp(s,h.endValue,d))===d&&t.setDynamicVariableToggleIsForward(a,void 0),h.repeat?s===h.endValue&&(s=d):(s===d||s===h.endValue)&&t.setDynamicVariablePlayState(a,"Paused")),s!==e&&(r.push(a),t.updateVariable(a,s),this.eventManager.requestRender())}else if("time"===h.dynamicVariableType){let e=t.getVariable(a),s=Ap(i,h);if("object"==typeof e&&"textValue"in e&&"object"==typeof s&&"textValue"in s){if(Array.isArray(e.textValue)&&Array.isArray(s.textValue)){if(e.textValue.every((e,t)=>e===s.textValue[t]))continue}else if(e.textValue===s.textValue)continue}else if(e===s)continue;t.updateVariable(a,s),r.push(a),this.eventManager.requestRender()}else{let i=yg.isTextValue(h.endValue)?LN(h.endValue.textValue):h.endValue,o=t.getDynamicVariableToggleIsForward(a)??!0,u=c+(e-l)/1e3*("timer"===h.dynamicVariableType?-1:1)*(o?1:-1);u=Math.max(u,0),h.hasEnd&&((u="stopwatch"===h.dynamicVariableType?tY.clamp(u,d,i):tY.clamp(u,i,d))===d&&t.setDynamicVariableToggleIsForward(a,void 0),h.repeat?Math.abs(u-i)<("number3decimal"===h.format?1e-4:.1)&&(u=d):(Math.abs(u-d)<("number3decimal"===h.format?1e-4:.1)||Math.abs(u-i)<("number3decimal"===h.format?1e-4:.1))&&t.setDynamicVariablePlayState(a,"Paused")),u!==c&&(r.push(a),this.dynamicVars[s].timerSeconds=u,t.updateVariable(a,yw.getFormattedTimerTime(u,h)),this.eventManager.requestRender())}}}}let a=!1;t.mouseProperty!==this.prevMouseProperty&&(this.prevMouseProperty=t.mouseProperty,a=!0);let o=!1;t.raycastProperty!==this.prevRaycastProperty&&(this.prevRaycastProperty=t.raycastProperty,o=!0),this.events.forEac
vendor: 1,054 bytes, line 8404
8404h(e=>{(r.includes(e.data.variableId)||s.find(t=>t.objId===e.data.objectId&&t.property===e.data.property)||"mouseProperty"===e.data.variableId&&a||"raycastProperty"===e.data.variableId&&o)&&(e.dispatch(),this.eventManager.requestRender())})},this.onBlur=()=>{this.pause()},this.onFocus=()=>{this.resume()}}pause(){this.isOutOfFocus||(this.isOutOfFocus=!0,this.pauseTime=Date.now())}resume(){if(!this.isOutOfFocus)return;this.isOutOfFocus=!1;let e=Date.now()-this.pauseTime;for(let t=0;t<this.dynamicVars.length;t++)this.dynamicVars[t].last+=e,this.dynamicVars[t].expectedTime+=e}connect(){this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(e=>"VariableChange"===e.data.type&&!e.data.disabled).forEach(t=>{this.events.push(new LF(t.id,t.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),this.propertiesToWatch=this.events.filter(e=>"objectProperty"===e.data.variableId&&null!==e.data.objectId).map(e=>({objectId:e.data.objectId,property:e.data.property,prevValue:null}));let e=this.eventContext.sharedAssets;
8404this.sharedVariables.forEach(({id:t,data:i})=>{let r;if(!("dynamicVariableType"in i)){this.events.find(e=>e.data.variableId===t)&&this.variablesToWatch.push({id:t,prevValue:e.getVariable(t)});return}if("timer"===i.dynamicVariableType||"stopwatch"===i.dynamicVariableType){let e;if(yg.isTextValue(i.value)&&Array.isArray(i.value.textValue)){let t=i.value.textValue;e=3===t.length?t[2]+60*t[1]+3600*t[0]:t[1]+60*t[0]}else e=i.value;r=e,this.dynamicVars.push({id:t,last:-1,expectedTime:-1,data:i,timerSeconds:e,startValue:r})}else"time"===i.dynamicVariableType&&e.updateVariable(t,Ap(new Date,i)),"counter"===i.dynamicVariableType&&(r=yg.isTextValue(i.value)?LN(i.value.textValue):i.value),this.dynamicVars.push({id:t,last:-1,expectedTime:-1,data:i,startValue:r})}),this.rafId=window.requestAnimationFrame(this.onFrame),window.addEventListener("blur",this.onBlur),window.addEventListener("focus",this.onFocus)}disconnect(){window.removeEventListener("blur",this.onBlur),window.removeEventListener("focus",this.onFocus),this.rafId&&(window.cancelAnimationFrame(this.rafId),this.rafId=void 0),this.events.forEach(e=>e.dispose())}},LF=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.actions=OX(t,t.actions,r,s,a,i)}dispatch(){let e=this.actions;
vendor: 4,186 bytes, lines 8404-8465
8404e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}dispose(){OY(this.actions)}};function LN(e){return 3===e.length?e[2]+60*e[1]+3600*e[0]:e[1]+60*e[0]}var Lk,LU,LV,Lj=` 8405(async function() { 8406 const [wasmImport, wasmBinary] = await Promise.all([ 8407 import('https://unpkg.com/@splinetool/[email protected]/build/' + 'navmesh.js'), 8408 fetch('https://unpkg.com/@splinetool/[email protected]/build/' + 'navmesh.wasm').then((res) => res.arrayBuffer()), 8409 ]); 8410 const wasmModule = wasmImport.default; 8411 self.module = await wasmModule({ wasmBinary }); 8412 postMessage('ready'); 8413})(); 8414`,LG=` 8415(async function() { 8416 const [wasmImport, wasmBinary] = await Promise.all([ 8417 import(self.location.origin + '/_libraries/navmesh.js'), 8418 fetch(self.location.origin + '/_libraries/navmesh.wasm').then((res) => res.arrayBuffer()), 8419 ]); 8420 const wasmModule = wasmImport.default; 8421 self.module = await wasmModule({ wasmBinary }); 8422 postMessage('ready'); 8423})(); 8424`,LH=` 8425 8426onmessage = function(messageEvent) { 8427 const meshData = messageEvent.data; 8428 const positions = meshData[0]; 8429 const offset = meshData[1]; 8430 const indices = meshData[2]; 8431 const indicesLength = meshData[3]; 8432 const parameters = meshData[4]; 8433 8434 const module = self.module; 8435 const rc = new module.rcConfig(); 8436 rc.cs = parameters.cs; 8437 rc.ch = parameters.ch; 8438 rc.borderSize = parameters.borderSize ? parameters.borderSize : 0; 8439 rc.tileSize = parameters.tileSize ? parameters.tileSize : 0; 8440 rc.walkableSlopeAngle = parameters.walkableSlopeAngle; 8441 rc.walkableHeight = parameters.walkableHeight; 8442 rc.walkableClimb = parameters.walkableClimb; 8443 rc.walkableRadius = parameters.walkableRadius; 8444 rc.maxEdgeLen = parameters.maxEdgeLen; 8445 rc.maxSimplificationError = parameters.maxSimplificationError; 8446 rc.minRegionArea = parameters.minRegionArea; 8447 rc.mergeRegionArea = parameters.mergeRegionArea; 8448 rc.maxVertsPerPoly = parameters.maxVertsPerPoly; 8449 rc.detailSampleDist = parameters.detailSampleDist; 8450 rc.detailSampleMaxError = parameters.detailSampleMaxError; 8451 8452 if (!self.navMesh) { 8453 self.navMesh = new module.NavMesh(); 8454 } 8455 self.navMesh.build(positions, offset, indices, indicesLength, rc); 8456 8457 const navmeshData = navMesh.getNavmeshData(); 8458 const arrView = new Uint8Array(module.HEAPU8.buffer, navmeshData.dataPointer, navmeshData.size); 8459 const ret = new Uint8Array(navmeshData.size); 8460 ret.set(arrView); 8461 navMesh.freeNavmeshData(navmeshData); 8462 8463 postMessage(ret); 8464} 8465`,LW={cs:6,ch:2,walkableSlopeAngle:90,walkableHeight:20,walkableClimb:5,walkableRadius:0,maxEdgeLen:12,maxSimplificationError:1.3,minRegionArea:8,mergeRegionArea:20,maxVertsPerPoly:6,detailSampleDist:6,detailSampleMaxError:1};pc.then(e=>{Lk=e,LU=new e.Vec3,LV=new e.Vec3});var Lq=new iv,LX=class{constructor(e=!1,t=!1){this.usePhysics=e,this.isExport=t,this.onPointerDown=e=>{if(1!==u1.length)return;let{raycaster:t,page:i}=this.eventContext;this.eventContext.updateRaycaster(e);let r=i.raycastWithClones(t);if(0!==r.length){if(this.gameControl){let e=Lq.copy(this.gameControl.colliderWorldPosition);e.y-=this.gameControl.colliderHeight/2,this.gameControl.path=this.computePath(e,r[0].point)}this.eventContext.requestRender()}},this.traverseWithPhysics=(e,t)=>i=>{let r;if(i instanceof M9){if(!i.objectForSample)return!0===i.object.dataPatched.physics.fusedBody&&"dynamic"===i.object.dataPatched.physics.rigidBody||void 0;if(i.objectForSample.dataPatched.physics.fusedBody)return;r=i.object}else if(i instanceof xb)r=i.object;else if(r=i,r.dataPatched.cloner?.disabled===!1&&r.dataPatched.cloner?.hideBase&&r.dataPatched.physics?.fusedBody!==!0)return!0;
8465if(t&&!r.userData.navmesh)return;let s=r.dataPatched;if(!s.visible&&s.physics?.enabled!==!0)return!0;i.updateMatrixWorldSVD();let a=Bb(s),o=r.userData.hasDestroy,l=r.userData.hasDrag,h=!1,c=!1;for(let e of s.events)!0!==e.data.disabled&&("GameControl"===e.data.type?h=!0:"Follow"===e.data.type&&(c=!0));if(h||a||c||o||l)return!0;if(this.usePhysics&&s.physics?.rigidBody==="dynamic"){if(this.usePhysics&&s.physics?.fusedBody)return!0}else if("geometry"in i&&i.geometry&&e.push(Rb(i.geometry,i.matrixWorld)),this.usePhysics&&s.physics?.fusedBody)return i.traverseObject((t,i)=>{let r;if(0===i)return;if(t instanceof M9){if(!t.objectForSample)return!0===t.object.dataPatched.physics.fusedBody&&"dynamic"===t.object.dataPatched.physics.rigidBody||void 0;if(t.objectForSample.dataPatched.physics.fusedBody)return;r=t.object}else if(t instanceof xb)r=t.object;else if(r=t,t.dataPatched.cloner?.hideBase)return!0;let s=r.dataPatched;if(!s.visible&&s.physics?.enabled!==!0)return!0;"geometry"in t&&t.geometry&&e.push(Rb(t.geometry,t.matrixWorld))}),!0},this.traverseNoPhysics=(e,t)=>i=>{let r;if(i instanceof M9)return;let s=(r=i instanceof xb?i.object:i).dataPatched;if("visibility"===s.physics.enabled?!s.visible:!s.physics.enabled)return!0;if(t&&!r.userData.navmesh)return;let a=i.geometry,o=!0===r.userData.hasDestroy,l=!0===r.userData.hasDrag;if(Bb(s)||o||l||r.dataPatched.events.some(e=>!0!==e.data.disabled&&"GameControl"===e.data.type))return!0;a&&e.push(Rb(a,i.matrixWorld))},this.navmeshWasm=Lk,this.navMesh=new this.navmeshWasm.NavMesh,this._workerURL=URL.createObjectURL(new Blob([(t?Lj:LG)+LH])),this._worker=new Worker(this._workerURL)}init(e,t,i){this.gameControl=t,this.eventContext=i,this.setDefaultQueryExtent(new iv().setScalar(e.ch*e.walkableRadius*1.2)),this._worker.onmessage=()=>{this.createNavMesh(i.page,e,e=>{this.buildFromNavmeshData(e.data)})},this.eventContext.renderer.domElement.addEventListener("pointerdown",this.onPointerDown)}createNavMesh(e,t,i){t.objects.forEach(t=>{let i=e.scene.find(t);i.traverseEntity(e=>{e.userData.navmesh=!0}),i.cloner?.traverseObject(e=>{e.userData.navmesh=!0})});let r=[],s=(this.usePhysics?this.traverseWithPhysics:this.traverseNoPhysics)(r,"custom"===t.zones);if(e.traverseChildren(s),t.objects.forEach(t=>{let i=e.scene.find(t);i.traverseEntity(e=>{e.userData.navmesh=void 0}),i.cloner?.traverseObject(e=>{e.userData.navmesh=void 0})}),0===r.length)return!1;let a=gQ(r),{positions:o,triIndices:l}=Sn(a.getAttribute("position"),a.getIndex());return this._worker.postMessage([o,o.length/3,l,l.length,{...LW,...t}]),this._worker.onmessage=i,!0}createDebugNavGeometry(){let e,t,i=this.navMesh.getDebugNavMesh(),r=i.getTriangleCount(),s=new Uint32Array(3*r),a=new Float32Array(9*r);for(e=0;e<3*r;e++)s[e]=e;for(e=0;e<r;e++)for(t=0;t<3;t++){let r=i.getTriangle(e).getPoint(t);a[9*e+3*t+0]=r.x,a[9*e+3*t+1]=r.y,a[9*e+3*t+2]=r.z}let o=new rz;return o.setIndex(new rM(s,1)),o.setAttribute("position",new rM(a,3)),o}getClosestPoint(e){return LU.x=e.x,LU.y=e.y,LU.z=e.z,this.navMesh.getClosestPoint(LU)}getClosestPointToRef(e,t){LU.x=e.x,LU.y=e.y,LU.z=e.z;let i=this.navMesh.getClosestPoint(LU);t.set(i.x,i.y,i.z)}getRandomPointAround(e,t){return LU.x=e.x,LU.y=e.y,LU.z=e.z,this.navMesh.getRandomPointAround(LU,t)}getRandomPointAroundToRef(e,t,i){LU.x=e.x,LU.y=e.y,LU.z=e.z;let r=this.navMesh.getRandomPointAround(LU,t);i.set(r.x,r.y,r.z)}moveAlong(e,t){return LU.x=e.x,LU.y=e.y,LU.z=e.z,LV.x=t.x,LV.y=t.y,LV.z=t.z,this.navMesh.moveAlong(LU,LV)}moveAlongToRef(e,t,i){return LU.x=e.x,LU.y=e.y,LU.z=e.z,LV.x=t.x,LV.y=t.y,LV.z=t.z,this.navMesh.moveAlong(LU,LV)}computePath(e,t){let i=this.getClosestPoint(t);if(LV.x=i.x,LV.y=i.y,LV.z=i.z,Math.sqrt(Math.pow(t.x-i.x,2)+Math.pow(t.y-i.y,2)+Math.pow(t.z-i.z,2))>this.getDefaultQueryExtent().y)return[];this.getClosestPoint(e);let r=this.navMesh.computePath(LU,LV),s=r.getPointCount(),a=[];for(let e=0;e<s;e++){let t=r.getPoint(e);a.push(new iv(t.x,t.y,t.z))}return a}createCrowd(e,t){return new LY(this,e,t)}setDefaultQueryExtent(e){LU.x=e.x,LU.y=e.y,LU.z=e.z,this.navMesh.setDefaultQueryExtent(LU)}getDefaultQueryExtent(){return this.navMesh.getDefaultQueryExtent()}buildFromNavmeshData(e){let t=e.length*e.BYTES_PER_ELEMENT,i=this.navmeshWasm._malloc(t),r=new Uint8Array(this.navmeshWasm.HEAPU8.buffer,i,t);r.set(e);let s=new this.navmeshWasm.NavmeshData;s.dataPointer=r.byteOffset,s.size=e.length,this.navMesh.buildFromNavmeshData(s),this.navmeshWasm._free(r.byteOffset)}getNavmeshData(){let e=this.navMesh.getNavmeshData(),t=new Uint8Array(this.navmeshWasm.HEAPU8.buffer,e.dataPointer,e.size),i=new Uint8Array(e.size);return i.set(t),this.navMesh.freeNavmeshData(e),i}getDefaultQueryExtentToRef(e){let t=this.navMesh.getDefaultQueryExtent();e.set(t.x,t.y,t.z)}dispose(){this.navMesh.destroy(),this._worker.terminate(),URL.revokeObjectURL(this._workerURL),this.eventContext?.renderer.domElement.removeEventListener("pointerdown",this.onPointerDown)}addCylinderObstacle(e,t,i){return LU.x=e.x,LU.y=e.y,LU.z=e.z,this.navMesh.addCylinderObstacle(LU,t,i)}addBoxObstacle(e,t,i){return LU.x=e.x,LU.y=e.y,LU.z=e.z,LV.x=t.x,LV.y=t.y,LV.z=t.z,this.navMesh.addB
8465oxObstacle(LU,LV,i)}removeObstacle(e){this.navMesh.removeObstacle(e)}isSupported(){return void 0!==this.navmeshWasm}},LY=class{constructor(e,t,i){this.navmeshWasmWrapper=e,this.transforms=[],this.agents=[],this.reachRadii=[],this._agentDestinationArmed=[],this._agentDestination=[],this.crowd=new this.navmeshWasmWrapper.navmeshWasm.Crowd(t,i,this.navmeshWasmWrapper.navMesh.getNavMesh())}onReachTarget(e,t){}addAgent(e,t,i){let r=new this.navmeshWasmWrapper.navmeshWasm.dtCrowdAgentParams;r.radius=t.radius,r.height=t.height,r.maxAcceleration=t.maxAcceleration,r.maxSpeed=t.maxSpeed,r.collisionQueryRange=t.collisionQueryRange,r.pathOptimizationRange=t.pathOptimizationRange,r.separationWeight=t.separationWeight,r.updateFlags=7,r.obstacleAvoidanceType=0,r.queryFilterType=0,r.userData=0;let s=this.crowd.addAgent(new this.navmeshWasmWrapper.navmeshWasm.Vec3(e.x,e.y,e.z),r);return this.transforms.push(i),this.agents.push(s),this.reachRadii.push(t.reachRadius?t.reachRadius:t.radius),this._agentDestinationArmed.push(!1),this._agentDestination.push(new iv(0,0,0)),s}getAgentPosition(e){return this.crowd.getAgentPosition(e)}getAgentPositionToRef(e,t){let i=this.crowd.getAgentPosition(e);t.set(i.x,i.y,i.z)}getAgentVelocity(e){return this.crowd.getAgentVelocity(e)}getAgentVelocityToRef(e,t){let i=this.crowd.getAgentVelocity(e);t.set(i.x,i.y,i.z)}getAgentNextTargetPath(e){return this.crowd.getAgentNextTargetPath(e)}getAgentNextTargetPathToRef(e,t){let i=this.crowd.getAgentNextTargetPath(e);t.set(i.x,i.y,i.z)}getAgentState(e){return this.crowd.getAgentState(e)}overOffmeshConnection(e){return this.crowd.overOffmeshConnection(e)}agentGoto(e,t){this.crowd.agentGoto(e,new this.navmeshWasmWrapper.navmeshWasm.Vec3(t.x,t.y,t.z));let i=this.agents.indexOf(e);i>-1&&(this._agentDestinationArmed[i]=!0,this._agentDestination[i].set(t.x,t.y,t.z))}agentTeleport(e,t){this.crowd.agentTeleport(e,new this.navmeshWasmWrapper.navmeshWasm.Vec3(t.x,t.y,t.z))}updateAgentParameters(e,t){let i=this.crowd.getAgentParameters(e);void 0!==t.radius&&(i.radius=t.radius),void 0!==t.height&&(i.height=t.height),void 0!==t.maxAcceleration&&(i.maxAcceleration=t.maxAcceleration),void 0!==t.maxSpeed&&(i.maxSpeed=t.maxSpeed),void 0!==t.collisionQueryRange&&(i.collisionQueryRange=t.collisionQueryRange),void 0!==t.pathOptimizationRange&&(i.pathOptimizationRange=t.pathOptimizationRange),void 0!==t.separationWeight&&(i.separationWeight=t.separationWeight),this.crowd.setAgentParameters(e,i)}removeAgent(e){this.crowd.removeAgent(e);let t=this.agents.indexOf(e);t>-1&&(this.agents.splice(t,1),this.transforms.splice(t,1),this.reachRadii.splice(t,1),this._agentDestinationArmed.splice(t,1),this._agentDestination.splice(t,1))}getAgents(){return this.agents}update(e){if(this.navmeshWasmWrapper.navMesh.update(),!(e<=.001)){if(1/60<=.001)this.crowd.update(e);else{let t=Math.floor(e/(1/60));t>10&&(t=10),t<1&&(t=1);let i=e/t;for(let e=0;e<t;e++)this.crowd.update(i)}for(let e=0;e<this.agents.length;e++){let t=this.agents[e],i=this.getAgentPosition(t);if(this.transforms[e].copy(i),this._agentDestinationArmed[e]){let r=i.x-this._agentDestination[e].x,s=i.z-this._agentDestination[e].z,a=this.reachRadii[e],o=this._agentDestination[e].y-this.reachRadii[e],l=this._agentDestination[e].y+this.reachRadii[e],h=r*r+s*s;i.y>o&&i.y<l&&h<a*a&&(this.onReachTarget(t,this._agentDestination[e]),this._agentDestinationArmed[e]=!1)}}}}setDefaultQueryExtent(e){let t=new this.navmeshWasmWrapper.navmeshWasm.Vec3(e.x,e.y,e.z);this.crowd.setDefaultQueryExtent(t)}getDefaultQueryExtent(){return this.crowd.getDefaultQueryExtent()}getDefaultQueryExtentToRef(e){let t=this.crowd.getDefaultQueryExtent();e.set(t.x,t.y,t.z)}getCorners(e){let t,i=this.crowd.getCorners(e),r=i.getPointCount(),s=[];for(t=0;t<r;t++){let e=i.getPoint(t);s.push(new iv(e.x,e.y,e.z))}return s}dispose(){this.crowd.destroy()}},LQ={type:"change"},LK={type:"changeZoom"},LZ={type:"changePan"},LJ={type:"start"},L$={type:"end",changed:!0},L0={type:"end",changed:!1},L1=new ig,L2=new tQ,L3=2*Math.PI,L4=new iv,L5=new tQ,L6=new iv,L8=new ig,L9=new iX,L7={type:"requestRender"},Be=class extends tL{constructor(e,t,i={isPlayMode:!1,isExport:!1}){super(),this.object=e,this.domElement=t,this.options=i,this.enabled=!0,this.useKeyEvents=!0,this.enableDamping=!1,this.enableZoom=!0,this.enableRotate=!0,this.enablePan=!0,this.autoRotate=!1,this.rotationLimitsMode=0,this.panLimitsMode=0,this.rotationSoftLimit=2,this.panSoftLimit=2,this.hoverRotatePanMode=0,this.zoomLimitsEnabled=!1,this.mouseButtons=[0,5],this.mouseButtonsPlay=[3,4,5],this.touches=[null,tD.DOLLY_ROTATE,tD.PAN],this.offset=new iv,this.eye=new iv,this.lastPosition=new iv,this.lastQuaternion=new ig,this.current=ne
vendor: 4,348 bytes, line 8465
8465w tQ,this.overShoot=new tQ,this.overRatio=new tQ,this.spherical=new lL,this.sphericalDelta=new lL,this.panOffset=new iv,this.panLeftV=new iv,this.panUpV=new iv,this.panV=new iv,this.rotateStart=new tQ,this.rotateEnd=new tQ,this.rotateDelta=new tQ,this.panStart=new tQ,this.panEnd=new tQ,this.panDelta=new tQ,this.dollyStart=new tQ,this.dollyEnd=new tQ,this.dollyDelta=new tQ,this.rotationRangeFactor=new tQ,this.panRangeFactor=new tQ,this.state=-1,this.zoomChanged=!1,this.isPointerDown=!1,this.isThetaFlipped=!1,this.prevScale=0,this.scale=1,this.gesture=!1,this.timer=-1,this.timerHover=-1,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPhi=0,this.maxPhi=Math.PI,this.minTheta=-1/0,this.maxTheta=1/0,this.minH=0,this.maxH=Math.PI,this.minV=-1/0,this.maxV=1/0,this.autoRotateClockwise=!0,this.isPanOverShoot=!1,this.isRotateOverShoot=!1,this.resetHoverEffectOnPointerLeave=!1,this.hasChange=!1,this.useWindowEvents=!1,this.isTouchZoom=!0,this.autoRotateSpeed=2,this.dampingFactor=.125,this.zoomSpeed=2,this.rotateSpeed=1,this.panSpeed=1,this.hoverRotatePanStrength=.1,this.hoverRotateDamping=this.dampingFactor,this.thetaIsFree=!1,this.phiIsFree=!1,this.needsUpdate=!0,this.onCameraChange=e=>{this.object.removeEventListener("beginState",this.onBeginState),this.object.removeEventListener("completeState",this.onCompleteState),this.object.removeEventListener("cameraChange",this.onCameraChange),this.object=e.camera,this.object.addEventListener("beginState",this.onBeginState),this.object.addEventListener("completeState",this.onCompleteState),this.object.addEventListener("cameraChange",this.onCameraChange)},this.update=()=>{this.object.updateWorldMatrix(!0,!1),this.object.matrixWorld.decompose(L6,L8,L4),this.offset.copy(L6).sub(this.target),this.spherical.setFromVector3(this.offset),this.object.isUpVectorFlipped&&(this.spherical.phi*=-1,this.spherical.theta-=Math.PI),this.autoRotate&&-1===this.state&&this.rotateLeft((!0===this.autoRotateClockwise?1:-1)*this.getAutoRotationAngle()),0!==this.rotationLimitsMode&&this.applyLimits(this.sphericalDelta,this.rotationLimitsMode,this.rotationSoftLimit,this.maxTheta,this.minTheta,this.maxPhi,this.minPhi,this.rotationRangeFactor),2!==this.rotationLimitsMode&&(this.spherical.phi+=this.sphericalDelta.phi),(1!==this.rotationLimitsMode||!0===this.autoRotate)&&(this.spherical.theta+=this.sphericalDelta.theta),this.spherical.radius*=this.scale,this.zoomLimitsEnabled&&this.object.isPerspectiveCamera&&(this.spherical.radius=Math.max(this.minDistance,Math.min(this.maxDistance,this.spherical.radius))),0!==this.panLimitsMode&&(this.target.applyQuaternion(L1.copy(L8).invert()),this.panOffset.applyQuaternion(L1),this.applyLimits(this.panOffset,this.panLimitsMode,this.panSoftLimit,this.maxH,this.minH,this.maxV,this.minV,this.panRangeFactor),this.target.applyQuaternion(L8),this.panOffset.applyQuaternion(L8)),2===this.panLimitsMode&&(this.panOffset.y=0),1===this.panLimitsMode&&(this.panOffset.x=0),-1!==this.state||this.gesture?(this.target.add(this.panOffset),this.panOffset.set(0,0,0)):(this.panOffset.multiplyScalar(1-this.dampingFactor),this.target.add(this.panOffset)),this.offset.setFromSpherical(this.spherical),L6.copy(this.target).add(this.offset),this.object.position.copy(this.target).add(this.offset),this.object.parent&&(L9.copy(this.object.parent.matrixWorld).invert(),this.object.position.applyMatrix4(L9));let e=this.spherical.phi%L3;if(this.eye.copy(this.offset).normalize(),this.object.up.copy(rl.DEFAULT_UP).applyAxisAngle(this.eye,this.object.angleOffsetFromUp),e>0&&e>Math.PI||e<0&&e>-Math.PI?(this.object.up.negate(),this.object.lookAt(this.target),this.object.isUpVectorFlipped=!0):(this.object.lookAt(this.target),this.object.isUpVectorFlipped=!1),-1===this.state||!0===this.enableDamping){let e=1===this.hoverRotatePanMode?this.hoverRotateDamping:this.dampingFactor;this.sphericalDelta.theta*=1-e,this.sphericalDelta.phi*=1-e}else this.sphericalDelta.set(0,0,0);return this.scale=1,this.zoomChanged||this.lastPosition.distanceToSquared(this.object.position)>.01||8*(1-this.lastQuaternion.dot(this.object.quaternion))>1e-8?(this.dispatchEvent(LQ),this.object.dispatchEvent(L7),this.lastPosition.copy(this.object.position),this.lastQuaternion.copy(this.object.quaternion),this.zoomChanged=!1,!0):(this.isPanOverShoot=!1,this.isRotateOverSho
8465ot=!1,this.object.wasMovedBySwitchCameraAction=!1,this.sphericalDelta.set(0,0,0),this.panOffset.set(0,0,0),!1)},this.onPointerDown=e=>{!1!==this.enabled&&("touch"===e.pointerType||"pen"===e.pointerType&&uQ?this.onPointerDownTouch(e):this.onPointerDownMouse(e),-1!==this.state&&(this.isPointerDown=!0,this.dispatchEvent(LJ),this.domElement.addEventListener("pointermove",this.onPointerMove),this.domElement.addEventListener("pointerup",this.onPointerUp),e.stopPropagation(),"touch"===e.pointerType||"pen"===e.pointerType&&uQ||this.domElement.setPointerCapture(e.pointerId)))},this.onPointerLeave=e=>{this.resetHoverEffectOnPointerLeave&&!this.useWindowEvents?(1===this.hoverRotatePanMode?(this.sphericalDelta.theta=-this.spherical.theta,this.sphericalDelta.phi=-this.spherical.phi,L4.subVectors(this.position0,this.target0),this.spherical.setFromVector3(L4),this.sphericalDelta.theta+=this.spherical.theta,this.sphericalDelta.phi+=this.spherical.phi,this.sphericalDelta.theta/=8,this.sphericalDelta.phi/=8):2===this.hoverRotatePanMode&&this.panOffset.subVectors(this.target0,this.target).divideScalar(8),this.update()):this.pointerLeaveEvent=e},this.onPointerEnter=e=>{this.resetHoverEffectOnPointerLeave||void 0===this.pointerLeaveEvent?L5.set(e.clientX-this.domElement.clientWidth/2,e.clientY-this.domElement.clientHeight/2):L5.set(e.clientX-this.pointerLeaveEvent.clientX,e.clientY-this.pointerLeaveEvent.clientY),1===this.hoverRotatePanMode?(this.rotateDelta.copy(L5).multiplyScalar(this.rotateSpeed*this.hoverRotatePanStrength).rotateAround(L2,-this.object.angleOffsetFromUp),this.rotateLeft(2*Math.PI*this.rotateDelta.x/this.domElement.clientHeight),this.rotateUp(2*Math.PI*this.rotateDelta.y/this.domElement.clientHeight),this.rotateStart.set(e.clientX,e.clientY)):2===this.hoverRotatePanMode&&(this.panDelta.copy(L5).multiplyScalar(this.panSpeed*this.hoverRotatePanStrength),this.pan(this.panDelta.x,this.panDelta.y),this.panStart.set(e.clientX,e.clientY)),this.update()},this.onPointerMove=e=>{!1!==this.enabled&&(this.checkRaycastLock()||("touch"===e.pointerType||"pen"===e.pointerType&&uQ?this.onPointerMoveTouch(e):this.onPointerMoveMouse(e),e.stopPropagation()))},this.onPointerUp=e=>{this.isPointerDown=!1,0===u1.length&&(this.domElement.removeEventListener("pointermove",this.onPointerMove),this.domElement.removeEventListener("pointerup",this.onPointerUp)),u1.length>1&&e.preventDefault(),this.hasChange?this.dispatchEvent(L$):this.dispatchEvent(L0),this.state=-1,e&&(e.stopPropagation(),"touch"===e.pointerType||"pen"===e.pointerType&&uQ||this.domElement.releasePointerCapture(e.pointerId))},this.onPointerDownMouse=e=>{switch(this.useKeyEvents?this.mouseButtons[e.button]:this.mouseButtonsPlay[e.button]){case 0:if(!0!==e.altKey||e.shiftKey||u0(e)){if(" "===this.key){if(!1===this.enablePan)return;this.handleMouseDownPan(e),this.state=2}}else{if(!1===this.enableRotate)return;this.handleMouseDownRotate(e),this.state=0}break;case 4:if(!1===this.enablePan)return;this.handleMouseDownPan(e),this.state=2;break;case 3:if(u0(e)||e.shiftKey){if(!1===this.enablePan)return;this.handleMouseDownPan(e),this.state=2}else{if(!1===this.enableRotate)return;this.handleMouseDownRotate(e),this.state=0}break;case 5:if(u0(e)||e.shiftKey){if(!1===this.enableRotate)return;this.handleMouseDownRotate(e),this.state=0}else{if(!1===this.enablePan)return;this.handleMouseDownPan(e),this.state=2}break;default:this.state=-1}},this.onPointerMoveMouse=e=>{switch(this.state){case 0:if(!1===this.enableRotate)return;this.handleMouseMoveRotate(e);break;case 1:if(!1===this.enableZoom)return;this.handleMouseMoveDolly(e);break;case 2:if(!1===this.enablePan)return;this.handleMouseMovePan(e)}this.object.wasMovedByUser=!0},this.onPointerDownTouch=e=>{switch(u1.length>1&&e.preventDefault(),this.touches[u1.length-1]){case tD.ROTATE:if(!1===this.enableRotate){this.state=-1;return}this.handleTouchStartRotate(),this.state=3;break;case tD.PAN:if(!1===this.enablePan){this.state=-1;return}this.handleTouchStartPan(),this.state=4;break;case tD.DOLLY_PAN:if(!1===this.enableZoom&&!1===this.enablePan)return;this.handleTouchStartDollyPan(),this.state=5;break;case tD.DOLLY_ROTATE:if(!1===this.enableZoom&&!1===this.enableRotate)return;this.handleTouchStartDollyRotate(),this.state=6;break;default:this.state=-1}},this.onPointerMoveTouch=e=>{switch(u1.length>1&&e.preventDefault(),this.state){case 3:if(!1===this.enableRotate)return;this.handleTouchMoveRotate(e),this.update();break;case 4:if(!1===this.enablePan)return;this.handleTouchMovePan(e),this.update();break;case 5:if(!1===this.enableZoom&&!1===this.enablePan)return;this.handleTouchMoveDollyPan(e),this.update();break;case 6:if(!1===this.enableZoom&&!1===this.enableRotate)return;this.handleTouchMoveDollyRotate(e),this.update();break;default:this.state=-1}this.object.wasMovedByUser=!0},this.dispatchEndDebounced=uI(()=>this.dispatchEvent(L$),33),this.onMouseWheel=e=>{!1===this.enabled||!1===this.enableZoom&&!1===this.enablePan||this.checkRaycastLock()||(this.options.isExport||this.domElement.clientHeight!==document.body.clientHeight||this.domElement.clientWidth!==document.body.clientWidth||e.preventDefault(),this.dispatchEvent(LJ),this.handleMouseWheel(e),this.dispatchEndDebounced(),this.object.wasMovedByUser=!0)},this.onGesture=e=>{e.preventDefault(),!1===this.enabled||this.checkRaycastLock()||uX||("gesturechange"===e.type?!1!==this.enableZoom&&!1!==this.isTouchZoom&&(this.dispatchEvent(LJ),e.scale>this.prevScale?this.dollyIn(this.getZoomScale()):e.scale<this.prevScale&&this.dollyOut(this.getZoomScale()),this.prevScale=e.scale,this.update(),this.object.wasMovedByUser=!0):this.dispatchEvent(L$))},this.onContextMenu=e=>{e.preventDefault()},this.onTouchEnd=e=>{e.preventDefault()},this.onKeyDown=e=>{!1!==this.enabled&&(this.key=e.key," "===e.key&&this.dispatchEvent(LJ))},this.onKeyUp=e=>{!1!==this.enabled&&(this.key=void 0,-1!==this.state&&"Alt"===e.key&&this.onPointerUp(u1[0])," "===e.key&&this.dispatchEvent(L$))},this.onPointerHover=e=>{"mouse"!==e.pointerType||!1===this.enabled||-1!==this.state||2===this.hoverRotatePanMode&&this.isPanOverShoot||1===this.hoverRotatePanMode&&this.isRotateOverSho
vendor: 8,263 bytes, line 8465
8465ot||(this.isPointerDown=!0,2===this.hoverRotatePanMode?this.handleMouseMovePan(e,this.hoverRotatePanStrength):1===this.hoverRotatePanMode&&this.handleMouseMoveRotate(e,this.hoverRotatePanStrength))},this.onBeginState=()=>{this.enabled=!1,this.needsUpdate=!1},this.onCompleteState=e=>{e.isfromEntity&&this.options.isPlayMode||(this.enabled=!0,this.needsUpdate=!0,this.object.updateUp(),this.object.getTarget(this.target))},this.target=this.object.getTarget(),this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.quat0=this.object.quaternion.clone(),this.isUpVectorFlipped0=this.object.isUpVectorFlipped,this.offset.copy(this.object.position).sub(this.target),this.spherical.setFromVector3(this.offset),this.object.isUpVectorFlipped&&(this.spherical.phi*=-1,this.spherical.theta-=Math.PI),this.initialSphericalRadius=this.spherical.radius,this.addEventListenersToCamera()}dispatchEvent(e){"start"===e.type?this.hasChange=!1:this.hasChange=!0,super.dispatchEvent(e)}addEventListenersToCamera(){this.object.addEventListener("beginState",this.onBeginState),this.object.addEventListener("completeState",this.onCompleteState),this.object.addEventListener("cameraChange",this.onCameraChange)}removeEventListenersFromCamera(){this.object.removeEventListener("beginState",this.onBeginState),this.object.removeEventListener("completeState",this.onCompleteState),this.object.removeEventListener("cameraChange",this.onCameraChange)}updateUseWindowEvents(e){if(window.removeEventListener("pointermove",this.onPointerHover),this.domElement.removeEventListener("pointermove",this.onPointerHover),this.useWindowEvents=e,0!==this.hoverRotatePanMode&&(this.useWindowEvents?window.addEventListener("pointermove",this.onPointerHover):this.domElement.addEventListener("pointermove",this.onPointerHover)),this.domElement.removeEventListener("pointerleave",this.onPointerLeave),this.domElement.removeEventListener("pointerenter",this.onPointerEnter),window.removeEventListener("pointerleave",this.onPointerLeave),window.removeEventListener("pointerenter",this.onPointerEnter),0!==this.hoverRotatePanMode&&!this.useWindowEvents){let e=this.useWindowEvents?window:this.domElement;e.addEventListener("pointerleave",this.onPointerLeave),e.addEventListener("pointerenter",this.onPointerEnter)}}fromJSON(e,t){this.setEnableDampingSpeed(e.enableDamping),this.enablePan=e.enablePan,this.enableZoom=e.enableZoom,this.enableRotate=e.enableRotate,this.rotationLimitsMode=e.rotationLimitsMode,this.thetaIsFree=e.rotationHorizontalOffset.min===e.rotationHorizontalOffset.max&&e.rotationHorizontalOffset.min===Math.PI,this.phiIsFree=e.rotationVerticalOffset.min===e.rotationVerticalOffset.max&&e.rotationVerticalOffset.min===Math.PI,this.panLimitsMode=e.panLimitsMode,this.panSoftLimit=e.panSoftLimit,this.rotationSoftLimit=e.rotationSoftLimit,this.hoverRotatePanMode=e.hoverRotatePanMode,this.hoverRotateDamping=e.hoverRotateDamping??this.dampingFactor,this.useWindowEvents="window"===t,0!==this.hoverRotatePanMode&&(this.useWindowEvents?window.addEventListener("pointermove",this.onPointerHover):this.domElement.addEventListener("pointermove",this.onPointerHover));let i=e.hoverRotatePanStrength/100;this.hoverRotatePanStrength=i**2,this.zoomLimitsEnabled=e.zoomLimitsEnabled,this.minZoom=e.zoomLimits.min,this.maxZoom=Math.max(e.zoomLimits.min,e.zoomLimits.max),this.minDistance=1e3/e.zoomLimits.max,this.maxDistance=Math.max(this.minDistance,1e3/e.zoomLimits.min),this.autoRotate=e.autoRotate,this.autoRotateSpeed=e.autoRotateSpeed,this.autoRotateClockwise=e.autoRotateClockwise;let r=this.object.getTarget().applyQuaternion(L1.copy(this.object.quaternion).invert());this.minV=-e.panVerticalOffset.min+r.y,this.maxV=e.panVerticalOffset.max+r.y,this.minH=-e.panHorizontalOffset.min+r.x,this.maxH=e.panHorizontalOffset.max+r.x,this.panRangeFactor.set(this.maxH-this.minH,this.maxV-this.minV).divideScalar(2),this.rotationRangeFactor.setScalar(Math.PI).divideScalar(4),this.minPhi=Bt(this.spherical.phi-e.rotationVerticalOffset.min),this.maxPhi=Bt(this.spherical.phi+e.rotationVerticalOffset.max),this.minTheta=Bt(Bt(this.spherical.theta)-e.rotationHorizontalOffset.min),this.maxTheta=Bt(Bt(this.spherical.theta)+e.rotationHorizontalOffset.max),this.isThetaFlipped=this.minTheta>this.maxTheta,1===e.orbitTouches&&(this.touches[0]=tD.ROTATE),1===e.panTouches&&(this.touches[0]=tD.PAN),2===e.orbitTouches&&(this.touches[1]=tD.DOLLY_ROTATE),2===e.panTouches&&(this.touches[1]=tD.DOLLY_PAN),3===e.orbitTouches&&(this.touches[2]=tD.ROTATE),3===e.panTouches&&(this.touches[2]=tD.PAN),this.isTouchZoom=e.isTouchZoom,this.resetHoverEffectOnPointerLeave=e.resetHoverEffectOnPointerLeave??!1}connect(){if(this.domElement.addEventListener("contextmenu",this.onContextMenu),this.domElement.addEventListener("pointerdown",this.onPointerDown),this.domElement.addEventListener("wheel",this.onMouseWheel),window.addEventListener("keydown",this.onKeyDown,!1),window.addEventListener("keyup",this.onKeyUp,!1),this.domElement.addEventListener("gesturestart",this.onGesture),this.domElement.addEventListener("gesturechange",this.onGesture),this.domElement.addEventListener("gestureend",this.onGesture),this.domElement.addEventListener("touchend",this.onTouchEnd),0!==this.hoverRotatePanMode&&!this.useWindowEvents){let e=this.useWindowEvents?window:this.domElement;e.addEventListener("pointerleave",this.onPointerLeave),e.addEventListener("pointerenter",this.onPointerEnter)}this.pointerLeaveEvent=void 0}dispose(){this.removeEventListenersFromCamera(),this.domElement.removeEventListener("contextmenu",this.onContextMenu),this.domElement.removeEventListener("pointerdown",this.onPointerDown),this.domElement.removeEventListener("wheel",this.onMouseWheel),window.removeEventListener("keydown",this.onKeyDown,!1),window.removeEventListener("keyup",this.onKeyUp,!1),this.domElement.removeEventListener("pointermove",this.onPointerHover),window.removeEventListener("pointermove",this.onPointerHover),this.domElement.removeEventListener("gesturestart",this.onGesture),this.domElement.removeEventListener("gesturechange",this.onGesture),this.domElement.removeEventListener("gestureend",this.onGesture),this.domElement.removeEventListener("touchend",this.onTouchEnd),this.domElement.removeEventListener("pointerleave",this.onPointerLeave),this.domElement.removeEventListener("pointerenter",this.onPointerEnter),window.removeEventListener("pointerleave",this.onPointerLeave),window.removeEventListener("pointerenter",this.onPointerEnter),this.domElement.removeEventListener("pointermove",this.onPointerMove),this.domElement.removeEventListener("pointerup",this.onPointerUp)}applyLimits(e,t,i,r,s,a,o,l){let h,c,d;this.overShoot.set(0,0),e instanceof iv?(h=e.x,c=e.y,this.current.set(this.target.x,this.target.y),d=!0):(h=e.theta,c=e.phi,this.current.set(Bt(this.spherical.theta),Bt(this.spherical.phi)),d=!1),0===i&&(this.current.x+=h,this.current.y+=c),(3===t||2===t)&&(!d&&this.isThetaFlipped?this.current.x>r&&this.current.x<0?this.overShoot.x=r-this.current.x:this.current.x<s&&this.current.x>0&&(this.overShoot.x=s-this.current.x):this.current.x>r?this.overShoot.x=r-this.current.x:this.current.x<s&&(this.overShoot.x=s-this.current.x)),(3===t||1===t)&&(this.current.y>a?this.overShoot.y=a-this.current.y:this.current.y<o&&(this.overShoot.y=o-this.current.y)),d||(this.overShoot.x=Bt(this.overShoot.x),this.overShoot.y=Bt(this.overShoot.y)),0!==i?(this.overRatio.copy(this.overShoot).divide(l),this.overRatio.x=Math.min(Math.abs(this.overRatio.x),1),this.overRatio.y=Math.min(Math.abs(this.overRatio.y),1),1===i&&(this.overRatio.x=Bi(Math.abs(this.overRatio.x)),this.overRatio.y=Bi(Math.abs(this.overRatio.y))),this.isPointerDown||1===i?2===i&&(this.overRatio.x>.9&&!this.thetaIsFree||this.overRatio.y>.9&&!this.phiIsFree)?this.isPointerDown=!1:(h*this.overShoot.x<0&&!this.thetaIsFree&&(h*=1-this.overRatio.x),c*this.overShoot.y<0&&!this.phiIsFree&&(c*=1-this.overRatio.y)):2===i&&(!d&&(this.overRatio.x>.002&&!this.thetaIsFree||this.overRatio.y>.002&&!this.phiIsFree)||d&&(Math.abs(this.overShoot.x)>2||Math.abs(this.overShoot.y)>2)?(this.thetaIsFree||(h=.05*this.overShoot.x),this.phiIsFree||(c=.05*this.overShoot.y),d?this.isPanOverShoot=!0:this.isRotateOverSho
8465ot=!0):d?this.isPanOverShoot=!1:this.isRotateOverShoot=!1)):(h+=this.overShoot.x,c+=this.overShoot.y),e instanceof iv?(e.x=h,e.y=c):(this.thetaIsFree||(e.theta=h),this.phiIsFree||(e.phi=c))}setEnableDampingSpeed(e){this.enableDamping=e,this.rotateSpeed=!0===e?.2:1}stopDamping(){this.sphericalDelta.theta=0,this.sphericalDelta.phi=0}getAutoRotationAngle(){return 2*Math.PI/60/60*this.autoRotateSpeed}getZoomScale(){return Math.pow(.95,this.zoomSpeed)}rotateLeft(e){this.sphericalDelta.theta-=e}rotateUp(e){this.sphericalDelta.phi-=e}panLeft(e,t){this.panLeftV.setFromMatrixColumn(t,0),this.panLeftV.multiplyScalar(-e),this.panOffset.add(this.panLeftV)}panUp(e,t){this.panUpV.setFromMatrixColumn(t,1),this.panUpV.multiplyScalar(e),this.panOffset.add(this.panUpV)}pan(e,t){let i=this.domElement;if(i&&this.object.isPerspectiveCamera){let r=this.object.position;this.panV.copy(r).sub(this.target);let s=this.panV.length();s*=Math.tan(this.object.fov/2*Math.PI/180),this.panLeft(2*e*s/i.clientHeight,this.object.matrixWorld),this.panUp(2*t*s/i.clientHeight,this.object.matrixWorld)}else i&&this.object.isOrthographicCamera&&(this.panLeft(e*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrixWorld),this.panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrixWorld));this.dispatchEvent(LZ)}dollyOut(e){this.object.isPerspectiveCamera?this.scale/=e:this.object.isOrthographicCamera&&(this.object.zoom*=e,this.zoomLimitsEnabled&&(this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom))),this.object.updateProjectionMatrix(),this.zoomChanged=!0),this.dispatchEvent(LK)}dollyIn(e){this.object.isPerspectiveCamera?this.scale*=e:this.object.isOrthographicCamera&&(this.object.zoom/=e,this.zoomLimitsEnabled&&(this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom))),this.object.updateProjectionMatrix(),this.zoomChanged=!0),this.dispatchEvent(LK)}zoomOut(e=this.getZoomScale()){this.dispatchEvent(LJ),this.dollyOut(e),this.dispatchEvent(L$)}zoomIn(e=this.getZoomScale()){this.dispatchEvent(LJ),this.dollyIn(e),this.dispatchEvent(L$)}setZoom(e){if(this.dispatchEvent(LJ),this.object.isPerspectiveCamera){let t=this.initialSphericalRadius/e/this.spherical.radius;this.scale=t}else this.object.isOrthographicCamera&&(this.object.zoom=e,this.zoomLimitsEnabled&&(this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom))),this.object.updateProjectionMatrix(),this.zoomChanged=!0);this.dispatchEvent(L$)}handleMouseDownRotate(e){this.rotateStart.set(e.clientX,e.clientY)}handleMouseDownDolly(e){this.dollyStart.set(e.clientX,e.clientY)}handleMouseDownPan(e){this.panStart.set(e.clientX,e.clientY)}handleMouseMoveRotate(e,t=1){void 0!==e.movementX?this.rotateDelta.set(e.movementX,e.movementY):(this.rotateEnd.set(e.clientX,e.clientY),this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart),this.rotateStart.copy(this.rotateEnd)),this.rotateDelta.multiplyScalar(this.rotateSpeed*t).rotateAround(L2,-this.object.angleOffsetFromUp);let i=this.domElement,r=this.useWindowEvents?window.innerHeight:i.clientHeight,s=2*Math.PI*this.rotateDelta.x/r,a=2*Math.PI*this.rotateDelta.y/r;this.rotateLeft(s),this.rotateUp(a),this.update()}handleMouseMoveDolly(e){this.dollyEnd.set(e.clientX,e.clientY),this.dollyDelta.subVectors(this.dollyEnd,this.dollyStart),this.dollyDelta.y>0?this.dollyOut(this.getZoomScale()):this.dollyDelta.y<0&&this.dollyIn(this.getZoomScale()),this.dollyStart.copy(this.dollyEnd),this.update()}handleMouseMovePan(e,t=1){void 0!==e.movementX?this.panDelta.set(e.movementX,e.movementY):(this.panEnd.set(e.clientX,e.clientY),this.panDelta.subVectors(this.panEnd,this.panStart),this.panStart.copy(this.panEnd)),this.panDelta.multiplyScalar(this.panSpeed*t),this.pan(this.panDelta.x,this.panDelta.y),this.update()}handleMouseWheel(e){if(!1===uY&&!1===u0(e)&&!0==(0===e.wheelDeltaY||0===e.deltaY?!(uq&&e.shiftKey&&Math.abs(e.wheelDeltaX)>=120)&&(e.wheelDeltaX?e.wheelDeltaX===-3*e.deltaX||e.wheelDeltaX===-3*window.devicePixelRatio*e.deltaX:0===e.deltaMode):e.wheelDeltaY?e.wheelDeltaY===-3*e.deltaY||e.wheelDeltaY===-3*window.devicePixelRatio*e.deltaY:0===e.deltaMode))!1!==this.enablePan&&(this.gesture?(this.panDelta.set(-e.deltaX,-e.deltaY).multiplyScalar(this.panSpeed),this.panDelta.x=Math.min(Math.abs(this.panDelta.x),100)*(this.panDelta.x<0?-1:1),this.panDelta.y=Math.min(Math.abs(this.panDelta.y),100)*(this.panDelta.y<0?-1:1),e.altKey?this.pan(0,this.panDelta.y):e.shiftKey?this.pan(this.panDelta.x,0):this.pan(this.panDelta.x,this.panDelta.y),this.update()):(this.gesture=!0,this.isPointerDown=!0),window.clearTimeout(this.timer),this.timer=window.setTimeout(()=>{this.gesture=!1,this.isPointerDown=!1},30));else{if(!1===this.enableZoom||this.gesture)return;0===e.deltaY?e.deltaX<0?this.dollyIn(this.getZoomScale()):e.deltaX>0&&this.dollyOut(this.getZoomScale()):e.deltaY<0?this.dollyIn(this.getZoomScale()):e.deltaY>0&&this.dollyOut(this.getZoomScale()),this.update(),this.gesture=!1,this.isPointerDown=!1}}handleTouchStartRotate(){if(2===u1.length){let e=.5*(u1[0].pageX+u1[1].pageX),t=.5*(u1[0].pageY+u1[1].pageY);this.rotateStart.set(e,t)}else this.rotateStart.set(u1[0].pageX,u1[0].pageY)}handleTouchStartPan(){if(2===u1.length){let e=.5*(u1[0].pageX+u1[1].pageX),t=.5*(u1[0].pageY+u1[1].pageY);this.panStart.set(e,t)}else this.panStart.set(u1[0].pageX,u1[0].pageY)}handleTouchStartDolly(){let e=u1[0].pageX-u1[1].pageX,t=u1[0].pageY-u1[1].pageY,
8465i=Math.sqrt(e*e+t*t);this.dollyStart.set(0,i)}handleTouchStartDollyPan(){this.enableZoom&&!0===this.isTouchZoom&&this.handleTouchStartDolly(),this.enablePan&&this.handleTouchStartPan()}handleTouchStartDollyRotate(){this.enableZoom&&!0===this.isTouchZoom&&this.handleTouchStartDolly(),this.enableRotate&&this.handleTouchStartRotate()}handleTouchMoveRotate(e){if(2===u1.length){let t=u9(e),i=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this.rotateEnd.set(i,r)}else{if(e.pointerId!==u1[0].pointerId)return;this.rotateEnd.set(e.pageX,e.pageY)}this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;t&&(this.rotateLeft(2*Math.PI*this.rotateDelta.x/t.clientHeight),this.rotateUp(2*Math.PI*this.rotateDelta.y/t.clientHeight)),this.rotateStart.copy(this.rotateEnd)}handleTouchMovePan(e){if(2===u1.length){let t=u9(e),i=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this.panEnd.set(i,r)}else{if(e.pointerId!==u1[0].pointerId)return;this.panEnd.set(e.pageX,e.pageY)}this.panDelta.subVectors(this.panEnd,this.panStart).multiplyScalar(this.panSpeed),this.pan(this.panDelta.x,this.panDelta.y),this.panStart.copy(this.panEnd)}handleTouchMoveDolly(e){let t=u9(e),i=e.pageX-t.x,r=e.pageY-t.y,s=Math.sqrt(i*i+r*r);this.dollyEnd.set(0,s),this.dollyDelta.set(0,Math.pow(this.dollyEnd.y/this.dollyStart.y,this.zoomSpeed)),this.dollyOut(this.dollyDelta.y),this.dollyStart.copy(this.dollyEnd)}handleTouchMoveDollyPan(e){this.enableZoom&&!0===this.isTouchZoom&&this.handleTouchMoveDolly(e),this.enablePan&&this.handleTouchMovePan(e)}handleTouchMoveDollyRotate(e){this.enableZoom&&!0===this.isTouchZoom&&this.handleTouchMoveDolly(e),this.enableRotate&&this.handleTouchMoveRotate(e)}checkRaycastLock(){if(!this.object.data.raycastLock||this.options.isPlayMode)return!1;{let e=this.options?.showCameraLock;return e&&e(),!0}}};function Bt(e){let t=2*Math.PI;for(;e<=-Math.PI;)e+=t;for(;e>Math.PI;)e-=t;return e}function Bi(e){return 1-Math.pow(1-e,4)}var Br=class{constructor(e,t,i,r,s,a){for(let o of(this.id=e,this.data=t,this.object=i,this.page=r,this.currentIntersectedObjects=[],this.actions=OX(t,t.actions,r,s,a,i),this.target=t.target,this.triggeringObjects=[],t.triggeringObjects)){let e=r.scene.find(o);e&&this.triggeringObjects.push(e)}}isValidTriggeringObject(e){return"all"===this.target||this.triggeringObjects.some(t=>t===e||t.isAncestorOf(e.uuid)||e.isAncestorOf(t.uuid))}disconnect(){OY(this.actions)}dispatch(){this.object.destroyedInAction||(this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.object.dispatchEvent({type:"beginEvent",eventName:"Trigger"}),this.actions.Transition.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.SwitchCamera.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.Link.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>{e.dispatch()}),this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(e=>{e.dispatch(!1)}
8465),this.actions.Audio.forEach(e=>{e.dispatchBasic()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()}),this.actions.Video.forEach(e=>{e.dispatchBasic()}),this.actions.SceneTransition.forEach(e=>{e.dispatch()}),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()))}};pd.then(e=>tl=e);var Bs=new iv,Ba=new ig,Bn=new iv,Bo=new i3(0,0,0,"YXZ"),Bl=new i3(0,0,0,"XYZ"),Bh=new iv,Bc=new iv,Bd=new iv(1,1,1),Bu=new ig,Bp=new iX,Bf=new iX,Bm={type:"updateMatrix"},Bg=new ig,Bv=new iN,By={type:"beginEvent",eventName:"Collision"},Bx={type:"beginEvent",eventName:"Trigger"},Bb=e=>e.states.some(e=>void 0!==e.data.position||void 0!==e.data.rotation||void 0!==e.data.hiddenMatrix||void 0!==e.data.cloner||void 0!==e.data.pathSnapping),Bw=class{constructor(e){this.eventContext=e,this.isEnabled=!1,this.gameControl=null,this.joysticks=[],this.joystickToGameControls=[],this.sharedGameControlGlobals={entitiesWithTransformAnim:[],entityToCollisionEvents:{},colliderToEntity:new Map,triggers:[],gamePads:[],createdObjects:[],nCreatedPerAction:{}},this.sensorToTriggerEvent={},this.eventManager=void 0,this.needsCollisionDetection=!1,this.initializationCounter=-1,this.rigidBodyToMesh=new Map,this.nActiveRigidBodies=0,this.collisionEvents=[],this.isExport=!1,this.processRigidBody=e=>{if(e.bodyType()!==tl.RigidBodyType.Dynamic)return;e.isSleeping()||this.nActiveRigidBodies++;let[t,i,r]=this.rigidBodyToMesh.get(e.handle);if(Bs.copy(e.translation()).multiplyScalar(this.pixelsPerMeter),Ba.copy(e.rotation()),t.matrixWorld.compose(Bs,Ba,i),t.hasNonUniformScale&&t.matrixWorld.multiply(t.shearScale),t.dispatchEvent(Bm),r){let e=t.cloner;if(e&&void 0===e.objectForSample)for(let i of(e.matrixWorld.copy(t.matrixWorld),e.children))i.updateMatrixWorld(!0);for(let e of t.children)e.updateMatrixWorld(!0)}},this.accumulator=0,this.handleCollisionEvents=(e,t,i)=>{let r,s;if(!1!==i){if(this.sensorToTriggerEvent[e]?(r=this.sensorToTriggerEvent[e],s=this.sharedGameControlGlobals.colliderToEntity.get(t)):this.sensorToTriggerEvent[t]&&(r=this.sensorToTriggerEvent[t],s=this.sharedGameControlGlobals.colliderToEntity.get(e)),r&&s&&r.isValidTriggeringObject(s)){r.dispatch();return}for(let i=this.sharedGameControlGlobals.createdObjects.length-1;i>=0;i--){let r=this.sharedGameControlGlobals.createdObjects[i];if(r.userData.hasCollisionDestroy&&(r.rigidBody?.collider(0).handle===e||r.rigidBody?.collider(0).handle===t)){this.sharedGameControlGlobals.createdObjects.splice(i,1),r.removeFromParent(),requestAnimationFrame(()=>this.sharedGameControlGlobals.rapierWorld?.removeRigidBody(r.rigidBody));break}}if(this.gameControl?.object!==void 0&&this.gameControl.object===this.sharedGameControlGlobals.colliderToEntity.get(e)){let e=this.sharedGameControlGlobals.colliderToEntity.get(t),i=this.sharedGameControlGlobals.entityToCollisionEvents[e.uuid];if(void 0===i)return;for(let r of i)"character"===r.data.target&&this.dispatchCollisionEvent(r,e,t)}else if(this.gameControl?.object!==void 0&&this.gameControl.object===this.sharedGameControlGlobals.colliderToEntity.get(t)){let t=this.sharedGameControlGlobals.colliderToEntity.get(e),i=this.sharedGameControlGlobals.entityToCollisionEvents[t.uuid];if(void 0===i)return;for(let r of i)"character"===r.data.target&&this.dispatchCollisionEvent(r,t,e)}else{let i=this.sharedGameControlGlobals.colliderToEntity.get(e),r=this.sharedGameControlGlobals.entityToCollisionEvents[i.uuid];if(void 0!==r)for(let t of r)"scene"===t.data.target&&this.dispatchCollisionEvent(t,i,e);let s=this.sharedGameControlGlobals.colliderToEntity.get(t),a=this.sharedGameControlGlobals.entityToCollisionEvents[s?.uuid];if(void 0!==a)for(let e of a)"scene"===e.data.target&&this.dispatchCollisionEvent(e,s,t)}}},this.isExport=e.isExport,this.sharedAssets=e.sharedAssets,this.renderer=e.renderer,this.requestRender=e.requestRender,this.domElement=this.renderer.domElement,this.pixelsPerMeter=200,this.gravity=this.page.data.globalPhysics.gravity}get page(){return this.eventContext.page}
8465attachVRControllers(e){e.forEach(e=>{e.addEventListener("connected",e=>{"gamepad"in e.data&&"axes"in e.data.gamepad&&this.sharedGameControlGlobals.gamePads.push(e.data.gamepad)})})}markIsDestroyTarget(){this.page.traverseVisibleEntity(e=>{for(let t of e.dataPatched.events){if(!0===t.data.disabled)continue;let e=t.data.actions?.find(e=>"Destroy"===e.data.type)?.data;if(e)for(let t of e.objects){let e=this.page.scene.find(t);e&&(e.userData.hasDestroy=!0)}}})}markIsDragObject(){this.page.traverseVisibleEntity(e=>{for(let t of e.dataPatched.events)if(!(!0===t.data.disabled||"DragDrop"!==t.data.type))for(let e of t.data.objects){let t=this.page.scene.find(e);t&&(t.userData.hasDrag=!0)}})}initBVH(){let e=[];if(this.page.traverseChildren(t=>{let i,r=t instanceof ER,s=t instanceof P9;if(t instanceof M9||r||s)return;let a=(i=t instanceof xb?t.object:t).dataPatched;if(a.physics?.enabled==="visibility"?!a.visible:!a.physics?.enabled)return!0;let o=t.geometry,l=!0===i.userData.hasDestroy,h=!0===i.userData.hasDrag;if(Bb(a)||l||h||i.dataPatched.events.some(e=>!0!==e.data.disabled&&("GameControl"===e.data.type||"Follow"===e.data.type)))return t.updateMatrixWorldSVD(),this.addBoundsTree(t),!0;o&&e.push(Rb(o,t.matrixWorld))}),e.length>0){let t=gQ(e,!1);this.sharedGameControlGlobals.staticMeshBVH=new xe(t)}}addRigidBody(e,t,i){if(Rx(e.matrixWorld))return;let r=[],s="geometry"in e?e.geometry:void 0,a=t.dataPatched;if(s?.getAttribute("position")!==void 0&&r.push(Rb(s,e.shearScale)),a.physics.fusedBody){let t=this.gatherChildrenGeom(e,r);e.traverseObject(t),e.children.forEach(e=>e.updateMatrixWorld(!0));let i=e.cloner;i&&void 0===i.objectForSample&&"dynamic"===a.physics.rigidBody&&(i.traverseObject(t),i.children.forEach(e=>e.updateMatrixWorld(!0)))}if(r.length>0){let o,l=!i.fromCreate&&"dynamic"===a.physics.rigidBody||i.fromCreate&&i.dynamic;l?(o=tl.RigidBodyDesc.dynamic()).setLinearDamping(a.physics.damping).setAngularDamping(a.physics.damping).setAdditionalMass(1e-9).setGravityScale(a.physics.gravityScale).enabledRotations(...a.physics.enabledRotation).enabledTranslations(...a.physics.enabledTranslation):(i.hasTransformAnim||i.hasFollow||i.hasDrag)&&!i.fromCreate?(o=tl.RigidBodyDesc.kinematicPositionBased(),this.sharedGameControlGlobals.entitiesWithTransformAnim.push(e)):o=tl.RigidBodyDesc.fixed();let h=gQ(r);(e.hasNonUniformScale?e.matrixWorldRigid:e.matrixWorld).decompose(Bs,Ba,Bn),e.position0=Bs.clone().divideScalar(this.pixelsPerMeter),e.rotation0=Ba.clone(),Bs.divideScalar(this.pixelsPerMeter),o.setTranslation(Bs.x,Bs.y,Bs.z).setRotation(Ba),s?h?.scale(1/this.pixelsPerMeter,1/this.pixelsPerMeter,1/this.pixelsPerMeter):h?.scale(Bn.x/this.pixelsPerMeter,Bn.y/this.pixelsPerMeter,Bn.z/this.pixelsPerMeter);let c=this.sharedGameControlGlobals.rapierWorld.createRigidBody(o);l&&this.rigidBodyToMesh.set(c.handle,[e,Bn.clone(),a.physics.fusedBody]);let d=!(void 0===a.geometry||"SubdivGeometry"===a.geometry.type||"NonParametricGeometry"===a.geometry.type||"BooleanGeometry"===a.geometry.type||"VectorGeometry"===a.geometry.type||"StarGeometry"===a.geometry.type||"RectangleGeometry"===a.geometry.type||"EllipseGeometry"===a.geometry.type||"TriangleGeometry"===a.geometry.type||"TorusGeometry"===a.geometry.type||"HelixGeometry"===a.geometry.type);try{this.addCollider(c,a.physics,h,t,d)}catch{try{this.addCollider(c,a.physics,h,t,!1)}catch(e){console.error(e)}}e.rigidBody=c}}addBoundsTree(e){let t=[];if(e.geometry?.getAttribute("position")!==void 0&&e.geometry?.getAttribute("position").count>0&&t.push(Rb(e.geometry,e.shearScale)),e.traverseObject(this.gatherChildrenGeom(e,t)),e.children.forEach(e=>e.updateMatrixWorld(!0)),t.length>0){let i=gQ(t,!1);e.bvhGeometry=i,i.getAttribute("position").count>0&&(e.bvhGeometry.boundsTree=new xe(i),this.sharedGameControlGlobals.entitiesWithTransformAnim.push(e))}}addCollider(e,t,i,r,s=!0){let a;if(i?.getAttribute("position").count===0||i?.getIndex()?.count===0)return;i&&(a="trimesh"===t.colliderType?tl.ColliderDesc.trimesh(i.getAttribute("position").array,i.getIndex().array):tl.ColliderDesc.convexMesh(i.getAttribute("position").array,s?i.getIndex().array:void 0)),a.setFrictionCombineRule(tl.CoefficientCombineRule.Average).setRestitutionCombineRule(tl.CoefficientCombineRule.Average).setDensity(t.density).setFriction(t.friction).setRestitution(t.restitution);let o=this.sharedGameControlGlobals.rapierWorld.createCollider(a,e);this.sharedGameControlGlobals.colliderToEntity.set(o.handle,r),this.sharedGameControlGlobals.entityToCollisionEvents[r.uuid]?.some(e=>"scene"===e.target)&&o.setActiveEvents(tl.ActiveEvents.COLLISION_EVENTS)}gatherChildrenGeom(e,t){return(i,r)=>{let s;if(0===r)return;if(i instanceof M9){if(!i.objectForSample)return!0===i.object.dataPatched.physics.fusedBody&&"dynamic"===i.object.dataPatched.physics.rigidBody||void 0;if(i.objectForSample.dataPatched.physics.fusedBody)return;s=i.object}else if(i instanceof xb)s=i.object;else if(s=i,s.dataPatched.cloner?.hideBase)return!0;let a=s.dataPatched;
8465if("visibility"===a.physics.enabled?!a.visible:!a.physics.enabled)return!0;1===r?e.hasNonUniformScale?i.matrixWorld.multiplyMatrices(e.shearScale,i.hiddenMatrix):i.matrixWorld.copy(i.hiddenMatrix):i.matrixWorld.multiplyMatrices(i.parent.matrixWorld,i.hiddenMatrix),i.matrixWorld.multiply(i.matrix);let o=i.geometry;o?.getAttribute("position")!==void 0&&t.push(Rb(o,i.matrixWorld))}}activate(e){if(this.isEnabled)return;this.isEnabled=!0,this.eventManager=e,this.usePhysics=this.page.data.globalPhysics.usePhysics;let t=this.page.playCamera,i=!1,r=5,s=8,a=9,o="drag",l=this.page.data.publish.gameControlObject,h=null!==l?this.page.find(l):null,c=null;if(h)for(let e of h.data.events){if(e.data.disabled||"GameControl"!==e.data.type)continue;let t=h;for(;this.usePhysics&&(t=t.parent)?.parent!==null;)t.data.physics?.fusedBody;e.data.collisionEnabled&&(this.needsCollisionDetection=!0),null===c&&(c=e.data)}if(this.page.traverseEntity(e=>{for(let t of e.dataPatched.events)if(!1===t.data.disabled&&"Trigger"===t.data.type)return this.needsCollisionDetection=!0,!0}),h&&c&&(!0===h.data.visible||!0===h.data.physics.enabled)){i=i||c.camera===t.uuid||h.uuid===t.uuid;let e=new Rv(h,this.renderer.domElement,c,this.eventContext.page.data.globalPhysics,this,h.uuid!==t.uuid&&c.camera===t.uuid,t,this.page,this.sharedAssets);this.gameControl=e,r=c.joystickPosLoc,s=c.joystickRotLoc,a=c.jumpTouchButtonLoc,o=c.rotByTouch,uQ&&c.touchControl&&(this.joystickToGameControls[r]="pos","walk"===c.moveMode&&(this.joystickToGameControls[a]="jmp"),"joystick"===o&&(this.joystickToGameControls[s]="rot"))}if(this.gameControl&&this.gameControl.data.navmesh.enabled){let e=this.gameControl.data;if(!this.navigationMeshWrapper){let t;this.navigationMeshWrapper=new LX(this.usePhysics,this.isExport),t=Math.floor((t="sphere"===e.collider.type?2*e.collider.radius:e.collider.height)/e.navmesh.ch-1),this.navigationMeshWrapper.init({...e.navmesh,walkableHeight:t},this.gameControl,this.eventContext)}}if(!1===i){let{enableRotate:e,enablePan:i,enableZoom:r,autoRotate:s,hoverRotatePanMode:a}=this.eventManager.publish.orbitControls;(e||i||r||s||0!==a)&&(this.orbitControls=new Be(t,this.renderer.domElement,{isExport:this.isExport,isPlayMode:!0}),this.orbitControls.addEventListener("change",this.requestRender),this.orbitControls.addEventListener("end",this.requestRender),this.orbitControls.addEventListener("start",this.requestRender),this.orbitControls.fromJSON(this.eventManager.publish.orbitControls,this.eventManager.publish.mouseEventTarget),this.orbitControls.useKeyEvents=!1,this.orbitControls.addEventListenersToCamera(),this.orbitControls.connect(),this.orbitControls.update())}let d=this.renderer.domElement.width/this.renderer.getPixelRatio(),u=this.renderer.domElement.height/this.renderer.getPixelRatio();this.joystickToGameControls.forEach((e,t)=>{let i=document.body.appendChild(document.createElement("div")),[r,s,a]=this.eventManager.eventContext.publish.joystickSizeAndXYOffset[t],o=(d-5*r)/4+r,l={},h="jmp"===e,c=h?0:r;for(let e in t<10?(t<5?l.top=c/2:l.bottom=c/2,l.left=c/2+t%5*o):(10===t?l.left=c/2:l.right=c/2,l.top=u/2),l.top?l.top-=s[1]:l.bottom+=s[1],l.left?l.left+=s[0]:l.right-=s[0],l)l[e]+="px";if(h){let e=i.appendChild(document.createElement("div"));Object.assign(e.style,l,{position:"absolute",width:r+"px",height:r+"px",backgroundColor:`rgba(255,255,255,${"show"===a?.4:0})`,zIndex:"9999",borderRadius:r+"px",border:"show"===a?"solid 2px rgba(0, 0, 0, .1)":"none",display:"flex",alignItems:"center",justifyContent:"center",touchAction:"none"});let s=r/16*6.4;"show"===a&&(e.innerHTML=` 8466 <svg width="${s}" height="${.4*r}" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 8467 <path d="M2 10L8 4L14 10" stroke="black" stroke-opacity="40%" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 8468 </svg> 8469 `),e.addEventListener("pointerdown",()=>{this.gameControl.movementState.jump=1,this.requestRender()}),e.addEventListener("touchend",e=>e.preventDefault()),this.joysticks[t]=[void 0,i];return}let p={zone:i,mode:"static",position:l,size:r};"hide"===a&&(p.restOpacity=0);let f=Ic.create(p);f.on("move",(t,i)=>{let r=this.gameControl;"pos"===e?i.force<.2?r.moveForce=0:(r.movementState.movePosZ=Math.sin(-i.angle.radian),r.movementState.movePosX=Math.cos(-i.angle.radian),i.force>1.2?r.movementState.run=1:r.movementState.run=0,i.force<.3?r.moveForce=(i.force-.2)/.1:r.moveForce=1):"rot"===e&&(i.force<.2?r.rotForce=0:(r.movementState.rotPosX=i.vector.y,r.movementState.rotPosY=-i.vector.x,i.force<.3?r.rotForce=(i.force-.2)/.1:r.rotForce=1)),this.requestRender()}),f.on("end",(t,i)=>{let r=this.gameControl;"pos"===e?(r.movementState.movePosZ=0,r.movementState.movePosX=0,r.moveForce=1):"rot"===e&&(r.movementState.rotPosX=0,r.movementState.rotPosY=0,r.rotForce=1)}),this.joysticks[t]=[f,i]}),this.markIsDestroyTarget(),this.markIsDragObject(),this.rebuildBVH(),this.initializationCounter++,window.setTimeout(()=>
8469{this.collisionEvents.forEach(e=>e.initialDisabled=!1)},80)}initPhysics(){this.sharedGameControlGlobals.rapierWorld?.free(),this.sharedGameControlGlobals.rapierWorld=new tl.World(new tl.Vector3(0,this.gravity,0)),this.events=new tl.EventQueue(!0);let e=[],t=[];if(this.page.traverseChildren(i=>{let r;if(i instanceof M9){if(!i.objectForSample)return!0===i.object.dataPatched.physics.fusedBody&&"dynamic"===i.object.dataPatched.physics.rigidBody||void 0;if(i.objectForSample.dataPatched.physics.fusedBody)return;r=i.object}else if(i instanceof xb)r=i.object;else{if(i instanceof P9||i instanceof ER)return;if(r=i,r.dataPatched.cloner?.disabled===!1&&r.dataPatched.cloner?.hideBase&&r.dataPatched.physics?.fusedBody!==!0)return!0}let s=r.dataPatched,a;for(let e of s.events)!0!==e.data.disabled&&"GameControl"===e.data.type&&(a=e.data);if(!s.physics||("visibility"===s.physics.enabled?!s.visible:!s.physics.enabled))return!0;i.updateMatrixWorldSVD();let o=Bb(s),l=!1,h=r.userData.hasDestroy,c=r.userData.hasDrag,d=!1;for(let e of s.events)if(!0!==e.data.disabled){if("Collision"===e.data.type){l=!0;let t=new LB(e.id,e.data,r,this.page,this.sharedAssets,this.eventManager);t.initialDisabled=!0,this.collisionEvents.push(t),this.sharedGameControlGlobals.entityToCollisionEvents[r.uuid]&&this.sharedGameControlGlobals.entityToCollisionEvents[r.uuid].every(t=>t.id!==e.id)?this.sharedGameControlGlobals.entityToCollisionEvents[r.uuid].push(t):this.sharedGameControlGlobals.entityToCollisionEvents[r.uuid]=[t]}else if("Follow"===e.data.type){d=!0;let t=e.data.target;i.traverseVisible(e=>{e.userData.isFollowingObj=t})}}"dynamic"===s.physics.rigidBody&&!1===s.physics.fusedBody&&(i.matrixWorldFusedFalse=i.matrixWorld.clone());let u=i.geometry;if(void 0!==a){let e,t=tl.RigidBodyDesc.kinematicPositionBased();(i.hasNonUniformScale?i.matrixWorldRigid:i.matrixWorld).decompose(Bs,Ba,Bn),i.position0=Bs.clone().divideScalar(this.pixelsPerMeter),i.rotation0=Ba.clone(),Bs.divideScalar(this.pixelsPerMeter),t.setTranslation(Bs.x,Bs.y,Bs.z).setRotation(Ba);let o=this.sharedGameControlGlobals.rapierWorld.createRigidBody(t);i.rigidBody=o,(e="sphere"===a.collider.type?tl.ColliderDesc.ball(a.collider.radius/this.pixelsPerMeter):"capsule"===a.collider.type?tl.ColliderDesc.capsule((a.collider.height/2-a.collider.radius)/this.pixelsPerMeter,a.collider.radius/this.pixelsPerMeter):tl.ColliderDesc.cuboid(a.collider.width/this.pixelsPerMeter/2,a.collider.height/this.pixelsPerMeter/2,a.collider.depth/this.pixelsPerMeter/2)).setFrictionCombineRule(tl.CoefficientCombineRule.Average).setRestitutionCombineRule(tl.CoefficientCombineRule.Average).setDensity(s.physics.density).setFriction(s.physics.friction).setRestitution(s.physics.restitution);let l=this.sharedGameControlGlobals.rapierWorld.createCollider(e,o);this.sharedGameControlGlobals.colliderToEntity.set(l.handle,r),Bs.fromArray(a.collider.position).multiply(Bn.setFromMatrixScale(r.matrixWorld)).divideScalar(this.pixelsPerMeter),l.setTranslationWrtParent(Bs);let h=new ig().setFromEuler(new i3().setFromVector3(new iv().fromArray(a.collider.rotation)));l.setRotationWrtParent(h),l.setActiveEvents(tl.ActiveEvents.COLLISION_EVENTS),this.generateSensorColliderDescs(r,!0)}else"dynamic"===s.physics.rigidBody||o||d||h||c||l?(this.addRigidBody(i,r,{hasFollow:d,hasTransformAnim:o,hasDrag:c}),this.generateSensorColliderDescs(r,s.physics.fusedBody)):(u&&e.push(Rb(u,i.matrixWorld)),s.physics.fusedBody&&i.traverseObject((t,i)=>{let r;if(0===i)return;if(t instanceof M9){if(!t.objectForSample)return!0===t.object.dataPatched.physics.fusedBody&&"dynamic"===t.object.dataPatched.physics.rigidBody||void 0;if(t.objectForSample.dataPatched.physics.fusedBody)return;r=t.object}else{if(t instanceof P9||t instanceof ER)return;if(t instanceof xb)r=t.object;else if(r=t,r.dataPatched.cloner?.hideBase)return!0}let s=r.dataPatched;if("visibility"===s.physics.enabled?!s.visible:!s.physics.enabled)return!0;let a=t.geometry;a?.getAttribute("position")!==void 0&&e.push(Rb(a,t.matrixWorld))}),this.generateSensorColliderDescs(r,s.physics.fusedBody,t));if(s.physics?.fusedBody===!0||a)return!0}),0===e.length)return;let i=gQ(e);i.scale(1/this.pixelsPerMeter,1/this.pixelsPerMeter,1/this.pixelsPerMeter);let r=tl.RigidBodyDesc.fixed(),s=this.sharedGameControlGlobals.rapierWorld.createRigidBody(r),a=tl.ColliderDesc.trimesh(i.getAttribute("position").array,i.getIndex().array).setFrictionCombineRule(tl.CoefficientCombineRule.Multiply).setRestitutionCombineRule(tl.CoefficientCombineRule.Multiply).setFriction(1).setRestitution(1);for(let[e,i]of(this.sharedGameControlGlobals.rapierWorld.createCollider(a,s),t)){let t=this.sharedGameControlGlobals.rapierWorld.createCollider(e,s);this.sensorToTriggerEvent[t.handle]=i}}updatePositions(){return this.nActiveRigidBodies=0,this.sharedGameControlGlobals.rapierWorld.forEachRigidBody(this.processRigidBody),this.nActiveRigidBodies>0}rebuildBVH(){this.usePhysics?this.initPhysics():(this.page.traverseEntity(e=>{for(let t of e.dataPatched.events)if("Trigger"===t.data.type&&!0!==t.data.disabled){let i=new Br(t.id,t.data,e,this.page,this.sharedAssets,this.eventManager),r=new iX().compose(Bh.fromArray(t.data.position),Bu.setFromEuler(Bl.fromArray(t.data.rotation)),Bd);if("box"===t.data.triggerZone){let s=new ib;s.min.fromArray(t.data.size).multiplyScalar(-.5),s.max.fromArray(t.data.size).multiplyScalar(.5),this.sharedGameControlGlobals.triggers.push([s,r,e,i])}else this.sharedGameControlGlobals.triggers.push([t.data.radius,r,e,i])}}),this.needsCollisionDetection&&this.initBVH())}
8469disconnectEvents(){this.collisionEvents.forEach(e=>e.disconnect()),this.sharedGameControlGlobals.triggers.forEach(e=>e[3].disconnect()),this.sharedGameControlGlobals.triggers.length=0}deactivate(){if(this.isEnabled){for(let e of(this.isEnabled=!1,this.page.traverse(e=>{e.matrixWorldFusedFalse&&(e.matrixWorldFusedFalse=void 0),e.rigidBody&&(e.rigidBody=void 0),e.position0&&(e.position0=void 0),e.rotation0&&(e.rotation0=void 0)}),this.sharedGameControlGlobals.rapierWorld?.free(),this.sharedGameControlGlobals.rapierWorld=void 0,this.sharedGameControlGlobals.staticMeshBVH=void 0,this.accumulator=0,this.sharedGameControlGlobals.entitiesWithTransformAnim=[],this.disconnectEvents(),this.gameControl?.reset(),this.gameControl?.dispose(),this.gameControl=null,this.initializationCounter=-1,this.joysticks.forEach(([e,t])=>{e?.destroy(),t.remove()}),this.joystickToGameControls=[],this.joysticks=[],this.orbitControls&&(this.orbitControls.dispose(),this.orbitControls=void 0),this.navigationMeshWrapper?.dispose(),this.navigationMeshWrapper=void 0,Object.values(this.sharedGameControlGlobals.entityToCollisionEvents)))e.forEach(e=>e.disconnect());this.sharedGameControlGlobals.entityToCollisionEvents={},this.page.updateMatrixWorld(!0)}}update(e,t,i){if(!this.isEnabled)return!0;let r=!0;if(void 0!==this.orbitControls&&this.orbitControls.needsUpdate&&(r=!this.orbitControls.update()),this.initializationCounter>=0&&this.initializationCounter<2?(this.initializationCounter++,r=!1):2===this.initializationCounter&&this.gameControl&&(r=!this.gameControl.update(e,t,i)&&r),!1===this.usePhysics&&this.checkTrigger(),this.usePhysics){if(0===e)r=this.stepPhysics()&&r;else{let t=e/1e3;t<.016666666666666666&&t>.009166666666666667&&(t=.016666666666666666),this.accumulator+=t;let i=performance.now(),s=0;for(;this.accumulator>=.016666666666666666&&s<6&&(r=this.stepPhysics()&&r,this.accumulator-=.016666666666666666,s++,!(performance.now()-i>16.666666666666668)););this.accumulator=this.accumulator%.016666666666666666}}return r}stepPhysics(){for(let e of this.sharedGameControlGlobals.entitiesWithTransformAnim)(e.hasNonUniformScale?e.matrixWorldRigid:e.matrixWorld).decompose(Bs,Ba,Bn),Bo.setFromQuaternion(Ba),void 0===e.prevR?(e.prevR=Bo.clone(),e.prevT=Bs.clone()):(e.prevR.copy(Bo),e.prevT.copy(Bs)),e.rigidBody&&(e.rigidBody.setNextKinematicTranslation(Bs.divideScalar(this.pixelsPerMeter)),e.rigidBody.setNextKinematicRotation(Ba));return this.sharedGameControlGlobals.rapierWorld.step(this.events),this.events?.drainCollisionEvents(this.handleCollisionEvents),!this.updatePositions()}dispatchCollisionEvent(e,t,i){let r=(this.sharedGameControlGlobals.rapierWorld?.getCollider(i))._parent,s;if(t.cloner){for(let e of t.cloner.children)if(e.rigidBody===r){s=e;break}}e.dispatch(s),t.dispatchEvent(By)}updateUseWindowEvents(e){this.orbitControls?.updateUseWindowEvents(e)}generateSensorColliderDescs(e,t,i){let r=Bf.copy(e.matrixWorld).invert();e.traverseEntity((s,a)=>
8469{if(!1===t&&1===a)return!0;for(let t of s.dataPatched.events)if("Trigger"===t.data.type&&!0!==t.data.disabled){let a=new Br(t.id,t.data,s,this.page,this.sharedAssets,this.eventManager),o;if((o="box"===t.data.triggerZone?tl.ColliderDesc.cuboid(...t.data.size.map(e=>e/(2*this.pixelsPerMeter))):tl.ColliderDesc.ball(t.data.radius/this.pixelsPerMeter)).setDensity(0).setSensor(!0).setActiveEvents(tl.ActiveEvents.COLLISION_EVENTS),Bh.fromArray(t.data.position),Bu.setFromEuler(Bl.fromArray(t.data.rotation)),Bp.compose(Bh,Bu,Bd).premultiply(s.matrixWorld),i?(Bp.decompose(Bh,Bu,Bc),o.setActiveCollisionTypes(tl.ActiveCollisionTypes.KINEMATIC_FIXED|tl.ActiveCollisionTypes.DYNAMIC_FIXED)):(Bp.premultiply(r).decompose(Bh,Bu,Bc),e.rigidBody.bodyType()===tl.RigidBodyType.Dynamic||(e.rigidBody.bodyType()===tl.RigidBodyType.Fixed?o.setActiveCollisionTypes(tl.ActiveCollisionTypes.KINEMATIC_FIXED|tl.ActiveCollisionTypes.DYNAMIC_FIXED):o.setActiveCollisionTypes(tl.ActiveCollisionTypes.KINEMATIC_KINEMATIC|tl.ActiveCollisionTypes.DYNAMIC_KINEMATIC))),Bh.divideScalar(this.pixelsPerMeter),o.setTranslation(Bh.x,Bh.y,Bh.z),o.setRotation(Bu),i)i.push([o,a]);else{let t=this.sharedGameControlGlobals.rapierWorld.createCollider(o,e.rigidBody);this.sensorToTriggerEvent[t.handle]=a}}})}checkTrigger(){let e;for(let t=0;t<this.sharedGameControlGlobals.triggers.length;t++){let[i,r,s,a]=this.sharedGameControlGlobals.triggers[t];for(let t=0;t<this.sharedGameControlGlobals.entitiesWithTransformAnim.length;t++){let o=this.sharedGameControlGlobals.entitiesWithTransformAnim[t];if(s===o||!1===a.isValidTriggeringObject(wQ.is(o)?o:o.object))continue;let l=Bf.copy(s.matrixWorld).decompose(Bh,Bg,Bc).compose(Bh,Bg,Bd).multiply(r),h=Bp.copy(o.matrixWorld).invert().multiply(l);i instanceof ib?e=o.bvhGeometry.boundsTree.intersectsBox(i,h):(Bv.radius=i,Bv.center.setFromMatrixPosition(h),e=o.bvhGeometry.boundsTree.intersectsSphere(Bv)),e?-1===a.currentIntersectedObjects.indexOf(o)&&(a.currentIntersectedObjects.push(o),a.dispatch(),s.dispatchEvent(Bx)):a.currentIntersectedObjects=a.currentIntersectedObjects.filter(e=>e!==o)}}}};function BS(e){let t=this._clip.duration,i=this._clip.start??0,r=this.loop,s=this.time+e,a=this._loopCount,o=2202===r;if(0===e)return -1===a?s:o&&(1&a)==1?t-(s-i):s;if(2200===r){-1===a&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(s>=t)s=t;else if(s<0)s=0;else{this.time=s;break e}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:e<0?-1:1})}}else{if(-1===a&&(e>=0?(a=0,this._setEndings(!0,0===this.repetitions,o)):this._setEndings(0===this.repetitions,!0,o)),s>=t||s<i){let r=Math.floor((s-i)/(t-i));s-=(t-i)*r,a+=Math.abs(r);let l=this.repetitions-a;if(l<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,o||(s=e>0?t:i,1===this.repetitions&&(s=t)),this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:e>0?1:-1});else{if(1===l){let t=e<0;this._setEndings(t,!t,o)}else this._setEndings(!1,!1,o);this._loopCount=a,this.time=s,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:r})}}else this.time=s;if(o&&(1&a)==1)return t-(s-i)}return s}var B_=!1,BA=class{constructor(e,t,i,r){this.scene=e,this.requestRender=t,this.updateDisplayProgress=i,this.animationInspectorState=r,this.clipIdToAction={},this.activeClip=null,this.needsUpdate=!1,this.addClip=e=>{"Empty"===e.data.type&&e.data.animations&&e.data.animations.forEach((t,i)=>{let r=t[0]+"/";if(Array.isArray(e.identity)?r+=e.identity[0]:r+=e.uuid,this.clipIdToAction[r])return;let s=o$.parse(JSON.parse(t[2]));e.animations[i]=s;let a=this.mixer.clipAction(s,e);!1===B_&&(Object.getPrototypeOf(a)._updateTime=BS,B_=!0),a.clampWhenFinished=!0,this.clipIdToAction[r]=a})},this.mixer=new lP(e),this.scene.traverseEntity(this.addClip)}deleteClip(e,t){let i=this.scene.find(t);if(!i)return;let r=i.animations.find(t=>t.uuid===e);if(!r)return;let s=this.clipIdToAction[e];s&&(s.stop(),this.mixer.uncacheClip(r),delete this.clipIdToAction[e],i.animations=i.animations.filter(t=>t.uuid!==e))}get isPlaying(){return Object.values(this.clipIdToAction).some(e=>e.isRunning())}playFromInspector(e){this.mixer.stopAllAction();let t=this.clipIdToAction[e];t&&(t.play(),this.activeClip=t.getClip(),this.requestRender())}
8469onExitPlayMode(){Object.values(this.clipIdToAction).forEach(e=>{e.repetitions=1/0,e.loop=2201}),this.mixer.stopAllAction(),this.requestRender()}play(e){let t=e.clipId+"/"+e.object,i=this.clipIdToAction[t];if(i)return e&&(e.repeat>=0&&(i.repetitions=e.repeat+1),"pingpong"===e.direction&&0!==e.repeat&&(i.loop=2202)),i.play(),i.paused=!1,this.requestRender(),i}resumeFromInspector(e){let t=this.clipIdToAction[e];t&&(t.play(),t.paused=!1,this.requestRender())}pauseFromInspector(e){let t=this.clipIdToAction[e];t&&(t.paused=!0)}stop(){this.mixer.stopAllAction(),this.requestRender()}update(e){if(this.needsUpdate)this.needsUpdate=!1;else if(!1===this.isPlaying||this.animationInspectorState?.isScrubbing)return;this.mixer.update(e/1e3),this.activeClip&&this.updateDisplayProgress(Math.round(this.mixer.time/this.activeClip.duration*(this.maxFrames-1)%(this.maxFrames-1))),this.requestRender()}get maxFrames(){return Ok(this.activeClip??void 0)}setProgressFromInspector(e,t){if(!this.clipIdToAction[t])return;this.activeClip!==this.clipIdToAction[t].getClip()&&this.playFromInspector(t);let i=this.clipIdToAction[t].paused;this.clipIdToAction[t].paused=!1,this.mixer.setTime(Math.min(e/(this.maxFrames-1),.9999)*this.activeClip.duration),this.requestRender(),i&&(this.clipIdToAction[t].paused=!0)}},BM=new WeakMap,BE=class extends o3{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,i,r){let s=new o6(this.manager);s.setPath(this.path),s.setResponseType("arraybuffer"),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(e,e=>{this.decodeDracoFile(e,t).catch(r)},i,r)}decodeDracoFile(e,t,i,r){let s={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:r||this.defaultAttributeTypes,useUniqueIDs:!!i};return this.decodeGeometry(e,s).then(t)}decodeGeometry(e,t){let i=JSON.stringify(t);if(BM.has(e)){let t=BM.get(e);if(t.key===i)return t.promise;if(0===e.byteLength)throw Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let r,s=this.workerNextTaskID++,a=e.byteLength,o=this._getWorker(s,a).then(i=>(r=i,new Promise((i,a)=>{r._callbacks[s]={resolve:i,reject:a},r.postMessage({type:"decode",id:s,taskConfig:t,buffer:e},[e])}))).then(e=>this._createGeometry(e.geometry));return o.catch(()=>!0).then(()=>{r&&s&&this._releaseTask(r,s)}),BM.set(e,{key:i,promise:o}),o}_createGeometry(e){let t=new rz;e.index&&t.setIndex(new rM(e.index.array,1));for(let i=0;i<e.attributes.length;i++){let r=e.attributes[i],s=r.name,a=r.array,o=r.itemSize;t.setAttribute(s,new rM(a,o))}return t}_loadLibrary(e,t){let i=new o6(this.manager);return i.setPath(this.decoderPath),i.setResponseType(t),i.setWithCredentials(this.withCredentials),new Promise((t,r)=>{i.load(e,t,void 0,r)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;let e="object"!=typeof WebAssembly||"js"===this.decoderConfig.type,t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(t=>{let i=t[0];e||(this.decoderConfig.wasmBinary=t[1]);let r=BC.toString(),s=["/* draco decoder */",i,"","/* worker */",r.substring(r.indexOf("{")+1,r.lastIndexOf("}"))].join(` 8470`);this.workerSourceURL=URL.createObjectURL(new Blob([s]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){let e=new Worker(this.workerSourceURL);e._callbacks={},e._taskCosts={},e._taskLoad=0,e.postMessage({type:"init",decoderConfig:this.decoderConfig}),e.onmessage=function(t){let i=t.data;switch(i.type){case"decode":e._callbacks[i.id].resolve(i);break;case"error":e._callbacks[i.id].reject(i);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+i.type+'"')}},this.workerPool.push(e)}else this.workerPool.sort(function(e,t){return e._taskLoad>t._taskLoad?-1:1});let i=this.workerPool[this.workerPool.length-1];return i._taskCosts[e]=t,i._taskLoad+=t,i})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,""!==this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),this}};function BC(){let e,t;onmessage=function(i){let r=i.data;switch(r.type){case"init":e=r.decoderConfig,t=new Promise(function(t){e.onModuleLoaded=function(e){t({draco:e})},DracoDecoderModule(e)});break;case"decode":let s=r.buffer,a=r.taskConfig;t.then(e=>{let t=e.draco,i=new t.Decoder,o=new t.DecoderBuffer;o.Init(new Int8Array(s),s.byteLength);try{let e=function(e,t,i,r){let s=r.attributeIDs,a=r.attributeTypes,o,l,h=t.GetEncodedGeometryType(i);if(h===e.TRIANGULAR_MESH)o=new e.Mesh,l=t.DecodeBufferToMesh(i,o);else if(h===e.POINT_CLOUD)o=new e.PointCloud,l=t.DecodeBufferToPointCloud(i,o);else throw Error("THREE.DRACOLoader: Unexpected geometry type.");if(!l.ok()||0===o.ptr)throw Error("THREE.DRACOLoader: Decoding failed: "+l.error_msg());let c={index:null,attributes:[]};for(let i in s){let l=self[a[i]],h,d;if(r.useUniqueIDs)d=s[i],h=t.GetAttributeByUniqueId(o,d);else{if(-1===(d=t.GetAttributeId(o,e[s[i]])))continue;h=t.GetAttribute(o,d)}c.attributes.push(function(e,t,i,r,s,a){let o=a.num_components(),l=i.num_points()*o,h=l*s.BYTES_PER_ELEMENT,c=function(e,t){switch(t){case Float32Array:return e.DT_FLOAT32;case Int8Array:return e.DT_INT8;case Int16Array:return e.DT_INT16;case Int32Array:return e.DT_INT32;case Uint8Array:return e.DT_UINT8;case Uint16Array:return e.DT_UINT16;case Uint32Array:return e.DT_UINT32}}(e,s),d=e._malloc(h);t.GetAttributeDataArrayForAllPoints(i,a,c,h,d);let u=new s(e.HEAPF32.buffer,d,l).slice();return e._free(d),{name:r,array:u,itemSize:o}}(e,t,o,i,l,h))}return h===e.TRIANGULAR_MESH&&(c.index=function(e,t,i){let r=3*i.num_faces(),s=4*r,a=e._malloc(s);t.GetTrianglesUInt32Array(i,s,a);let o=new Uint32Array(e.HEAPF32.buffer,a,r).slice();return e._free(a),{array:o,itemSize:1}}(e,t,o)),e.destroy(o),c}(t,i,o,a),s=e.attributes.map(e=>e.array.buffer);e.index&&s.push(e.index.array.buffer),self.postMessage({type:"decode",id:r.id,geometry:e},s)}catch(e){console.error(e),self.postMessage({type:"error",id:r.id,error:e.message})}finally{t.destroy(o),t.destroy(i)}})}}}async function BT(e){if(th){let t={attributeIDs:th.defaultAttributeIDs,attributeTypes:th.defaultAttributeTypes,useUniqueIDs:!1},i;try{i=await th.decodeGeometry(new Int8Array(e).buffer,t)}catch(e){console.error(e)}if(i)return{index:i.index?{array:i.index.array}:void 0,attributes:Object.entries(i.attributes).map(([e,t])=>({name:e,itemSize:t.itemSize,array:t.array}))}}return null}async function BP(e,t){let[i,r]=pH(ma.deserialize(new Uint8Array(e)));return gY(i),t&&t(i),r.result().data}async function BD(e){for(let t of e){let e=await BT(t.geometry.data.draco);if(e){let i=t.geometry.data;e.index&&(i.index={array:e.index.array,itemSize:1,normalized:!1,type:"Uint32Array"});let r={};
8470e.attributes.forEach(({name:e,array:t,itemSize:i})=>{r[e]={array:t,itemSize:i,type:"Float32Array",normalized:!1}}),i.attributes=r,i.draco=void 0}}}var BI=class{constructor(){this._clickCount=0,this._lastTime=0,this._lastPosition=[0,0],this._delay=500,this._distance=2,this._onMouseDown=e=>{let t=[e.clientX,e.clientY],i=new Date().getTime();if(this._clickCount>0){let e=t[0]-this._lastPosition[0],i=t[1]-this._lastPosition[1];Math.sqrt(e*e+i*i)>this._distance&&(this._clickCount=0)}this._lastPosition=t,this._clickCount=i-this._lastTime>this._delay?1:this._clickCount+1,this._lastTime=i},this._onMouseUp=e=>{}}start(e,t=500,i=2){this._target&&this.stop(),this.reset(),this._delay=t,this._distance=i,this._target=e,this._target.addEventListener("pointerdown",this._onMouseDown,!1),this._target.addEventListener("pointerup",this._onMouseUp,!1)}stop(){this._target&&(this._target.removeEventListener("pointerdown",this._onMouseDown,!1),this._target.removeEventListener("pointerup",this._onMouseUp,!1),this._target=void 0)}get clickCount(){return this._clickCount}reset(){this._clickCount=0,this._lastTime=0,this._lastPosition=[0,0]}},BO=class{constructor(e,t,i,r,s,a,o,l){this.eventId=e,this.id=t,this.data=i,this.dataEvent=r,this.object=s,this.stage=!1,this.actions=OX(r,i.actions,a,o,l,s)}disconnect(){OY(this.actions)}
8470dispatchIn(){this.actions.Audio.forEach(e=>e.dispatchBasic()),this.actions.Particles.forEach(e=>e.dispatchBasic()),this.actions.Video.forEach(e=>e.dispatchBasic()),this.actions.Create.forEach(e=>e.dispatch()),this.actions.Destroy.forEach(e=>e.dispatch()),this.actions.Reset.forEach(e=>e.dispatch()),this.actions.Link.forEach(e=>e.dispatch()),this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.actions.Transition.forEach(e=>e.toggle()),this.actions.Animation.forEach(e=>e.play()),this.actions.SwitchCamera.forEach(e=>e.play()),this.actions.SceneTransition.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}dispatchOut(){this.actions.Transition.forEach(e=>{e.toggle()})}},BR=class extends RR{constructor(e,t){super(e),this.eventManager=t,this.breakpoints=[],this.resize=(e,t)=>{this.breakpoints.forEach(i=>{let r=m3.deviceToSize(i.data.size),s="horizontal"===i.dataEvent.orientation?e:t,a;switch(i.data.operator){case"<":a=s<r[0];break;case">":a=s>r[0];break;case"<>":a=s>r[0]&&s<r[1]}i.stage!==a&&(i.stage=a,i.stage?i.dispatchIn():i.dispatchOut())})},this.onResizeObserver=new ResizeObserver(e=>{for(let t of e){let{width:e,height:i}=t.contentRect;this.resize(e,i)}})}connect(){let{page:e,sharedAssets:t,domElement:i}=this.eventContext;this.onResizeObserver.observe(i);let r=i=>{if(!(!i.visible||!i.data?.events.length))for(let{data:r,id:s}of i.data.events)r.disabled||"Resize"===r.type&&r.breakpoints.forEach(({data:a,id:o})=>{try{let l=new BO(s,o,a,r,i,e,t,this.eventManager);this.breakpoints.push(l)}catch(e){}})};e.traverseEntity(e=>{(e instanceof Pk||e instanceof PD)&&e.frame?.traverse(e=>{r(e)}),r(e)})}disconnect(){this.onResizeObserver.disconnect(),this.breakpoints.forEach(e=>{e.disconnect()}),this.breakpoints=[]}},BL=class extends RR{constructor(e,t){super(e),this.eventManager=t,this.userAPIs={},this.events=[],this.onSuccess=({userAPIId:e})=>{this.events.forEach(t=>{t.data.userAPIId===e&&t.dispatchSuccess()})},this.onError=({userAPIId:e})=>{this.events.forEach(t=>{t.data.userAPIId===e&&t.dispatchError()})},this.userAPIs=e.sharedAssets.getUserAPIs()}connect(){this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(e=>"API"===e.data.type&&!e.data.disabled).forEach(t=>{this.events.push(new BB(t.id,t.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),Object.entries(this.userAPIs).forEach(([e,t])=>{t.on("success",this.onSuccess),t.on("error",this.onError),t.autostart&&t.callUserAPI(this.eventContext.sharedAssets)})}disconnect(){Object.entries(this.userAPIs).forEach(([e,t])=>{t.off("success",this.onSuccess),t.off("error",this.onError)})}},BB=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.successActions=OX(t,t.successActions,r,s,a,i),this.errorActions=OX(t,t.errorActions,r,s,a,i)}dispatchSuccess(){this.dispatchActions(this.successActions)}dispatchError(){this.dispatchActions(this.errorActions)}
vendor: 1,586 bytes, line 8470
8470dispatchActions(e){e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}},Bz=class extends RR{constructor(e,t){super(e),this.eventManager=t,this.userWebhooks={},this.events=[],this.onMessage=({userWebhookId:e})=>{this.events.forEach(t=>{t.data.userWebhookId===e&&t.dispatch()})},this.userWebhooks=e.sharedAssets.getUserWebhooks()}connect(){this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(e=>"WEBHOOK"===e.data.type&&!e.data.disabled).forEach(t=>{this.events.push(new BF(t.id,t.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),Object.entries(this.userWebhooks).forEach(([e,t])=>{t.connect(),t.on("message",this.onMessage)})}disconnect(){Object.entries(this.userWebhooks).forEach(([e,t])=>{t.off("message",this.onMessage),t.disconnect()})}},BF=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.actions=OX(t,t.actions,r,s,a,i)}dispatch(){let e=this.actions;
8470e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}},BN=new iv(0,0,1),Bk=new iv,BU=new iv,BV=new tK,Bj=class{constructor(e,t,i,r,s){this.containerScene=e,this.raycaster=t,this.sharedAssets=i,this.requestRender=r,this.onExit=s,this.htmlInput=null,this.virtualInput=null,this.helper=new TR,this.doubleClickHandler=new BI,this.isDragging=!1,this.plane=new ss,this.caretInterval=0,this.planeIntersection=new iv,this.projected=new tQ,this._lastIndex=0,this._isFirstDragMove=!1,this.selectionOnDragStart=0,this.onTextMaterialChanged=()=>{let e=this.virtualInput?.data;if(void 0!==this.virtualInput&&e){let t=e.material,i=function(e,t){let i=gs.fromHex(3223857),r=.8;for(let a of e.layers){if("light"===a.data.type||"displace"===a.data.type||"fresnel"===a.data.type||"matcap"===a.data.type||"texture"===a.data.type||"toon"===a.data.type||"outline"===a.data.type||"transmission"===a.data.type||"noise"===a.data.type)continue;let e="string"==typeof a.data.alpha?Number(t.getVariable(a.data.alpha)):a.data.alpha;if("color"===a.data.type&&e>.3){var s;i="string"==typeof(s=a.data.color)?t.data.colors[s]:s,r=e;break}if(("depth"===a.data.type||"gradient"===a.data.type)&&e>.3){let e=a.data.colors[0];i={r:e[0],g:e[1],b:e[2]},r="string"==typeof a.data.alpha?1:a.data.alpha;break}}return{...i,a:r}}("string"==typeof t?this.sharedAssets.data.materials[t]:t,this.sharedAssets);this.helper.setCaretColor(i)}},this.stopAnimateTextCursor=()=>{clearInterval(this.caretInterval),this.helper&&(this.helper.caretMesh.visible=!1)},this.startAnimateTextCursor=()=>{this.stopAnimateTextCursor(),this.helper&&(this.helper.caretMesh.visible=!0,this.caretInterval=setInterval(()=>{this.helper&&(this.helper.caretMesh.visible=!this.helper.caretMesh.visible),this.requestRender()},600))},this.handleCaretUpdate=e=>{if(!this.htmlInput||!this.virtualInput)return;let t=this.helper,i=e?.key==="ArrowLeft"||e?.key==="ArrowRight",r=e?.key==="ArrowUp"||e?.key==="ArrowDown";this.htmlInput.selectionStart===this.htmlInput.selectionEnd?(t.setCaretPosition(this.htmlInput.selectionStart,{horizontalKeyMove:i,verticalKeyMove:r}),this.startAnimateTextCursor()):t.setSelection(this.htmlInput.selectionStart,this.htmlInput.selectionEnd),this.requestRender()},this.containerScene.add(this.helper)}createInput(){let e;return this.htmlInput=((e=document.createElement("textarea")).style.position="fixed",e.style.top="200px",e.style.left="400px",e.style.zIndex="-1",e.style.border="1px solid rgba(255,0,0,0.5)",e.style.width="10px",e.style.height="500px",e.style.color="white",e.style.opacity="0.5",e.style.background="transparent",e.style.display="none",e.style.margin="0px",e.style.padding="0px",e.style.boxSizing="content-box",e.style.pointerEvents="none",e),this.htmlInput}connect(){}disconnect(){this.stopAnimateTextCursor(),this.helper.hide(),this.htmlInput?.remove(),this.doubleClickHandler.stop()}handleMouseDown(){if(!this.htmlInput||!this.virtualInput)return!0;this.getPointOnPlane();let e=this.doubleClickHandler.clickCount,{index:t,lineIndex:i,characterIndex:r}=this.helper.getSelectionFromPosition(this.projected.x,this.projected.y,e>1?"inside":"previous")??{index:0,lineIndex:0,characterIndex:0};this.virtualInput?.wrappedText?.length&&this.virtualInput.wrappedText[i][Math.max(0,r-1)]===` 8471`&&(t--,r--),this._lastIndex=t,this._isFirstDragMove=!0;let s=this.checkClickedObject();if(1===e){if(null===s)return this.onExit(this.virtualInput),!0;this.selectionOnDragStart=t,this.isDragging=!0,this.setInputSelection(t)}else s===this.virtualInput&&(2===e?this.selectClosestWord(i,r):e>2&&(this.setInputSelection(0,this.htmlInput.value.length),this.doubleClickHandler.reset()))}handleMouseUp(){this.applyRangeToTextInput(),this.isDragging=!1,this._isFirstDragMove=!1}handleMouseMove(){this.virtualInput&&(this._isFirstDragMove&&this.doubleClickHandler.clickCount>1&&(this.selectionOnDragStart=this._lastIndex,this.isDragging=!0,this.setInputSelection(this._lastIndex)),this._isFirstDragMove=!1,this.getPointOnPlane(),this.applyRangeToTextInput())}focus(e){if(this.virtualInput=e,this.updateTextInputStyles(),this.htmlInput){if(e){let e=this.data?.geometry.text;this.htmlInput.value="string"==typeof e?"":e?.textValue.toString()??""}else this.htmlInput.value=""}}blur(){}get data(){let{virtualInput:e}=this;if(e)return e.dataPatched}
8471applyRangeToTextInput(){if(!this.isDragging||!this.virtualInput||!this.htmlInput)return;let e=this.selectionOnDragStart,{index:t,lineIndex:i,characterIndex:r}=this.helper.getSelectionFromPosition(this.projected.x,this.projected.y,this.doubleClickHandler.clickCount>2?"inside":"previous")??{index:0};void 0!==i&&void 0!==r&&this.virtualInput?.wrappedText[i][r-1]===` 8472`&&t--,this.htmlInput.setSelectionRange(Math.min(e,t),Math.max(e,t))}checkClickedObject(){if(this.virtualInput){let e=this.raycaster.intersectObject(this.virtualInput,!1);if(e.length>0){let t=e[0];if(t.object instanceof PL)return t.object}}return null}selectClosestWord(e,t){if(!this.virtualInput)return;let i=this.virtualInput.wrappedText,r=i[e],s=t+1,a=t;" "!==r[t]&&(s=this.findNextCharOccurence(r,t,"forward"," "),(a=this.findNextCharOccurence(r,t,"backward"," "))>0&&a++,s>=r.length-1&&e===i.length-1&&s++);let o=this.helper,l=o.getGlobalIndexFromLineAndCharIndexes(i,e,a),h=o.getGlobalIndexFromLineAndCharIndexes(i,e,s);this.setInputSelection(l,h)}findNextCharOccurence(e,t,i,r=" "){let s=Math.max(0,e.length-1),a="forward"===i?s:0,o="forward"===i?1:-1,l=Math.max(Math.min(t,s),0);for(;l!==a;)if(l+=o,e.charAt(l)===r)return l;return a}getPointOnPlane(){let e=this.virtualInput?.data;if(!(!this.virtualInput||!e)&&this.raycaster.ray.intersectsPlane(this.plane)){null===this.planeIntersection&&(this.planeIntersection=new iv);let t=this.raycaster.ray.intersectPlane(this.plane,this.planeIntersection);if(t){this.planeIntersection.copy(this.virtualInput.worldToLocal(t));let i="number"==typeof e.geometry.width?e.geometry.width:1,r="number"==typeof e.geometry.height?e.geometry.height:1;this.projected.set(t.x+.5*i,t.y-.5*r)}}}updatePlane(){let e=this.virtualInput?.data;this.virtualInput&&e&&(BV.getNormalMatrix(this.virtualInput.matrixWorld),Bk.copy(BN).applyMatrix3(BV).normalize(),this.virtualInput.localToWorld(BU.set(0,0,e.geometry.depth)),this.plane.setFromNormalAndCoplanarPoint(Bk,BU))}setInputSelection(e,t=e){this.htmlInput?.setSelectionRange(e,t),setTimeout(()=>{this.htmlInput?.focus()})}updateTextInputStyles(){var e;let t=this.virtualInput?.data;this.virtualInput&&t&&this.htmlInput&&(this.htmlInput.style.fontSize=t.geometry.fontSize+"px",this.htmlInput.style.letterSpacing=t.geometry.letterSpacing*t.geometry.fontSize+"px",this.htmlInput.style.lineHeight=t.geometry.fontSize*t.geometry.lineHeight+"px",this.htmlInput.style.width=t.geometry.width+"px",this.htmlInput.style.height=t.geometry.height+"px",this.htmlInput.style.textAlign=4===(e=t.geometry.horizontalAlign)?"justify":2===e?"right":3===e?"center":"left")}},BG=(e,t)=>
vendor: 6,295 bytes, line 8472
8472{if("string"==typeof e){let i=t.data(e);if(i)return BG(i.value,t)}return yg.getDisplayedValue(e)};function BH(e,t){let i=e.text,r="";if("string"==typeof i){let e=t.variables.data(r);e&&(r=BG(e.value,t.variables))}else r=i.textValue.toString();return r}var BW=class extends RR{constructor(e,t){super(e),this.eventManager=t,this._textInputs=[],this.sceneHelpers=new nb,this.helper=new TR,this._onMouseDownFocusIn=e=>{if(u1.length>1)return;this.eventContext.updateRaycaster(e);let t=null;if(this.eventContext.raycaster){for(let e of this._textInputs)if(this.eventContext.raycaster.intersectObject(e,!0).length>0){t=e;break}}this.focusOnTextInput(t),this._onCaretUpdate(),this._onMouseUp(),this.textInputManager.doubleClickHandler.start(this.eventContext.domElement),this.textInputManager.doubleClickHandler._onMouseDown(e),this._onMouseDown(e)},this.onExit=()=>{let{virtualInput:e}=this.textInputManager;if(null===e)return;let t=this.textInputManager.htmlInput;this.helper.hide(),t?.setSelectionRange(t.value.length,t.value.length),this.eventManager.controlsManager.orbitControls&&(this.eventManager.controlsManager.orbitControls.enabled=!0);let{domElement:i}=this.eventContext;i.removeEventListener("pointerdown",this._onMouseDown,!1),i.removeEventListener("pointerup",this._onMouseUp,!1),i.removeEventListener("pointermove",this._onMouseMove,!1),window.removeEventListener("keydown",this._onKeyPress),this.textInputManager.doubleClickHandler.reset(),i.addEventListener("pointerdown",this._onMouseDownFocusIn),this.eventContext.renderer.sceneHelpersOnTop=void 0,this.eventContext.renderer.pipeline.disableHelpers()},this._onMouseDown=e=>{this.eventContext.updateRaycaster(e),this.textInputManager.handleMouseDown(),this.textInputManager.virtualInput&&this.eventContext.raycaster.intersectObject(this.textInputManager.virtualInput,!0).length>0&&this.eventManager.controlsManager.orbitControls&&(this.eventManager.controlsManager.orbitControls.enabled=!1)},this._onMouseUp=()=>{this.textInputManager.handleMouseUp(),this.eventManager.controlsManager.orbitControls&&!this.eventManager.controlsManager.orbitControls.enabled&&(this.eventManager.controlsManager.orbitControls.enabled=!0)},this._onMouseMove=e=>{this.eventContext.updateRaycaster(e),this.textInputManager.handleMouseMove()},this._onTextEdit=e=>{let{htmlInput:t,virtualInput:i,helper:r}=this.textInputManager;if(!t||!i)return;let s=t.value;i.textGeometry.setText(s).then(()=>{this.eventContext.requestRender()});let a=i.data;r.update();let o=a.geometry.text;"string"==typeof o&&this.eventContext.sharedAssets.updateVariable(o,{textValue:s}),this.textInputManager.updateTextInputStyles(),this._onCaretUpdate()},this._onCaretUpdate=e=>{this.textInputManager.handleCaretUpdate(e)},this._onKeyPress=e=>{"Escape"===e.key&&this.onExit()},this.textInputManager=new Bj(this.sceneHelpers,e.raycaster,e.sharedAssets,e.requestRender,this.onExit)}connect(){let e=[];if(this.eventContext.scene.traverseEntity(t=>{t instanceof PL&&e.push(t)}),this._textInputs=e,0===e.length)return;let{domElement:t}=this.eventContext;t.addEventListener("pointerdown",this._onMouseDownFocusIn),this.textInputManager.connect();let i=this.textInputManager.createInput();document.body.appendChild(i),i.style.display="none",i.addEventListener("keyup",this._onCaretUpdate),i.addEventListener("keydown",this._onCaretUpdate),i.addEventListener("beforeinput",this._onCaretUpdate),i.addEventListener("paste",this._onCaretUpdate),i.addEventListener("cut",this._onCaretUpdate),i.addEventListener("select",this._onCaretUpdate),i.addEventListener("selectstart",this._onCaretUpdate)}disconnect(){let e=this.textInputManager.htmlInput,{domElement:t}=this.eventContext;t.removeEventListener("pointerdown",this._onMouseDownFocusIn),e?.removeEventListener("keyup",this._onCaretUpdate),e?.removeEventListener("keydown",this._onCaretUpdate),e?.removeEventListener("beforeinput",this._onCaretUpdate),e?.removeEventListener("paste",this._onCaretUpdate),e?.removeEventListener("cut",this._onCaretUpdate),e?.removeEventListener("select",this._onCaretUpdate),e?.removeEventListener("selectstart",this._onCaretUpdate),this._textInputs.forEach(e=>{let t=BH(e.data.geometry,this.eventContext.sharedAssets.data);e.textGeometry.setText(t)}),t.removeEventListener("pointerdown",this._onMouseDown,!1),t.removeEventListener("pointerup",this._onMouseUp,!1),t.removeEventListener("pointermove",this._onMouseMove,!1),window.addEventListener("keydown",this._onKeyPress),this.eventContext.renderer.sceneHelpersOnTop=void 0,this.eventContext.renderer.pipeline.disableHelpers(),this.textInputManager.disconnect()}focusOnTextInput(e){this.textInputManager.focus(e),this.textInputManager.onTextMaterialChanged();let t=this.textInputManager.htmlInput;if(!t||null===e)return;this.textInputManager.updateTextInputStyles(),this.eventContext.renderer.sceneHelpersOnTop=this.sceneHelpers,this.eventContext.renderer.pipeline.enableHelpers(),this.textInputManager.isDragging=!1;let i=BH(e.textGeometry.userData.parameters,this.eventContext.sharedAssets.data);t.value=i,t.setSelectionRange(0,0),this.textInputManager.helper.show(e),t.style.display="block",t.addEventListener("input",this._onTextEdit),this.textInputManager.updatePlane();let{domElement:r}=this.eventContext;r.removeEventListener("pointerdown",this._onMouseDownFocusIn),r.addEventListener("pointerdown",this._onMouseDown,!1),r.addEventListener("pointerup",this._onMouseUp,!1),r.addEventListener("pointermove",this._onMouseMove,!1),window.addEventListener("keydown",this._onKeyPress)}},Bq=class extends RR{constructor(e,t){super(e),this.eventManager=t,this.events=[],this.onVoice=({value:e,frequencies:t})=>{this.events.forEach(e=>{e.dispatch()})}}connect(){this.openAIRealtime=this.eventContext.sharedAssets.openAIRealtime,this.openAIRealtime&&(this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(e=>"AIAssistantListener"===e.data.type&&!e.data.disabled).forEach(t=>{this.events.push(new BX(t.id,t.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),this.openAIRealtime.on("voice",this.onVoice))}disconnect(){this.openAIRealtime?.off("voice",this.onVoice)}},BX=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.actions=OX(t,t.actions,r,s,a,i)}dispatch(){this.dispatchActions(this.actions)}
vendor: 1,591 bytes, line 8472
8472dispatchActions(e){e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}},BY=class extends RR{constructor(e,t){super(e),this.eventManager=t,this.events=[],this.onTriggerEvent=({description:e,direction:t})=>{let i=this.events.find(t=>t.data.description===e);i&&("backward"===t?i.dispatchReverse():i.dispatch())}}connect(){this.openAIRealtime=this.eventContext.sharedAssets.openAIRealtime,this.openAIRealtime&&(this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(e=>"AIAssistantTrigger"===e.data.type&&!e.data.disabled).forEach(t=>{this.events.push(new BQ(t.id,t.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),this.openAIRealtime.on("trigger_event",this.onTriggerEvent))}disconnect(){this.openAIRealtime?.off("trigger_event",this.onTriggerEvent)}},BQ=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.actions=OX(t,t.actions,r,s,a,i)}dispatch(){let e=this.actions;
8472e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}dispatchReverse(){let e=this.actions;e.Transition.forEach(e=>e.reverseFromCurrent()),e.Particles.forEach(e=>e.reverseFromCurrent()),e.Animation.forEach(e=>e.reverseFromCurrent()),e.SwitchCamera.forEach(e=>e.reverseFromCurrent()),e.Create.forEach(e=>e.dispatchStop())}},BK=class{constructor(e,t,i,r,s){this.publish=e,this.controlsManager=t,this.animationControls=i,this.eventContext=r,this.sharedVariables=s,this.isEnabled=!1,this.activateCount=0,this.needsMouse=!1,this.needsRaycast=!1,this.onTouchMovePreventScroll=e=>{let t=window.parent!==window,i=document.documentElement.scrollHeight>document.documentElement.clientHeight||document.documentElement.scrollWidth>document.documentElement.clientWidth;(e.touches.length>1||this.preventTouchScroll||!1===t&&!1===i)&&e.preventDefault()},this.onMouseWheelPreventScroll=e=>{this.preventScroll&&e.preventDefault()},this.onMouseMove=e=>{this.eventContext.sharedAssets.mouseProperty={...this.getMousePosition(e),pressed:e.buttons>0}},this.onMouseDown=e=>{this.eventContext.sharedAssets.mouseProperty={...this.getMousePosition(e),pressed:!0}},this.onMouseUp=e=>{this.eventContext.sharedAssets.mouseProperty={...this.getMousePosition(e),pressed:!1}},this.getMousePosition=e=>{let{domRect:t}=this.eventContext,{pageX:i,pageY:r}=e.touches?.length>0?e.touches[0]:e;return{x:i-(t.left+window.scrollX),y:r-(t.top+window.scrollY)}},this.stopRaycast=e.stopRaycast,this.preventScroll=e.preventScroll,this.preventTouchScroll=e.preventTouchScroll,this.hideCursor=e.hideCursor,this.requestRender=r.requestRender}activate(e=!1){if(this.isEnabled)return;this.isEnabled=!0,this.initializeActionsDependentStates(),this.needsMouse&&(this.eventContext.domElement.addEventListener("pointermove",this.onMouseMove),this.eventContext.domElement.addEventListener("pointerdown",this.onMouseDown)),this.handlers={Spline:new RN(this.eventContext),VariableChange:new Lz(this.eventContext,this.sharedVariables,this,this.needsMouse,this.needsRaycast),API:new BL(this.eventContext,this),WEBHOOK:new Bz(this.eventContext,this),AIAssistantListener:new Bq(this.eventContext,this),AIAssistantTrigger:new BY(this.eventContext,this),Conditional:new Rq(this.eventContext,this),Start:new LL(this.eventContext,this),Basic:new RU(this.eventContext,this,this.needsRaycast),MouseHover:new LP(this.eventContext,this),Scroll:ne
8472w LO(this.eventContext,this),Follow:new Lh(this.eventContext,this),DragDrop:new R7(this.eventContext,this),LookAt:new LA(this.eventContext),Resize:new BR(this.eventContext,this),Textfields:new BW(this.eventContext,this)};let{page:t,domElement:i}=this.eventContext;this.hideCursor&&(i.style.cursor="none"),t.traverseEntity(e=>{e.addEventListener("requestRender",this.requestRender)}),Object.values(this.handlers).forEach(e=>e.connect()),i.addEventListener("wheel",this.onMouseWheelPreventScroll),i.addEventListener("touchmove",this.onTouchMovePreventScroll),this.activateCount++,e||(this.eventContext.sharedAssets.openAIRealtime?.connect(),this.eventContext.sharedAssets.openAIRealtime?.start())}deactivate(e=!1){if(!this.isEnabled)return;this.isEnabled=!1,this.eventContext.domElement.removeEventListener("pointermove",this.onMouseMove),this.eventContext.domElement.removeEventListener("pointerdown",this.onMouseDown),this.eventContext.domElement.removeEventListener("pointerup",this.onMouseUp),this.eventContext.sharedAssets.mouseProperty=null,this.eventContext.sharedAssets.raycastProperty=null;let{page:t,domElement:i}=this.eventContext;if(i.style.cursor="",Object.values(this.handlers).forEach(e=>e.disconnect()),this.controlsManager.gameControl?.disposeActions(),this.controlsManager.disconnectEvents(),t.traverseEntity(e=>{e.removeEventListener("requestRender",this.requestRender),e.destroyedInAction=!1}),i.removeEventListener("touchmove",this.onTouchMovePreventScroll),i.removeEventListener("wheel",this.onMouseWheelPreventScroll),this.animationControls.onExitPlayMode(),!e){let e=this.eventContext.sharedAssets.openAIRealtime;e?.disconnect(),e?.stop().then(()=>{e?.disconnect()})}}get isPaused(){return this.isEnabled}pause(){this.deactivate()}resume(){this.activate()}reset(){this.deactivate(!0),this.activate(!0),this.controlsManager.deactivate(),this.controlsManager.activate(this),this.controlsManager.page.updateMatrixWorld(!0),this.controlsManager.rebuildBVH()}updateUseWindowEvents(e){let t=this.isEnabled;t&&this.deactivate(),this.eventContext.useWindowEvents=e,t&&this.activate()}initializeActionsDependentStates(){let e=this.eventContext.sharedAssets;e.resetDynamicVariablePlayState();let t=i=>{if("Conditional"===i.data.type&&(i.data.ifActions.forEach(t),i.data.elseActions.forEach(t)),"Conditional"===i.data.type||"SetVariable"===i.data.type)for(let e of"Conditional"===i.data.type?i.data.condition:i.data.expression)"id"in e&&Array.isArray(e.id)&&("mouse"===e.id[0]&&(this.needsMouse=!0),"raycast"===e.id[0]&&(this.needsRaycast=!0));"DynamicVariablePlay"===i.data.type&&""!==i.data.variableId&&("Play"===i.data.mode||"PlayPause"===i.data.mode||"Toggle"===i.data.mode)&&e.setDynamicVariablePlayState(i.data.variableId,"Stopped")};this.eventContext.page.traverseEntity(e=>{if(e.data?.events.length)for(let i of e.data.events)if("VariableChange"===i.data.type&&("mouseProperty"===i.data.variableId&&(this.needsMouse=!0),"raycastProperty"===i.data.variableId&&(this.needsRaycast=!0)),"Conditional"===i.data.type)for(let e of["inActions","outActions"])i.data[e].forEach(t);else if("DragDrop"===i.data.type)for(let e of["drag","drop"])i.data.dragDropActions[e].forEach(t);else if("GameControl"===i.data.type)for(let e of["idle","move","jump","run"])i.data.gameActions[e].forEach(t);else if("Resize"===i.data.type)for(let e of i.data.breakpoints)e.data.actions.forEach(t);else"LookAt"===i.data.type||"API"===i.data.type||i.data.actions.forEach(t)})}},BZ=class{constructor(e,t,i,r,s){this._aspect=1,this.enableResponsive=!1,this._renderer=e,this._camera=t,this._frameSize=new tQ().copy(i),this._editorSize=new tQ().copy(r),this._aspect=t.aspect,this._fov=s??t.fov}set frameSize(e){this._frameSize.copy(e)}updateRenderer(){this._renderer&&this._renderer.setSize(this._frameSize.x,this._frameSize.y)}updateViewport(){if(!this._renderer||!this._camera||"PerspectiveCamera"!==this._camera.cameraType)return;let e=this._frameSize.x,t=this._frameSize.y,i=this._editorSize.y;this._aspect=e/t,t<=i&&(this._camera.zoom*=i/t),this._renderer.setViewport(0,0,e,t)}
8472updateCamera(e=!0){if(this._camera){if("PerspectiveCamera"===this._camera.cameraType){let t=this._frameSize.y,i=this._editorSize.y,r=this._fov;if(e&&t>i)r*=t/i*(1-((t-1080)/1080*14+1)/100);this._camera.aspect=this._aspect,this._camera.fov=r,this._camera.updateProjectionMatrix()}else this._camera.setViewplaneSize(this._frameSize.x,this._frameSize.y,this.enableResponsive)}}setCamera(e){this._camera=e,this._aspect=e.aspect,this._fov=e.fov}revert(){let e=window.innerWidth,t=window.innerHeight;this._renderer&&(this._renderer.setViewport(0,0,e,t),this._renderer.setSize(e,t)),this._camera&&(this._camera.aspect=e/t,this._camera.fov=this._fov,this._camera.setViewplaneSize(e,t,this.enableResponsive),this._camera.updateProjectionMatrix())}},BJ=class{get sharedAssets(){return this.shared}constructor(e,t={},i=!0){this.shared=new Mp(e.shared,t,!0,i),this.scene=new DU(e.scene,this.sharedAssets),this.shared.setEntityOpContext({scene:this.scene,shared:this.shared})}reset(e,t){this.scene.clearScene(),this.sharedAssets.reset(e.shared),this.scene.resetAfterClear(e.scene,this.sharedAssets)}resetPersonalCameraFromDocumentData(){for(let e of this.scene.children)e instanceof PD&&!e.uiScene&&e.personalCamera.updateState(e.data.camera,{scene:this.scene,shared:this.shared})}dispose(){this.scene.dispose(),this.shared.dispose()}gc(){this.shared.geometryCache.startGc(),this.shared.geometryCache2.startGc(),this.scene.traverseEntity(e=>{e instanceof Mb&&e.markGeometryAsReachable(this.shared)}),this.shared.geometryCache.endGc(),this.shared.geometryCache2.endGc()}},B$=class{constructor({x:e=10,y:t=10}){this._startTime=0;let i=document.getElementById("spe-perfs");i?this.element=i:(this.element=document.createElement("div"),document.body.appendChild(this.element),this.element.style.position="absolute",this.element.style.zIndex="10000",this.element.style.fontFamily="monospace",this.element.style.background="black",this.element.style.color="white",this.element.style.padding="10px",this.element.style.opacity="0.5",this.element.style.fontSize="11px",this.element.setAttribute("id","spe-perfs")),this.element.style.left=`${e}px`,this.element.style.top=`${t}px`}dispose(){this.element.parentElement?.removeChild(this.element)}start(){this._startTime=performance.now()}end(){let e=performance.now()-this._startTime;this.element.innerHTML=e.toFixed(3)+" ms"}};function B0(e){return e instanceof MM?"SubdivObject":"NonParametricGeometry"===e.geometry.type?"NonParametric":"Mesh"}var B1=tw(tP(),1),B2=new tQ,B3=class{constructor(e,{renderOnDemand:t,renderMode:i="auto"}={}){this._viewportMode=1,this._viewportWidth=window.innerWidth,this._viewportHeight=window.innerHeight,this._proxyObjectCache=new Map,this._variablesCache=new Map,this._isPaused=!1,this._renderRequested=!1,this._skipRender=!1,this.time=performance.now(),this.dt=0,this.currentTAAFrame=0,this.disposed=!1,this._requestRenderAutoMode=()=>{this._skipRender=!1},this.requestRender=()=>{this._renderRequested=!0},this.render=e=>{if(this.time=e,this._lastTime&&(this.dt=this.time-this._lastTime),this._lastTime=this.time,this._perfs?.start(),!this._renderer||!this._isPaused&&("manual"===this.renderMode&&!this._renderRequested||"auto"===this.renderMode&&this._skipRender)){this._perfs?.end();return}if(this._renderRequested=!1,this._skipRender=!0,this._controls&&(this._skipRender=this._controls.update(this.dt)),this._eventManager&&(this._eventManager.handlers?.Start.hasVideoAction||this._eventManager.handlers?.Basic.hasVideoAction||this._eventManager.handlers?.Conditional.hasVideoAction)&&(this._skipRender=!1),this._animationControls?.update(this.dt),this._skipRender?(this.currentTAAFrame++,this.currentTAAFrame<32?this._skipRender=!1:this.currentTAAFrame=0):this.currentTAAFrame=0,this._scene?.traverseVisibleEntity(e=>{"ParticleSystem"===e.type&&(e.update(this.dt),this._skipRender=!1)}),this._scene&&this._scene.activeCamera!==this._camera&&(this._camera=this._scene.activeCamera),this._eventManager?.isEnabled&&((this._eventManager.handlers?.Follow).onAnimationFrameDamping(),(this._eventManager.handlers?.LookAt).onAnimationFrameDamping(),(this._eventManager.handlers?.DragDrop).onAnimationFrameDamping()),this._scene&&this._camera){
8472if(this._scene.pathConstraints.applyConstraints(this._scene),this._renderer.sceneTransitionTimeRemaining>0){this._renderer.sceneTransitionTimeRemaining-=this.dt;let e=1-this._renderer.sceneTransitionTimeRemaining/this._renderer.sceneTransitionDuration;this._renderer.pipeline.sceneTransitionPass.uniforms.mixRatio.value=e,this._skipRender=!1}else this._renderer.pipeline.sceneTransitionFromTexture=null;this._renderer.renderSplineScene(this._scene,this._camera)}this.canvas.dispatchEvent(this._renderedEvent),this._perfs?.end()},this._resize=e=>{if(this._renderer){if(1===this._viewportMode&&this._frameView&&(this._frameView.frameSize=B2.set(this._viewportWidth,this._viewportHeight)),e){let e=this._viewportWidth,t=this._viewportHeight;this._renderer.setSize(e-1,t-1,!1),this._renderer.setSize(e,t,!1)}else this._renderer.setSize(this._viewportWidth,this._viewportHeight,!1);if(this._camera=this._scene?.activeCamera,this._scene?.updateViewPlaneSize(this._frameView?.frameSize?.x??this._viewportWidth,this._frameView?.frameSize?.y??this._viewportHeight,this._frameView?.enableResponsive??!1),this._camera){let e=Object.values(this._data?.frames??{})[0].preset??"fullscreen";this._frameView?.setCamera(this._camera),this._frameView?.updateCamera("fullscreen"!==e),"PerspectiveCamera"===this._camera.cameraType&&(this._camera.aspect=this._viewportWidth/this._viewportHeight),this._camera.updateProjectionMatrix()}this.eventManager&&(this.eventManager.eventContext.domRect=this.canvas.getBoundingClientRect()),this._requestRenderAutoMode()}},this._debouncedResize=uI(this._resize,10),this._onScroll=e=>{this.eventManager&&(this.eventManager.eventContext.domRect=this.canvas.getBoundingClientRect())},this.canvas=e,this.renderMode=t?"auto":i,this._renderedEvent=new CustomEvent("rendered",{bubbles:!0}),Object.defineProperty(this._renderedEvent,"target",{writable:!1,value:this}),window.location.search.includes("perfs")&&(this._perfs=new B$({x:10,y:10})),e.addEventListener("pointerdown",u5,!0),e.addEventListener("pointerdown",u8,!0),e.addEventListener("pointermove",u8,!0),e.addEventListener("pointerup",u6,!0),e.addEventListener("pointercancel",u6,!0),e.addEventListener("pointerleave",u6,!0),window.addEventListener("keydown",u7,!0),window.addEventListener("keyup",pe,!0)}async load(e,t,i){let r;r="The Spline Runtime only accepts .splinecode files that are generated from Spline export panel.",e.endsWith(".spline")?console.warn(r+" The .spline files are only meant to be used by the Editor."):e.endsWith(".splinecode")||console.warn(r),this.disposed=!1;let s=await (await fetch(e,i)).arrayBuffer();await this.start(s,{variables:t})}async start(e,{interactive:t=!0,variables:r}={}){let s,a,o,l;if(this.disposed)return;let h=await BP(e);this._data=h;let c=(s=[],h.scene.objects.traverse((e,t)=>{"Mesh"===t.type&&"NonParametricGeometry"===t.geometry.type&&void 0!==t.geometry.data.draco&&s.push(t)}),s);h.version&&(0,B1.default)(h.version,"1.9.59")>0&&console.warn("Your .splinecode file is more recent than the library. Please upgrade @splinetool/runtime to the latest version."),await Promise.all([c.length&&(th||(th=new BE).setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.5.2/").preload(),th.decoderPending),Ex(h)&&(_V||(_V=async function(){let e=i.e(869).then(i.bind(i,10869)),[t,r]=await Promise.all([e,fetch("https://unpkg.com/@splinetool/[email protected]/build/boolean.wasm").then(e=>e.arrayBuffer())]),s=t.default,a=await s({wasmBinary:r});_U(a)}())),(a=!1,h.scene.objects.traverse((e,t)=>{"Mesh"===t.type&&"SubdivGeometry"===t.geometry.type&&(a=!0)}),a&&function(){if(!w2)return w8||(w8=e());async function e(){let e=i.e(8303).then(i.bind(i,68303)),[t,r]=await Promise.all([e,fetch("https://unpkg.com/@splinetool/[email protected]/build/process.wasm").then(e=>e.arrayBuffer())]),s=t.default,a=await s({wasmBinary:r});wJ(a),w2=!0}}()),yd.physicsEnabled(h.scene.objects)&&(pw||(pw=async function(){let e=await i.e(1733).then(i.bind(i,25309));await e.init(),ph(e)}())),MH(h)&&function(){if(AU=!0,!Aj)return MW||(MW=e());async function e(){let e=await i.e(8734).then(i.bind(i,60413));AF(e),Aj=!0}}(),DT(h)&&function(){if(!Dz)return D8||(D8=e());async function e(){let e=await i.e(8310).then(i.bind(i,38310));DR(e),Dz=!0}}(),(o=!1,h.scene.objects.traverse((e,t)=>
8472{if(void 0===t.events||!1===Array.isArray(t.events))return!0;let i=[];t.events.forEach(e=>{"dragDropActions"in e.data?(i.push(...e.data.dragDropActions.drag),i.push(...e.data.dragDropActions.drop)):"inActions"in e.data?(i.push(...e.data.inActions),i.push(...e.data.outActions)):"gameActions"in e.data?(i.push(...e.data.gameActions.idle),i.push(...e.data.gameActions.move),i.push(...e.data.gameActions.jump),i.push(...e.data.gameActions.run)):"breakpoints"in e.data?e.data.breakpoints.forEach(e=>{i.push(...e.data.actions)}):"actions"in e.data&&i.push(...e.data.actions),o=o||i.some(e=>"Audio"===e.data.type)})}),o&&function(){if(!AL)return AB||(AB=e());async function e(){await i.e(438).then(i.bind(i,60438)),AD(void 0!==window?window:global),AL=!0}}()),T2(h)&&function(){if(!T1)return T9||(T9=e());async function e(){let e=await i.e(8040).then(i.bind(i,18040));Tq(e.default??e),T1=!0}}(),(l=!1,h.scene.objects.forEach(e=>{"Page"===e.data.type&&!l&&e.data.publish.gameControlObject&&yd.traverseModuleInstances(h,e.id,(e,t,i)=>{for(let e of i)"GameControl"===e.data.type&&e.data.navmesh.enabled&&(l=!0)})}),l&&(pl||(pl=async function(){let e=i.e(6568).then(i.bind(i,66568)),[t,r]=await Promise.all([e,fetch("https://unpkg.com/@splinetool/[email protected]/build/navmesh.wasm").then(e=>e.arrayBuffer())]),s=t.default,a=await s({wasmBinary:r});po(a)}())))].filter(Boolean)),c.length&&await BD(c),this._eventManager?.deactivate(),this._controls?.deactivate(),this._scene?.dispose();let d=new BJ(h);if(d.resetPersonalCameraFromDocumentData(),this._scene=d.scene,this._sharedAssetsManager=d.sharedAssets,this._camera=this._scene.activeCamera,window.location.search.includes("merge-geometries")){let e=performance.now();!function(e,t){let i,r;let s=(i={},t.traverseEntity(t=>{if(!t.visible||!(t instanceof SP)||"Mesh"!==t.type||Array.isArray(t.material)||t.states&&Object.keys(t.states).length)return;let r=t.parent;for(;r;){if(r instanceof SP&&t.states&&Object.keys(t.states).length)return;r=r.parent}let s=t.material.uuid,a=e.shared.materials[s];if(a){if(!vk.isMergable(a))return}else{let i=e.scene.objects.get(t.uuid)?.data;if(i&&"material"in i&&"string"!=typeof i.material){if(!vk.isMergable(i.material))return;s=vk.getHash(i.material)}}i[s]||(i[s]={});let o=i[s][B0(t)];if(o){if(o.push(t),t.cloner)for(let e of t.cloner.children)o.push(e)}else if(i[s][B0(t)]=[t],t.cloner)for(let e of t.cloner.children)i[s][B0(t)].push(e)}),i),a=(r=0,Object.values(s).forEach(e=>{Object.values(e).forEach(e=>{let t=e.length;t>r&&(r=t)})}),r),o=Array(a),l=0,h=Array(a),c=0,d=Array(a),u=0,p=Array(a),f=0;for(let[e,i]of Object.entries(s))for(let r of Object.values(i)){if(c=0,u=0,r.forEach(e=>{e instanceof SP&&(h[c++]=e.geometry.clone(),d[u++]=e)}),u<2)continue;for(let e=0;e<u;e++)d[e].updateWorldMatrix(!0,!1),h[e].applyMatrix4(d[e].matrixWorld),0>d[e].matrixWorld.determinant()&&function(e){let t;if(e.index)for(let i=0;i<e.index.array.length;i+=3)t=e.index.array[i],e.index.array[i]=e.index.array[i+2],e.index.array[i+2]=t}(h[e]);let i=gQ(h.slice(0,c),!1);if(i){let r;"SubdivObject"===e&&console.warn("Turning subdiv object into mesh"),(r=new rK(i,d[0].material)).castShadow=d[0].castShadow,r.receiveShadow=d[0].receiveShadow,t.add(r);let a=e=>{for(let t of(f=0,e))t.children&&a(t.children),t instanceof SP&&(Array.isArray(t.material)||s[t.material.uuid]&&s[t.material.uuid][B0(t)]&&s[t.material.uuid][B0(t)].length>1||(p[f++]=t));for(let e=0;e<f;e++)t.attach(p[e])};for(let e=0;e<u;e++){let t=d[e];a(t.children),o[l++]=t}}}for(let e=0;e<l;e++)o[e].removeFromParent()}(h,d.scene),console.log("Merged geometries in ",performance.now()-e," ms")}Ex(h)&&this._scene.traverse(e=>{E_(e)&&e.recomputeBoolean()}),this._sharedAssetsManager.setRequestRender(()=>{this._requestRenderAutoMode(),this._scene?.traverse(e=>{e instanceof M9&&e.pendingMediaLoad&&e.update()})}),this._scene?.traverse(e=>{"ParticleSystem"===e.type&&(e.wakeUp(),e.data.autoPlay?e.start():e.stop())});let u=Object.keys(h.shared.fonts).map(e=>this._sharedAssetsManager.getFont(e).loadingPromise);if(Promise.all(u).then(()=>{d.scene.markNeedsUpdateRendererDirty(),this._requestRenderAutoMode()}),MH(h)&&function(e){if(yd.physicsEnabled(e.scene.objects))return!0;let t=!1;
8472return e.scene.objects.traverse((e,i)=>{if(i.events){if(Array.isArray(i.events)){for(let e of i.events)if(!0!==e.data.disabled&&"GameControl"===e.data.type&&e.data.collisionEnabled){t=!0;break}}else for(let e of Object.values(i.events))if(!0!==e.disabled&&"GameControl"===e.type&&e.collisionEnabled){t=!0;break}}}),t}(h)&&await Promise.all(u),T2(h)){let e=[];this._scene.traverseEntity(t=>{(t instanceof Pk||t instanceof PD)&&t.uiCanvas&&e.push(t.uiCanvas)}),await Promise.all(e.map(e=>e.promise))}if(this._scene.rewriteEventsBeforeGoToPlayMode(),OM(this._scene.activePage,this._sharedAssetsManager),!this._renderer&&(this._renderer=new TT({canvas:this.canvas,antialias:!1,alpha:!0,stencil:!1,depth:!1,powerPreference:"high-performance"}),this._renderer.hdTransmission=!0===h.scene.publish.hdTransmission,this._renderer.setPixelRatio(window.devicePixelRatio),this._renderer.pipeline.enableUIOverlay(),this._renderer.pipeline.addEventListener("smaaloaded",this._requestRenderAutoMode),h.shared.images.SplineWatermark)){let e=this._sharedAssetsManager.getImage("SplineWatermark");await e.loadPromise;let t=e.getTexture(1001);this._renderer.pipeline.setWatermark(t)}DT(h)&&this._scene.initializeSplatViewer(),void 0!==h.scene.blueNoiseTextureData&&this._renderer.pipeline.updateBlueNoiseTexture(h.scene.blueNoiseTextureData);let p=Object.values(h.frames)[0];if(this._frameView?this._frameView.setCamera(this._camera):("fullscreen"===p.preset?(this._viewportMode=1,this.canvas.style.display="block",this.canvas.parentElement&&(this._viewportWidth=this.canvas.parentElement.clientWidth||300,this.canvas.style.width="100%"),this.canvas.parentElement&&(this._viewportHeight=this.canvas.parentElement.clientHeight||150,this.canvas.style.height="100%")):(this._viewportMode=2,this._viewportWidth=p.size[0],this._viewportHeight=p.size[1],this.canvas.style.width=`${this._viewportWidth}px`,this.canvas.style.height=`${this._viewportHeight}px`),this._renderer.setSize(this._viewportWidth,this._viewportHeight,!1),this._frameView=new BZ(this._renderer,this._camera,new tQ(this._viewportWidth,this._viewportHeight),new tQ(window.innerWidth,window.innerHeight)),this._frameView.enableResponsive=(p.allowResponsive??!1)&&"fullscreen"===p.preset),t){let e=new RO(this._renderer,this.data.scene.publish,this._scene,()=>this._scene.activeCamera,this._sharedAssetsManager,this._requestRenderAutoMode,!0,p);this._scene.updateMatrixWorld(!0),this._controls=new Bw(e),this._animationControls=new BA(this._scene,this._requestRenderAutoMode),this._eventManager=new BK(h.scene.publish,this._controls,this._animationControls,e,h.shared.variables),this._eventManager.activate(),this._controls.activate(this._eventManager)}this._resize(),this._scene.activePage.data.postprocessing.depthOfField.enabled&&Promise.all(this._sharedAssetsManager.getImageLoadPromises()).then(()=>{this._resize(!0)}),void 0!==r&&this.setVariables(r),0===this.dt&&(this.render(performance.now()),setTimeout(()=>{this._renderer?.setAnimationLoop(this.render)},0)),this._resizeObserverTimeout=setTimeout(()=>{!this._resizeObserver&&this.canvas.parentElement&&(this._resizeObserver=new ResizeObserver(()=>{this._viewportWidth=this.canvas.clientWidth,this._viewportHeight=this.canvas.clientHeight,this._debouncedResize()}),this._resizeObserver.observe(this.canvas.parentElement))},300),document.addEventListener("scroll",this._onScroll)}setVariables(e){if(void 0!==this._data)for(let[t,i]of Object.entries(e))this.setVariable(t,i)}setVariable(e,t){let i=this._getVariableByName(e);if(!i||"dynamicVariableType"in i.data)void 0===i?console.warn(`No variable named ${e} was found in your Spline file. Make sure to create it from Spline editor.`):"dynamicVariableType"in i.data&&console.warn(`Dynamic variables like ${e} cannot be updated from code.`);else{let e=t;"number"==typeof i.data.value?e="number"==typeof t?t:"boolean"==typeof t?!0===t?1:0:parseFloat(t):"boolean"==typeof i.data.value?e="number"==typeof t?!!t:"boolean"==typeof t?t:"false"!==t.toLocaleLowerCase()&&!!t:"string"!=typeof i.data.value&&void 0!==i.data.value.textValue&&(e=t.toString());let r="string"==typeof e?{textValue:e}:e;this._sharedAssetsManager?.updateVariable(i.id,r),this.requestRender(),this._requestRenderAutoMode()}}getVariables(){let e={};
8472return this._data&&this._data.shared.variables.forEach(t=>{void 0===e[t.data.name]&&(e[t.data.name]=this._getVariableValue(this._sharedAssetsManager.getVariable(t.id)))}),e}getVariable(e){let t=this._getVariableByName(e);if(t){let e=this._sharedAssetsManager.getVariable(t.id);return this._getVariableValue(e)}}_getVariableValue(e){return"string"!=typeof e&&yg.isTextValue(e)?yg.getDisplayedValue(e):e}_getVariableByName(e){if(this._data){if(this._variablesCache.has(e))return this._variablesCache.get(e);let t=this._data.shared.variables.find(t=>t.data.name===e);return t&&this._variablesCache.set(e,t),t}}findObjectById(e){let t=this._scene?.getObjectByProperty("uuid",e);return this._createProxyObject(t)}findObjectByName(e){let t=this._scene?.getObjectByName(e);return this._createProxyObject(t)}getAllObjects(){let e=[];return this._scene?.traverseEntity(t=>{if(t.uuid!==mh&&!this._scene.isInvisibleObjects(t)&&!(t instanceof PD)){let i=this._createProxyObject(t);i&&e.push(i)}}),e}getSplineEvents(){return(this._eventManager?.handlers?.Spline).splineEvents}emitEvent(e,t){(this.findObjectById(t)||this.findObjectByName(t))?.emitEvent(e)}emitEventReverse(e,t){(this.findObjectById(t)||this.findObjectByName(t))?.emitEventReverse(e)}addEventListener(e,t){this.canvas.addEventListener(e,t)}removeEventListener(e,t){this.canvas.removeEventListener(e,t)}setZoom(e){this._controls?.orbitControls instanceof Be&&this._controls?.orbitControls.setZoom(e)}get eventManager(){return this._eventManager}get controls(){return this._controls}setSize(e,t){this._viewportWidth=e,this._viewportHeight=t,this._viewportMode=2,this._resize()}setBackgroundColor(e){let{r:t,g:i,b:r,a:s}={r:0,g:0,b:0,a:1},a=new SN(t,i,r,s);try{a.setStyle(e)}catch{console.error("This is not a valid css color",e)}this._scene?.activePage.setBackgroundColor(a),this._requestRenderAutoMode()}dispose(){var e;this.disposed=!0,this._eventManager?.deactivate(),this._scene?.dispose(),this._sharedAssetsManager?.dispose(),this._proxyObjectCache.forEach(e=>{hA.unsubscribe(e)}),this._variablesCache.clear(),this._renderer?.setAnimationLoop(null),this._renderer?.dispose(),this._renderer=void 0,this._sharedAssetsManager?.dispose(),this._resizeObserver&&(this._resizeObserver.disconnect(),this._resizeObserver=void 0),void 0!==this._resizeObserverTimeout&&clearTimeout(this._resizeObserverTimeout),this.canvas.style.width="",this.canvas.style.height="",this.canvas.removeAttribute("width"),this.canvas.removeAttribute("height"),this._frameView&&(this._frameView=void 0),this._controls?.deactivate(),this.dt=0,(e=this.canvas).removeEventListener("pointerdown",u5,!0),e.removeEventListener("pointerdown",u8,!0),e.removeEventListener("pointermove",u8,!0),e.removeEventListener("pointerup",u6,!0),e.removeEventListener("pointercancel",u6,!0),e.removeEventListener("pointerleave",u6,!0),window.removeEventListener("keydown",u7,!0),window.removeEventListener("keyup",pe,!0),document.removeEventListener("scroll",this._onScroll)}get isStopped(){return this._isPaused}stop(){this._isPaused||(this._renderer?.setAnimationLoop(null),this._isPaused=!0,this._eventManager?.pause(),this._controls?.orbitControls&&(this._controls.orbitControls.enabled=!1))}play(){this._isPaused&&(this._isPaused=!1,this._eventManager?.resume(),this._controls?.orbitControls&&(this._controls.orbitControls.enabled=!0),this._renderer?.setAnimationLoop(this.render))}setGlobalEvents(e){this._eventManager?.updateUseWindowEvents(e)}get data(){return this._data}_createProxyObject(e){let t;if(null==e)return;if(this._proxyObjectCache.has(e.uuid))return this._proxyObjectCache.get(e.uuid);e.traverseAncestors(e=>{e instanceof PD&&(t=e.name)});let i=hA({name:e.name,uuid:e.uuid,visible:e.visible,intensity:e.intensity,position:e.position,rotation:e.rotation,scale:e.scale,type:e.data.type,page:t,parentUuid:e.parent instanceof PD||e instanceof DU?void 0:e.parent?.uuid,emitEvent(t){e.dispatchEvent({type:"userEvent",eventName:t})},emitEventReverse(t){e.dispatchEvent({type:"userEvent",eventName:t,reverse:!0})}},(t,i)=>{"object"!=typeof e[t]&&Object.getOwnPropertyDescriptor(e,t)?.writable&&(e[t]=i),this._requestRenderAutoMode(),e.updateMatrix()});return this._proxyObjectCache.set(e.uuid,i),i}setUIWasmUrl(e){_W.skiaWasmUrl=e}}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.