-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCindyGL.js
More file actions
284 lines (282 loc) · 115 KB
/
Copy pathCindyGL.js
File metadata and controls
284 lines (282 loc) · 115 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
(function(){
var aa="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};function ba(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");}var ca=ba(this);
function fa(a,b){if(b)a:{var c=ca;a=a.split(".");for(var d=0;d<a.length-1;d++){var h=a[d];if(!(h in c))break a;c=c[h]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&aa(c,a,{configurable:!0,writable:!0,value:b})}}fa("Array.prototype.includes",function(a){return a?a:function(b,c){var d=this;d instanceof String&&(d=String(d));var h=d.length;c=c||0;for(0>c&&(c=Math.max(c+h,0));c<h;c++){var m=d[c];if(m===b||Object.is(m,b))return!0}return!1}});
function ha(a,b){a instanceof String&&(a+="");var c=0,d=!1,h={next:function(){if(!d&&c<a.length){var m=c++;return{value:b(m,a[m]),done:!1}}d=!0;return{done:!0,value:void 0}}};h[Symbol.iterator]=function(){return h};return h}fa("Array.prototype.values",function(a){return a?a:function(){return ha(this,function(b,c){return c})}});
fa("Array.prototype.flat",function(a){return a?a:function(b){b=void 0===b?1:b;for(var c=[],d=0;d<this.length;d++){var h=this[d];Array.isArray(h)&&0<b?(h=Array.prototype.flat.call(h,b-1),c.push.apply(c,h)):c.push(h)}return c}});fa("Object.entries",function(a){return a?a:function(b){var c=[],d;for(d in b)Object.prototype.hasOwnProperty.call(b,d)&&c.push([d,b[d]]);return c}});
fa("Array.prototype.flatMap",function(a){return a?a:function(b,c){for(var d=[],h=0;h<this.length;h++){var m=b.call(c,this[h],h,this);Array.isArray(m)?d.push.apply(d,m):d.push(m)}return d}});
var e={addc:"vec2 addc(vec2 a,vec2 b){\nreturn a+b;\n}\n",addpoints:"vec2 addpoints(vec3 a,vec3 b){\nreturn dehomogenize(a) +dehomogenize(b);\n}\n",arccosc:"vec2 arccosc(vec2 a){\nvec2 t2=multc(a,negc(a));\nvec2 tmp=sqrtc(addc(vec2(1.0,0.0),t2));\nvec2 tmp1=addc(multc(a,vec2(0.0,1.0)),tmp);\nvec2 erg=addc(multc(logc(tmp1),vec2(0.0,1.0)),vec2(pi*0.5,0.0));\nreturn erg;\n}\n",arccosf:"vec2 arccosf(float z){\nif(abs(z)<=1.)return vec2(acos(z),0.);\nelse if(z>1.)return vec2(0,log(z+sqrt(z*z-1.)));\nelse return vec2(pi, -log(-z+sqrt(z*z-1.)));\n}\n",
arcsinc:"vec2 arcsinc(vec2 a){\nvec2 t2=multc(a,negc(a));\nvec2 tmp=sqrtc(addc(vec2(1.0,0.0),t2));\nvec2 tmp1=addc(multc(a,vec2(0.0,1.0)),tmp);\nvec2 erg=multc(logc(tmp1),vec2(0.0,-1.0));\nreturn erg;\n}\n",arcsinf:"vec2 arcsinf(float z){\nif(abs(z)<=1.)return vec2(asin(z),0.);\nelse if(z>1.)return vec2(pi*.5, -log(z+sqrt(z*z-1.)));\nelse return vec2(-pi*.5,log(-z+sqrt(z*z-1.)));\n}\n",arctan2c:"\n\n\n\nvec2 arctan2c(vec2 x,vec2 y){\nvec2 r=logc(divc(x+vec2(-y.y,y.x),sqrtc(multc(x,x)+multc(y,y))));\nreturn vec2(r.y, -r.x);\n}\n",
arctan2cvec2:"vec2 arctan2cvec2(cvec2 v){\nreturn arctan2c(v.real,v.imag);\n}\n",arctan2vec2:"float arctan2vec2(vec2 v){\nreturn atan(v.y,v.x);\n}\n",arctanc:"vec2 arctanc(vec2 a){\nvec2 t1=logc(addc(multc(a,vec2(0.0,-1.0)),vec2(1.0,0.0)));\nvec2 t2=logc(addc(multc(a,vec2(0.0,1.0)),vec2(1.0,0.0)));\nvec2 erg=multc(subc(t1,t2),vec2(0.0,0.5));\nreturn erg;\n}\n",blue:"vec3 blue(float f)\n{\nreturn vec3(0.,0.,clamp(f,0.,1.));\n}\n",cimag:"float imagc(vec2 a){\nreturn a.y;\n}\n",conjugate:"vec2 conjugate(vec2 a){\nreturn vec2(a.x, -a.y);\n}\n",
copytexture_f:"#version 300 es\nprecision highp float;\n\nuniform sampler2D sampler;\nout vec4 fragColor;\nin vec2 cgl_pixel;\n\nvoid main(void){\nfragColor=texture(sampler,cgl_pixel);\n}\n",copytexture_v:"#version 300 es\nin vec3 aPos;\nin vec2 aTexCoord;\nout vec2 cgl_pixel;\n\nvoid main(void){\ngl_Position=vec4(aPos,1.);\ncgl_pixel=aTexCoord;\n}\n",cosc:"vec2 cosc(vec2 a){\n\nfloat n=exp(a.y);\nfloat imag1=n*sin(-a.x);\nfloat real1=n*cos(-a.x);\nn=exp(-a.y);\nfloat imag2=n*sin(a.x);\nfloat real2=n*cos(a.x);\nfloat i= (imag1+imag2) /2.0;\nfloat r= (real1+real2) /2.0;\n\nreturn vec2(r,i);\n}\n",
creal:"float realc(vec2 a){\nreturn a.x;\n}\n",dehomogenize:"vec2 dehomogenize(vec3 z){\nreturn vec2(z.x,z.y)/z.z;\n}\n",dehomogenizex:"float dehomogenizex(vec3 z){\nreturn z.x/z.z;\n}\n",dehomogenizey:"float dehomogenizey(vec3 z){\nreturn z.y/z.z;\n}\n",det2:"float det2(mat2 a){\nreturn a[0][0]*a[1][1] -a[0][1]*a[1][0];\n}\n",det3:"float det3(mat3 a){\nreturn dot(cross(a[0],a[1]),a[2]);\n}\n",det3v:"float det3v(vec3 a,vec3 b,vec3 c){\nreturn dot(cross(a,b),c);\n}\n",det4:"float det4(mat4 a){\nfloat s00=a[0][0]*a[1][1] -a[0][1]*a[1][0],\ns01=a[0][0]*a[1][2] -a[0][2]*a[1][0],\ns02=a[0][0]*a[1][3] -a[0][3]*a[1][0],\ns03=a[0][1]*a[1][2] -a[0][2]*a[1][1],\ns04=a[0][1]*a[1][3] -a[0][3]*a[1][1],\ns05=a[0][2]*a[1][3] -a[0][3]*a[1][2],\ns06=a[2][0]*a[3][1] -a[2][1]*a[3][0],\ns07=a[2][0]*a[3][2] -a[2][2]*a[3][0],\ns08=a[2][0]*a[3][3] -a[2][3]*a[3][0],\ns09=a[2][1]*a[3][2] -a[2][2]*a[3][1],\ns10=a[2][1]*a[3][3] -a[2][3]*a[3][1],\ns11=a[2][2]*a[3][3] -a[2][3]*a[3][2];\nreturn s00*s11-s01*s10+s02*s09+s03*s08-s04*s07+s05*s06;\n}\n",
divc:"vec2 divc(vec2 a,vec2 b){\nreturn vec2(dot(a,b),dot(a,vec2(-b.y,b.x)))/dot(b,b);\n}\n",divfc:"vec2 divfc(float a,vec2 b){\nreturn a*vec2(b.x,-b.y)/dot(b,b);\n}\n",expc:"vec2 expc(vec2 a){\nfloat n=exp(a.x);\nfloat r=n*cos(a.y);\nfloat i=n*sin(a.y);\nreturn vec2(r,i);\n}\n",float2color:"vec4 float2color(float f)\n{\nreturn vec4(f,f,f,1.);\n}\n",fragCopyLayer:"#version 300 es\nprecision highp float;\n\nuniform sampler2D srcColor;\nuniform sampler2D srcDepth;\nlayout(location=0)out vec4 targetColor;\nlayout(location=1)out float targetDepth;\nin vec2 cgl_pixel;\n\nvoid main(void){\ntargetColor=texture(srcColor,cgl_pixel);\ntargetDepth=texture(srcDepth,cgl_pixel).r;\n}\n",
fragCopyLayer2I8:"#version 300 es\nprecision highp float;\n\nuniform sampler2D srcColor;\nuniform sampler2D srcDepth;\nlayout(location=0)out vec4 targetColor;\nlayout(location=1)out vec2 targetDepth;\nin vec2 cgl_pixel;\n\nvoid main(void){\ntargetColor=texture(srcColor,cgl_pixel);\ntargetDepth=texture(srcDepth,cgl_pixel).rg;\n}\n",fragHeaderOpaqueLayer:"#version 300 es\nprecision highp float;\nprecision highp int;\n\n#define pi 3.141592653589793\n\nin vec2 cgl_pixel;\nin vec2 plain_pixel;\nin vec3 cgl_viewDirection;\nin vec3 cgl_spacePos;\n\nlayout(location=0)out vec4 fragColor;\nlayout(location=1)out float fragDepth;\nuniform vec2 screenSize;\n\nuniform vec3 cgl_viewPos;\nuniform vec3 cgl_viewNormal;\nuniform vec4 cgl_viewRect;\nuniform vec3 uCenter;\nuniform vec3 uOrientation;\nuniform mat3 uCubeAxes;\nuniform float uRadius;\nfloat cgl_depth;\nvec3 cgl_viewDirection0;\n\nvoid cgl_setColor(vec4 color){\nif(color.a==0.0)discard;\n\nfragColor=color;\nfragDepth=cgl_depth;\n}\nvoid cgl_setDepth(float depth){\ngl_FragDepth=depth;\n}\n",
fragHeaderOpaqueLayer2I8:"#version 300 es\nprecision highp float;\nprecision highp int;\n\n#define pi 3.141592653589793\n\nin vec2 cgl_pixel;\nin vec2 plain_pixel;\nin vec3 cgl_viewDirection;\nin vec3 cgl_spacePos;\n\nlayout(location=0)out vec4 fragColor;\nlayout(location=1)out vec2 fragDepth;\nuniform vec2 screenSize;\n\nuniform vec3 cgl_viewPos;\nuniform vec3 cgl_viewNormal;\nuniform vec4 cgl_viewRect;\nuniform vec3 uCenter;\nuniform vec3 uOrientation;\nuniform mat3 uCubeAxes;\nuniform float uRadius;\nfloat cgl_depth;\nvec3 cgl_viewDirection0;\n\n\nvec2 cgl_splitDepth(float z){\nfloat hi=floor(z*256.0)/256.0;\nfloat low=256.0*(z-hi);\nreturn vec2(hi,low);\n}\nvoid cgl_setColor(vec4 color){\nif(color.a==0.0)discard;\nfragColor=color;\nfragDepth=cgl_splitDepth(cgl_depth);\n}\nvoid cgl_setDepth(float depth){\ngl_FragDepth=depth;\n}\n",
fragHeaderSingleLayer:"#version 300 es\nprecision highp float;\nprecision highp int;\n\n#define pi 3.141592653589793\n\nin vec2 cgl_pixel;\nin vec2 plain_pixel;\nin vec3 cgl_viewDirection;\nin vec3 cgl_spacePos;\n\nlayout(location=0)out vec4 fragColor;\nlayout(location=1)out float fragDepth;\nuniform sampler2D oldColorTex;\nuniform sampler2D oldDepthTex;\nuniform vec2 screenSize;\n\nuniform vec3 cgl_viewPos;\nuniform vec3 cgl_viewNormal;\nuniform vec4 cgl_viewRect;\nuniform vec3 uCenter;\nuniform vec3 uOrientation;\nuniform mat3 uCubeAxes;\nuniform float uRadius;\nfloat cgl_depth;\nvec3 cgl_viewDirection0;\n\nvoid cgl_setColor(vec4 color){\nif(color.a==0.0)discard;\nvec4 oldColor=texture(oldColorTex,gl_FragCoord.xy/screenSize);\nfloat oldDepth=texture(oldDepthTex,gl_FragCoord.xy/screenSize).r;\nfloat newAlpha=oldColor.a+color.a-oldColor.a*color.a;\nif(cgl_depth<=oldDepth){\nfragColor=vec4(((1.0-color.a)*oldColor.rgb+color.a*color.rgb),newAlpha);\n}else{\nfragColor=vec4(((1.0-oldColor.a)*color.rgb+oldColor.a*oldColor.rgb),newAlpha);\n}\nfragDepth=min(oldDepth,cgl_depth);\n}\nvoid cgl_setDepth(float depth){\ngl_FragDepth=depth;\n}\n",
fragHeaderSingleLayer2I8:"#version 300 es\nprecision highp float;\nprecision highp int;\n\n#define pi 3.141592653589793\n\nin vec2 cgl_pixel;\nin vec2 plain_pixel;\nin vec3 cgl_viewDirection;\nin vec3 cgl_spacePos;\n\nlayout(location=0)out vec4 fragColor;\nlayout(location=1)out vec2 fragDepth;\nuniform sampler2D oldColorTex;\nuniform sampler2D oldDepthTex;\nuniform vec2 screenSize;\n\nuniform vec3 cgl_viewPos;\nuniform vec3 cgl_viewNormal;\nuniform vec4 cgl_viewRect;\nuniform vec3 uCenter;\nuniform vec3 uOrientation;\nuniform mat3 uCubeAxes;\nuniform float uRadius;\nfloat cgl_depth;\nvec3 cgl_viewDirection0;\n\n\nvec2 cgl_splitDepth(float z){\nfloat hi=floor(z*256.0)/256.0;\nfloat low=256.0*(z-hi);\nreturn vec2(hi,low);\n}\n\nfloat cgl_getDepth(vec2 parts){\nreturn parts.r+parts.g/256.0;\n}\nvoid cgl_setColor(vec4 color){\nif(color.a==0.0)discard;\nvec4 oldColor=texture(oldColorTex,gl_FragCoord.xy/screenSize);\nfloat oldDepth=cgl_getDepth(texture(oldDepthTex,gl_FragCoord.xy/screenSize).rg);\nfloat newAlpha=oldColor.a+color.a-oldColor.a*color.a;\nif(cgl_depth<=oldDepth||color.a==0.0){\nfragColor=vec4(((1.0-color.a)*oldColor.rgb+color.a*color.rgb),newAlpha);\n}else{\nfragColor=vec4(((1.0-oldColor.a)*color.rgb+oldColor.a*oldColor.rgb),newAlpha);\n}\nfragDepth=cgl_splitDepth(min(oldDepth,cgl_depth));\n}\nvoid cgl_setDepth(float depth){\ngl_FragDepth=depth;\n}\n",
fragMergeLayers:"#version 300 es\nprecision highp float;\n\nuniform sampler2D src1Color;\nuniform sampler2D src1Depth;\nuniform sampler2D src2Color;\nuniform sampler2D src2Depth;\nlayout(location=0)out vec4 targetColor;\nlayout(location=1)out float targetDepth;\nin vec2 cgl_pixel;\n\nvoid main(void){\nvec4 color1=texture(src1Color,cgl_pixel);\nvec4 color2=texture(src2Color,cgl_pixel);\nfloat depth1=texture(src1Depth,cgl_pixel).r;\nfloat depth2=texture(src2Depth,cgl_pixel).r;\n\nfloat newAlpha=color1.a+color2.a-color1.a*color2.a;\nif(depth2<=depth1||color2.a==0.0){\ntargetColor=vec4(((1.0-color2.a)*color1.rgb+color2.a*color2.rgb),newAlpha);\n}else{\ntargetColor=vec4(((1.0-color1.a)*color2.rgb+color1.a*color1.rgb),newAlpha);\n}\ntargetDepth=min(depth1,depth2);\n}\n",
fragMergeLayers2I8:"#version 300 es\nprecision highp float;\n\nuniform sampler2D src1Color;\nuniform sampler2D src1Depth;\nuniform sampler2D src2Color;\nuniform sampler2D src2Depth;\nlayout(location=0)out vec4 targetColor;\nlayout(location=1)out vec2 targetDepth;\nin vec2 cgl_pixel;\n\n\nvec2 cgl_splitDepth(float z){\nfloat hi=floor(z*256.0)/256.0;\nfloat low=256.0*(z-hi);\nreturn vec2(hi,low);\n}\n\nfloat cgl_getDepth(vec2 parts){\nreturn parts.r+parts.g/256.0;\n}\nvoid main(void){\nvec4 color1=texture(src1Color,cgl_pixel);\nvec4 color2=texture(src2Color,cgl_pixel);\nfloat depth1=cgl_getDepth(texture(src1Depth,cgl_pixel).rg);\nfloat depth2=cgl_getDepth(texture(src2Depth,cgl_pixel).rg);\n\nfloat newAlpha=color1.a+color2.a-color1.a*color2.a;\nif(depth2<=depth1||color2.a==0.0){\ntargetColor=vec4(((1.0-color2.a)*color1.rgb+color2.a*color2.rgb),newAlpha);\n}else{\ntargetColor=vec4(((1.0-color1.a)*color2.rgb+color1.a*color1.rgb),newAlpha);\n}\ntargetDepth=cgl_splitDepth(min(depth1,depth2));\n}\n",
fragSortLayers:"#version 300 es\nprecision highp float;\n\nuniform sampler2D src1Color;\nuniform sampler2D src1Depth;\nuniform sampler2D src2Color;\nuniform sampler2D src2Depth;\nlayout(location=0)out vec4 target1Color;\nlayout(location=1)out float target1Depth;\nlayout(location=2)out vec4 target2Color;\nlayout(location=3)out float target2Depth;\nin vec2 cgl_pixel;\n\nvoid main(void){\nvec4 color1=texture(src1Color,cgl_pixel);\nvec4 color2=texture(src2Color,cgl_pixel);\nfloat depth1=texture(src1Depth,cgl_pixel).r;\nfloat depth2=texture(src2Depth,cgl_pixel).r;\nif(depth1<=depth2||color2.a==0.0){\ntarget1Color=color1;\ntarget1Depth=depth1;\ntarget2Color=color2;\ntarget2Depth=depth2;\n}else{\ntarget1Color=color2;\ntarget1Depth=depth2;\ntarget2Color=color1;\ntarget2Depth=depth1;\n}\n}\n",
fragSortLayers2I8:"#version 300 es\nprecision highp float;\n\nuniform sampler2D src1Color;\nuniform sampler2D src1Depth;\nuniform sampler2D src2Color;\nuniform sampler2D src2Depth;\nlayout(location=0)out vec4 target1Color;\nlayout(location=1)out vec2 target1Depth;\nlayout(location=2)out vec4 target2Color;\nlayout(location=3)out vec2 target2Depth;\nin vec2 cgl_pixel;\n\n\nfloat cgl_getDepth(vec2 parts){\nreturn parts.r+parts.g/256.0;\n}\nvoid main(void){\nvec4 color1=texture(src1Color,cgl_pixel);\nvec4 color2=texture(src2Color,cgl_pixel);\nvec2 depth1=texture(src1Depth,cgl_pixel).rg;\nvec2 depth2=texture(src2Depth,cgl_pixel).rg;\nif(cgl_getDepth(depth1) <=cgl_getDepth(depth2) ||color2.a==0.0){\ntarget1Color=color1;\ntarget1Depth=depth1;\ntarget2Color=color2;\ntarget2Depth=depth2;\n}else{\ntarget1Color=color2;\ntarget1Depth=depth2;\ntarget2Color=color1;\ntarget2Depth=depth1;\n}\n}\n",
gray:"vec3 gray(float f)\n{\nf=clamp(f,0.,1.);\nreturn vec3(f,f,f);\n}\n",green:"vec3 green(float f)\n{\nreturn vec3(0.,clamp(f,0.,1.),0.);\n}\n",hsv2rgb:"vec3 hsv2rgb(vec3 c)\n{\nvec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);\nvec3 p=abs(fract(c.xxx+K.xyz) *6.0-K.www);\nreturn c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);\n}\n",hue:"vec3 hue(float a){\nreturn hsv2rgb(vec3(a,1.,1.));\n}\n",imagc:"float imagc(vec2 a){\nreturn a.y;\n}\n",invc:"vec2 invc(vec2 a){\nfloat n=a.x*a.x+a.y*a.y;\nreturn vec2(a.x/n,-a.y/n);\n}\n",
logc:"vec2 logc(vec2 a){\nfloat re=a.x;\nfloat im=a.y;\nfloat s=sqrt(re*re+im*im);\nfloat i=im;\nfloat imag=atan(im,re);\nif(i<0.0){\nimag+= (2.0*pi);\n}\nif(i==0.0&&re<0.0){\nimag=pi;\n}\nif(imag>pi){\nimag-= (2.0*pi);\n};\nfloat real=log(s);\n\nreturn vec2(real,imag);\n}\n",logr:"vec2 logr(float a){\nif(a>=0.)return vec2(log(a),0);\nelse return vec2(log(-a),pi);\n}\n",mat2complex:"mat4 mat2complex(mat2 a)\n{\nreturn mat4(\nvec4(a[0][0],0,a[0][1],0),\nvec4(0,a[0][0],0,a[0][1]),\nvec4(a[1][0],0,a[1][1],0),\nvec4(0,a[1][0],0,a[1][1])\n);\n}\n",
multc:"vec2 multc(vec2 a,vec2 b){\nreturn vec2(dot(a,vec2(b.x,-b.y)),dot(a,b.yx));\n}\n",negc:"vec2 negc(vec2 a){\nreturn vec2(-a.x,-a.y);\n}\n",powc:"vec2 powc(vec2 a,vec2 b){\nreturn(b.x==0. &&b.y==0.) ?vec2(1.,0.) : ((a.x==0. &&a.y==0.) ?vec2(0.) :expc(multc(logc(a),b)));\n}\n",powi:"float powi(float a,int b){\nif(mod(float(b),2.) < .5)\nreturn pow(abs(a),float(b));\nelse\nreturn sign(a)*pow(abs(a),float(b));\n}\n",random:"uniform float rnd_;\n\nfloat last_rnd= .1231;\nfloat random(){\nfloat a=fract(132422.21*sin(dot(plain_pixel,343433.671228*vec2(.176574+last_rnd, .1131+rnd_))));\nfloat b=fract(last_rnd*2321.2312*sin(dot(plain_pixel+vec2(rnd_,last_rnd),plain_pixel) *43758.5453));\nlast_rnd=fract(rnd_ +last_rnd+a+b);\nreturn last_rnd;\n}\n",
randomnormal:"float randomnormal(){\nreturn sqrt(-2. *log(random())) *cos(6.283185307179586*random());\n}\n",realc:"float realc(vec2 a){\nreturn a.x;\n}\n",red:"vec3 red(float f)\n{\nreturn vec3(clamp(f,0.,1.),0.,0.);\n}\n",rgb2hsv:"vec3 rgb2hsv(vec3 c)\n{\nvec4 K=vec4(0.0, -1.0/3.0,2.0/3.0, -1.0);\nvec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));\nvec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));\n\nfloat d=q.x-min(q.w,q.y);\nfloat e=1.0e-10;\nreturn vec3(abs(q.z+ (q.w-q.y) / (6.0*d+e)),d/ (q.x+e),q.x);\n}\n",
sinc:"\n\nvec2 sinc(vec2 a){\n\nfloat n=exp(a.y);\nfloat imag1=n*sin(-a.x);\nfloat real1=n*cos(-a.x);\nn=exp(-a.y);\nfloat imag2=n*sin(a.x);\nfloat real2=n*cos(a.x);\nfloat r= -(imag1-imag2) /2.0;\nfloat i= (real1-real2) /2.0;\n\nreturn vec2(r,i);\n}\n",sqrtc:"vec2 sqrtc(vec2 a){\nreturn expc(multc(logc(a),vec2(0.5,0.0)));\n}\n",sqrtf:"vec2 sqrtf(float a){\nif(a>=0.)return vec2(sqrt(a),0.);\nelse return vec2(0.,sqrt(-a));\n}\n",standardFragmentHeader:"#version 300 es\nprecision highp float;\nprecision highp int;\n\n#define pi 3.141592653589793\n\nin vec2 cgl_pixel;\nin vec2 plain_pixel;\nin vec3 cgl_viewDirection;\nin vec3 cgl_spacePos;\nout vec4 fragColor;\n\nuniform vec3 cgl_viewPos;\nuniform vec3 cgl_viewNormal;\nuniform vec4 cgl_viewRect;\nuniform vec3 uCenter;\nuniform vec3 uOrientation;\nuniform mat3 uCubeAxes;\nuniform float uRadius;\nfloat cgl_depth;\nvec3 cgl_viewDirection0;",
subc:"vec2 subc(vec2 a,vec2 b){\nreturn a-b;\n}\n",subpoints:"vec2 subpoints(vec3 a,vec3 b){\nreturn dehomogenize(a) -dehomogenize(b);\n}\n",tanc:"vec2 tanc(vec2 a){\nvec2 s=sinc(a);\nvec2 c=cosc(a);\nreturn divc(s,c);\n}\n",vec2complex:"vec4 vec2complex(vec2 a)\n{\nreturn vec4(a.x,0.,a.y,0);\n}\n",vshader:"#version 300 es\nin vec3 aPos;\nin vec2 aTexCoord;\nout vec2 cgl_pixel;\nout vec2 plain_pixel;\nuniform mat3 transformMatrix;\nvoid main(void){\ngl_Position=vec4(aPos,1.);\nplain_pixel=aTexCoord;\nvec3 r=transformMatrix*vec3(plain_pixel,1);\ncgl_pixel=r.xy/r.z;\n}\n",
vshader3d:"#version 300 es\nin vec3 aPos;\nin vec2 aTexCoord;\n\nout vec2 cgl_pixel;\nout vec3 cgl_viewDirection;\nout vec2 plain_pixel;\n\nuniform vec3 cgl_viewPos;\nuniform mat3 transformMatrix;\n\nuniform mat4 inverseSpaceTransformMatrix;\nuniform mat4 projectionMatrix;\n\nvoid main(void){\ngl_Position=projectionMatrix*vec4(aPos,1.);\nvec4 pos4=inverseSpaceTransformMatrix*vec4(aPos,1.);\ncgl_viewDirection=(pos4.xyz/pos4.w)-cgl_viewPos;\n\n\nplain_pixel=aTexCoord;\nvec3 r=transformMatrix*vec3(plain_pixel,1);\ncgl_pixel=r.xy/r.z;\n}\n",
vshader3dCuboid:"#version 300 es\nin vec2 aTexCoord;\nin vec3 aPos;\n\nout vec2 cgl_pixel;\nout vec3 cgl_viewDirection;\nout vec2 plain_pixel;\n\nuniform vec3 uCenter;\nuniform mat3 uCubeAxes;\nuniform vec3 cgl_viewPos;\nuniform mat4 projAndTrafoMatrix;\nuniform mat3 transformMatrix;\n\nvoid main(void){\nvec3 pos3=uCenter+uCubeAxes*aPos;\n\ngl_Position=projAndTrafoMatrix*vec4(pos3,1);\ngl_Position.z=0.0;\ncgl_viewDirection=pos3-cgl_viewPos;\n\nplain_pixel=aTexCoord;\nvec3 r=transformMatrix*vec3(plain_pixel,1);\ncgl_pixel=r.xy/r.z;\n}\n",
vshader3dCylinder:"#version 300 es\nin vec2 aTexCoord;\nin vec3 aPos;\n\nout vec2 cgl_pixel;\nout vec3 cgl_viewDirection;\nout vec2 plain_pixel;\n\nuniform vec3 uCenter;\nuniform vec3 uOrientation;\nuniform float uRadius;\nuniform float uBoxLengthScale;\nuniform vec3 cgl_viewPos;\nuniform mat4 projAndTrafoMatrix;\nuniform mat3 transformMatrix;\n\nvoid main(void){\n\n\nvec3 v0=abs(uOrientation.x)<abs(uOrientation.y)?vec3(1,0,0):vec3(0,1,0);\nvec3 dir1=normalize(cross(v0,uOrientation));\nvec3 dir2=normalize(cross(dir1,uOrientation));\nvec3 pos3=uCenter+uBoxLengthScale*uOrientation*aPos.x+uRadius*(dir1*aPos.y+dir2*aPos.z);\n\ngl_Position=projAndTrafoMatrix*vec4(pos3,1);\ngl_Position.z=0.0;\ncgl_viewDirection=pos3-cgl_viewPos;\n\nplain_pixel=aTexCoord;\nvec3 r=transformMatrix*vec3(plain_pixel,1);\ncgl_pixel=r.xy/r.z;\n}\n",
vshader3dSphere:"#version 300 es\nin vec2 aTexCoord;\nin vec3 aPos;\n\nout vec2 cgl_pixel;\nout vec3 cgl_viewDirection;\nout vec2 plain_pixel;\n\nuniform vec3 uCenter;\nuniform float uRadius;\nuniform vec3 cgl_viewPos;\nuniform mat4 projAndTrafoMatrix;\nuniform mat3 transformMatrix;\n\nvoid main(void){\n\nvec3 n4=uCenter-cgl_viewPos;\n\nvec3 dir=normalize(n4);\nvec3 up=normalize(cross(dir,abs(dir.x)<abs(dir.y)?vec3(1.,0.,0.):vec3(0.,1.,0.)));\nvec3 right=normalize(cross(dir,up));\nvec3 pos3=uCenter+uRadius*(aPos.x*right+aPos.y*up-dir);\n\ngl_Position=projAndTrafoMatrix*vec4(pos3,1);\ngl_Position.z=0.0;\ncgl_viewDirection=pos3-cgl_viewPos;\n\nplain_pixel=aTexCoord;\nvec3 r=transformMatrix*vec3(plain_pixel,1);\ncgl_pixel=r.xy/r.z;\n}\n",
vshader3dTrianglesCode:"\n\ncgl_spacePos=aPos;\n\ngl_Position=projAndTrafoMatrix*vec4(aPos,1);\n\ncgl_viewDirection=aPos-cgl_viewPos;\n\nplain_pixel=aTexCoord;\n\n\n\ncgl_pixel=aTexCoord;\n",vshader3dTrianglesHeader:"#version 300 es\nin vec2 aTexCoord;\nin vec3 aPos;\n\nout vec2 cgl_pixel;\nout vec3 cgl_viewDirection;\nout vec2 plain_pixel;\nout vec3 cgl_spacePos;\n\nuniform vec3 cgl_viewPos;\nuniform mat4 projAndTrafoMatrix;\nuniform mat3 transformMatrix;\n"};var ia=!1,f,ja,ka,la,w,x,ma=!1,na=!1,oa=!1,pa=1;
function qa(){function a(d){f.removeEventListener("webglcontextcreationerror",a,!1);d.statusMessage&&(b=d.statusMessage)}if(!ia){f=document.createElement("canvas");f.id="glcanvas";f.style.display="none";f.width=f.height=0;document.body.appendChild(f);ja=document.createElement("canvas");ja.id="tmpcanvas";ja.style.display="none";ja.width=ja.height=0;document.body.appendChild(ja);ka=document.createElement("canvas");ka.id="dummycanvas";ka.style.display="none";ka.width=ka.height=1;document.body.appendChild(ka);
la={ctype:"image",value:{img:ka,width:1,height:1,ready:!0,live:!1,generation:0,whenReady:function(){}}};var b="Unknown";f.addEventListener("webglcontextcreationerror",a,!1);var c={};"undefined"!==typeof CindyJS._pluginRegistry.CindyXR&&(c.xrCompatible=!0);w=f.getContext("webgl2",c);if(!w)throw new ta(`Could not obtain a WebGL2 context.\nReason: ${b}`);ua("Loaded WebGL 2.0.");y.gl=w;f.removeEventListener("webglcontextcreationerror",a,!1);oa||(na=!!w.getExtension("EXT_color_buffer_float")&&w.getExtension("OES_texture_float_linear"),
na||(F("Your browser does not support EXT_color_buffer_float, trying EXT_color_buffer_half_float..."),(ma=!!w.getExtension("EXT_color_buffer_half_float"))||F("Your browser does not support EXT_color_buffer_half_float, will use 8-bit textures.")));w.depthFunc(w.LEQUAL);w.blendFunc(w.SRC_ALPHA,w.ONE_MINUS_SRC_ALPHA);ia=!0}};function va(a){if(null==a||"object"!=typeof a)return a;if(a instanceof Array){var b=[];for(var c=0,d=a.length;c<d;c++)b[c]=va(a[c]);return b}if(a instanceof Object){b={};for(c in a)a.hasOwnProperty(c)&&(0<="oper impl args ctype stack name arglist value real imag key obj body".split(" ").indexOf(c)&&(b[c]=va(a[c])),a.modifs&&(b.modifs=a.modifs));return b}}
function wa(a,b,c=(d,h)=>d===h){if(a==b)return!0;if(!(a instanceof Array&&b instanceof Array)||a.length!=b.length)return!1;for(let d=0,h=a.length;d<h;d++)if(!c(a[d],b[d]))return!1;return!0}
function ya(a,b){if(null==a||"object"!=typeof a)return a===b;if(a===b)return!0;if(a instanceof Array&&b instanceof Array){if(a.length!=b.length)return!1;for(var c=0,d=a.length;c<d;c++)if(!ya(a[c],b[c]))return!1;return!0}if(a instanceof Object&&b instanceof Object){c="oper impl args ctype stack name modifs arglist value real imag key obj body".split(" ");for(d=0;d<c.length;d++){let h=c[d];if(!ya(a[h],b[h]))return!1}return!0}return!1}
function za(a){return-1===a.indexOf("$")?a:a.substr(0,a.indexOf("$"))}
function Aa(a){if("boolean"===a.ctype)return H.M;if("number"===a.ctype)return a=a.value,1E-5>Math.abs(a.imag)?(a.real|0)===a.real?H.u:H.h:H.j;if("list"===a.ctype){let b=a.value;if(3===b.length){if("Point"===a.usage)return H.J;if("Line"===a.usage)return H.line}if(0<b.length){let c=Aa(b[0]);for(let d=1;d<b.length;d++)c=Ba(c,Aa(b[d]));if(c)return{type:"list",length:b.length,parameters:c}}}else{if("string"===a.ctype||"image"===a.ctype)return H.image;if("geo"===a.ctype&&"L"===a.value.kind)return H.line;
if("cglLazy"===a.ctype)return H.$a(a)}F("Cannot guess type of the following type:",a);return!1}var Ca=0;function Da(){Ca++;return`_h${Ca}`}function Ga(a,b){if(a>f.width||b>f.height)f.width=Math.ceil(a),f.height=Math.ceil(b)}function Ha(a,b){a.instance.Na||(a.instance.Na={});a.instance.Na[b]||(a.instance.Na[b]=a.instance.parse(b));a=a.evaluate(a.instance.Na[b]);return a.ctype&&"number"===a.ctype?a.value.real:0}function Ia(a){return{x:Ha(a,"(screenbounds()_4).x"),y:Ha(a,"(screenbounds()_4).y")}}
function Ka(a){return{x:Ha(a,"(screenbounds()_3).x"),y:Ha(a,"(screenbounds()_3).y")}}function La(a){return{x:Ha(a,"(screenbounds()_1).x"),y:Ha(a,"(screenbounds()_1).y")}}var Ma=new Float32Array(1),Na=new Int32Array(Ma.buffer);
function Oa(a){Ma[0]=a;a=Na[0];var b=a>>16&32768,c=(a&2147483647)+4096;if(1199570944<=c)return 1199570944<=(a&2147483647)?2139095040>c?b|31744:b|31744|(a&8388607)>>13:b|31743;if(947912704<=c)return b|c-939524096>>13;if(855638016>c)return b;c=(a&2147483647)>>23;return b|(a&8388607|8388608)+(8388608>>>c-102)>>126-c}function Pa(a){return na?new Float32Array(a):ma?new Uint16Array(a):new Uint8Array(a)}function Qa(){return na?w.RGBA32F:ma?w.RGBA16F:w.RGBA}
function Sa(){return na?w.FLOAT:ma?w.HALF_FLOAT:w.UNSIGNED_BYTE}function Ta(a){let b=1;for(;b<a;)b<<=1;return b}const Ua="abs exp log sin cos tan arcsin arccos arctan".split(" ");
function Va(a,b){if("variable"===a.ctype)return b.includes(a.name)?{F:1}:{F:0};if("number"===a.ctype)return 0===a.value.imag&&Number.isInteger(a.value.real)?{value:a.value.real,F:0}:{F:0};if("void"===a.ctype)return{value:0,F:0};if("infix"===a.ctype&&["+","-","*","/"].includes(a.oper)){var c=Va(a.args[0],b);b=Va(a.args[1],b);if(void 0===c.F||void 0===b.F)return{};if(0>c.F||0>b.F)return{F:-1};let h=0,m=void 0!==c.value&&void 0!==b.value;var d;switch(a.oper){case "+":h=Math.max(c.F,b.F);m&&(d=c.value+
b.value);break;case "-":h=Math.max(c.F,b.F);m&&(d=c.value-b.value);break;case "*":h=c.F+b.F;m&&(d=c.value*b.value);break;case "/":h=0==b.F?c.F:-1,m&&(d=c.value/b.value)}return m?{F:h,value:d}:{F:h}}if("infix"===a.ctype&&"^"===a.oper){c=Va(a.args[1],b);if(void 0===c.F)return{};if(void 0!==c.value&&0<=c.value){a=Va(a.args[0],b);if(void 0===a.F)return{};d=a.F*c.value;return void 0!==c.value?{F:d,value:Math.pow(a.value,c.value)}:{F:d}}return{F:-1}}if("function"===a.ctype&&1==a.args.length&&Ua.includes(za(a.oper)))return c=
Va(a.args[0],b),void 0===c.F?{}:0!=c.F?{F:-1}:"undefined"!==c.value&&"abs"===za(a.oper)?{F:0,value:Math.abs(c.value)}:{F:0};ua(a);return{}};function Wa(a,b,c){if(a.canvaswrapper){if(!a.ready||a.canvaswrapper.canvas!=la&&a.canvaswrapper.ba==a.width&&a.canvaswrapper.X==a.height||(delete a.canvaswrapper,a.canvaswrapper=Wa(a,b,c)),c){b=a.canvaswrapper;var d=b.i;if(c&&(c.repeat!=d.repeat||c.clamptoedge!=d.clamptoedge||c.mipmap!=d.mipmap||c.interpolate!=d.interpolate))for(b.i=c,d=0;2>d;d++)w.bindTexture(w.TEXTURE_2D,b.textures[d]),c.mipmap?w.texParameteri(w.TEXTURE_2D,w.TEXTURE_MIN_FILTER,c.interpolate?w.LINEAR_MIPMAP_LINEAR:w.NEAREST_MIPMAP_LINEAR):
w.texParameteri(w.TEXTURE_2D,w.TEXTURE_MIN_FILTER,c.interpolate?w.LINEAR:w.NEAREST),w.texParameteri(w.TEXTURE_2D,w.TEXTURE_MAG_FILTER,c.interpolate?w.LINEAR:w.NEAREST),c.clamptoedge&&(w.texParameteri(w.TEXTURE_2D,w.TEXTURE_WRAP_S,w.CLAMP_TO_EDGE),w.texParameteri(w.TEXTURE_2D,w.TEXTURE_WRAP_T,w.CLAMP_TO_EDGE))}}else a.canvaswrapper=new Xa(a.ready?a:la,c||{interpolate:!0,mipmap:!1,repeat:!1,clamptoedge:!1}),a.ready||Ya("Image is not ready yet.");return a.canvaswrapper}
function Xa(a,b){this.canvas=a;this.i=b;this.ba=a.width;this.X=a.height;ab(this);this.it=0;this.textures=[];this.s=[];this.generation=-1;this.bindTexture();a.drawTo=this.drawTo.bind(this);a.readPixels=this.R.bind(this);a.cdyUpdate=this.Z.bind(this);a=Pa(this.ma*this.ca*4);for(let c=0;2>c;c++)this.textures[c]=w.createTexture(),w.bindTexture(w.TEXTURE_2D,this.textures[c]),w.pixelStorei(w.UNPACK_ALIGNMENT,1),w.texImage2D(w.TEXTURE_2D,0,Qa(),this.ma,this.ca,0,w.RGBA,Sa(),a),b.mipmap?w.texParameteri(w.TEXTURE_2D,
w.TEXTURE_MIN_FILTER,b.interpolate?w.LINEAR_MIPMAP_LINEAR:w.NEAREST_MIPMAP_LINEAR):w.texParameteri(w.TEXTURE_2D,w.TEXTURE_MIN_FILTER,b.interpolate?w.LINEAR:w.NEAREST),w.texParameteri(w.TEXTURE_2D,w.TEXTURE_MAG_FILTER,b.interpolate?w.LINEAR:w.NEAREST),b.clamptoedge&&(w.texParameteri(w.TEXTURE_2D,w.TEXTURE_WRAP_S,w.CLAMP_TO_EDGE),w.texParameteri(w.TEXTURE_2D,w.TEXTURE_WRAP_T,w.CLAMP_TO_EDGE)),this.s[c]=w.createFramebuffer(),w.bindFramebuffer(w.FRAMEBUFFER,this.s[c]),w.framebufferTexture2D(w.FRAMEBUFFER,
w.COLOR_ATTACHMENT0,w.TEXTURE_2D,this.textures[c],0);this.L=new bb(e.copytexture_v,e.copytexture_f);cb(this)}
function cb(a){a.la=w.createBuffer();w.bindBuffer(w.ARRAY_BUFFER,a.la);var b=new Float32Array([-1,-1,0,1,-1,0,-1,1,0,1,1,0]),c=w.getAttribLocation(a.L.handle,"aPos");w.enableVertexAttribArray(c);a=w.getAttribLocation(a.L.handle,"aTexCoord");var d=new Float32Array([0,0,1,0,0,1,1,1]),h=b.byteLength;w.bufferData(w.ARRAY_BUFFER,h+d.byteLength,w.STATIC_DRAW);w.bufferSubData(w.ARRAY_BUFFER,0,b);w.vertexAttribPointer(c,3,w.FLOAT,!1,0,0);-1!=a&&(w.enableVertexAttribArray(a),w.bufferSubData(w.ARRAY_BUFFER,
h,d),w.vertexAttribPointer(a,2,w.FLOAT,!1,0,h))}function ab(a){a.i.clamptoedge&&a.i.interpolate&&!a.i.repeat&&!a.i.mipmap?(a.ma=a.ba,a.ca=a.X):(a.ma=Ta(a.ba+a.ba/2*(a.i.mipmap&&a.i.repeat)),a.ca=Ta(a.X+a.X/2*(a.i.mipmap&&a.i.repeat)))}Xa.prototype.bindTexture=function(){w.bindTexture(w.TEXTURE_2D,this.textures[this.it])};Xa.prototype.bindFramebuffer=function(){w.bindFramebuffer(w.FRAMEBUFFER,this.s[this.it^1]);this.it^=1};function db(a){w.bindFramebuffer(w.FRAMEBUFFER,a.s[a.it^1])}
Xa.prototype.Z=function(){let a;this.canvas.img.hasOwnProperty("getContext")?a=this.canvas.img.getContext("2d"):(this.canvas.img=document.createElement("canvas"),this.canvas.img.style.display="none",this.canvas.img.width=this.ba,this.canvas.img.height=this.X,a=this.canvas.img.getContext("2d"));a.clearRect(0,0,this.ba,this.X);this.drawTo(a,0,0);this.canvas.img.generation++};
Xa.prototype.reloadIfRequired=function(){if(!(this.canvas.live&&(this.canvas.img.webkitDecodedFrameCount||this.canvas.img.i)&&this.I>=(this.canvas.img.webkitDecodedFrameCount||this.canvas.img.i)||!this.canvas.live&&(!this.canvas.ready||this.generation>=this.canvas.generation))){if(this.ba!=this.canvas.width||this.X!=this.canvas.height){this.ba=this.canvas.width;this.X=this.canvas.height;ab(this);var a=Pa(this.ma*this.ca*4);for(let b=0;2>b;b++)w.bindTexture(w.TEXTURE_2D,this.textures[b]),w.texImage2D(w.TEXTURE_2D,
0,Qa(),this.ma,this.ca,0,w.RGBA,Sa(),a)}this.bindTexture();w.pixelStorei(w.UNPACK_FLIP_Y_WEBGL,1);this.i.repeat?(ja.width=this.ma,ja.height=this.ca,a=ja.getContext("2d"),a.drawImage(this.canvas.img,0,this.ca-this.X),a.drawImage(this.canvas.img,this.ba,this.ca-this.X),a.drawImage(this.canvas.img,0,this.ca-2*this.X),a.drawImage(this.canvas.img,this.ba,this.ca-2*this.X),w.texSubImage2D(w.TEXTURE_2D,0,0,0,w.RGBA,Sa(),ja)):w.texSubImage2D(w.TEXTURE_2D,0,0,0,w.RGBA,Sa(),this.canvas.img);this.i.mipmap&&
w.generateMipmap(w.TEXTURE_2D);w.pixelStorei(w.UNPACK_FLIP_Y_WEBGL,0);this.generation=this.canvas.generation;this.I=Math.min(this.I+1,this.canvas.img.webkitDecodedFrameCount||this.canvas.img.i)}};
Xa.prototype.drawTo=function(a,b,c){Ga(this.ma,this.ca);cb(this);w.viewport(0,0,this.ma,this.ca);this.L.use(w);w.activeTexture(w.TEXTURE0);w.bindTexture(w.TEXTURE_2D,this.textures[this.it]);this.L.uniform.sampler([0]);w.bindFramebuffer(w.FRAMEBUFFER,null);w.drawArrays(w.TRIANGLE_STRIP,0,4);w.flush();a.drawImage(f,0,f.height-this.X,this.ba,this.X,b,c,this.ba,this.X)};
Xa.prototype.R=function(a,b,c,d){w.bindFramebuffer(w.FRAMEBUFFER,this.s[this.it]);w.framebufferTexture2D(w.FRAMEBUFFER,w.COLOR_ATTACHMENT0,w.TEXTURE_2D,this.textures[this.it],0);var h=Pa(c*d*4);w.readPixels(a,this.X-b-d,c,d,w.RGBA,Sa(),h);a=[];for(--d;0<=d;d--){b=a.concat;var m=h.slice(d*c*4,(d+1)*c*4);let p=[];for(let r=0;r<m.length;r++)if(na)p.push(m[r]);else if(ma){var n=m[r];let B=(n&31744)>>10,u=n&1023;p.push((n>>15?-1:1)*(B?31===B?u?NaN:Infinity:Math.pow(2,B-15)*(1+u/1024):u/1024*6.103515625E-5))}else p.push(m[r]/
255);a=b.call(a,p)}return a};function eb(a,b,c,d){let h=Math.sqrt(fb(b,b));return{type:3,oa:a,direction:b,Ba:c,La:(h+d)/h}}function gb(a,b){0!==a.length%9&&F("the length of vertices should be a multiple of 9");return{type:4,Y:a,Ia:b}}var hb=0,ib=void 0,jb=void 0,kb=void 0,lb=void 0,mb=[0,0];function nb(){lb=kb=jb=ib=void 0;mb=[0,0];w.disable(w.CULL_FACE)}function ob(a,b,c,d,h){this.O=a;this.bb=b;this.L=h;this.la=this.V=d;this.l=c;this.R=hb;pb(this,!1)}function qb(a,b){a.V=b;pb(a,!0)}
function rb(a){ua("recompile");a.Ca=new sb(a.O);a.s=tb(a.Ca,a.bb,a.V,a.L);a.la=new Map;a.V.forEach((b,c)=>{b.ua&&b.sa&&"cglLazy"!=b.type.type&&a.la.set(c,b)});a.v=a.s.v;a.Ja=!0;a.Pa=pa}
function pb(a,b){ua("rebuild");(b||!a.Ja||a.Pa<pa)&&rb(a);if(void 0===a.s)F("cpg is undefined");else{a.R=hb;if(0===a.R)a.Z=e.standardFragmentHeader;else if(1===a.R)b=na?"":"2I8",a.Z=a.v?e["fragHeaderOpaqueLayer"+b]:e["fragHeaderSingleLayer"+b];else if(2===a.R)a.Z=e["fragHeaderOpaqueLayer"+(na?"":"2I8")];else{F("unexpected transparencyType ",a.R);return}a.Z+=ub(a.Ca,a.s,0===a.R);if(a.L)if(0==a.l.type)a.I=e.vshader3d;else if(2==a.l.type)a.I=e.vshader3dSphere;else if(3==a.l.type)a.I=e.vshader3dCylinder;
else if(4==a.l.type){let c="",d="",h=0;a.l.Ia.forEach((m,n)=>{let p=a.V.get(n).fb;void 0==p?I("unused vertex-modifier:",n):(m.ya="aModifier_"+h,c+=`in ${M(m.Ga)} ${m.ya};\nout ${M(m.Ga)} ${p};\n`,d+=`${p}=${m.ya};\n`,h++)});a.I=`${e.vshader3dTrianglesHeader}${c}`+`void main(void){\n${d}${e.vshader3dTrianglesCode}}`;ua(a.I)}else 5==a.l.type?a.I=e.vshader3dCuboid:(F("unsupported bounding box type: ",a.l.type),a.I=e.vshader3d);else a.I=e.vshader;a.i=new bb(a.I,a.Z);vb(a)}}
function vb(a){if(a.L){let [b,c,d,h,,m]=wb();0==a.l.type?a.Y=new Float32Array([b,c,m,d,c,m,b,h,m,d,h,m]):2==a.l.type?a.Y=new Float32Array([-1,-1,0,1,-1,0,-1,1,0,1,1,0]):4==a.l.type?a.Y=new Float32Array(a.l.Y):5==a.l.type||3==a.l.type?a.Y=new Float32Array([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,1,1,1,-1,1]):(F("unsupported bounding box type: ",a.l.type),a.Y=new Float32Array([b,c,m,d,c,m,b,h,m,d,h,m]))}else a.Y=new Float32Array([-1,-1,0,1,-1,0,-1,
1,0,1,1,0]);xb(a)}
function yb(a,b){let c=void 0,d=w.FLOAT;switch(a){case H.j:c=(n,p)=>n.push(p.value.real,p.value.imag);break;case H.M:c=(n,p)=>n.push(p.value?1:0);d=w.BYTE;break;case H.u:c=(n,p)=>n.push(p.value.real);d=w.INT;break;case H.h:c=(n,p)=>n.push(p.value.real);break;case H.J:case H.line:c=(n,p)=>{"geo"===p.ctype?p.value.homog.value.forEach(r=>n.push(r.value.real)):"list"===p.ctype&&2===p.value.length?p.value.forEach(r=>n.push(r.value.real)):"list"===p.ctype&&3===p.value.length&&p.value.forEach(r=>n.push(r.value.real));
F("unexpected value for geometry object: ",p)};break;default:a.parameters===H.u&&(d=w.INT),"list"!==a.type||a.parameters!==H.h&&a.parameters!==H.u?"list"===a.type&&"list"===a.parameters.type&&a.parameters.parameters===H.h&&(c=(n,p)=>{for(let r=0;r<a.length;r++)for(let B=0;B<a.parameters.length;B++)n.push(p.value[r].value[B].value.real)}):c=(n,p)=>{p.value.forEach(r=>n.push(r.value.real))}}if(!c)return F(`Don't know how to set vertex attribute array of type ${zb(a)}, to`,b),{ra:void 0,Fa:0,Ka:d};let h=
[];b.forEach(n=>c(h,n));let m=d==w.FLOAT?new Float32Array(h):d==w.INT?new Int32Array(h):new Int8Array(h);return{ra:m,Fa:m.length/b.length,Ka:d}}
function xb(a){ib=a.l.type;3===a.l.type||5===a.l.type?(w.enable(w.CULL_FACE),w.cullFace(w.FRONT)):w.disable(w.CULL_FACE);var b=w.createBuffer();w.bindBuffer(w.ARRAY_BUFFER,b);let c=b=a.Y.byteLength;if(4==a.l.type){if(a.l.eb)var d=a.l.eb;else{var h=[0,0,1,0,0,1];d=[];for(var m=0;m<a.Y.length;m+=9)d.push.apply(d,h);d=new Float32Array(d);a.l.eb=d}c+=d.byteLength;let n=0;a.l.Ia.forEach(p=>{var r=w.getAttribLocation(a.i.handle,p.ya||"aModifier_"+n);-1!=r&&(w.enableVertexAttribArray(r),p.Ya=r,p.Za=c,void 0===
p.ra&&(r=yb(p.Ga,p.values),p.ra=r.ra,p.Fa=r.Fa,p.Ka=r.Ka),c+=p.ra.byteLength,n++)})}else d=3==a.l.type||5==a.l.type?new Float32Array([0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0]):new Float32Array([0,0,1,0,0,1,1,1]),c+=d.byteLength;h=w.getAttribLocation(a.i.handle,"aPos");w.enableVertexAttribArray(h);m=w.getAttribLocation(a.i.handle,"aTexCoord");-1!=m&&w.enableVertexAttribArray(m);w.bufferData(w.ARRAY_BUFFER,c,w.STATIC_DRAW);w.bufferSubData(w.ARRAY_BUFFER,0,a.Y);w.vertexAttribPointer(h,
3,w.FLOAT,!1,0,0);-1!=m&&(w.bufferSubData(w.ARRAY_BUFFER,b,d),w.vertexAttribPointer(m,2,w.FLOAT,!1,0,b));4==a.l.type&&a.l.Ia.forEach(n=>{void 0===n.ra||0>n.Ya||0>=n.Fa||(w.bufferSubData(w.ARRAY_BUFFER,n.Za,n.ra),w.vertexAttribPointer(n.Ya,n.Fa,n.Ka,!1,0,n.Za))})}function Ab(a){return[a[0],a[3],a[6],a[1],a[4],a[7],a[2],a[5],a[8]]}function Bb(a,b,c,d){a.i.uniform.hasOwnProperty("transformMatrix")&&a.i.uniform.transformMatrix(Ab([c.x-b.x,d.x-b.x,b.x,c.y-b.y,d.y-b.y,b.y,0,0,1]))}
function Cb(a){a.i.uniform.hasOwnProperty("spaceTransformMatrix")&&a.i.uniform.spaceTransformMatrix(Db(y.ga).flat());a.i.uniform.hasOwnProperty("inverseSpaceTransformMatrix")&&a.i.uniform.inverseSpaceTransformMatrix(Db(y.ka).flat());a.i.uniform.hasOwnProperty("projectionMatrix")&&a.i.uniform.projectionMatrix(Db(y.projectionMatrix).flat());a.i.uniform.hasOwnProperty("projAndTrafoMatrix")&&a.i.uniform.projAndTrafoMatrix(Db(Eb(y.projectionMatrix,y.ga)).flat());if(a.i.uniform.hasOwnProperty("cgl_viewPos")){"undefined"===
typeof y.G.na&&(y.G.na=Fb(y.ka,y.G.Ea));var b=y.G.na;a.i.uniform.cgl_viewPos([b[0]/b[3],b[1]/b[3],b[2]/b[3]])}a.i.uniform.hasOwnProperty("cgl_viewNormal")&&(b=y.G.Oa,a.i.uniform.cgl_viewNormal([b[0]/b[3],b[1]/b[3],b[2]/b[3]]));if(a.i.uniform.hasOwnProperty("cgl_viewRect")){let [c,d,h,m]=wb();a.i.uniform.cgl_viewRect([c,d,h,m])}}
function Gb(a){a.i.uniform.hasOwnProperty("uCenter")&&(void 0!==a.l.oa?a.i.uniform.uCenter(a.l.oa):F("uCenter is not supported for current bounding box type"));a.i.uniform.hasOwnProperty("uRadius")&&(void 0!==a.l.Ba?a.i.uniform.uRadius([a.l.Ba]):F("uRadius is not supported for current bounding box type"));a.i.uniform.hasOwnProperty("uBoxLengthScale")&&(void 0!==a.l.La?a.i.uniform.uBoxLengthScale([a.l.La]):F("uBoxLengthScale is not supported for current bounding box type"));a.i.uniform.hasOwnProperty("uOrientation")&&
(3==a.l.type?a.i.uniform.uOrientation(a.l.direction):F("uOrientation is not supported for current bounding box type"));a.i.uniform.hasOwnProperty("uCubeAxes")&&(5==a.l.type?a.i.uniform.uCubeAxes(Ab([a.l.hb,a.l.ib,a.l.jb].flat())):F("uCubeAxes is not supported for current bounding box type"))}
function Hb(a,b,c){if("function"===typeof a)switch(b){case H.j:return[c.value.real,c.value.imag];case H.M:return[c.value?1:0];case H.u:case H.h:return[c.value.real];case H.J:case H.line:if("geo"===c.ctype)return c.value.homog.value.map(n=>n.value.real);if("list"===c.ctype&&2===c.value.length)return c.value.map(n=>n.value.real).concat([1]);if("list"===c.ctype&&3===c.value.length)return c.value.map(n=>n.value.real);break;default:if("list"===b.type&&(b.parameters===H.h||b.parameters===H.u))return c.value.map(n=>
n.value.real);if("list"===b.type&&"list"===b.parameters.type&&b.parameters.parameters===H.h){a=[];for(var d=0;d<b.length;d++)for(var h=0;h<b.parameters.length;h++)a.push(c.value[d].value[h].value.real);return a}}else if("list"===b.type){d=[];var m=Jb(b);if(1===Kb(b)&&(m===H.h||m===H.u)){b=Lb(b.length);m=m===H.h?H.Da:H.Ta;let n=0;for(h in b){let p=`a${h}`;d.push([p,Hb(a[p],m(b[h]),{ctype:"list",value:Array.from(Array(b[h]).keys()).map(r=>c.value[n+r])})]);n+=b[h]}return d}for(h=0;h<b.length;h++)m=
`a${h}`,d.push([m,Hb(a[m],b.parameters,{ctype:"list",value:c.value[h].value})]);return d}F(`Don't know how to set uniform of type ${zb(b)}, to`,c)}function Mb(a,b){void 0!==b&&("function"===typeof a?a(b):b.forEach(([c,d])=>{Mb(a[c],d)}))}function Nb(a,b){a.la.forEach((c,d)=>{var h=c.fb;a.i.uniform.hasOwnProperty(h)?(d=b.get(d),void 0!==d&&(h=a.i.uniform[h],d.gb&&d.V===a.V||(d.gb=Hb(h,c.type,d),d.V=a.la),Mb(h,d.gb))):I(`missing uniform ${h} for modifier ${d}`)})}
function Ob(a){function b(c,d,h){c&&Mb(c,Hb(c,d,h))}for(let c in a.s.N){let d=a.O.evaluateAndVal(a.s.N[c].A),h=a.s.N[c].type;if(!P(Pb(d),h)){ua(`Type of ${c} changed (${zb(Pb(d))} is no subtype of ${zb(h)}); forcing rebuild.`);pb(a,!0);a.i.use(w);Ob(a);return}a.i.uniform[c]&&b(a.i.uniform[c],h,d)}[["rnd_",()=>[Math.random()]],["_lowerleft",()=>{let c=Ia(a.O);return[c.x,c.y]}],["_lowerright",()=>{let c=Ka(a.O);return[c.x,c.y]}]].map(c=>a.i.uniform[c[0]]&&a.i.uniform[c[0]](c[1]()))}
function Qb(a,b){for(let d in a.s.ta){w.activeTexture(w.TEXTURE0+b);var c=a.s.ta[d];let h=c.name;c=Rb(c);c.reloadIfRequired();c.bindTexture();[[`_sampler${h}`,[b]],[`_ratio${h}`,[c.ba/c.X]],[`_cropfact${h}`,[c.ba/c.ma,c.X/c.ca]]].map(m=>a.i.uniform[m[0]]&&a.i.uniform[m[0]](m[1]));b++}}function Sb(a){for(let b in a.s.cb)if(a.O.getMyfunction(b).generation>a.s.cb[b])return ua(`${b} is outdated; forcing rebuild.`),!1;return!0}
function Tb(a,b){Ob(a);Cb(a);let c=0;null!=b&&(a.i.uniform.hasOwnProperty("screenSize")&&a.i.uniform.screenSize([b.s,b.i]),a.i.uniform.hasOwnProperty("oldColorTex")&&(w.activeTexture(w.TEXTURE0+c),w.bindTexture(w.TEXTURE_2D,b.$),a.i.uniform.oldColorTex([c]),c++),a.i.uniform.hasOwnProperty("oldDepthTex")&&(w.activeTexture(w.TEXTURE0+c),w.bindTexture(w.TEXTURE_2D,b.da),a.i.uniform.oldDepthTex([c]),c++));Qb(a,c)}
function Ub(a,b,c,d,h,m,n,p){a.L||I("3D-render of 2D expression");let r=jb!==a.i,B=a.l.type!==d.type||a.R!==hb;a.l=d;r&&!Sb(a)?pb(a,!0):B?pb(a,!1):y.projectionMatrix!==lb?(vb(a),lb=y.projectionMatrix,kb=void 0):r||4===a.l.type?vb(a):a.l.type!==ib&&xb(a);if(mb[0]!==b||mb[1]!==c)mb=[b,c],Ga(b,c),p||n?w.viewport(0,0,b,c):w.viewport(0,f.height-c,b,c);r?(a.i.use(w),jb=a.i,Tb(a,m)):kb!==y.ga&&(kb=y.ga,Cb(a));Gb(a);Nb(a,h);4!=a.l.type?w.drawArrays(w.TRIANGLE_STRIP,0,a.Y.length/3):w.drawArrays(w.TRIANGLES,
0,a.Y.length/3);(p||n)&&w.flush()}function Vb(a,b,c){hb=0;this.L=a;this.s=b;this.I=null!=c;this.R=new Set;null!=c?(db(c),c.generation=++c.canvas.generation,w.clear(w.COLOR_BUFFER_BIT),this.i=Wb(c.ma,c.ca),w.framebufferTexture2D(w.FRAMEBUFFER,w.DEPTH_ATTACHMENT,w.TEXTURE_2D,this.i,0)):(w.bindFramebuffer(w.FRAMEBUFFER,null),this.i=null)}
Vb.prototype.Wa=function(a){w.enable(w.DEPTH_TEST);w.disable(w.BLEND);a.forEach(b=>{b.visible&&(Ub(b.W,this.L,this.s,b.l,b.pa,null,null,this.I),(void 0!==b.v?b.v:b.W.v)||this.R.add(b))})};Vb.prototype.Xa=function(a){w.enable(w.BLEND);a.forEach(b=>{b.visible&&(Ub(b.W,this.L,this.s,b.l,b.pa,null,null,this.I),(void 0!==b.v?b.v:b.W.v)&&this.R.add(b))});null!==this.i&&w.deleteTexture(this.i)};
function Xb(a,b,c){var d=c?Yb:Zb;if(a==$b&&b==ac&&0<d.length)return d.pop();d=w.createTexture();w.bindTexture(w.TEXTURE_2D,d);c?w.texImage2D(w.TEXTURE_2D,0,na?w.R32F:w.RG8,a,b,0,na?w.RED:w.RG,Sa(),Pa(a*b*(na?1:2))):w.texImage2D(w.TEXTURE_2D,0,Qa(),a,b,0,w.RGBA,Sa(),Pa(4*a*b));w.texParameteri(w.TEXTURE_2D,w.TEXTURE_MIN_FILTER,w.NEAREST);w.texParameteri(w.TEXTURE_2D,w.TEXTURE_MAG_FILTER,w.NEAREST);return d}
function Wb(a,b){let c=w.createTexture();w.bindTexture(w.TEXTURE_2D,c);na?w.texImage2D(w.TEXTURE_2D,0,w.DEPTH_COMPONENT32F,a,b,0,w.DEPTH_COMPONENT,w.FLOAT,null):w.texImage2D(w.TEXTURE_2D,0,w.DEPTH_COMPONENT24,a,b,0,w.DEPTH_COMPONENT,w.UNSIGNED_INT,null);w.texParameteri(w.TEXTURE_2D,w.TEXTURE_WRAP_S,w.CLAMP_TO_EDGE);w.texParameteri(w.TEXTURE_2D,w.TEXTURE_WRAP_T,w.CLAMP_TO_EDGE);w.texParameteri(w.TEXTURE_2D,w.TEXTURE_MIN_FILTER,w.NEAREST);w.texParameteri(w.TEXTURE_2D,w.TEXTURE_MAG_FILTER,w.NEAREST);
return c}function bc(a,b){this.s=a;this.i=b;this.$=Xb(a,b,!1);this.da=Xb(a,b,!0);w.framebufferTexture2D(w.FRAMEBUFFER,w.COLOR_ATTACHMENT0,w.TEXTURE_2D,this.$,0);w.framebufferTexture2D(w.FRAMEBUFFER,w.COLOR_ATTACHMENT1,w.TEXTURE_2D,this.da,0);w.clearBufferfv(w.COLOR,0,[0,0,0,0]);w.clearBufferfv(w.COLOR,1,[1,0,0,0]);w.drawBuffers([w.COLOR_ATTACHMENT0,w.COLOR_ATTACHMENT1])}var $b=0,ac=0,Zb=[],Yb=[];
function cc(a,b){if(a!=$b||b!=ac)Zb.forEach(c=>w.deleteTexture(c)),Zb=[],Yb.forEach(c=>w.deleteTexture(c)),Yb=[],$b=a,ac=b}
function dc(a,b,c,d){1<=d||(I("invalid layerCount should be >= 1 got:",d),d=1);cc(a,b);d=Math.floor(d);hb=1==d?1:2;this.Ca=a;this.la=b;this.I=c;this.R=new Set;this.Ja=w.createFramebuffer();this.Z=w.createFramebuffer();w.bindFramebuffer(w.FRAMEBUFFER,this.Z);w.disable(w.BLEND);this.Pa=Wb(a,b);w.framebufferTexture2D(w.FRAMEBUFFER,w.DEPTH_ATTACHMENT,w.TEXTURE_2D,this.Pa,0);w.enable(w.DEPTH_TEST);w.depthMask(!0);w.depthFunc(w.LEQUAL);w.clear(w.DEPTH_BUFFER_BIT);this.i=[];for(c=0;c<d;c++)this.i.push(new bc(a,
b));1<d?(w.bindFramebuffer(w.FRAMEBUFFER,this.Ja),this.L=[new bc(a,b),new bc(a,b)],w.framebufferTexture2D(w.FRAMEBUFFER,w.COLOR_ATTACHMENT0,w.TEXTURE_2D,this.L[0].$,0),w.framebufferTexture2D(w.FRAMEBUFFER,w.COLOR_ATTACHMENT1,w.TEXTURE_2D,this.L[0].da,0),w.framebufferTexture2D(w.FRAMEBUFFER,w.COLOR_ATTACHMENT2,w.TEXTURE_2D,this.L[1].$,0),w.framebufferTexture2D(w.FRAMEBUFFER,w.COLOR_ATTACHMENT3,w.TEXTURE_2D,this.L[1].da,0),w.bindFramebuffer(w.FRAMEBUFFER,this.Z)):this.L=[];this.s=new bc(a,b)}
function ec(a,b){const c=a.s;a.s=b;w.framebufferTexture2D(w.FRAMEBUFFER,w.COLOR_ATTACHMENT0,w.TEXTURE_2D,b.$,0);w.framebufferTexture2D(w.FRAMEBUFFER,w.COLOR_ATTACHMENT1,w.TEXTURE_2D,b.da,0);a=new bb(e.copytexture_v,e["fragCopyLayer"+(na?"":"2I8")]);a.use(w);b=w.getAttribLocation(a.handle,"aPos");w.enableVertexAttribArray(b);const d=w.getAttribLocation(a.handle,"aTexCoord");w.enableVertexAttribArray(d);const h=new Float32Array([-1,-1,0,1,-1,0,-1,1,0,1,1,0]),m=new Float32Array([0,0,1,0,0,1,1,1]),n=
h.byteLength;w.bufferData(w.ARRAY_BUFFER,n+m.byteLength,w.STATIC_DRAW);w.bufferSubData(w.ARRAY_BUFFER,0,h);w.vertexAttribPointer(b,3,w.FLOAT,!1,0,0);w.bufferSubData(w.ARRAY_BUFFER,n,m);w.vertexAttribPointer(d,2,w.FLOAT,!1,0,n);w.activeTexture(w.TEXTURE0);w.bindTexture(w.TEXTURE_2D,c.$);w.activeTexture(w.TEXTURE1);w.bindTexture(w.TEXTURE_2D,c.da);a.uniform.srcColor([0]);a.uniform.srcDepth([1]);w.drawArrays(w.TRIANGLE_STRIP,0,4);w.flush();return c}
function fc(a,b,c){const d=a.L[b];a.L[b]=c;w.framebufferTexture2D(w.FRAMEBUFFER,w.COLOR_ATTACHMENT0+2*b,w.TEXTURE_2D,c.$,0);w.framebufferTexture2D(w.FRAMEBUFFER,w.COLOR_ATTACHMENT1+2*b,w.TEXTURE_2D,c.da,0);return d}dc.prototype.Wa=function(a){a.forEach(b=>{b.visible&&(Ub(b.W,this.Ca,this.la,b.l,b.pa,null,this.Z,null!=this.I),(void 0!==b.v?b.v:b.W.v)||this.R.add(b))});w.depthMask(!1);this.i[0]=ec(this,this.i[0])};
dc.prototype.Xa=function(a){const b=this.i.length;1==b?a.forEach(c=>{c.visible&&((void 0!==c.v?c.v:c.W.v)&&this.R.add(c),jb=void 0,Ub(c.W,this.Ca,this.la,c.l,c.pa,this.i[0],this.Z,null!=this.I),w.disable(w.CULL_FACE),this.i[0]=ec(this,this.i[0]))}):a.forEach(c=>{if(c.visible){w.bindFramebuffer(w.FRAMEBUFFER,this.Z);w.enable(w.DEPTH_TEST);w.framebufferTexture2D(w.FRAMEBUFFER,w.COLOR_ATTACHMENT0,w.TEXTURE_2D,this.s.$,0);w.framebufferTexture2D(w.FRAMEBUFFER,w.COLOR_ATTACHMENT1,w.TEXTURE_2D,this.s.da,
0);w.clearBufferfv(w.COLOR,0,[0,0,0,0]);w.clearBufferfv(w.COLOR,1,[1,0,0,0]);jb=void 0;Ub(c.W,this.Ca,this.la,c.l,c.pa,null,this.Z,null!=this.I);w.bindFramebuffer(w.FRAMEBUFFER,this.Ja);w.disable(w.DEPTH_TEST);w.disable(w.CULL_FACE);w.drawBuffers([w.COLOR_ATTACHMENT0,w.COLOR_ATTACHMENT1,w.COLOR_ATTACHMENT2,w.COLOR_ATTACHMENT3]);for(let d=0;d<b-1;d++)gc(this.i[d],this.s,!1),this.i[d]=fc(this,0,this.i[d]),this.s=fc(this,1,this.s);w.drawBuffers([w.COLOR_ATTACHMENT0,w.COLOR_ATTACHMENT1]);gc(this.i[b-
1],this.s,!0);this.i[b-1]=fc(this,0,this.i[b-1]);(void 0!==c.v?c.v:c.W.v)&&this.R.add(c)}});null!=this.I?(db(this.I),this.I.generation=++this.I.canvas.generation,w.clear(w.COLOR_BUFFER_BIT)):w.bindFramebuffer(w.FRAMEBUFFER,null);w.depthMask(!0);w.enable(w.BLEND);for(a=b-1;0<=a;a--)hc(this.i[a]),Zb.push(this.i[a].$),Yb.push(this.i[a].da);this.s!==this.i[0]&&(Zb.push(this.s.$),Yb.push(this.s.da));this.L.forEach(c=>{Zb.push(c.$);Yb.push(c.da)});w.deleteTexture(this.Pa)};
function gc(a,b,c){c=new bb(e.copytexture_v,e[(c?"fragMergeLayers":"fragSortLayers")+(na?"":"2I8")]);c.use(w);const d=w.getAttribLocation(c.handle,"aPos");w.enableVertexAttribArray(d);const h=w.getAttribLocation(c.handle,"aTexCoord");w.enableVertexAttribArray(h);const m=new Float32Array([-1,-1,0,1,-1,0,-1,1,0,1,1,0]),n=new Float32Array([0,0,1,0,0,1,1,1]),p=m.byteLength;w.bufferData(w.ARRAY_BUFFER,p+n.byteLength,w.STATIC_DRAW);w.bufferSubData(w.ARRAY_BUFFER,0,m);w.vertexAttribPointer(d,3,w.FLOAT,!1,
0,0);w.bufferSubData(w.ARRAY_BUFFER,p,n);w.vertexAttribPointer(h,2,w.FLOAT,!1,0,p);w.activeTexture(w.TEXTURE0);w.bindTexture(w.TEXTURE_2D,a.$);w.activeTexture(w.TEXTURE1);w.bindTexture(w.TEXTURE_2D,a.da);c.uniform.src1Color([0]);c.uniform.src1Depth([1]);w.activeTexture(w.TEXTURE2);w.bindTexture(w.TEXTURE_2D,b.$);w.activeTexture(w.TEXTURE3);w.bindTexture(w.TEXTURE_2D,b.da);c.uniform.src2Color([2]);c.uniform.src2Depth([3]);w.drawArrays(w.TRIANGLE_STRIP,0,4);w.flush()}
function hc(a){let b=new bb(e.copytexture_v,e.copytexture_f);b.use(w);const c=w.getAttribLocation(b.handle,"aPos");w.enableVertexAttribArray(c);const d=w.getAttribLocation(b.handle,"aTexCoord");w.enableVertexAttribArray(d);const h=new Float32Array([-1,-1,0,1,-1,0,-1,1,0,1,1,0]),m=new Float32Array([0,0,1,0,0,1,1,1]),n=h.byteLength;w.bufferData(w.ARRAY_BUFFER,n+m.byteLength,w.STATIC_DRAW);w.bufferSubData(w.ARRAY_BUFFER,0,h);w.vertexAttribPointer(c,3,w.FLOAT,!1,0,0);w.bufferSubData(w.ARRAY_BUFFER,n,
m);w.vertexAttribPointer(d,2,w.FLOAT,!1,0,n);w.activeTexture(w.TEXTURE0);w.bindTexture(w.TEXTURE_2D,a.$);b.uniform.sampler([0]);w.drawArrays(w.TRIANGLE_STRIP,0,4);w.flush()};function Eb(a,b){let c=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]];for(let d=0;4>d;d++)for(let h=0;4>h;h++)for(let m=0;4>m;m++)c[d][h]+=a[d][m]*b[m][h];return c}function Fb(a,b){let c=[0,0,0,0];for(let d=0;4>d;d++)for(let h=0;4>h;h++)c[d]+=a[d][h]*b[h];return c}function Db(a){let b=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]];for(let c=0;4>c;c++)for(let d=0;4>d;d++)b[c][d]=a[d][c];return b}function ic(a,b){return[a[0]+b[0],a[1]+b[1],a[2]+b[2]]}function jc(a,b){return[a[0]-b[0],a[1]-b[1],a[2]-b[2]]}
function kc(a,b){return[a*b[0],a*b[1],a*b[2]]}function fb(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]}function lc(a,b,c){const d=console.log;try{console.log=function(){},c=b.evaluate(a)}catch(h){}finally{console.log=d}return c}function mc(a,b,c,d){this.id=nc++;this.W=a;this.l=b;this.pa=c;this.qb=d;this.visible=!0}var nc=0;function F(...a){console.error(...a)}function I(...a){console.warn(...a)}function Ya(...a){console.info(...a)}function ua(...a){console.debug(...a)}
function wb(){let a=y.G.zoom,b=y.G.kb,c=y.G.x1,d=y.G.lb,h=y.G.y1,m=y.G.Qa;return[.5*(b*(1+a)+c*(1-a)),.5*(d*(1+a)+h*(1-a)),.5*(c*(1+a)+b*(1-a)),.5*(h*(1+a)+d*(1-a)),a*(y.G.mb-m)+m,m]}
function y(a){function b(g){var l=La(a),k=Ka(a);let q=O(g,"x0",l.x),t=O(g,"x1",k.x);k=O(g,"y0",k.y);l=O(g,"y1",l.y);[q,k]=U(g,"p0",[q,k]);[t,l]=U(g,"p1",[t,l]);let v=O(g,"z1",0),z=O(g,"z0",v-2*Math.abs(t-q));g=O(g,"zoom",1);y.G={kb:q,x1:t,lb:k,y1:l,mb:z,Qa:v,zoom:g,Ea:[0,0,0,0],na:[0,0,0,0]};d()}function c(){y.ga=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]];y.ka=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]];y.G.na=y.G.Ea;let [,,,,g,l]=wb();y.G.Oa=[0,0,l-g,1]}function d(){let [g,l,k,q,t,v]=wb();y.projectionMatrix=
[[2/(k-g),0,0,-2*g/(k-g)-1],[0,2/(q-l),0,-2*l/(q-l)-1],[0,0,1/(v-t),-t/(v-t)-1],[0,0,-1/t,1]];y.G.Ea=[(g+k)/2,(l+q)/2,t,1];y.G.Oa=Fb(y.ka,[0,0,v-t,1]);y.G.na=Fb(y.ka,y.G.Ea)}function h(g,l,k,q,t,v,z){g=m(g,v,new Map,new Map,!1);var E=new Map;g.L&&I("2D-render of 3D expression");w.disable(w.DEPTH_TEST);nb();hb=0;g.l=v;Sb(g)?vb(g):pb(g,!0);Ga(q,t);z?w.viewport(0,0,q,t):w.viewport(0,f.height-t,q,t);g.i.use(w);jb=g.i;Tb(g,null);z?(z.bindFramebuffer(),z.generation=++z.canvas.generation):w.bindFramebuffer(w.FRAMEBUFFER,
null);q=t/q;Bb(g,l,k,{x:l.x+-(k.y-l.y)*q,y:l.y+(k.x-l.x)*q});Gb(g);Nb(g,E);4!=g.l.type?w.drawArrays(w.TRIANGLE_STRIP,0,g.Y.length/3):w.drawArrays(w.TRIANGLES,0,g.Y.length/3);w.flush();w.bindFramebuffer(w.FRAMEBUFFER,null);z&&(z.generation=Math.max(z.generation,z.canvas.generation+1))}function m(g,l,k,q,t){const v=new Map,z=new Map;k.forEach((A,D)=>{A=Aa(A);v.set(D,{type:A,sa:!0,ua:!1});z.set(D,{type:A,sa:!0,ua:!1})});q.forEach((A,D)=>{v.set(D,{type:A.Ga,sa:!1,ua:!1});z.set(D,{type:A.Ga,sa:!1,ua:!1})});
"undefined"==typeof g.Va&&(g.Va=[]);let E;k=!1;for(const A of g.Va){E=A;q=E.V;if(q.size!=v.size)continue;let D=!1,N=!0;for(const J of z.keys()){var G=v.get(J);if(q.has(J)){let Q=q.get(J);if(Q.sa!=G.sa){N=!1;break}G=Ba(G.type,Q.type);if(!1===G){N=!1;break}else oc(G,Q.type)||(D=!0,ua(`changed type of modifier ${J} to ${zb(G)}`));z.get(J).type=G}else{N=!1;break}}if(N){D&&qb(E,z);k=!0;break}}k||(ua("create new Renderer for modifiers: ",v),E=new ob(a,g,l,v,t),g.Va.push(E),v.forEach((A,D)=>{A.ua||Ya(`modifier ${D} is never used`)}));
return E}function n(g){return{ctype:"number",value:{real:g,imag:0}}}function p(g){return"list"===g.ctype?g.value:"function"===g.ctype&&"genList"===g.oper?g.args:[g]}function r(g,l){if("variable"===g.ctype){var k=g.name;if(l.has(k))return l.get(k)}else{if("field"===g.ctype)return k=Object.assign({},g),k.obj=r(g.obj,l),k;if("userdata"===g.ctype)return k=Object.assign({},g),k.key=r(g.key,l),k.obj=r(g.obj,l),k;if(g.hasOwnProperty("args")){if("function"===g.ctype&&["repeat$2","forall$2","apply$2","sum$2",
"product$2"].includes(g.oper))k=new Map(l),k.delete("#"),k=[r(g.args[0],l),r(g.args[1],k)];else if("function"===g.ctype&&["repeat$3","forall$3","apply$3","sum$3","product$3"].includes(g.oper))k=new Map(l),k.delete(g.args[1].name),k=[r(g.args[0],l),g.args[1],r(g.args[2],k)];else if("function"===g.ctype&&"cgllazy$2"===g.oper){k=p(g.args[0]);let t=new Map(l);k.forEach(v=>{t.delete(v.name)});k=[r(g.args[0],l),r(g.args[1],t)]}else if("="===g.oper&&l.has(g.args[0].name)){var q=l.get(g.args[0].name);q.name&&
q.name.includes("_")?k=g.args.map(t=>r(t,l)):F(`assignemnt to cglLazy parameter "${g.args[0].name}" is not supported`)}else if(":="===g.oper){k=g.args[0];q=g.args[1];let t=new Map(l);(void 0===k.args?[]:k.args).forEach(v=>{t.delete(v.name)});k=[k,r(q,t)]}else k="function"===g.ctype&&"regional"===za(g.oper)?g.args.map(t=>{let v=Object.assign({},t);v.name=`${Ic}_${t.name}`;l.set(t.name,v);return v}):g.args.map(t=>r(t,l));q=Object.assign({},g);q.args=k;if(void 0!==g.modifs){let t={};Object.entries(g.modifs).forEach(([v,
z])=>{t[v]=r(z,l)});q.modifs=t}return q}}return g}function B(g,l,k,q){"list"===g.ctype?(g=g.value,g=g.map(t=>{if("list"!==t.ctype||2!=t.value.length)return F("unexpected entry in modifier list expected [key,value] got: ",t),[void 0,void 0];let v=t.value[0];if("string"!==v.ctype)F("unexpected key for modifier list expected string got: ",v);else return v=v.value,[v,t.value[1]]})):"JSON"===g.ctype?g=Object.entries(g.value):(F(`unexpected value for '${l}' expected list or dict got: `,g),g=[]);g.forEach(([t,
v])=>{q(k,t,v)});return k}function u(g){function l(q,t,v){pc.has(t)&&I("modifier is shadowed by built-in: "+t);q.set(t,v)}let k=new Map;g.hasOwnProperty("plotModifiers")&&(k=B(a.evaluate(g.plotModifiers),"plotModifiers",k,l));Object.entries(g).forEach(([q,t])=>{2>q.length||!q.startsWith("U")||l(k,q.substring(1),a.evaluateAndVal(t))});return k}function C(g,l,k){function q(v,z,E){if(k.has(z))I("vertex modifer is shadowed by uniform modifier: "+z);else if(pc.has(z)&&I("modifer is shadowed by built-in: "+
z),E=qc(E,[]),E.length!=l)F(`vertex modifier should be list with one element for each vertex: ${z}`),F(`expected: ${l} got: ${E.length}`);else{var G=E.map(Aa).reduce(Ba);G=rc(G);v.set(z,{values:E,Ga:G})}}let t=new Map;g.hasOwnProperty("vModifiers")&&(t=B(a.evaluate(g.vModifiers),"vModifiers",t,q));Object.entries(g).forEach(([v,z])=>{2>v.length||!v.startsWith("V")||q(t,v.substring(1),a.evaluateAndVal(z))});return t}function L(g){let l=new Set;g.hasOwnProperty("tags")&&qc(a.evaluateAndVal(g.tags)).forEach(k=>
{l.add(sc.toString(k))});return l}function K(g,l){(void 0!==l.v?l.v:l.W.v)?y.S.v.set(g,l):y.S.ha.set(g,l)}function O(g,l,k){return g.hasOwnProperty(l)?tc(a.evaluateAndVal(g[l]),k):k}function U(g,l,k){if(!g.hasOwnProperty(l))return k;g=a.evaluateAndVal(g[l]);g=qc(g);if(null===g)return k;g=g.map(tc);return 2>g.length?(I(`not enough elements for point ${l} expected 2 got ${g.length}`),0<g.length?[g[0],g[0]]:k):2<g.length?(I("point has to many components, truncating"),g.slice(0,2)):g}function da(g,l){let k=
g.xa;void 0===k?delete g.v:(k=lc(k,l,k),"cglLazy"===k.ctype?(0<k.T.length&&I("opacity expression should not have any parameters"),k=k.A):k=g.xa,k=r(k,g.pa),l=lc(k,l,x),"boolean"!==l.ctype?delete g.v:g.v=l.value)}function Ja(g){g=qc(g);if(g instanceof Array&&0!=g.length){var l=g[0].ctype;"list"===l&&(g=g.flatMap(k=>{k=qc(k);if(!Array.isArray(k)||3!=k.length){let q="vertices";Array.isArray(k)&&0<k.length&&"list"==k[0].ctype&&(q="triangles");I(`${q} should be lists of length 3`);return[]}return k}),
l=g[0].ctype,"list"===l&&(g=g.flatMap(k=>{k=qc(k);return Array.isArray(k)&&3==k.length?k:(I("vertices should be lists of length 3"),[])}),l=g[0].ctype));if("number"===l)return g=g.map(tc),0!==g.length%3?F("the number of coordinates should be divisible by 3"):0!==g.length%9&&F("the number of vertices should be divisible by 3"),g;F(`unexpected type for vertex-coordinate: ${l}`)}}function Ea(g,l,k,q,t,v,z,E){qa();E=O(E,"layers",2>y.S.ha.size?0:2);nb();w.clear(w.DEPTH_BUFFER_BIT|w.COLOR_BUFFER_BIT);y.S.Ra.Ua.forEach(G=>
{X(G,[],{})});E=0==E?new Vb(t,v,z):new dc(t,v,z,E);y.S.ha.forEach(G=>{if(4==G.l.type){var A=G.l.Y,D=y.G.Oa,N=Array.from({length:A.length/9},(J,Q)=>Q);N.sort((J,Q)=>{J=fb([(A[9*J]+A[9*J+3]+A[9*J+6])/3,(A[9*J+1]+A[9*J+4]+A[9*J+7])/3,(A[9*J+2]+A[9*J+5]+A[9*J+8])/3],D);Q=fb([(A[9*Q]+A[9*Q+3]+A[9*Q+6])/3,(A[9*Q+1]+A[9*Q+4]+A[9*Q+7])/3,(A[9*Q+2]+A[9*Q+5]+A[9*Q+8])/3],D);return(J<Q)-(Q<J)});G.l.Y=A.map((J,Q)=>A[9*N[Math.floor(Q/9)]+Q%9]);G.l.Ia.forEach(J=>{J.values=J.values.map((Q,Fa)=>J.values[3*N[Math.floor(Fa/
3)]+Fa%3]);J.ra=void 0})}});E.Wa(y.S.v);E.Xa(y.S.ha);E=E.R;0<E.size&&(ua(`changing opacity of ${E.size} objects`),E.forEach(G=>{(void 0!==G.v?G.v:G.W.v)?y.S.ha.delete(G.id):y.S.v.delete(G.id);K(G.id,G)}));null!=z?(w.flush(),w.bindFramebuffer(w.FRAMEBUFFER,null),z.it^=1):(z=a.instance.canvas.getContext("2d"),z.save(),z.setTransform(1,0,0,1,0,0),z.drawImage(f,0,0,t,v,g,l,k,q),z.restore())}function ra(g){g=a.evaluateAndVal(g);let l;if("number"===g.ctype){g=uc(g,-1);if(0>g)return[];l=[g]}else"list"===
g.ctype&&(l=g.value.map(k=>uc(k,-1)).filter(k=>0<=k));return l.map(k=>{let q=y.S.v.get(k),t=!0;return void 0===q&&(q=y.S.ha.get(k),t=!1,void 0===q)?(I(`could not find object with id ${k}`),null):[q,k,t]}).filter(k=>null!==k)}function X(g,l){g=a.evaluate(g);if("cglLazy"!==g.ctype)return I("this first argument of cglEval has to be a cglLazy expression"),x;if(g.T.length!=l.length)return I(`wrong number of arguments for lazy expression expected ${g.T.length} got ${l.length}`),x;let k=new Map;g.ea.forEach(([q,
t])=>{k.set(q,t)});for(let q=0;q<g.T.length;q++)k.set(g.T[q].name,l[q]);Ic++;l=r(g.A,k);return a.evaluate(l)}function T(g){Kc.has(g)||(Kc.add(g),a.defineFunction("cglEval",g+1,(l,k)=>X(l[0],l.slice(1),k)))}function ea(g){if("variable"===g.ctype)return g.name;if("string"===g.ctype)return g.value;F("unexpected value for name:",g)}function Lc(g){return p(g).map(l=>"userdata"===l.ctype?{name:ea(l.obj),o:p(l.key)}:{name:ea(l),o:null})}function Za(g,l,k){if(k&&(k=lc(g,a,x),"cglLazy"===k.ctype)){if(k.T.length===
l.length)return k;F("lazy expression has wrong number of arguments: "+`got: ${k.T.length} expected: ${l.length} (${l.map(q=>q.name).join(",")})`)}return{ctype:"cglLazy",T:l,A:va(g),ea:[]}}x=a.nada;a.defineFunction("compile",1,(g,l)=>{g=g[0];let k=new sb(a);l=u(l);l=tb(k,g,l,!1);ua(l);return{ctype:"string",value:l}});a.defineFunction("use8bittextures",0,()=>{oa=!0;na=ma=!1;Ya("Switching to 8-bit textures mode.");return a.nada});let Ic=0;a.defineFunction("forcerecompile",0,()=>{pa++;return x});a.defineFunction("colorplot",
1,g=>{qa();let l=a.instance.canvas.width,k=a.instance.canvas.height;h(g[0],Ia(a),Ka(a),l,k,{type:0},null);g=a.instance.canvas.getContext("2d");g.save();g.setTransform(1,0,0,1,0,0);g.drawImage(f,0,0,l,k,0,0,l,k);g.restore();return x});a.defineFunction("colorplot",3,g=>{qa();var l=g[0],k=a.extractPoint(a.evaluateAndVal(g[1])),q=a.extractPoint(a.evaluateAndVal(g[2])),t={x:Math.min(k.x,q.x),y:Math.min(k.y,q.y)},v={x:Math.max(k.x,q.x),y:Math.min(k.y,q.y)},z=Math.min(k.x,q.x),E=Math.max(k.y,q.y);g=a.instance.canvas.width;
let G=a.instance.canvas.height,A=La(a),D=Ka(a),N=Math.abs((k.x-q.x)/(D.x-A.x));k=Math.abs((k.y-q.y)/(D.y-A.y));h(l,t,v,g*N,G*k,{type:0},null);l=a.instance.canvas.getContext("2d");a.getInitialMatrix();z=g*(z-A.x)/(D.x-A.x);E=G*(E-A.y)/(D.y-A.y);l.save();l.setTransform(1,0,0,1,0,0);l.drawImage(f,0,0,g*N,G*k,z,E,g*N,G*k);l.restore();return x});a.defineFunction("colorplot",4,g=>{qa();var l=a.extractPoint(a.evaluateAndVal(g[0])),k=a.extractPoint(a.evaluateAndVal(g[1])),q=a.evaluateAndVal(g[2]);g=g[3];
if(!l.ok||!k.ok||"string"!==q.ctype)return x;q=a.getImage(q.value,!0);let t=Wa(q,a,!1);h(g,l,k,q.width,q.height,{type:0},t);return x});a.defineFunction("colorplot",2,g=>{qa();var l=Ia(a),k=Ka(a),q=a.evaluateAndVal(g[0]);g=g[1];if("string"!==q.ctype)return x;q=a.getImage(q.value,!0);let t=Wa(q,a,!1);h(g,l,k,q.width,q.height,{type:0},t);return x});a.defineFunction("colorplot3d",1,(g,l)=>{qa();var k=g[0];g=u(l);k=m(k,{type:0},g,new Map,!0);g=new mc(k,{type:0},g,L(l));l.hasOwnProperty("opaqueIf")&&(g.xa=
lc(l.opaqueIf,a,l.opaqueIf),da(g,a));K(g.id,g);return n(g.id)});a.defineFunction("colorplot3d",2,(g,l)=>{qa();var k=g[0],q=u(l),t=Ja(a.evaluateAndVal(g[1]));if(void 0===t)return I("invalid vertex data",g[1]),x;g=t.length/3;if(3>g)return I("not enough vertices for triangle"),x;g=C(l,g,q);t=gb(t,g);k=m(k,t,q,g,!0);q=new mc(k,t,q,L(l));l.hasOwnProperty("opaqueIf")&&(q.xa=lc(l.opaqueIf,a,l.opaqueIf),da(q,a));K(q.id,q);return n(q.id)});a.defineFunction("colorplot3d",3,(g,l)=>{qa();var k=g[0],q=u(l),t=
vc(a.evaluateAndVal(g[1]));g=a.evaluateAndVal(g[2]).value.real;t={type:2,oa:t,Ba:g};k=m(k,t,q,new Map,!0);q=new mc(k,t,q,L(l));l.hasOwnProperty("opaqueIf")&&(q.xa=lc(l.opaqueIf,a,l.opaqueIf),da(q,a));K(q.id,q);return n(q.id)});a.defineFunction("colorplot3d",4,(g,l)=>{qa();var k=g[0],q=u(l),t=vc(a.evaluateAndVal(g[1])),v=vc(a.evaluateAndVal(g[2]));g=a.evaluateAndVal(g[3]).value.real;var z=0;l.hasOwnProperty("overhang")&&(z=a.evaluateAndVal(l.overhang).value.real);t=eb(kc(.5,ic(t,v)),kc(.5,jc(v,t)),
g,z);k=m(k,t,q,new Map,!0);q=new mc(k,t,q,L(l));l.hasOwnProperty("opaqueIf")&&(q.xa=lc(l.opaqueIf,a,l.opaqueIf),da(q,a));K(q.id,q);return n(q.id)});a.defineFunction("colorplot3d",5,(g,l)=>{qa();var k=g[0],q=u(l),t=vc(a.evaluateAndVal(g[1])),v=vc(a.evaluateAndVal(g[2])),z=vc(a.evaluateAndVal(g[3]));g=vc(a.evaluateAndVal(g[4]));t={type:5,oa:t,hb:v,ib:z,jb:g};k=m(k,t,q,new Map,!0);q=new mc(k,t,q,L(l));l.hasOwnProperty("opaqueIf")&&(q.xa=lc(l.opaqueIf,a,l.opaqueIf),da(q,a));K(q.id,q);return n(q.id)});
c();b({});a.defineFunction("cglCoordSystem",0,(g,l)=>{b(l)});a.defineFunction("cglViewPos",0,()=>({ctype:"list",value:y.G.na.slice(0,3).map(n)}));a.defineFunction("cglViewRect",0,()=>{let [g,l,k,q]=wb();return{ctype:"list",value:[g,l,k,q].map(n)}});a.defineFunction("cglAxes",0,()=>{let g=[Fb(y.ga,[1,0,0,1]),Fb(y.ga,[0,1,0,1]),Fb(y.ga,[0,0,1,1]),Fb(y.ga,[0,0,0,1])].map(l=>[l[0]/l[3],l[1]/l[3],l[2]/l[3]]);return{ctype:"list",value:[jc(g[0],g[3]),jc(g[1],g[3]),jc(g[2],g[3])].map(l=>({ctype:"list",value:l.map(n)}))}});
a.defineFunction("rotate3d",2,g=>{var l=a.evaluateAndVal(g[0]).value.real;g=a.evaluateAndVal(g[1]).value.real;let k;"undefined"!==typeof y.ga?k=y.ga:k=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]];l=Eb([[Math.cos(l),0,-Math.sin(l),0],[0,1,0,0],[Math.sin(l),0,Math.cos(l),0],[0,0,0,1]],[[1,0,0,0],[0,Math.cos(g),-Math.sin(g),0],[0,Math.sin(g),Math.cos(g),0],[0,0,0,1]]);y.ga=Eb(l,k);y.ka=Eb(y.ka,Db(l));if("undefined"!==typeof y.G){y.G.na=Fb(y.ka,y.G.Ea);let [,,,,q,t]=wb();y.G.Oa=Fb(y.ka,[0,0,t-q,1])}return x});
a.defineFunction("zoom3d",1,g=>{g=a.evaluateAndVal(g[0]).value.real;y.G.zoom=g;d()});a.defineFunction("cglResetRotation",0,()=>{c();return x});a.defineFunction("cglReset3d",0,()=>{y.S={v:new Map,ha:new Map,Ra:{Ua:[]}};return x});a.defineFunction("cglEvalOnRender",1,g=>{T(0);y.S.Ra.Ua.push(Za(g[0],[],!0));return x});a.defineFunction("cglRender3d",0,(g,l)=>{g=a.instance.canvas.width;let k=a.instance.canvas.height;Ea(0,0,g,k,g,k,null,l);return x});a.defineFunction("cglRender3d",2,(g,l)=>{var k=a.extractPoint(a.evaluateAndVal(g[0])),
q=a.extractPoint(a.evaluateAndVal(g[1]));g=Math.min(k.x,q.x);var t=Math.max(k.y,q.y);let v=a.instance.canvas.width,z=a.instance.canvas.height,E=La(a),G=Ka(a),A=Math.abs((k.x-q.x)/(G.x-E.x));k=Math.abs((k.y-q.y)/(G.y-E.y));Ea(v*(g-E.x)/(G.x-E.x),z*(t-E.y)/(G.y-E.y),v*A,z*k,v*A,z*k,null,l);return x});a.defineFunction("cglRender3d",1,(g,l)=>{qa();g=a.evaluateAndVal(g[0]);if("string"!==g.ctype)return x;var k=a.getImage(g.value,!0);g=Wa(k,a,!1);var q=k.width;k=k.height;Ea(0,0,q,k,q,k,g,l);return x});a.defineFunction("cglDirection",
2,g=>{let l=y.G.zoom,k=l*a.evaluateAndVal(g[0]).value.real;g=l*a.evaluateAndVal(g[1]).value.real;return{ctype:"list",value:jc(Fb(y.ka,[k,g,l*y.G.Qa,1]),y.G.na).map(n)}});a.defineFunction("cglFindObject",2,(g,l)=>{var k=y.G.zoom;let q=k*a.evaluateAndVal(g[0]).value.real;g=k*a.evaluateAndVal(g[1]).value.real;k=[q,g,k*y.G.Qa,1];let t=L(l),v=y.G.na,z=jc(Fb(y.ka,k),v),E=Infinity,G=-1;l=A=>{var D=0==t.size;for(var N of t)if(A.qb.has(N)){D=!0;break}if(D)if(2==A.l.type){var J=A.l.Ba,Q=jc(v,A.l.oa);D=fb(z,
z);N=fb(Q,z);J=N*N-D*(fb(Q,Q)-J*J);0>J||(D=(-N-Math.sqrt(J))/D,0<=D&&D<=E&&(E=D,G=A.id))}else if(3==A.l.type){var Fa=A.l.Ba;D=A.l.oa;var sa=A.l.direction;N=kc(1/Math.sqrt(fb(z,z)),z);J=jc(v,D);J=Math.sqrt(fb(J,J));Q=ic(v,kc(J,N));let Ib=kc(1/fb(sa,sa),sa);var xa=jc(Q,D),$a=jc(xa,kc(fb(xa,sa),Ib));xa=jc(N,kc(fb(N,sa),Ib));sa=fb(xa,xa);xa=fb($a,xa);$a=xa*xa-sa*(fb($a,$a)-Fa*Fa);if(!(0>$a)){var Ra=-(xa+Math.sqrt($a))/sa;Fa=J+Ra;Ra=fb(jc(ic(Q,kc(Ra,N)),D),Ib);if(-1>Ra||1<Ra)if(sa=-(xa-Math.sqrt($a))/
sa,Fa=J+sa,Ra=fb(jc(ic(Q,kc(sa,N)),D),Ib),-1>Ra||1<Ra)return;0<=Fa&&Fa<=E&&(E=Fa,G=A.id)}}};y.S.v.forEach(l);y.S.ha.forEach(l);return n(G)});a.defineFunction("cglUpdateBounds",1,g=>ra(g[0]).map(([l,k])=>{l.l={type:0};return n(k)}));a.defineFunction("cglUpdateBounds",2,(g,l)=>ra(g[0]).map(([k,q])=>{let t=Ja(a.evaluateAndVal(g[1]));if(void 0===t)return I("invalid vertex data",g[1]),x;var v=t.length/3;if(3>v)return I("not enough vertices for triangle"),x;v=C(l,v,k.pa);k.l=gb(t,v);return n(q)}));a.defineFunction("cglUpdateBounds",
3,g=>ra(g[0]).map(([l,k])=>{var q=vc(a.evaluateAndVal(g[1])),t=a.evaluateAndVal(g[2]).value.real;l.l={type:2,oa:q,Ba:t};return n(k)}));a.defineFunction("cglUpdateBounds",4,(g,l)=>ra(g[0]).map(([k,q])=>{var t=vc(a.evaluateAndVal(g[1])),v=vc(a.evaluateAndVal(g[2])),z=a.evaluateAndVal(g[3]).value.real,E=0;l.hasOwnProperty("overhang")?E=l.overhang.value.real:void 0!==k.l.La&&(E=Math.sqrt(fb(k.l.direction,k.l.direction)),E=k.l.La*E-E);k.l=eb(kc(.5,ic(t,v)),kc(.5,jc(v,t)),z,E);return n(q)}));a.defineFunction("cglUpdateBounds",
5,g=>ra(g[0]).map(([l,k])=>{var q=vc(a.evaluateAndVal(g[1])),t=vc(a.evaluateAndVal(g[2])),v=vc(a.evaluateAndVal(g[3])),z=vc(a.evaluateAndVal(g[4]));l.l={type:5,oa:q,hb:t,ib:v,jb:z};return n(k)}));a.defineFunction("cglUpdate",1,(g,l)=>ra(g[0]).map(([k,q,t])=>{let v=u(l),z;4==k.l.type?z=C(l,k.l.Y.length/3,v):z=new Map;if(0==v.size&&0==z.size)return n(q);let E=0<z.size;k.pa.forEach((G,A)=>{v.has(A)||v.set(A,G)});4==k.l.type&&k.l.Ia.forEach((G,A)=>{z.has(A)?void 0!==G.ya&&(z.get(A).ya=G.ya):z.set(A,G)});
E&&(k.l=gb(k.l.Y,z));k.W=m(k.W.bb,k.l,v,z,!0);(void 0!==k.v?k.v:k.W.v)!==t&&(t?(y.S.v.delete(q),y.S.ha.set(q,k)):(y.S.ha.delete(q),y.S.v.set(q,k)));k.pa=v;l.hasOwnProperty("opaqueIf")&&(k.xa=lc(l.opaqueIf,a,l.opaqueIf));da(k,a);return n(q)}));a.defineFunction("cglSetVisible",2,g=>{let l=a.evaluateAndVal(g[1]);if("boolean"!=l.ctype)return I("the second parameter of cglSetVisible should be a boolean"),x;l=l.value;ra(g[0]).forEach(([k])=>{k.visible=l});return x});a.defineFunction("cglDelete",1,g=>{ra(g[0]).forEach(([,
l,k])=>{k?y.S.v.delete(l):y.S.ha.delete(l)});return x});a.defineFunction("cglSpherePos",1,g=>{g=ra(g[0]);if(0===g.length)return x;let [l,k]=g[0];return 2!==l.l.type?(I(`the object with id ${k} is no sphere`),x):{ctype:"list",value:l.l.oa.map(n)}});class Mc extends Error{constructor(g){super(g);this.name=this.constructor.name;Error.captureStackTrace(this,this.constructor)}}a.defineFunction("cglDiscard",0,()=>{throw new Mc("unexpected `cglDiscard()` statement outside compiled code");});a.defineFunction("cglEvalOrDiscard",
1,(g,l)=>{l=l["default"];void 0===l&&(l=x);try{let k=a.evaluate(g[0]);"cglLazy"===k.ctype&&(0<k.T.length&&I("cglTryEval expression should not take parameters"),k=k.A);return a.evaluateAndVal(k)}catch(k){if(k instanceof Mc)return l;throw k;}});var Kc=new Set;a.defineFunction("cglLazy",2,(g,l)=>{let k=p(g[0]),q=!0;k.forEach(t=>{"variable"!==t.ctype&&(F("unexpected parameter in cglLazy expected variable got:",t),q=!1)});if(!q)return x;T(k.length);return{ctype:"cglLazy",T:k,A:va(g[1]),ea:Object.entries(l).map(([t,
v])=>[t,a.evaluate(v)])}});a.defineFunction("cglLazy",1,(g,l)=>{T(0);return{ctype:"cglLazy",T:[],A:va(g[0]),ea:Object.entries(l).map(([k,q])=>[k,a.evaluate(q)])}});a.defineFunction("cglIsLazy",1,g=>({ctype:"boolean",value:"cglLazy"===a.evaluate(g[0]).ctype}));a.defineFunction("cglWith",1,(g,l)=>{X({ctype:"cglLazy",T:[],A:va(g[0]),ea:Object.entries(l).map(([k,q])=>[k,a.evaluate(q)])},[],{})});a.defineFunction("cglInterface",4,g=>{let l=ea(g[0]),k=ea(g[1]).toLowerCase(),q=Lc(g[2]),t=Lc(g[3]);T(0);a.defineFunction(l,
q.length,(v,z)=>{let E={},G={},A=Array(v.length);for(var D=0;D<q.length;D++)E[q[D].name]=Za(v[D],[],!1),null!=q[D].o?(A[D]=Za(v[D],q[D].o,!0),T(q[D].o.length)):A[D]=v[D];let N={};for(v=0;v<t.length;v++){D=t[v].name;let J=z[D];void 0===J?(N[D]=x,G[D]=Za(x,[],!1)):null!=t[v].o?(G[D]=Za(J,[],!1),N[D]=Za(J,t[v].o,!0),T(t[v].o.length)):(N[D]=J,G[D]=Za(J,[],!1))}N.cglParamExprs={ctype:"JSON",value:E};N.cglModifExprs={ctype:"JSON",value:G};Object.entries(z).forEach(([J,Q])=>{N.hasOwnProperty(J)||(N[J]=Q)});
return a.evaluate({ctype:"function",oper:`${k}$${A.length}`,args:A,modifs:N})})});a.defineFunction("cglTryDetermineDegree",1,g=>{g=a.evaluate(g[0]);if("cglLazy"!==g.ctype)return F("expected cglLazy expression, if the first argument should be used as an expression add checked variables as second parameter"),x;g=Va(g.A,g.T.map(ea));return void 0===g.F?x:n(g.F)});a.defineFunction("cglTryDetermineDegree",2,g=>{let l=a.evaluate(g[1]);"list"===l.ctype?l=l.value.map(ea):l=[ea(l)];g=Va(g[0],l);return void 0===
g.F?x:n(g.F)});a.defineFunction("cglDebugPrint",1,g=>{console.log(g[0],a.evaluate(g[0]),a.evaluateAndVal(g[0]));return x});a.defineFunction("cglLogError",1,g=>{g=a.evaluateAndVal(g[0]);F(void 0!==g.value?g.value:"___");return x});a.defineFunction("cglLogWarning",1,g=>{g=a.evaluateAndVal(g[0]);I(void 0!==g.value?g.value:"___");return x});a.defineFunction("cglLogInfo",1,g=>{g=a.evaluateAndVal(g[0]);Ya(void 0!==g.value?g.value:"___");return x});a.defineFunction("setpixel",4,g=>{var l=sc.toString(a.evaluateAndVal(g[0])),
k=uc(a.evaluateAndVal(g[1])),q=uc(a.evaluateAndVal(g[2])),t=wc(a.evaluateAndVal(g[3]));if(!l)return x;g=a.getImage(l,!0);g=Wa(g,a,!1);if(isFinite(k)&&isFinite(q)&&l&&g&&t){g.bindTexture();l=[t[0],t[1],t[2],1];t=w;var v=t.texSubImage2D,z=w.TEXTURE_2D,E=w.RGBA,G=Sa();var A=l;if(na)A=new Float32Array(A);else if(ma){var D=new Uint16Array(A.length);for(var N=0;N<A.length;N++)D[N]=Oa(A[N]);A=D}else{D=new Uint8Array(A.length);for(N=0;N<A.length;N++)D[N]=255*A[N];A=D}v.call(t,z,0,k,q,1,1,E,G,A);g=g.canvas.img.getContext("2d");
t=g.createImageData(1,1);t.data.d=l;g.putImageData(t,k,q)}return x});a.defineFunction("colorplotxr",2,g=>{qa();let l=a.evaluate(g[0]).value.real;g=g[1];"undefined"==typeof g.W&&(g.W=new ob(a,g,{type:0},new Map,!1));g=g.W;if(0==l){w.clearColor(0,0,0,1);w.clear(w.COLOR_BUFFER_BIT|w.DEPTH_BUFFER_BIT);var k=w.getAttribLocation(g.i.handle,"aPos");w.enableVertexAttribArray(k);w.vertexAttribPointer(k,3,w.FLOAT,!1,0,0);k=w.getAttribLocation(g.i.handle,"aTexCoord");-1!=k&&(w.enableVertexAttribArray(k),w.vertexAttribPointer(k,
2,w.FLOAT,!1,0,48))}Sb(g)||pb(g,!0);g.i.use(w);Ob(g);Bb(g,{x:-1,y:-1},{x:1,y:-1},{x:-1,y:1});Qb(g,0);CindyJS._pluginRegistry.CindyXR.xrUpdateCindyGLView(w,l);w.drawArrays(w.TRIANGLE_STRIP,0,4);w.flush();return x})}y.gl=null;y.S={v:new Map,ha:new Map,Ra:{Ua:[]}};y.G={kb:0,x1:0,lb:0,y1:0,mb:0,Qa:0,zoom:1,Ea:[0,0,0,0],na:[0,0,0,0]};y.generateCanvasWrapperIfRequired=Wa;y.initGLIfRequired=qa;CindyJS.registerPlugin(1,"CindyGL",y);let R=(a,b)=>({type:"list",length:a,parameters:b}),Pb=a=>({type:"constant",value:a}),xc=a=>Pb({ctype:"number",value:{real:a,imag:0}});const H={M:1,u:2,h:3,j:4,ia:5,color:6,J:7,line:8,aa:9,image:10,P:R(2,3),K:R(3,3),fa:R(4,3),Da:a=>R(a,3),Ma:a=>R(a,4),Ta:a=>R(a,2),za:R(2,R(2,3)),wa:R(3,R(3,3)),Aa:R(4,R(4,3)),$a:a=>({type:"cglLazy",value:a})};Object.freeze(H);
function zb(a){return 1<=a&&10>=a?"bool int float complex voidt color point line coordinate2d image".split(" ")[a-1]:"list"===a.type?`${zb(a.parameters)}[${a.length}]`:"constant"===a.type?`const[${JSON.stringify(a.value.value)}]`:"cglLazy"===a.type?`cglLazy((${a.value.T.map(b=>b.name).join(",")}),...)`:JSON.stringify(a)}
let yc=a=>"list"===a.type&&yc(a.parameters)||P(a,H.h),zc=a=>"list"===a.type&&zc(a.parameters)||P(a,H.j),Ac=a=>"constant"===a.type&&P(a,H.u),Bc=a=>"constant"===a.type?Aa(a.value):a,Kb=a=>"list"===a.type?Kb(a.parameters)+1:0,Jb=a=>void 0!==a.parameters?Jb(a.parameters):a,Cc=(a,b)=>Kb(a)===Kb(b)&&(0===Kb(a)||a.length===b.length&&Cc(a.parameters,b.parameters)),Dc=a=>P(a,H.h)?H.h:P(a,H.j)?H.j:{type:"list",length:a.length,parameters:Dc(a.parameters)},Ec=a=>P(a,H.j)?H.j:{type:"list",length:a.length,parameters:Ec(a.parameters)},
rc=a=>a===H.u?H.h:"list"===a.type?{type:"list",length:a.length,parameters:rc(a.parameters)}:a,Fc=a=>"constant"===a.type&&Fc(Bc(a))||a===H.M||a===H.u||a===H.h||a===H.j||a===H.J||a===H.line||"list"===a.type&&(a.parameters===H.h||a.parameters===H.u)&&1<=a.length&&4>=a.length||"list"===a.type&&"list"===a.parameters.type&&a.parameters.parameters===H.h&&a.length===a.parameters.length&&2<=a.length&&4>=a.length,Gc=a=>-1!==[H.M,H.u,H.h,H.j].indexOf(a),oc=(a,b)=>a===b||"constant"===a.type&&"constant"===b.type&&
ya(a.value,b.value)||"list"===a.type&&"list"===b.type&&a.length===b.length&&oc(a.parameters,b.parameters)||"cglLazy"===a.type&&"cglLazy"===b.type&&wa(a.value.T,b.value.T)&&ya(a.value.A,b.value.A)&&wa(a.value.ea,b.value.ea,([c,d])=>c[0]===d[0]&&ya(c[1],d[1]));
function P(a,b){return oc(a,b)?!0:a?Gc(a)&&Gc(b)?a<=b:"constant"===b.type?!1:"constant"===a.type?P(Aa(a.value),b):b===H.aa?P(a,H.j)||P(a,H.P)||P(a,H.J):b===H.J?P(a,H.K)||P(a,H.P):b===H.line?P(a,H.K):b===H.color?P(a,H.h)||"list"===a.type&&(3===a.length||4===a.length)&&P(a.parameters,H.h):"list"===a.type&&"list"===b.type&&a.length===b.length?P(a.parameters,b.parameters):!1:!1}
function Ba(a,b){if(!a)return b;if(!b||oc(a,b))return a;"constant"===a.type&&(a=Aa(a.value));"constant"===b.type&&(b=Aa(b.value));return Gc(a)&&Gc(b)?Math.max(a,b):"list"===a.type&&"list"===b.type&&a.length===b.length&&(b=Ba(a.parameters,b.parameters))?{type:"list",length:a.length,parameters:b}:!1}function S(a){return b=>{for(let c in a){let d=a[c],h=d[0];if(b.length==h.length&&b.every((m,n)=>P(m,h[n])))return{o:h,H:d[1],D:d[2]}}return!1}}
function Hc(a){switch(a){case H.u:return S([[[H.M],H.u,V("int")]]);case H.h:return S([[[H.M],H.h,V("float")],[[H.u],H.h,V("float")]]);case H.j:return S([[[H.h],H.j,b=>`vec2(${b}, 0.)`]]);case H.color:return S([[[H.h],H.color,W("float2color")],[[H.K],H.color,b=>`vec4(${b},1.0)`],[[H.fa],H.color,Jc]]);case H.J:return S([[[H.P],H.J,b=>`vec3(${b},1.0)`],[[H.K],H.J,Jc]]);case H.line:return S([[[H.P],H.line,b=>`vec3(${b},1.0)`],[[H.K],H.line,Jc]]);case H.aa:return S([[[H.j],H.aa,Jc],[[H.P],H.aa,Jc],[[H.J],
H.aa,W("dehomogenize")]]);default:if("list"===a.type)return b=>{let c=b[0],d=Hc(a.parameters)([c.parameters]).D;return{o:b,H:a,D:(h,m,n)=>Nc(a)(Array.from(Array(a.length).keys()).map(p=>d([Oc(c,p)([h],m,n)],m,n)),m,n)}}}I(`no inclusionfunction ->${zb(a)} implemented yet; using identity...`);return b=>({o:b,H:a,D:Jc})}
function M(a){a=Bc(a);switch(a){case H.M:return"bool";case H.u:return"int";case H.h:return"float";case H.j:case H.aa:return"vec2";case H.ia:return"void";case H.color:return"vec4";case H.J:case H.line:return"vec3"}if("list"===a.type&&a.parameters===H.h)return 1==a.length?"float":`vec${a.length}`;if("list"===a.type&&a.parameters===H.u)return 1==a.length?"int":`ivec${a.length}`;if("list"===a.type&&a.parameters===H.j)return`cvec${a.length}`;if("list"===a.type&&"list"===a.parameters.type&&a.length===a.parameters.length&&
a.parameters.parameters===H.h)switch(a.length){case 2:return"mat2";case 3:return"mat3";case 4:return"mat4"}if("list"===a.type)return`l${a.length}_${M(a.parameters)}`;F(`No WebGL implementation for type ${zb(a)} found`)}
function Pc(a,b,c){switch(b){case H.M:return`${M(b)}(${a.value})`;case H.u:return`${a.value.real|0}`;case H.h:return`${M(b)}(${a.value.real})`;case H.j:return`${M(b)}(${a.value.real}, ${a.value.imag})`;case H.color:return a=a.value.real,`vec4(${a},${a},${a},1.)`;default:if("list"===b.type&&b.parameters)return Nc(b)(a.value.map(d=>Pc(d,b.parameters,c)),{},c);F(`Dont know how to paste values of Type ${zb(b)} yet.`)}};var Qc={};function Rc(a,b,c){if(!c.mark("includedfunctions",a)){for(let d in Qc[a])Rc(Qc[a][d],b,c);c.add("includedfunctions",a,()=>e[a])}}function W(a){return(b,c,d)=>{Rc(a,c,d);return V(a)(b)}};let Lb=a=>4>=a?[a]:5==a?[2,3]:Lb(a-4).concat([4]);function Sc(a){let b=Jb(a),c=Kb(a);return 1==c&&b===H.h?Lb(a.length).map((d,h)=>({type:H.Da(d),name:`a${h}`})):1==c&&b===H.u?Lb(a.length).map((d,h)=>({type:H.Ta(d),name:`a${h}`})):1<=c?Array.from(Array(a.length).keys()).map(d=>({type:a.parameters,name:`a${d}`})):[]}function Tc(a,b){if(!Fc(a)){var c=M(a);b.add("structs",c,()=>`struct ${c} { ${Sc(a).map(d=>Tc(d.type,b)||`${M(d.type)} ${d.name};`).join("")}};`)}}
function Uc(a,b,c){if(!Fc(a)){var d=a.length,h=a.parameters.length;c.add("functions",`mult${d}_${h}`,()=>`${M(H.Da(d))} mult${d}_${h}(${M(a)} a, ${M(H.Da(h))} b){`+"return "+Vc(d)(Array.from(Array(d).keys()).map(m=>Wc(h)([`a.a${m}`,"b"],b,c)),b,c)+";}")}}function Xc(a,b,c){if(!(Fc(a)&&1>=Kb(a))){var d=a.length,h=`sum${M(a)}`;c.add("functions",h,()=>`${M(a.parameters)} ${h}(${M(a)} a){`+`${M(a.parameters)} res = ${Yc(a.parameters,0)([],b,c)};
${Array.from(Array(d).keys()).map(m=>"res = "+Zc(a.parameters)(["res",Oc(a,m)(["a",m],b,c)],b,c)+";").join("\n")}
return res;
}`)}}function $c(a,b,c){let d=a.length,h=a.parameters.length;c.add("functions",`multc${d}_${h}`,()=>`${M(H.Ma(d))} multc${d}_${h}(${M(a)} a, ${M(H.Ma(h))} b){
return cvec${d}(${Array.from(Array(d).keys()).map(m=>ad(h)([`a.a${m}`,"b"],b,c))});
}
`)}function bd(a,b){2<=a&&4>=a||b.add("functions",`dot${a}`,()=>`float dot${a}(vec${a} a, vec${a} b) {
return ${Lb(a).map((c,d)=>`dot(a.a${d},b.a${d})`).join("+")}; }
`)}function cd(a,b){b.add("functions",`cdot${a}`,()=>`vec2 cdot${a}(cvec${a} a, cvec${a} b) {
return ${Array.from(Array(a).keys()).map(c=>`vec2(dot(a.a${c},vec2(b.a${c}.x,-b.a${c}.y)), dot(a.a${c},b.a${c}.yx))`).join("+\n")};
}
`)}function dd(a,b,c){let d=`add${M(a)}`;c.add("functions",d,()=>`${M(a)} ${d}(${M(a)} a, ${M(a)} b) {
return ${M(a)}(${Sc(a).map(h=>`${M(h.type)}(${Zc(h.type)([`a.${h.name}`,`b.${h.name}`],b,c)})`).join(",")});
}`)}function ed(a,b,c){let d=`sub${M(a)}`;c.add("functions",d,()=>`${M(a)} ${d}(${M(a)} a, ${M(a)} b) {
return ${M(a)}(${Sc(a).map(h=>`${M(h.type)}(${fd(h.type)([`a.${h.name}`,`b.${h.name}`],b,c)})`).join(",")});
}`)}function gd(a,b,c){let d=`scalarmult${M(a)}`;c.add("functions",d,()=>`${M(a)} ${d}(float a, ${M(a)} b) {
return ${M(a)}(${Sc(a).map(h=>`${M(h.type)}(${hd(h.type)(["a",`b.${h.name}`],b,c)})`).join(",")});
}`)}function id(a,b,c){Rc("multc",b,c);let d=`cscalarmult${M(a)}`;c.add("functions",d,()=>`${M(a)} ${d}(vec2 a, ${M(a)} b) {
return ${M(a)}(${Sc(a).map(h=>`${jd(h.type)(["a",`b.${h.name}`],b,c)}`).join(",")});
}`)}function kd(a){if(a===H.j)return W("multc");if(Fc(a))return c=>Y("*")([c[1],c[0]]);let b=Jb(a);if(P(b,H.h))return(c,d,h)=>Uc(a,d,h)||`mult${a.length}_${a.parameters.length}(${c.join(",")})`;if(b===H.j)return(c,d,h)=>$c(a,d,h)||`multc${a.length}_${a.parameters.length}(${c.join(",")})`}function Wc(a){return(b,c,d)=>bd(a,d)||`dot${2<=a&&4>=a?"":a}(${b.join(",")})`}function ad(a){return(b,c,d)=>cd(a,d)||`cdot${a}(${b.join(",")})`}
function Zc(a){return Fc(a)?Y("+"):(b,c,d)=>dd(a,c,d)||`add${M(a)}(${b.join(",")})`}function fd(a){return Fc(a)?Y("-"):(b,c,d)=>ed(a,c,d)||`sub${M(a)}(${b.join(",")})`}function ld(a){return yc(a)&&1==Kb(a)?(b,c,d)=>Wc(a.length)([b[0],Vc(a.length)(Array(a.length).fill("1."),c,d)],c,d):(b,c,d)=>Xc(a,c,d)||`sum${M(a)}(${b.join(",")})`}
function Vc(a){if(2<=a&&4>=a)return c=>`vec${a}(${c.join(",")})`;if(1==a)return c=>`float(${c.join(",")})`;let b=0;return(c,d,h)=>Tc(H.Da(a),h)||`vec${a}(${Lb(a).map(m=>`vec${m}(${Array.from(Array(m).keys()).map(()=>++b&&c[b-1]).join(",")})`).join(",")})`}
function md(a){if(2<=a&&4>=a)return c=>`ivec${a}(${c.join(",")})`;if(1==a)return c=>`int(${c.join(",")})`;let b=0;return(c,d,h)=>Tc(H.Ta(a),h)||`ivec${a}(${Lb(a).map(m=>`ivec${m}(${Array.from(Array(m).keys()).map(()=>++b&&c[b-1]).join(",")})`).join(",")})`}function Nc(a){let b=Kb(a);return Fc(a)?c=>`${M(a)}(${c.join(",")})`:1==b&&a.parameters===H.h?Vc(a.length):1==b&&a.parameters===H.u?md(a.length):(c,d,h)=>Tc(a,h)||`${M(a)}(${c.join(",")})`}
function Oc(a,b){let c=Jb(a);return 1!=Kb(a)||c!==H.h&&c!==H.u?Fc(a)?d=>`(${d[0]})[${b}]`:d=>`(${d[0]}).a${b}`:nd(a.length,b)}function Yc(a,b){return Fc(a)?()=>`${M(a)}(float(${b}))`:(c,d,h)=>`${Nc(a)}(${Sc(a).map(m=>Yc(m.type,b)(c,d,h)).join(",")})`}
function nd(a,b){return c=>{if(1==a)return c[0];if(2<=a&&4>=a)return`(${c[0]})[${b}]`;a:{var d=b;let h=Lb(a);for(let m in h)if(h[m]<=d)d-=h[m];else{d={first:m,second:d};break a}F("Accessing index out of range");d=void 0}return`(${c[0]}).a${d.first}[${d.second}]`}}function hd(a){return Fc(a)?Y("*"):(b,c,d)=>gd(a,c,d)||`scalarmult${M(a)}(${b.join(",")})`}function jd(a){return a===H.j?W("multc"):(b,c,d)=>id(a,c,d)||`cscalarmult${M(a)}(${b.join(",")})`}
function od(a,b,c){let d=`reverse${M(a)}`;c.add("functions",d,()=>`${M(a)} ${d}(${M(a)} a){`+`${M(a.parameters)} m;\n`+Array.from(Array(Math.floor(a.length/2)).keys()).map(function(h){let m=Oc(a,h)(["a",h],b,c);h=Oc(a,a.length-1-h)(["a",a.length-1-h],b,c);return`m = ${m}; ${m} = ${h}; ${h} = m;`}).join("\n")+"return a;\n }")}function pd(a){return(b,c,d)=>od(a,c,d)||`reverse${M(a)}(${b.join(",")})`}
function qd(a,b,c){let d=`max${M(a)}`;c.add("functions",d,()=>`${M(a.parameters)} ${d}(${M(a)} a){`+`${M(a.parameters)} m = ${Oc(a,a.length-1)(["a",a.length-1],b,c)};\n`+Array.from(Array(a.length-1).keys()).map(function(h){return`m = max(m,${Oc(a,h)(["a",h],b,c)});`}).join("\n")+"return m;\n }")}function rd(a){return(b,c,d)=>qd(a,c,d)||`max${M(a)}(${b.join(",")})`}
function sd(a,b,c){let d=`min${M(a)}`;c.add("functions",d,()=>`${M(a.parameters)} ${d}(${M(a)} a){`+`${M(a.parameters)} m = ${Oc(a,a.length-1)(["a",a.length-1],b,c)};\n`+Array.from(Array(a.length-1).keys()).map(function(h){return`m = min(m,${Oc(a,h)(["a",h],b,c)});`}).join("\n")+"return m;\n }")}function ud(a){return(b,c,d)=>sd(a,c,d)||`min${M(a)}(${b.join(",")})`}
function vd(a,b,c){let d=`transpose${M(a)}`,h=R(a.parameters.length,R(a.length,a.parameters.parameters));c.add("functions",d,()=>`${M(h)} ${d}(${M(a)} a){`+"return "+Nc(h)(Array.from(Array(h.length).keys()).map(m=>Nc(h.parameters)(Array.from(Array(h.parameters.length).keys()).map(n=>Oc(a.parameters,m)([Oc(a,n)(["a",n],b,c),m],b,c)),b,c)),b,c)+";}")}function wd(a){return(b,c,d)=>vd(a,c,d)||`transpose${M(a)}(${b.join(",")})`};function xd(a){function b(h,m,n){if(1<m){let p=m/2|0;b(h,p,!n);b(h+p,m-p,n);c(h,m,n)}}function c(h,m,n){if(1<m){var p;for(p=1;p<m;)p<<=1;p>>=1;for(let u=h;u<h+m-p;u++){var r=u,B=u+p;n?d.push([r,B]):d.push([B,r])}c(h,p,n);c(h+p,m-p,n)}}let d=[];b(0,a,!0);return d}
function yd(a,b,c){let d=`sort${M(a)}`;c.add("functions",d,()=>`${M(a)} ${d}(${M(a)} a){`+`${M(a.parameters)} m;\n`+xd(a.length).map(function(h){let m=Oc(a,h[0])(["a",h[0]],b,c);h=Oc(a,h[1])(["a",h[1]],b,c);return`m = min(${m},${h}); ${h} = max(${m},${h}); ${m} = m;`}).join("\n")+"return a;\n }")}function zd(a){return(b,c,d)=>yd(a,c,d)||`sort${M(a)}(${b.join(",")})`};function V(a){return b=>`${za(a)}(${b})`}function Y(a){return b=>`(${b.join(a)})`}function Ad(){return a=>`(${a.reverse().join("*")})`}let Jc=a=>a;var Z={};Z.join=S([[[H.J,H.J],H.line,V("cross")]]);Z.meet=S([[[H.line,H.line],H.J,V("cross")]]);Z.cross=S([[[H.K,H.K],H.K,V("cross")]]);Z.gauss=S([[[H.j],H.P,Jc]]);Z.complex=S([[[H.P],H.j,Jc],[[H.J],H.j,W("dehomogenize")]]);
Z["if"]=a=>{if(!a.every(b=>b))return!1;if(2===a.length)return{o:a,H:a[1],D:b=>`if(${b[0]}) {${b[1]};}`};if(3===a.length){let b=Ba(a[1],a[2]);return b?{o:[H.M,b,b],H:b,D:c=>`(${c[0]} ? ${c[1]} : ${c[2]})`}:{o:a,H:H.ia,D:c=>`if(${c[0]}) {${c[1]};} else {${c[2]};}`}}return!1};Z["="]=a=>{a=Ba(a[0],a[1]);return{o:a,H:a,D:b=>`${b[0]} = ${b[1]};`}};Z[";"]=a=>({o:a,H:a[1]!==H.ia?a[1]:a[0],D:b=>`${b[0]} ; ${b[1]};`});Z.repeat=a=>2!=a.length&&3!=a.length||!Ac(a[0])?!1:{o:a,H:a[a.length-1],D:()=>""};
Z.forall=a=>2!=a.length&&3!=a.length||"list"!==Bc(a[0]).type?!1:{o:a,H:a[a.length-1],D:()=>""};Z.apply=a=>2!=a.length&&3!=a.length||"list"!==Bc(a[0]).type?!1:{o:a,H:R(Bc(a[0]).length,a[a.length-1]),D:()=>""};
Z["++"]=a=>{if("list"!==Bc(a[0]).type)return!1;let b=a[0].parameters,c=a[0].length;for(let h=1;h<a.length;h++){if("list"!==Bc(a[h]).type)return b=!1;b=Ba(b,a[h].parameters);c+=a[h].length}let d=R(c,b);a=a.map(h=>R(h.length,b));return b?{o:a,H:d,D:(h,m,n)=>Nc(d)(h.map((p,r)=>Array.from({length:a[r].length},(B,u)=>Oc(a[r],u)([p],{},n))).flat(),{},n)}:!1};Z.sum=a=>1==a.length&&(yc(a[0])||zc(a[0]))?{o:a,H:a[0].parameters,D:ld(a[0])}:!1;Z.regional=a=>({o:a,H:H.ia,D:()=>""});
Z.sqrt=S([[[H.h],H.j,W("sqrtf")],[[H.j],H.j,W("sqrtc")]]);Z.abs=S([[[H.h],H.h,V("abs")],[[H.j],H.h,V("length")],[[H.P],H.h,V("length")],[[H.K],H.h,V("length")],[[H.fa],H.h,V("length")]]);Z.abs_infix=Z.abs;Z.dist=S([[[H.h,H.h],H.h,a=>V("abs")(Y("-")(a))],[[H.j,H.j],H.h,a=>V("length")(Y("-")(a))],[[H.P,H.P],H.h,a=>V("length")(Y("-")(a))],[[H.K,H.K],H.h,a=>V("length")(Y("-")(a))],[[H.fa,H.fa],H.h,a=>V("length")(Y("-")(a))]]);Z.dist_infix=Z.dist;Z.sin=S([[[H.h],H.h,V("sin")],[[H.j],H.j,W("sinc")]]);
Z.cos=S([[[H.h],H.h,V("cos")],[[H.j],H.j,W("cosc")]]);Z.tan=S([[[H.h],H.h,V("tan")],[[H.j],H.j,W("tanc")]]);Z.exp=S([[[H.h],H.h,V("exp")],[[H.j],H.j,W("expc")]]);Z.arctan=S([[[H.h],H.h,V("atan")],[[H.j],H.j,W("arctanc")]]);Z.arcsin=S([[[H.h],H.j,W("arcsinf")],[[H.j],H.j,W("arcsinc")]]);Z.arccos=S([[[H.h],H.j,W("arccosf")],[[H.j],H.j,W("arccosc")]]);Z.log=S([[[H.h],H.j,W("logr")],[[H.j],H.j,W("logc")]]);let Bd=[2,3,4].map(a=>R(a,H.h)).concat([2,3,4].map(a=>R(a,R(a,H.h)))),Cd=[H.u,H.h,H.j].concat(Bd);
Z.add=a=>{var b=S(Cd.map(c=>[[c,c],c,Y("+")]).concat([[[H.J,H.J],H.P,W("addpoints")]]))(a);if(b)return b;b=a[0];a=a[1];if([b,a].every(c=>yc(c)||zc(c))&&Cc(b,a))return a=Ba(Dc(b),Dc(a)),{o:[a,a],H:a,D:Zc(a)}};Z.sub=a=>{var b=S(Cd.map(c=>[[c,c],c,Y("-")]).concat(Cd.map(c=>[[H.ia,c],c,Y("-")])).concat([[[H.J,H.J],H.P,W("subpoints")]]))(a);if(b)return b;b=a[0];a=a[1];if([b,a].every(c=>yc(c)||zc(c))&&Cc(b,a))return a=Ba(Dc(b),Dc(a)),{o:[a,a],H:a,D:fd(a)}};Z["+"]=Z.add;Z["-"]=Z.sub;
Z._=a=>{let b=Bc(a[0]);if(b===H.J||b===H.line)b=H.K;if("list"===b.type&&Ac(a[1])){let c=Number(a[1].value.value.real);return 1<=Math.abs(c)&&Math.abs(c)<=b.length?(0<c&&--c,0>c&&(c=b.length+c),{o:a,H:b.parameters,D:Oc(b,c)}):{o:a,H:b.parameters,D:()=>F(`try to access ${c}-th Element of ${b.length}-list ${JSON.stringify(a[0])}`)}}return!1};
Z.mult=a=>{var b=S([[[H.u,H.u],H.u,Y("*")],[[H.h,H.h],H.h,Y("*")],[[H.j,H.h],H.j,Y("*")],[[H.h,H.j],H.j,Y("*")],[[H.j,H.j],H.j,W("multc")],[[H.za,H.za],H.za,Ad()],[[H.wa,H.wa],H.wa,Ad()],[[H.Aa,H.Aa],H.Aa,Ad()],[[H.za,H.P],H.P,Ad()],[[H.wa,H.K],H.K,Ad()],[[H.Aa,H.fa],H.fa,Ad()],[[H.P,H.za],H.P,Ad()],[[H.K,H.wa],H.K,Ad()],[[H.fa,H.Aa],H.fa,Ad()]])(a);if(b)return b;if(2!==a.length)return!1;b=a[0];let c=a[1];if([b,c].every(d=>"list"===d.type&&P(d.parameters,H.h))&&b.length===c.length)return a=Dc(b),
Fc(a)?{o:[a,a],H:H.h,D:V("dot")}:{o:[a,a],H:H.h,D:Wc(b.length)};if([b,c].every(d=>"list"===d.type&&P(d.parameters,H.j))&&b.length===c.length)return a=Ec(b),{o:[a,a],H:H.j,D:ad(b.length)};if(yc(b)&&2===Kb(b)&&yc(c)&&1===Kb(c)&&b.parameters.length===c.length)return{o:[Dc(b),Dc(c)],H:H.Da(b.length),D:kd(Dc(b))};if(zc(b)&&2===Kb(b)&&zc(c)&&1===Kb(c)&&b.parameters.length===c.length)return{o:[Ec(b),Ec(c)],H:H.Ma(b.length),D:kd(Ec(b))};for(let d=0;2>d;d++){if(P(a[0^d],H.h)&&(yc(a[1^d])||zc(a[1^d]))){let h=
Dc(a[1^d]);return{o:d?[h,H.h]:[H.h,h],H:h,D:(m,n,p)=>hd(h)([m[0^d],m[1^d]],n,p)}}if(P(a[0^d],H.j)&&zc(a[1^d])){let h=Ec(a[1^d]);return{o:d?[h,H.j]:[H.j,h],H:h,D:(m,n,p)=>jd(h)([m[0^d],m[1^d]],n,p)}}}};Z["*"]=Z.mult;Z.div=a=>{let b=S([[[H.h,H.h],H.h,Y("/")],[[H.h,H.j],H.j,W("divfc")],[[H.j,H.h],H.j,Y("/")],[[H.j,H.j],H.j,W("divc")]])(a);return b?b:P(a[1],H.h)&&zc(a[0])&&(a=Dc(a[0]),Fc(a))?{o:[a,H.h],H:a,D:Y("/")}:!1};Z["/"]=Z.div;Z.re=S([[[H.j],H.h,W("realc")]]);Z.im=S([[[H.j],H.h,W("imagc")]]);
Z.floor=S([[[H.h],H.u,a=>`int(floor(${a}))`],[[H.j],H.j,V("floor")]]);Z.round=S([[[H.h],H.u,a=>`int(floor(${a}+.5))`],[[H.j],H.j,a=>`floor(${a}+vec2(.5))`]]);Z.ceil=S([[[H.h],H.u,a=>`int(ceil(${a}))`],[[H.j],H.j,V("ceil")]]);Z.mod=S([[[H.u,H.u],H.u,(a,b)=>`int(${V("mod")("float("+a[0]+"), float("+a[1]+")",b)})`],[[H.h,H.h],H.h,V("mod")],[[H.j,H.j],H.j,W("mod")]]);
Z.random=S([[[],H.h,W("random")],[[H.h],H.h,(a,b,c)=>`${W("random")([],b,c)}*${a[0]}`],[[H.j],H.j,(a,b,c)=>`vec2(${W("random")([],b,c)},${W("random")([],b,c)})*${a[0]}`]]);Z.randomint=S([[[H.u],H.u,(a,b,c)=>`int(floor(${W("random")([],b,c)}*float(${a[0]})))`],[[H.h],H.u,(a,b,c)=>`int(floor(${W("random")([],b,c)}*floor(${a[0]})))`]]);Z.randominteger=Z.randomint;Z.randombool=S([[[],H.M,(a,b,c)=>`(${W("random")([],b,c)}>.5)`]]);Z.randomnormal=S([[[],H.h,W("randomnormal")]]);
Z.arctan2=S([[[H.h,H.h],H.h,a=>`atan(${a[1]}, ${a[0]})`],[[H.j,H.j],H.j,W("arctan2c")],[[H.j],H.h,W("arctan2vec2")],[[H.P],H.h,W("arctan2vec2")],[[H.Ma(2)],H.j,W("arctan2cvec2")]]);["red","green","blue","gray","hue"].forEach(a=>{Z[a]=S([[[H.h],H.K,W(a)]])});Z.grey=Z.gray;Z.min=a=>{let b=S([[[H.h,H.h],H.h,V("min")]])(a);if(b)return b;if(1===a.length&&1===Kb(a[0])&&yc(a[0]))return{o:a,H:a[0].parameters,D:ud(a[0])}};
Z.max=a=>{let b=S([[[H.u,H.u],H.u,V("max")],[[H.h,H.h],H.h,V("max")]])(a);if(b)return b;if(1===a.length&&1===Kb(a[0])&&yc(a[0]))return{o:a,H:a[0].parameters,D:rd(a[0])}};let Dd=(a,b)=>{if(!(1>=a))if(2==a)b.add("functions","raise2",()=>"float raise2(float a) { return a*a; }");else{Dd(2,b);let c=(h,m)=>1==m?h:m&1?c(h,m-1)+"*a":`raise2(${c(h,m/2)})`,d=`raise${a}`;b.add("functions",d,()=>`float ${d}(float a) { return ${c("a",a)};}`)}},Ed=a=>(b,c,d)=>0==a?"1.":1==a?b[0]:Dd(a,d)||`raise${a}(${b[0]})`;
Z.pow=a=>{if(Ac(a[1])&&P(a[0],H.h)){let b=Number(a[1].value.value.real);if(0<=b)return{o:[H.h,a[1]],H:H.h,D:Ed(b)}}return S([[[H.h,H.u],H.h,W("powi")],[[H.j,H.j],H.j,W("powc")]])(a)};Z["^"]=Z.pow;Z.re=S([[[H.j],H.h,a=>`(${a}).x`]]);Z.conjugate=S([[[H.j],H.j,W("conjugate")]]);Z.im=S([[[H.j],H.h,a=>`(${a}).y`]]);Z.genList=a=>{let b=a.length;if(0<b){let c=!1;for(let d in a)c=Ba(c,a[d]);if(c)return a=R(b,c),{o:Array(b).fill(c),H:a,D:Nc(a)}}return!1};Z["&"]=S([[[H.M,H.M],H.M,Y("&&")]]);
Z["%"]=S([[[H.M,H.M],H.M,Y("||")]]);"> < >= <= == !=".split(" ").forEach(a=>{Z[a]=S([[[H.u,H.u],H.M,Y(a)],[[H.h,H.h],H.M,Y(a)]])});Z["!"]=S([[[H.M],H.M,V("!")],[[H.ia,H.M],H.M,a=>V("!")([a[1]])]]);Z.not=Z["!"];Z.imagergb=S([[[H.image,H.aa],H.K,Fd],[[H.aa,H.aa,H.image,H.aa],H.K,Gd]]);Z.imagergba=S([[[H.image,H.aa],H.fa,Hd],[[H.aa,H.aa,H.image,H.aa],H.fa,Id]]);Z.reverse=a=>1===a.length&&"list"===a[0].type?{o:a,H:a[0],D:pd(a[0])}:!1;
Z.sort=a=>1===a.length&&1===Kb(a[0])&&yc(a[0])?{o:a,H:a[0],D:zd(a[0])}:!1;Z.transpose=a=>1===a.length&&2<=Kb(a[0])?{o:a,H:R(a[0].parameters.length,R(a[0].length,a[0].parameters.parameters)),D:wd(a[0])}:!1;Z.det=S([[[H.za],H.h,W("det2")],[[H.wa],H.h,W("det3")],[[H.Aa],H.h,W("det4")],[[H.J,H.J,H.J],H.h,W("det3v")]]);Object.freeze(Z);Qc.powc=["expc","multc","logc"];Qc.sqrtc=["expc","multc","logc"];Qc.arccosc=["multc","negc","sqrtc","addc","logc"];Qc.arcsinc=["multc","negc","sqrtc","addc","logc"];
Qc.tanc=["sinc","cosc","divc"];Qc.arctanc=["logc","addc","multc","subc"];Qc.arctan2c=["logc","divc","sqrtc","multc"];Qc.arctan2vec2c=["arctan2c"];Qc.hue=["hsv2rgb"];Qc.randomnormal=["random"];Qc.subpoints=["dehomogenize"];Qc.addpoints=["dehomogenize"];Object.freeze(Qc);function sb(a){this.m={};this.N={};this.i={};this.qa=0;this.s={};this.O=a;this.ta={}}sb.prototype.add=function(a,b,c){this.mark(a,b);this.i[a].Sa[b]||(this.i[a].Sa[b]=c(),this.i[a].Ha[b]=!0,this.i[a].order.push(b))};sb.prototype.mark=function(a,b){this.i[a]||(this.i[a]={order:[],Ha:{},Sa:{}});let c=this.i[a].Ha[b]||!1;this.i[a].Ha[b]=!0;return c};function Jd(a,b){return a.i[b]?a.i[b].order.map(c=>a.i[b].Sa[c]).join("\n"):"\n"}
var pc=new Map([["cglPixel",{type:"pixelAttribute",code:"",A:"cgl_pixel",valueType:H.P,writable:!1}],["cgldiscard",{type:"operator",code:"discard;\n",A:"",valueType:H.ia,writable:!1}],["cgltexture",{type:"function",code:"",A:"texture",valueType:H.fa,o:[H.image,H.P],writable:!1}],["cgltexturergb",{type:"function",code:"",A:"texture",valueType:H.K,o:[H.image,H.P],writable:!1}],["cgleval",{type:"function",code:"",A:"",valueType:void 0,o:void 0,writable:!1}],["cglViewPos",{type:"uniform",code:"",A:"cgl_viewPos",
valueType:H.K,writable:!1}],["cglViewNormal",{type:"uniform",code:"",A:"cgl_viewNormal",valueType:H.K,writable:!1}],["cglviewrect",{type:"function",code:"",A:"cgl_viewRect",o:[],valueType:H.fa,writable:!1}],["cglViewDirection",{type:"pixelAttribute",code:"",A:"cgl_viewDirection0",valueType:H.K,writable:!1}],["cglDepth",{type:"pixelAttribute",code:"",A:"cgl_depth",valueType:H.h,writable:!0}],["cglCenter",{type:"uniform",code:"",A:"uCenter",valueType:H.K,writable:!1}],["cglRadius",{type:"uniform",code:"",
A:"uRadius",valueType:H.h,writable:!1}],["cglOrientation",{type:"uniform",code:"",A:"uOrientation",valueType:H.K,writable:!1}],["cglCubeAxes",{type:"uniform",code:"",A:"uCubeAxes",valueType:H.wa,writable:!1}],["cglSpacePos",{type:"pixelAttribute",code:"",A:"cgl_spacePos",valueType:H.K,writable:!1}]]);
function Kd(a,b,c,d){if(oc(c,d))return b;if(P(c,d)){if("constant"===c.type)return Pc(c.value,d,a);let h=Hc(d)([c]);if(!h)return F(`cannot find an implementation for ${zb(c)} -> ${zb(d)}, using identity`),b;d=h.D;return d(Kd(a,b,c,h.o[0]),{},a)}F(`${zb(c)} is no subtype of ${zb(d)} (trying to cast the term ${b})`);return b}function Ld(a,b,c){a.m[b]||(a.m[b]={});a.m[b].ja||(a.m[b].ja=[]);a.m[b].C||(a.m[b].C=!1);a.hasOwnProperty("global")||(a.m[b].global=c)}
function Md(a,b){var c=b.U;if(b.isuniform)return a.N[b.uvariable].type;if(b.isbuiltin){if("variable"===b.ctype)return pc.get(b.name).valueType;if("function"===b.ctype)return c=za(b.oper),"cgleval"==c?Nd(a,b.args[0]):pc.get(c).valueType;F(`unsupported built-in ${JSON.stringify(b)}`);return!1}if(b.ismodifier){if("variable"===b.ctype){c=b.name;if(a.V.has(c))return a.V.get(c).type;F(`could not find modifier ${JSON.stringify(b)}`)}F(`unsupported modifier ${JSON.stringify(b)}`);return!1}if("variable"===
b.ctype)return b=b.name,b=c[b]||b,a.m[b].C;if("function"===b.ctype&&a.s.hasOwnProperty(b.oper))return a.m[c[b.oper]].C;if("number"===b.ctype)return Pb(b);if("void"===b.ctype)return H.ia;if("field"===b.ctype){a=Bc(Nd(a,b.obj));if(1==b.key.length){if("list"===a.type)return a.parameters;if(P(a,H.J))return H.h}else if("xy"==b.key&&P(a,H.J))return H.P;if(!a)return!1}else{if("string"===b.ctype)return H.image;if("list"===b.ctype||"boolean"===b.ctype)return Pb(b);if("cglLazy"===b.ctype)return H.$a(b);if("function"===
b.ctype||"infix"===b.ctype){if("if"==za(b.oper)&&(c=Nd(a,b.args[0]),"constant"==c.type&&"boolean"==c.value.ctype))return c.value.value?Nd(a,b.args[1]):2<b.args.length?Nd(a,b.args[2]):H.ia;c=Array(b.args.length);var d=!0;for(let h=0;h<b.args.length;h++)c[h]=Nd(a,b.args[h]),d&="constant"===c[h].type;if(d&&b.impl)return b={ctype:b.ctype,oper:b.oper,impl:b.impl,args:c.map(h=>h.value)},b=a.O.evaluateAndVal(b),Pb(b);a=za(b.oper);if("length"===a&&1===c.length&&"list"===c[0].type)return b.ctype="number",
b.value={real:c[0].length,imag:0},Pb(b);d=Z[a]?Z[a](c):!1;if(!d&&c.every(h=>Jb(h)))throw F(`Could not find an implementation for ${a} with args (${c.map(zb).join(", ")})`),ua(b),"error";return d?d.H:!1}}F("Don't know how to compute type of");ua(b);return!1}function Nd(a,b){if(!b.ab||!b.qa||a.qa>b.qa)b.ab=Md(a,b),b.qa=a.qa;return b.ab}
function Od(a,b,c){function d(r,B,u){let C={};for(let L in r)C[L]=r[L];r=Da();Ld(p,r,!1);m[r].C=u;m[r].pb=!0;C[B]=r;return C}function h(r,B,u,C){r.U=B;if("function"===r.ctype&&"cgleval"===za(r.oper)&&0<r.args.length){var L=r.args.length-1,K=r.args[0];if("variable"!==K.ctype){F("unexpected argument for cgleval expected variable got",K);return}var O=K.name;O=B[O]||O;if(p.V.has(O)){O=p.V.get(O);let X=O.type;if(!X.value||!X.value.ctype||"cglLazy"!==X.value.ctype){F("unexpected argument for cgleval expected cglLazy got",
X,K);return}O.ua=!0;K=X.value}else if(m[O]&&m[O].C&&"cglLazy"===m[O].C.type)K=m[O].C.value;else if(K=p.O.evaluate(K),"cglLazy"!==K.ctype){F("unexpected argument for cgleval expected cglLazy got",K);return}if(L!==K.T.length){F(`wrong number of arguments for lazy function expected ${K.T.length} got ${L}`);return}let Ea={};K.ea.forEach(([X,T])=>{let ea=Da();Ea[X]=ea;n[u].m||(n[u].m=[]);n[u].m.push(ea);Ld(p,ea,!1);m[ea].ja.push(T);m[ea].C="image"===T.ctype||"string"===T.ctype||"cglLazy"===T.ctype?Aa(T):
Pb(T)});let ra={};K.T.forEach((X,T)=>{X=Object.assign({},X).name;if("variable"===r.args[T+1].ctype)T=r.args[T+1].name,Ea[X]=B[T]||T,ra[X]=!0;else{let ea=Da();Ea[X]=ea;n[u].m||(n[u].m=[]);n[u].m.push(ea);Ld(p,ea,!1);m[ea].ja.push(r.args[T+1])}});r.args[0]=va(K.A);Pd(p,r.args[0]);r.args[0].U=Ea;r.T=K.T.map(X=>{let T=Object.assign({},X);T.inline=ra.hasOwnProperty(X.name);T.U=Ea;return T});r.ea=K.ea.map(([X,T])=>[X,T,Ea])}for(var U in r.args)L=C||"repeat$2"===r.oper&&0==U||"repeat$3"===r.oper&&0==U||
"_"===r.oper&&1==U,K=B,-1!==["repeat","forall","apply"].indexOf(za(r.oper))?1==U?K="repeat$2"===r.oper?d(B,"#",H.u):"repeat$3"===r.oper?d(B,r.args[1].name,H.u):"forall$2"===r.oper||"apply$2"===r.oper?d(B,"#",!1):"forall$3"===r.oper||"apply$3"===r.oper?d(B,r.args[1].name,!1):B:2==U&&(K=r.args[1].U):0==U&&"cgleval"===za(r.oper)&&(K=r.args[0].U),h(r.args[U],K,u,L);"field"===r.ctype&&h(r.obj,B,u,C);"variable"===r.ctype&&(U=r.name,U=B[U]||U,C&&p.m[U]&&(p.m[U].va=!0));if("="===r.oper)C=r.args[0].name,void 0!==
C&&(C=B[C]||C,Ld(p,C,!0),m[C].ja.push(r.args[1]));else if(r.oper&&"regional"===za(r.oper)&&"global"!=u)for(var da in r.args){C=r.args[da].name;C.startsWith("cgl")&&I(`${C}: identifiers starting with ${"cgl"} are reserved for internal use`);var Ja=Da();B[C]=Ja;n[u].m||(n[u].m=[]);n[u].m.push(Ja);Ld(p,Ja,!1)}else if("forall$2"===r.oper||"apply$2"===r.oper||"forall$3"===r.oper||"apply$3"===r.oper)m[2===r.args.length?r.args[1].U["#"]:r.args[2].U[r.args[1].name]].ja.push({ctype:"infix",oper:"_",args:[r.args[0],
{ctype:"number",value:{real:1,imag:0}}],U:r.args[0].U});else if("function"===r.ctype&&n.hasOwnProperty(r.oper)){da=r.oper;U=da.replace("$","_");Ld(p,U,!1);B[da]=U;L={};for(Ja in n[da].arglist)K=n[da].arglist[Ja].name,O=U+"_"+K,L[K]=O,Ld(p,O,!1),m[O].ja.push(r.args[Ja]);n[da].rb||(n[da].rb=!0,h(n[da].body,L,da,C),m[U].ja.push(n[da].body))}}let m=a.m,n=a.s;var p=a;h(b,c,"global",!1)}
function Qd(a){let b=!0;for(var c in a.m)a.m[c].C=a.m[c].C||!1,a.m[c].va&&(a.m[c].C=xc(1),a.qa++);for(;b;){b=!1;for(let h in a.m)if(!a.m[h].va)for(let m in a.m[h].ja){var d=Bc(Nd(a,a.m[h].ja[m]));c=a.m[h].C||!1;d&&(d=c?P(d,c)?c:Ba(c,d):d)&&d!==c&&(a.m[h].C=d,a.qa++,b=!0)}}}
function Rd(a,b){function c(u){if(u.hasOwnProperty("dependsOnPixel"))return u.dependsOnPixel;if("variable"===u.ctype){var C=u.name;C=u.U[C]||C;return pc.has(C)?(u.isbuiltin=!0,u.name=C,u.dependsOnPixel=!0):n.V.has(C)?(n.I.has(C)||(n.V.get(C).sa?n.I.set(C,"uModifier_"+n.I.size):n.I.set(C,"vModifier_"+n.I.size)),u.ismodifier=!0,u.name=C,u.dependsOnPixel=!0):p[C]?u.dependsOnPixel=!0:u.dependsOnPixel=!1}C="random randomint randominteger randombool randomnormal verbatimglsl".split(" ");if("function"===
u.ctype&&-1!==C.indexOf(za(u.oper)))return u.dependsOnPixel=!0;if("function"===u.ctype&&pc.has(za(u.oper)))return u.isbuiltin=!0,u.dependsOnPixel=!0;if("repeat$2"===u.oper||"forall$2"===u.oper||"apply$2"===u.oper)return c(u.args[1])?(p[u.args[1].U["#"]]=!0,u.dependsOnPixel=!0):u.dependsOnPixel=!1;if("repeat$3"===u.oper||"forall$3"===u.oper||"apply$3"===u.oper)return c(u.args[2])?(p[u.args[2].U[u.args[1].name]]=!0,u.args[1].dependsOnPixel=!0,u.dependsOnPixel=!0):u.dependsOnPixel=!1;for(let L in u.args)if(c(u.args[L]))return u.dependsOnPixel=
!0;return"function"===u.ctype&&m.hasOwnProperty(u.oper)&&c(m[u.oper].body)?u.dependsOnPixel=!0:"field"===u.ctype?u.dependsOnPixel=c(u.obj):u.dependsOnPixel=!1}function d(u,C){if(c(u)){for(var L in u.args)d(u.args[L],C||"repeat$2"===u.oper&&0==L||"repeat$3"===u.oper&&0==L||"_"===u.oper&&1==L);"field"===u.ctype&&d(u.obj,C);"function"===u.ctype&&m.hasOwnProperty(u.oper)&&(u=u.oper,r.hasOwnProperty(u)||(r[u]=!0,d(m[u].body,C)))}else if("boolean"!==u.ctype&&"number"!==u.ctype&&"void"!==u.ctype){".."===
u.oper&&(C=!0);L=!1;for(let O in B)if(!L&&ya(u,B[O].A)){L=!0;var K=O}L||(K=Da(),B[K]={A:u,type:!1,va:C});B[K].va=B[K].va||C;u.isuniform=!0;u.uvariable=K}}let h=a.m,m=a.s,n=a;var p={cgl_pixel:!0,"cgl_pixel.x":!0,"cgl_pixel.y":!0,cgl_viewDirection0:!0};for(let u in h)if(1<=h[u].ja.length||h[u].pb)p[u]=!0;c(b);let r={"":!0},B=a.N;d(b,!1)}
function Sd(a){for(let b in a.N){let c=a.O.evaluateAndVal(a.N[b].A);if(!c.ctype||"undefined"===c.ctype){F("can not evaluate:",a.N[b].A);break}a.N[b].type=a.N[b].va?Pb(c):Aa(c)}}function Pd(a,b){if("function"===b.ctype&&!a.s.hasOwnProperty(b.oper)&&null!==a.O.getMyfunction(b.oper)){let c=b.oper;a.s[c]=va(a.O.getMyfunction(c));Pd(a,a.s[c].body)}for(let c in b.args)Pd(a,b.args[c])}
function Td(a,b){function c(n){let p={};for(let r in n)p[r]=n[r];return p}function d(n,p){"repeat$2"===n.oper||"forall$2"===n.oper||"apply$2"===n.oper?(p=c(p),p["#"]=!0):"repeat$3"===n.oper||"forall$3"===n.oper||"apply$3"===n.oper?(p=c(p),p[n.args[1].name]=!0):"="===n.oper&&(p[n.args[0].name]=!0);for(let r in n.args)d(n.args[r],p);"field"===n.ctype&&d(n.obj,p);"variable"===n.ctype&&(n=n.name,p[n]||(m[n]=!0))}let h={},m={};d(b,{});Ld(a,"cgl_pixel",!1);a.m.cgl_pixel.C=H.P;Ld(a,"cgl_viewDirection0",
!1);a.m.cgl_viewDirection0.C=H.K;if(1==Object.keys(m).length)h[Object.keys(m)[0]]=a.L?"cgl_viewDirection0":"cgl_pixel";else if(m["#"])h["#"]=a.L?"cgl_viewDirection0":"cgl_pixel";else if(m.x&&m.y)Ld(a,"cgl_pixel.x",!1),a.m["cgl_pixel.x"].C=H.h,h.x="cgl_pixel.x",Ld(a,"cgl_pixel.y",!1),a.m["cgl_pixel.y"].C=H.h,h.y="cgl_pixel.y";else{b=[];for(let n in m)a.O.nada==a.O.evaluateAndVal({ctype:"variable",name:n})&&b.push(n);1==b.length?h[b[0]]="cgl_pixel":m.p?h.p="cgl_pixel":m.z&&(h.z="cgl_pixel")}"cgl_pixel"===
h.z&&(a.m.cgl_pixel.C=H.j);return h}function Ud(a,b){Pd(a,b);Od(a,b,Td(a,b));Rd(a,b);Sd(a);Qd(a);for(let c in a.N)"list"===a.N[c].type.type&&Tc(a.N[c].type,a);for(let c in a.m)"list"===a.m[c].C.type&&Tc(a.m[c].C,a);a.V.forEach(c=>{"list"===c.type.type&&Tc(c.type,a)})}function Vd(a,b){let c={ctype:"infix",oper:"="};c.args=[a,b];return c}
sb.prototype.compile=function(a,b){var c=this,d=Nd(this,a);if(a.isuniform){var h=a.uvariable;return b?{code:"",B:"constant"===d.type?Pc(d.value,Bc(d),c):h}:{code:""}}if(a.isbuiltin&&"variable"===a.ctype)return d=a.name,"cglDepth"==d&&(this.Z=!0),d=pc.get(d),b?{code:d.code,B:d.A}:{code:d.code};if(a.isbuiltin&&"function"===a.ctype&&-1!=["cgldiscard","cglviewrect"].indexOf(za(a.oper)))return d=pc.get(za(a.oper)),b?{code:d.code,B:d.A}:{code:d.code};if(a.isbuiltin&&"function"===a.ctype&&"cgleval"==za(a.oper)){let L=
"";a.T.forEach((K,O)=>{K.inline||(L+=this.compile(Vd(K,a.args[O+1]),!1).code)});a.ea.forEach(([K,O,U])=>{"cglLazy"!==O.ctype&&("string"===O.ctype||"image"===O.ctype?this.N[U[K]||K]={A:O,type:H.image,va:!1}:L+=this.compile(Vd({ctype:"variable",name:K,U},O),!1).code)});b=this.compile(a.args[0],b);b.code=L+b.code;return b}if(a.ismodifier){if("variable"===a.ctype)return d=a.name,this.V.get(d).ua=!0,b?{code:"",B:this.I.get(d)}:{code:""};F(`dont know how to this.compile built-in ${JSON.stringify(a)}`)}else{if(";"===
a.oper){d={B:""};h="";var m=a.args.length-1;for(var n=m;0<=n;n--)"void"===a.args[n].ctype&&(m=n-1);for(n=0;n<=m;n++)d=this.compile(a.args[n],b&&n===m),h+=d.code;return b?{code:h,B:d.B}:{code:h}}if("constant"===d.type)return b?{B:Pc(d.value,Bc(d),c),code:""}:{code:""};if("="===a.oper)return d=this.compile(a.args[1],!0),a.args[0].ismodifier?F(`assignment to immutable modifier "${a.args[0].name}"`):a.args[0].isbuiltin&&("variable"!==a.args[0].ctype?F(`assignment to immutable built-in "${za(a.args[0].oper)}"`):
pc.get(a.args[0].name).writable?"cglDepth"==a.args[0].name&&(this.R=!0):F(`assignment to immutable built-in "${a.args[0].name}"`)),h=`${this.compile(a.args[0],!0).B} = ${Kd(this,d.B,Nd(this,a.args[1]),Nd(this,a.args[0]))}`,b?{code:d.code,B:h}:{code:`${d.code+h};\n`};if("repeat$2"===a.oper||"repeat$3"===a.oper){h=this.compile(a.args[0],!0);if("constant"!==Nd(this,a.args[0]).type)return F("repeat possible only for fixed constant number in GLSL"),!1;d="repeat$2"===a.oper?a.args[1].U["#"]:a.args[2].U[a.args[1].name];
h=Number(h.B);m="";if("constant"===this.m[d].C.type)for(n=1;n<=h;n++){this.m[d].C=xc(n);this.qa++;var p=this.compile(a.args["repeat$2"===a.oper?1:2],n===h&&b);m+=p.code;if(n===h&&b)return{code:m,B:p.B}}else{n="";p=this.compile(a.args["repeat$2"===a.oper?1:2],b);var r=Nd(this,a.args["repeat$2"===a.oper?1:2]);b&&(n=Da(),this.m[n]||(Ld(this,n,!0),this.m[n].C=r));m=m+`for(int ${d}=1; ${d} <= ${h}; ${d}++) {\n`+p.code;b&&(m+=`${n} = ${p.B};\n`);m+="}\n";if(b)return{code:m,B:n}}return{code:m}}if("forall$2"===
a.oper||"forall$3"===a.oper||"apply$2"===a.oper||"apply$3"===a.oper){var B=Nd(this,a.args[0]);if("list"!==B.type&&("constant"!==B.type||"list"!==B.value.ctype))return F(`${a.oper} only possible for lists`),!1;h=B.length||B.value.value.length;n=2===a.args.length?a.args[1].U["#"]:a.args[2].U[a.args[1].name];var u=this.m[n].C;r=p="";b&&(r=Da(),p+=`${M(d)} ${r};\n`);"list"===d.type&&Tc(d,this);if("constant"===this.m[n].C.type||"constant"===B.type)for(B=this.O.evaluateAndVal(a.args[0]),u=0;u<h;u++)this.m[n].C=
Pb(B.value[u]),this.qa++,m=this.compile(a.args[2===a.args.length?1:2],b),p+=m.code,"forall$2"===a.oper||"forall$3"===a.oper?u+1===h&&b&&(p+=`${r} = ${m.B};\n`):b&&(p+=`${Oc(d,u)([r],[],this)} = ${m.B};\n`);else{m=this.compile(a.args[2===a.args.length?1:2],b);var C=this.compile(a.args[0],!0);p+=C.code;let L=C.B;!this.m[L]&&!this.N[L]&&2<=B.length&&(L=Da(),p+=`${M(B)} ${L} = ${C.B};\n`);this.m[n].global=!0;for(C=0;C<h;C++)p+=`${n} = ${Oc(B,C)([L],[],this)};\n`,p+=m.code,b&&("forall$2"===a.oper||"forall$3"===
a.oper?C===h-1&&(p+=`${r} = ${m.B};\n`):p+=`${Oc(d,C)([r],[],this)} = ${m.B};\n`);"list"===u.type&&Tc(u,this)}return b?{code:p,B:r}:{code:p}}if("if$2"===a.oper||"if$3"===a.oper){p=this.compile(a.args[0],!0);h=Nd(this,a.args[0]);n=m="";b&&(n=Da(),this.m[n]||(Ld(this,n,!0),this.m[n].C=d));"constant"!=h.type&&(m+=p.code,m+=`if(${p.B}) {\n`);if("constant"!=h.type||"constant"==h.type&&h.value.value)p=this.compile(a.args[1],b),m+=p.code,b&&(m+=`${n} = ${Kd(this,p.B,Nd(this,a.args[1]),d)};\n`);"if$3"===
a.oper&&("constant"!=h.type&&(m+="} else {\n"),"constant"!=h.type||"constant"==h.type&&!h.value.value)&&(p=this.compile(a.args[2],b),m+=p.code,b&&(m+=`${n} = ${Kd(this,p.B,Nd(this,a.args[2]),d)};\n`));"constant"!=h.type&&(m+="}\n");return b?{code:m,B:n}:{code:m}}if("function"===a.ctype||"infix"===a.ctype){p=a.oper;if("verbatimglsl"===za(p))return d=this.O.evaluateAndVal(a.args[0]).value,b?{B:d,code:""}:{code:d};d=a.args.map(L=>c.compile(L,!0));m=a.args.map(L=>Nd(c,L));if(a.isbuiltin){p=za(a.oper);
let L=pc.get(p);n=L.o;"cgltexture"==p?h=Wd:"cgltexturergb"==p?h=Xd:h=K=>V(L.A)(K)}else if(this.s.hasOwnProperty(p))for(h=Yd(this,p),n=Array(d.length),r=0;r<d.length;r++)n[r]=this.m[this.s[p].body.U[this.s[p].arglist[r].name]].C;else{p=za(p);if("regional"===p)return b?{B:"",code:""}:{code:""};h=Z[p](m);if(!h)return F(`Could not find an implementation for ${p}(${m.map(zb).join(", ")}).\nReturning empty code`),b?{B:"",code:""}:{code:""};n=h.o;h=h.D}p="";r=Array(d.length);for(B=0;B<d.length;B++)p+=d[B].code,
r[B]=Kd(this,d[B].B,m[B],n[B]);d=h(r,a.modifs,this);return b?{B:d,code:p}:{code:`${p+d};\n`}}if("variable"===a.ctype)return d=a.name,d=a.U[d]||d,b?{B:d,code:""}:{code:`${d};\n`};if("void"===a.ctype)return b?{B:"",code:""}:{code:""};if("field"===a.ctype&&(d=Nd(this,a.obj),n={x:0,y:1,z:2,r:0,g:1,b:2,a:3}[a.key],h=!1,m=c.compile(a.obj,!0).B,void 0!=n&&"list"===d.type?h=Oc(d,n)([m],null,this):"xy"===a.key&&"list"===d.type?(2===d.length&&(h=m),3===d.length&&(h=W("dehomogenize")([Kd(c,m,d,H.J)],null,this))):
d===H.J&&(n={xy:"dehomogenize",x:"dehomogenizex",y:"dehomogenizey"},n[a.key]&&(h=W(n[a.key])([Kd(c,m,d,H.J)],null,this))),h))return b?{B:h,code:""}:{code:`${h};\n`};F(`dont know how to this.compile ${JSON.stringify(a)}`)}};function Yd(a,b){Zd(a,b,a.s[b].arglist.length);return V(b.replace("$","_"))}
function Zd(a,b,c){if(!a.mark("compiledfunctions",b)){var d=a.s[b],h=b.replace("$","_"),m=d.body.U,n=Array(c);for(var p=0;p<c;p++)n[p]=d.arglist[p].name;c=a.m[h].C===H.ia;var r=`${M(a.m[h].C)} ${h}(${n.map(u=>M(a.m[m[u]].C)+" "+m[u]).join(", ")}){\n`;for(var B in d.m)n=d.m[B],p=a.m[n].C,p!==H.ia&&p!==H.image&&"cglLazy"!==p.type&&(r+=`${M(p)} ${n};\n`);B=a.compile(d.body,!c);d=Nd(a,d.body);r+=B.code;c||(r+=`return ${Kd(a,B.B,d,a.m[h].C)};\n`);r+="}\n";a.add("compiledfunctions",b,()=>r)}}
function $d(a){let b=[];for(let c in a.N)"constant"!=a.N[c].type.type&&a.N[c].type!=H.image&&"cglLazy"!=a.N[c].type.type&&b.push(`uniform ${M(a.N[c].type)} ${c};`);a.V.forEach((c,d)=>{"cglLazy"!=c.type.type&&c.ua&&(c.sa?b.push(`uniform ${M(c.type)} ${a.I.get(d)};`):b.push(`in ${M(c.type)} ${a.I.get(d)};`))});return b.join("\n")}
function tb(a,b,c,d){Ca=0;a.L=d;b=va(b);a.V=c;a.I=new Map;a.Z=!1;a.R=!1;Ud(a,b);c=a.compile(b,!0);d=Nd(a,b);b=d===H.color||"list"===d.type&&4<=d.length;P(d,H.color)?d=Kd(a,c.B,d,H.color):(F("expression does not generate a color"),d="vec4(.5,.5,.5,1.);\n");let h=Jd(a,"structs");h+=Jd(a,"uniforms");h+=$d(a);h+=ae(a);h+=Jd(a,"includedfunctions");h+=Jd(a,"functions");for(var m in a.m)a.m[m].C&&a.m[m].global&&(h+=`${M(a.m[m].C)} ${m};\n`);h+=Jd(a,"compiledfunctions");ua(h,c);m={};if(a.i.compiledfunctions)for(let n in a.i.compiledfunctions.Ha)m[n]=
a.O.getMyfunction(n).generation;a.I.forEach((n,p)=>{a.V.get(p).fb=n});return{code:h,nb:c.code,ob:d,v:!b,N:a.N,ta:a.ta,cb:m}}
function ub(a,b,c){let d=b.code,h=b.nb;b=b.ob;let m="";a.i.includedfunctions&&a.i.includedfunctions.Ha.random&&(m="last_rnd=0.1231;\n");let n="";a.L&&(n="cgl_viewDirection0=normalize(cgl_viewDirection);\n");let p="",r="";if(a.Z||a.R||!c)p="cgl_depth=gl_FragCoord.z;\n";a.R&&(r=c?"gl_FragDepth = cgl_depth;\n":"cgl_setDepth(cgl_depth);\n");return d+`void main(void) {\n ${m} ${n} ${p} ${h} ${c?`fragColor = ${b};\n`:`cgl_setColor(${b});\n`} ${r}}\n`};function be(a,b,c,d){this.A=b;this.O=d;this.ea=c;ce(this);b=this.i;this.name=a;this.code=`uniform sampler2D _sampler${a};
uniform float _ratio${a};
uniform vec2 _cropfact${a};
vec4 _plainimagergba${a}(vec2 p) {
${b.repeat?`return texture(_sampler${a}, mod(p,vec2(1.))*_cropfact${a});`:`if(0. <= p.x && p.x <= 1. && 0. <= p.y && p.y <= 1.)
return texture(_sampler${a}, p*_cropfact${a});
else
return vec4(0.);`}}
vec4 _imagergba${a}(vec2 A, vec2 B, vec2 p) {
p -= A; B -= A;
float b = dot(B,B);
p = vec2(dot(p,B),_ratio${a}*dot(p,vec2(-B.y,B.x)))/b;
${b.repeat?"p = mod(p, vec2(1.));":""}
${b.repeat&&b.mipmap?`vec4 color = vec4(0.);
float totalWeight = 0.;
for(int dx=0; dx<2; dx++) for(int dy=0; dy<2; dy++) {
vec2 delta = .5*vec2(dx, dy);
vec2 center = delta+vec2(.5);
vec2 tc = fract(p-delta)+delta;
float dst = dot(abs(tc-center),vec2(1.));
float w = max(.5-dst,0.);
w=w*w;
color += w * texture(_sampler${a}, tc*_cropfact${a});
totalWeight += w;
}
return color/totalWeight;`:b.repeat?`return texture(_sampler${a}, p*_cropfact${a});`:`if(0. <= p.x && p.x <= 1. && 0. <= p.y && p.y <= 1.)
return texture(_sampler${a}, p*_cropfact${a});
else
return vec4(0.);`}
}`}function ce(a){var b=a.ea;let c=a.O;b={interpolate:b.hasOwnProperty("interpolate")?c.evaluateAndVal(b.interpolate).value:!0,mipmap:b.hasOwnProperty("mipmap")?c.evaluateAndVal(b.mipmap).value:!1,repeat:b.hasOwnProperty("repeat")?c.evaluateAndVal(b.repeat).value:!1};!a.i||a.i.mipmap==b.mipmap&&a.i.repeat==b.repeat||(ua("enfore recompilation because texture modifiers changed."),pa++);a.i=b}
function Rb(a){let b=a.O.evaluateAndVal(a.A).value,c="string"===typeof b?a.O.getImage(b,!0):b;if(null==c)return F(`Could not find image ${b}.`),x;ce(a);return Wa(c,a.O,a.i)}function de(a,b,c){c.ta.hasOwnProperty(a)||(c.ta[a]=new be(a,c.N[a].A,b,c.O));return a}function Id(a,b,c){return["_imagergba",de(a[2],b,c),"(",a[0],",",a[1],",",a[3],")"].join("")}function Gd(a,b,c){return["(_imagergba",de(a[2],b,c),"(",a[0],",",a[1],",",a[3],").rgb)"].join("")}
function Hd(a,b,c){c.add("uniforms","corners",()=>"uniform vec2 _lowerleft, _lowerright;");return["_imagergba",de(a[0],b,c),"(_lowerleft, _lowerright, ",a[1],")"].join("")}function Wd(a,b,c){return`_plainimagergba${de(a[0],b,c)}(${a[1]})`}function Fd(a,b,c){c.add("uniforms","corners",()=>"uniform vec2 _lowerleft, _lowerright;");return["(_imagergba",de(a[0],b,c),"(_lowerleft, _lowerright, ",a[1],").rgb)"].join("")}function Xd(a,b,c){return`(_plainimagergba${de(a[0],b,c)}(${a[1]}).rgb)`}
function ae(a){let b="";for(let c in a.ta)b+=`${a.ta[c].code}\n`;return b};let sc={};function qc(a,b=null){return"list"!==a.ctype?(console.log("argument is not a list"),b):a.value}function vc(a){var b=[0,0,0];a=qc(a);if(null===a)return b;b=a.map(tc);3<b.length&&(console.log("Coordinate vector too long."),b=b.slice(0,3));for(;3>b.length;)b.push(0);return b}function wc(a){var b=[.5,.5,.5];if("number"===a.ctype){let c=ee(a);if(!isNaN(c))return[c,c,c]}a=qc(a);return null===a?b:3!=a.length?(console.log("Not an RGB color vector"),b):a.map(c=>ee(c))}
function tc(a,b=Number.NaN){if("number"!==a.ctype)return console.log("argument is not a number"),b;a=a.value;b=a.real;0!==a.imag&&console.log("complex number is not real");return b}function uc(a,b=Number.NaN){if("number"!==a.ctype)return console.log("argument is not a number"),b;b=a.value;a=b.real;b=b.imag;0!==b&&console.log("complex number is not real");b=Math.round(a);b!==a&&console.log("number is not an integer");return b}function ee(a){a=tc(a,Number.NaN);return 0>a?0:1<a?1:a}
sc.toString=function(a,b=null){if("string"===a.ctype)return a.value;console.log("argument is not a string");return b};function ta(a){this.message=a}ta.prototype.toString=function(){return this.message};
function bb(a,b){var c=w;this.handle=c.createProgram();c.i&&(a="#version 300 es\n"+a.replace(/attribute/g,"in").replace(/varying/g,"out"),b="#version 300 es\n"+b.replace(/varying/g,"in").replace(/gl_FragColor/g,"FragColor").replace(/texture2D/g,"texture").replace(/precision highp float;/g,"precision highp float;\n#define webgl2 true\nout vec4 FragColor;"));fe(this,c,c.VERTEX_SHADER,a);fe(this,c,c.FRAGMENT_SHADER,b);a=this.handle;c.linkProgram(a);if(!c.getProgramParameter(a,c.LINK_STATUS))throw new ta("Error linking shader:\n"+
c.getProgramInfoLog(a));c.validateProgram(a);if(!c.getProgramParameter(a,c.VALIDATE_STATUS))throw new ta("Error validating shader:\n"+c.getProgramInfoLog(a));let d=this.handle,h,m;var n;let p={},r;let B;b=c.getProgramParameter(d,c.ACTIVE_UNIFORMS);for(a=0;a<b;++a)if(h=c.getActiveUniform(d,a),null!==h&&(m=h.name.replace(/\]/g,""))){for(r=p;null!==(n=/[.\[]/.exec(m));){var u=m.substr(0,n.index);r.hasOwnProperty(u)?r=r[u]:"."===n[0]?r=r[u]={}:r=r[u]=[];m=m.substr(n.index+1)}if(1<h.size){n=h.size;B=Array(n);
for(u=0;u<n;++u){var C=h.name+"["+u+"]";C=ge(this,c,C,h);B[u]=C}r[m]=B}else C=ge(this,c,h.name,h),r[m]=C}this.uniform=p}function fe(a,b,c,d){c=b.createShader(c);b.shaderSource(c,d);b.compileShader(c);if(!b.getShaderParameter(c,b.COMPILE_STATUS))throw console.warn(d.split("\n")),new ta("Error compiling shader:\n"+b.getShaderInfoLog(c));b.attachShader(a.handle,c)}bb.prototype.use=function(a){a.useProgram(this.handle);return this};
function ge(a,b,c,d){a=b.getUniformLocation(a.handle,c);switch(d.type){case b.FLOAT:return b.uniform1fv.bind(b,a);case b.FLOAT_VEC2:return b.uniform2fv.bind(b,a);case b.FLOAT_VEC3:return b.uniform3fv.bind(b,a);case b.FLOAT_VEC4:return b.uniform4fv.bind(b,a);case b.BOOL:case b.INT:case b.SAMPLER_2D:case b.SAMPLER_CUBE:return b.uniform1iv.bind(b,a);case b.BOOL_VEC2:case b.INT_VEC2:return b.uniform2iv.bind(b,a);case b.BOOL_VEC3:case b.INT_VEC3:return b.uniform3iv.bind(b,a);case b.BOOL_VEC4:case b.INT_VEC4:return b.uniform4iv.bind(b,
a);case b.FLOAT_MAT2:return b.uniformMatrix2fv.bind(b,a,!1);case b.FLOAT_MAT3:return b.uniformMatrix3fv.bind(b,a,!1);case b.FLOAT_MAT4:return b.uniformMatrix4fv.bind(b,a,!1);default:throw new ta("Unknown data type for uniform "+c);}};
}).call(this);//# sourceMappingURL=CindyGL.js.map