@niivue/niivue 0.44.2-dev.2 → 0.44.2-dev.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- export const esm = "var%20t%3DObject.defineProperty%2Ce%3D(e%2Ci%2Cs)%3D%3E((e%2Ci%2Cs)%3D%3Ei%20in%20e%3Ft(e%2Ci%2C%7Benumerable%3A!0%2Cconfigurable%3A!0%2Cwritable%3A!0%2Cvalue%3As%7D)%3Ae%5Bi%5D%3Ds)(e%2C%22symbol%22!%3Dtypeof%20i%3Fi%2B%22%22%3Ai%2Cs)%3Bimport%7Bmat4%20as%20i%2Cvec2%20as%20s%2Cvec3%20as%20r%2Cvec4%20as%20n%7Dfrom%22gl-matrix%22%3Bvar%20a%3D%220.45.1%22%2Co%3Dclass%20t%7Bconstructor(%7Bname%3At%3D%22niivue%22%2Clevel%3Ai%3D%22info%22%7D%3D%7B%7D)%7Be(this%2C%22level%22)%2Ce(this%2C%22name%22)%2Cthis.name%3D%60%24%7Bt%7D%60%2Cthis.level%3Di%7Ddebug(...e)%7Bt.levels%5Bthis.level%5D%3Et.levels.debug%7C%7Cconsole.debug(%60%24%7Bthis.name%7D-debug%60%2C...e)%7Dinfo(...e)%7Bt.levels%5Bthis.level%5D%3Et.levels.info%7C%7Cconsole.info(%60%24%7Bthis.name%7D-info%60%2C...e)%7Dwarn(...e)%7Bt.levels%5Bthis.level%5D%3Et.levels.warn%7C%7Cconsole.warn(%60%24%7Bthis.name%7D-warn%60%2C...e)%7Derror(...e)%7Bt.levels%5Bthis.level%5D%3Et.levels.error%7C%7Cconsole.error(%60%24%7Bthis.name%7D-error%60%2C...e)%7Dfatal(...e)%7Bt.levels%5Bthis.level%5D%3Et.levels.fatal%7C%7Cconsole.error(%60%24%7Bthis.name%7D-fatal%60%2C...e)%7DsetLogLevel(t)%7Bthis.level%3Dt%7DsetName(t)%7Bthis.name%3Dt%7D%7D%3Be(o%2C%22levels%22%2C%7Bdebug%3A0%2Cinfo%3A1%2Cwarn%3A2%2Cerror%3A3%2Cfatal%3A4%2Csilent%3A1%2F0%7D)%3Bvar%20l%3Dnew%20o(%7Bname%3A%22niivue%22%2Clevel%3A%22info%22%7D)%2Ch%3Dclass%7Bconstructor(t%2Ci%2Cs)%7Be(this%2C%22program%22)%2Ce(this%2C%22uniforms%22%2C%7B%7D)%2Ce(this%2C%22isMatcap%22)%2Cthis.program%3Dfunction(t%2Ce%2Ci)%7Bconst%20s%3Dt.createShader(t.VERTEX_SHADER)%3Bt.shaderSource(s%2Ce)%2Ct.compileShader(s)%3Bconst%20r%3Dt.createShader(t.FRAGMENT_SHADER)%3Bt.shaderSource(r%2Ci)%2Ct.compileShader(r)%3Bconst%20n%3Dt.createProgram()%3Bif(t.attachShader(n%2Cs)%2Ct.attachShader(n%2Cr)%2Ct.linkProgram(n)%2C!t.getProgramParameter(n%2Ct.LINK_STATUS))throw%20l.error(t.getProgramInfoLog(n))%2Cnew%20Error(%22Shader%20failed%20to%20link%2C%20see%20console%20for%20log%22)%3Breturn%20n%7D(t%2Ci%2Cs)%3Bconst%20r%3D%2Funiform%5B%5E%3B%5D%2B%5B%20%5D(%5Cw%2B)%3B%2Fg%2Cn%3D%2Funiform%5B%5E%3B%5D%2B%5B%20%5D(%5Cw%2B)%3B%2F%2Ca%3Di.match(r)%2Co%3Ds.match(r)%3Ba%26%26a.forEach((t%3D%3E%7Bconst%20e%3Dt.match(n)%3Bthis.uniforms%5Be%5B1%5D%5D%3D-1%7D))%2Co%26%26o.forEach((t%3D%3E%7Bconst%20e%3Dt.match(n)%3Bthis.uniforms%5Be%5B1%5D%5D%3D-1%7D))%3Bfor(const%20e%20in%20this.uniforms)this.uniforms%5Be%5D%3Dt.getUniformLocation(this.program%2Ce)%7Duse(t)%7Bt.useProgram(this.program)%7D%7D%2Cc%3D%22%23version%20300%20es%5Cn%23line%204%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnlayout(location%3D1)%20in%20vec3%20texCoords%3B%5Cnuniform%20mat4%20mvpMtx%3B%5Cnout%20vec3%20vColor%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ctgl_Position%20%3D%20mvpMtx%20*%20vec4(pos%2C%201.0)%3B%5Cn%5CtvColor%20%3D%20texCoords%3B%5Cn%7D%22%2Cd%3D%22%5Cn%5Ctvec4%20drawColor(float%20scalar%2C%20float%20drawOpacity)%20%7B%5Cn%5Ct%5Ctfloat%20nlayer%20%3D%20float(textureSize(colormap%2C%200).y)%3B%5Cn%5Ct%5Ctfloat%20layer%20%3D%20(nlayer%20-%200.5)%20%2F%20nlayer%3B%5Cn%5Ct%5Ctvec4%20dcolor%20%3D%20texture(colormap%2C%20vec2((scalar%20*%20255.0)%2F256.0%20%2B%200.5%2F256.0%2C%20layer)).rgba%3B%5Cn%5Ct%5Ctdcolor.a%20*%3D%20drawOpacity%3B%5Cn%5Ct%5Ctreturn%20dcolor%3B%5Cn%7D%22%2Cm%3D%22vec3%20GetBackPosition(vec3%20startPositionTex)%20%7B%5Cn%5Ctvec3%20startPosition%20%3D%20startPositionTex%20*%20volScale%3B%5Cn%5Ctvec3%20invR%20%3D%201.0%20%2F%20rayDir%3B%5Cn%5Ctvec3%20tbot%20%3D%20invR%20*%20(vec3(0.0)-startPosition)%3B%5Cn%5Ctvec3%20ttop%20%3D%20invR%20*%20(volScale-startPosition)%3B%5Cn%5Ctvec3%20tmax%20%3D%20max(ttop%2C%20tbot)%3B%5Cn%5Ctvec2%20t%20%3D%20min(tmax.xx%2C%20tmax.yz)%3B%5Cn%5Ctvec3%20endPosition%20%3D%20startPosition%20%2B%20(rayDir%20*%20min(t.x%2C%20t.y))%3B%5Cn%5Ct%2F%2Fconvert%20world%20position%20back%20to%20texture%20position%3A%5Cn%5CtendPosition%20%3D%20endPosition%20%2F%20volScale%3B%5Cn%5Ctreturn%20endPosition%3B%5Cn%7D%5Cn%5Cnvec4%20applyClip%20(vec3%20dir%2C%20inout%20vec4%20samplePos%2C%20inout%20float%20len%2C%20inout%20bool%20isClip)%20%7B%5Cn%5Ctfloat%20cdot%20%3D%20dot(dir%2CclipPlane.xyz)%3B%5Cn%5CtisClip%20%3D%20false%3B%5Cn%5Ctif%20%20((clipPlane.a%20%3E%201.0)%20%7C%7C%20(cdot%20%3D%3D%200.0))%20return%20samplePos%3B%5Cn%5Ctbool%20frontface%20%3D%20(cdot%20%3E%200.0)%3B%5Cn%5Ctfloat%20dis%20%3D%20(-clipPlane.a%20-%20dot(clipPlane.xyz%2C%20samplePos.xyz-0.5))%20%2F%20cdot%3B%5Cn%5Ctfloat%20thick%20%3D%20clipThick%3B%5Cn%5Ctif%20(thick%20%3C%3D%200.0)%20thick%20%3D%202.0%3B%5Cn%5Ctfloat%20%20disBackFace%20%3D%20(-(clipPlane.a-thick)%20-%20dot(clipPlane.xyz%2C%20samplePos.xyz-0.5))%20%2F%20cdot%3B%5Cn%5Ctif%20(((frontface)%20%26%26%20(dis%20%3E%3D%20len))%20%7C%7C%20((!frontface)%20%26%26%20(dis%20%3C%3D%200.0)))%20%7B%5Cn%5Ct%5CtsamplePos.a%20%3D%20len%20%2B%201.0%3B%5Cn%5Ct%5Ctreturn%20samplePos%3B%5Cn%5Ct%7D%5Cn%5Ctif%20(frontface)%20%7B%5Cn%5Ct%5Ctdis%20%3D%20max(0.0%2C%20dis)%3B%5Cn%5Ct%5CtsamplePos%20%3D%20vec4(samplePos.xyz%2Bdir%20*%20dis%2C%20dis)%3B%5Cn%5Ct%5Ctif%20(dis%20%3E%200.0)%20isClip%20%3D%20true%3B%5Cn%5Ct%5Ctlen%20%3D%20min(disBackFace%2C%20len)%3B%5Cn%5Ct%7D%5Cn%5Ctif%20(!frontface)%20%7B%5Cn%5Ct%5Ctlen%20%3D%20min(dis%2C%20len)%3B%5Cn%5Ct%5CtdisBackFace%20%3D%20max(0.0%2C%20disBackFace)%3B%5Cn%5Ct%5Ctif%20(len%20%3D%3D%20dis)%20isClip%20%3D%20true%3B%5Cn%5Ct%5CtsamplePos%20%3D%20vec4(samplePos.xyz%2Bdir%20*%20disBackFace%2C%20disBackFace)%3B%5Cn%5Ct%7D%5Cn%5Ctreturn%20samplePos%3B%5Cn%7D%5Cn%5Cnvoid%20clipVolume(inout%20vec3%20startPos%2C%20inout%20vec3%20backPos%2C%20int%20dim%2C%20float%20frac%2C%20bool%20isLo)%20%7B%5Cn%5Ctvec3%20dir%20%3D%20backPos%20-%20startPos%3B%5Cn%5Ctfloat%20len%20%3D%20length(dir)%3B%5Cn%5Ctdir%20%3D%20normalize(dir)%3B%5Cn%5Ct%2F%2F%20Discard%20if%20both%20startPos%20and%20backPos%20are%20outside%20the%20clipping%20plane%5Cn%5Ctif%20(isLo%20%26%26%20startPos%5Bdim%5D%20%3C%20frac%20%26%26%20backPos%5Bdim%5D%20%3C%20frac)%20%7B%5Cn%5Ct%5Ctdiscard%3B%5Cn%5Ct%7D%5Cn%5Ctif%20(!isLo%20%26%26%20startPos%5Bdim%5D%20%3E%20frac%20%26%26%20backPos%5Bdim%5D%20%3E%20frac)%20%7B%5Cn%5Ct%5Ctdiscard%3B%5Cn%5Ct%7D%5Cn%5Ctvec4%20plane%20%3D%20vec4(0.0%2C%200.0%2C%200.0%2C%200.5%20-%20frac)%3B%5Cn%5Ctplane%5Bdim%5D%20%3D%201.0%3B%5Cn%5Ctfloat%20cdot%20%3D%20dot(dir%2C%20plane.xyz)%3B%5Cn%5Ctfloat%20dis%20%3D%20(-plane.w%20-%20dot(plane.xyz%2C%20startPos%20-%20vec3(0.5)))%20%2F%20cdot%3B%5Cn%5Ct%2F%2F%20Adjust%20startPos%20or%20backPos%20based%20on%20the%20intersection%20with%20the%20plane%5Cn%5Ctbool%20isFrontFace%20%3D%20(cdot%20%3E%200.0)%3B%5Cn%5Ctif%20(!isLo)%5Cn%5Ct%5CtisFrontFace%20%3D%20!isFrontFace%3B%5Cn%5Ctif%20(dis%20%3E%200.0)%20%7B%5Cn%5Ct%5Ctif%20(isFrontFace)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ctif%20(dis%20%3C%3D%20len)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5CtstartPos%20%3D%20startPos%20%2B%20dir%20*%20dis%3B%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%7D%20else%20%7B%5Cn%5Ct%5Ct%5Ctif%20(dis%20%3C%20len)%20%7B%5Cn%5Ct%5Ct%5Ct%5CtbackPos%20%3D%20startPos%20%2B%20dir%20*%20dis%3B%5Cn%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%7D%5Cn%5Ct%7D%5Cn%7D%5Cn%5Cnvoid%20clipVolumeStart%20(inout%20vec3%20startPos%2C%20inout%20vec3%20backPos)%20%7B%5Cn%5Ct%2F%2F%20vec3%20clipLo%20%3D%20vec3(0.1%2C%200.2%2C%200.4)%3B%5Cn%5Ct%2F%2F%20vec3%20clipHi%20%3D%20vec3(0.8%2C%200.7%2C%200.7)%3B%5Cn%5Ctfor%20(int%20i%20%3D%200%3B%20i%20%3C%203%3B%20i%2B%2B)%20%7B%5Cn%5Ct%5Ctif%20(clipLo%5Bi%5D%20%3E%200.0)%5Cn%5Ct%5Ct%5CtclipVolume(startPos%2C%20backPos%2C%20i%2C%20clipLo%5Bi%5D%2C%20true)%3B%5Cn%5Ct%7D%5Cn%5Ctfor%20(int%20i%20%3D%200%3B%20i%20%3C%203%3B%20i%2B%2B)%20%7B%5Cn%5Ct%5Ctif%20(clipHi%5Bi%5D%20%3C%201.0)%5Cn%5Ct%5Ct%5CtclipVolume(startPos%2C%20backPos%2C%20i%2C%20clipHi%5Bi%5D%2C%20false)%3B%5Cn%5Ct%7D%5Cn%7D%5Cn%5Cnfloat%20frac2ndc(vec3%20frac)%20%7B%5Cn%2F%2Fhttps%3A%2F%2Fstackoverflow.com%2Fquestions%2F7777913%2Fhow-to-render-depth-linearly-in-modern-opengl-with-gl-fragcoord-z-in-fragment-sh%5Cn%5Ctvec4%20pos%20%3D%20vec4(frac.xyz%2C%201.0)%3B%20%2F%2Ffraction%5Cn%5Ctvec4%20dim%20%3D%20vec4(vec3(textureSize(volume%2C%200))%2C%201.0)%3B%5Cn%5Ctpos%20%3D%20pos%20*%20dim%3B%5Cn%5Ctvec4%20shim%20%3D%20vec4(-0.5%2C%20-0.5%2C%20-0.5%2C%200.0)%3B%5Cn%5Ctpos%20%2B%3D%20shim%3B%5Cn%5Ctvec4%20mm%20%3D%20transpose(matRAS)%20*%20pos%3B%5Cn%5Ctfloat%20z_ndc%20%3D%20(mvpMtx%20*%20vec4(mm.xyz%2C%201.0)).z%3B%5Cn%5Ctreturn%20(z_ndc%20%2B%201.0)%20%2F%202.0%3B%5Cn%7D%22%2Bd%2Cu%3D%22void%20main()%20%7B%5Cn%5Ctif%20(fColor.x%20%3E%202.0)%20%7B%5Cn%5Ct%5CtfColor%20%3D%20vec4(1.0%2C%200.0%2C%200.0%2C%200.5)%3B%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ct%7D%5Cn%5CtfColor%20%3D%20vec4(0.0%2C0.0%2C0.0%2C0.0)%3B%5Cn%5Ctvec4%20clipPlaneColorX%20%3D%20clipPlaneColor%3B%5Cn%5Ct%2F%2Fif%20(clipPlaneColor.a%20%3C%200.0)%5Cn%5Ct%2F%2F%5CtclipPlaneColorX.a%20%3D%20-%201.0%3B%5Cn%5Ctbool%20isColorPlaneInVolume%20%3D%20false%3B%5Cn%5Ctif%20(clipPlaneColorX.a%20%3C%200.0)%20%7B%5Cn%5Ct%5CtisColorPlaneInVolume%20%3D%20true%3B%5Cn%5Ct%5CtclipPlaneColorX.a%20%3D%200.0%3B%5Cn%5Ct%7D%5Cn%5Ct%2F%2FfColor%20%3D%20vec4(vColor.rgb%2C%201.0)%3B%20return%3B%5Cn%5Ctvec3%20start%20%3D%20vColor%3B%5Cn%5Ctgl_FragDepth%20%3D%200.0%3B%5Cn%5Ctvec3%20backPosition%20%3D%20GetBackPosition(start)%3B%5Cn%5Ct%2F%2F%20fColor%20%3D%20vec4(backPosition%2C%201.0)%3B%20return%3B%5Cn%5Ctvec3%20dir%20%3D%20normalize(backPosition%20-%20start)%3B%5Cn%5CtclipVolumeStart(start%2C%20backPosition)%3B%5Cn%5Ctdir%20%3D%20normalize(dir)%3B%5Cn%5Ctfloat%20len%20%3D%20length(backPosition%20-%20start)%3B%5Cn%5Ctfloat%20lenVox%20%3D%20length((texVox%20*%20start)%20-%20(texVox%20*%20backPosition))%3B%5Cn%5Ctif%20((lenVox%20%3C%200.5)%20%7C%7C%20(len%20%3E%203.0))%20%7B%20%2F%2Flength%20limit%20for%20parallel%20rays%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ct%7D%5Cn%5Ctfloat%20sliceSize%20%3D%20len%20%2F%20lenVox%3B%20%2F%2Fe.g.%20if%20ray%20length%20is%201.0%20and%20traverses%2050%20voxels%2C%20each%20voxel%20is%200.02%20in%20unit%20cube%5Cn%5Ctfloat%20stepSize%20%3D%20sliceSize%3B%20%2F%2Fquality%3A%20larger%20step%20is%20faster%20traversal%2C%20but%20fewer%20samples%5Cn%5Ctfloat%20opacityCorrection%20%3D%20stepSize%2FsliceSize%3B%5Cn%5Ctvec4%20deltaDir%20%3D%20vec4(dir.xyz%20*%20stepSize%2C%20stepSize)%3B%5Cn%5Ctvec4%20samplePos%20%3D%20vec4(start.xyz%2C%200.0)%3B%20%2F%2Fray%20position%5Cn%5Ctfloat%20lenNoClip%20%3D%20len%3B%5Cn%5Ctbool%20isClip%20%3D%20false%3B%5Cn%5Ctvec4%20clipPos%20%3D%20applyClip(dir%2C%20samplePos%2C%20len%2C%20isClip)%3B%5Cn%5Ct%2F%2Fif%20((clipPos.a%20!%3D%20samplePos.a)%20%26%26%20(len%20%3C%203.0))%20%7B%5Cn%5Ct%2F%2Fstart%3A%20OPTIONAL%20fast%20pass%3A%20rapid%20traversal%20until%20first%20hit%5Cn%5Ctfloat%20stepSizeFast%20%3D%20sliceSize%20*%201.9%3B%5Cn%5Ctvec4%20deltaDirFast%20%3D%20vec4(dir.xyz%20*%20stepSizeFast%2C%20stepSizeFast)%3B%5Cn%5Ctwhile%20(samplePos.a%20%3C%3D%20len)%20%7B%5Cn%5Ct%5Ctfloat%20val%20%3D%20texture(volume%2C%20samplePos.xyz).a%3B%5Cn%5Ct%5Ctif%20(val%20%3E%200.01)%5Cn%5Ct%5Ct%5Ctbreak%3B%5Cn%5Ct%5CtsamplePos%20%2B%3D%20deltaDirFast%3B%20%2F%2Fadvance%20ray%20position%5Cn%5Ct%7D%5Cn%5Ctfloat%20drawOpacityA%20%3D%20renderDrawAmbientOcclusionXY.y%3B%5Cn%5Ctif%20((samplePos.a%20%3E%3D%20len)%20%26%26%20(((overlays%20%3C%201.0)%20%26%26%20(drawOpacityA%20%3C%3D%200.0)%20)%20%7C%7C%20(backgroundMasksOverlays%20%3E%200)))%20%20%7B%5Cn%5Ct%5Ctif%20(isClip)%5Cn%5Ct%5Ct%5CtfColor%20%2B%3D%20clipPlaneColorX%3B%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ct%7D%5Cn%5CtfColor%20%3D%20vec4(1.0%2C%201.0%2C%201.0%2C%201.0)%3B%5Cn%5Ct%2F%2Fgl_FragDepth%20%3D%20frac2ndc(samplePos.xyz)%3B%20%2F%2Fcrude%20due%20to%20fast%20pass%20resolution%5Cn%5CtsamplePos%20-%3D%20deltaDirFast%3B%5Cn%5Ctif%20(samplePos.a%20%3C%200.0)%5Cn%5Ct%5Ctvec4%20samplePos%20%3D%20vec4(start.xyz%2C%200.0)%3B%20%2F%2Fray%20position%5Cn%5Ct%2F%2Fend%3A%20fast%20pass%5Cn%5Ctvec4%20colAcc%20%3D%20vec4(0.0%2C0.0%2C0.0%2C0.0)%3B%5Cn%5Ctvec4%20firstHit%20%3D%20vec4(0.0%2C0.0%2C0.0%2C2.0%20*%20lenNoClip)%3B%5Cn%5Ctconst%20float%20earlyTermination%20%3D%200.95%3B%5Cn%5Ctfloat%20backNearest%20%3D%20len%3B%20%2F%2Fassume%20no%20hit%5Cn%5Ctfloat%20ran%20%3D%20fract(sin(gl_FragCoord.x%20*%2012.9898%20%2B%20gl_FragCoord.y%20*%2078.233)%20*%2043758.5453)%3B%5Cn%5CtsamplePos%20%2B%3D%20deltaDir%20*%20ran%3B%20%2F%2Fjitter%20ray%5Cn%22%2CA%3D%22%5Cn%5Ctif%20(firstHit.a%20%3C%20len)%5Cn%5Ct%5Ctgl_FragDepth%20%3D%20frac2ndc(firstHit.xyz)%3B%5Cn%5CtcolAcc.a%20%3D%20(colAcc.a%20%2F%20earlyTermination)%20*%20backOpacity%3B%5Cn%5CtfColor%20%3D%20colAcc%3B%5Cn%5Ct%2F%2Fif%20(isClip)%20%2F%2FCR%5Cn%5Ctif%20((isColorPlaneInVolume)%20%26%26%20(clipPos.a%20!%3D%20samplePos.a)%20%26%26%20(abs(firstHit.a%20-%20clipPos.a)%20%3C%20deltaDir.a))%5Cn%5Ct%5CtfColor.rgb%20%3D%20mix(fColor.rgb%2C%20clipPlaneColorX.rgb%2C%20abs(clipPlaneColor.a))%3B%5Cn%5Ct%5Ct%2F%2FfColor.rgb%20%3D%20mix(fColor.rgb%2C%20clipPlaneColorX.rgb%2C%20clipPlaneColorX.a%20*%200.65)%3B%5Cn%5Ctfloat%20renderDrawAmbientOcclusionX%20%3D%20renderDrawAmbientOcclusionXY.x%3B%5Cn%5Ctfloat%20drawOpacity%20%3D%20renderDrawAmbientOcclusionXY.y%3B%5Cn%5Ctif%20((overlays%20%3C%201.0)%20%26%26%20(drawOpacity%20%3C%3D%200.0))%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ct%2F%2Foverlay%20pass%5Cn%5Ctlen%20%3D%20lenNoClip%3B%5Cn%5CtsamplePos%20%3D%20vec4(start.xyz%2C%200.0)%3B%20%2F%2Fray%20position%5Cn%5Ct%2F%2Fstart%3A%20OPTIONAL%20fast%20pass%3A%20rapid%20traversal%20until%20first%20hit%5Cn%5CtstepSizeFast%20%3D%20sliceSize%20*%201.0%3B%5Cn%5CtdeltaDirFast%20%3D%20vec4(dir.xyz%20*%20stepSizeFast%2C%20stepSizeFast)%3B%5Cn%5Ctwhile%20(samplePos.a%20%3C%3D%20len)%20%7B%5Cn%5Ct%5Ctfloat%20val%20%3D%20texture(overlay%2C%20samplePos.xyz).a%3B%5Cn%5Ct%5Ctif%20(drawOpacity%20%3E%200.0)%5Cn%5Ct%5Ct%5Ctval%20%3D%20max(val%2C%20texture(drawing%2C%20samplePos.xyz).r)%3B%5Cn%5Ct%5Ctif%20(val%20%3E%200.001)%5Cn%5Ct%5Ct%5Ctbreak%3B%5Cn%5Ct%5CtsamplePos%20%2B%3D%20deltaDirFast%3B%20%2F%2Fadvance%20ray%20position%5Cn%5Ct%7D%5Cn%5Ctif%20(samplePos.a%20%3E%3D%20len)%20%7B%5Cn%5Ct%5Ctif%20(isClip%20%26%26%20(fColor.a%20%3D%3D%200.0))%5Cn%5Ct%5Ct%5Ct%5CtfColor%20%2B%3D%20clipPlaneColorX%3B%5Cn%5Ct%5Ct%5Ctreturn%3B%5Cn%5Ct%7D%5Cn%5CtsamplePos%20-%3D%20deltaDirFast%3B%5Cn%5Ctif%20(samplePos.a%20%3C%200.0)%5Cn%5Ct%5Ctvec4%20samplePos%20%3D%20vec4(start.xyz%2C%200.0)%3B%20%2F%2Fray%20position%5Cn%5Ct%2F%2Fend%3A%20fast%20pass%5Cn%5Ctfloat%20overFarthest%20%3D%20len%3B%5Cn%5CtcolAcc%20%3D%20vec4(0.0%2C%200.0%2C%200.0%2C%200.0)%3B%5Cn%5Cn%5CtsamplePos%20%2B%3D%20deltaDir%20*%20ran%3B%20%2F%2Fjitter%20ray%5Cn%5Ctvec4%20overFirstHit%20%3D%20vec4(0.0%2C0.0%2C0.0%2C2.0%20*%20len)%3B%5Cn%5Ctif%20(backgroundMasksOverlays%20%3E%200)%5Cn%5Ct%5CtsamplePos%20%3D%20firstHit%3B%5Cn%5Ctbool%20firstDraw%20%3D%20true%3B%5Cn%5Ctwhile%20(samplePos.a%20%3C%3D%20len)%20%7B%5Cn%5Ct%5Ctvec4%20colorSample%20%3D%20texture(overlay%2C%20samplePos.xyz)%3B%5Cn%5Ct%5Ctif%20((colorSample.a%20%3C%200.01)%20%26%26%20(drawOpacity%20%3E%200.0))%20%7B%5Cn%5Ct%5Ct%5Ctfloat%20val%20%3D%20texture(drawing%2C%20samplePos.xyz).r%3B%5Cn%5Ct%5Ct%5Ctvec4%20draw%20%3D%20drawColor(val%2C%20drawOpacity)%3B%5Cn%5Ct%5Ct%5Ctif%20((draw.a%20%3E%200.0)%20%26%26%20(firstDraw))%20%7B%5Cn%5Ct%5Ct%5Ct%5CtfirstDraw%20%3D%20false%3B%5Cn%5Ct%5Ct%5Ct%5Ctfloat%20sum%20%3D%200.0%3B%5Cn%5Ct%5Ct%5Ct%5Ctconst%20float%20mn%20%3D%201.0%20%2F%20256.0%3B%5Cn%5Ct%5Ct%5Ct%5Ctconst%20float%20sampleRadius%20%3D%201.1%3B%5Cn%5Ct%5Ct%5Ct%5Ctfloat%20dx%20%3D%20sliceSize%20*%20sampleRadius%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20center%20%3D%20samplePos.xyz%3B%5Cn%5Ct%5Ct%5Ct%5Ct%2F%2Fsix%20neighbors%20that%20share%20a%20face%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(0.0%2C0.0%2C%2Bdx)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(0.0%2C0.0%2C-dx)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(0.0%2C%2Bdx%2C0.0)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(0.0%2C-dx%2C0.0)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(%2Bdx%2C0.0%2C0.0)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(-dx%2C0.0%2C0.0)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%2F%2Ffloat%20proportion%20%3D%20(sum%20%2F%20mn)%20%2F%206.0%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cn%5Ct%5Ct%5Ct%5Ct%2F%2F12%20neighbors%20that%20share%20an%20edge%5Cn%5Ct%5Ct%5Ct%5Ctdx%20%3D%20sliceSize%20*%20sampleRadius%20*%20sqrt(2.0)%20*%200.5%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(0.0%2C%2Bdx%2C%2Bdx)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(%2Bdx%2C0.0%2C%2Bdx)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(%2Bdx%2C%2Bdx%2C0.0)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(0.0%2C-dx%2C-dx)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(-dx%2C0.0%2C-dx)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(-dx%2C-dx%2C0.0)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(0.0%2C%2Bdx%2C-dx)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(%2Bdx%2C0.0%2C-dx)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(%2Bdx%2C-dx%2C0.0)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(0.0%2C-dx%2C%2Bdx)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(-dx%2C0.0%2C%2Bdx)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(-dx%2C%2Bdx%2C0.0)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctfloat%20proportion%20%3D%20(sum%20%2F%20mn)%20%2F%2018.0%3B%20%2F%2Fproportion%20of%20six%20neighbors%20is%20non-zero%5Cn%5Ct%5Ct%5Ct%5Ct%5Cn%5Ct%5Ct%5Ct%5Ct%2F%2Fa%20high%20proportion%20of%20hits%20means%20crevice%5Cn%5Ct%5Ct%5Ct%5Ct%2F%2Fsince%20the%20AO%20term%20adds%20shadows%20that%20darken%20most%20voxels%2C%20it%20will%20result%20in%20dark%20surfaces%5Cn%5Ct%5Ct%5Ct%5Ct%2F%2Fthe%20term%20brighten%20adds%20a%20little%20illumination%20to%20balance%20this%5Cn%5Ct%5Ct%5Ct%5Ct%2F%2F%20without%20brighten%2C%20only%20the%20most%20extreme%20ridges%20will%20not%20be%20darker%5Cn%5Ct%5Ct%5Ct%5Ctconst%20float%20brighten%20%3D%201.2%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20ao%20%3D%20draw.rgb%20*%20(1.0%20-%20proportion)%20*%20brighten%3B%5Cn%5Ct%5Ct%5Ct%5Ctdraw.rgb%20%3D%20mix%20(draw.rgb%2C%20ao%20%2C%20renderDrawAmbientOcclusionX)%3B%5Cn%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5CtcolorSample%20%3D%20draw%3B%5Cn%5Ct%5Ct%7D%5Cn%5Ct%5CtsamplePos%20%2B%3D%20deltaDir%3B%20%2F%2Fadvance%20ray%20position%5Cn%5Ct%5Ctif%20(colorSample.a%20%3E%3D%200.01)%20%7B%5Cn%5Ct%5Ct%5Ctif%20(overFirstHit.a%20%3E%20len)%5Cn%5Ct%5Ct%5Ct%5CtoverFirstHit%20%3D%20samplePos%3B%5Cn%5Ct%5Ct%5CtcolorSample.a%20*%3D%20renderOverlayBlend%3B%5Cn%5Ct%5Ct%5CtcolorSample.a%20%3D%201.0-pow((1.0%20-%20colorSample.a)%2C%20opacityCorrection)%3B%5Cn%5Ct%5Ct%5CtcolorSample.rgb%20*%3D%20colorSample.a%3B%5Cn%5Ct%5Ct%5CtcolAcc%3D%20(1.0%20-%20colAcc.a)%20*%20colorSample%20%2B%20colAcc%3B%5Cn%5Ct%5Ct%5CtoverFarthest%20%3D%20samplePos.a%3B%5Cn%5Ct%5Ct%5Ctif%20(%20colAcc.a%20%3E%20earlyTermination%20)%5Cn%5Ct%5Ct%5Ct%5Ctbreak%3B%5Cn%5Ct%5Ct%7D%5Cn%5Ct%7D%5Cn%5Ct%2F%2Fif%20(samplePos.a%20%3E%3D%20len)%20%7B%5Cn%5Ctif%20(colAcc.a%20%3C%3D%200.0)%20%7B%5Cn%5Ct%5Ctif%20(isClip%20%26%26%20(fColor.a%20%3D%3D%200.0))%5Cn%5Ct%5Ct%5CtfColor%20%2B%3D%20clipPlaneColorX%3B%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ct%7D%5Cn%5Ctif%20(overFirstHit.a%20%3C%20firstHit.a)%5Cn%5Ct%5Ctgl_FragDepth%20%3D%20frac2ndc(overFirstHit.xyz)%3B%5Cn%5Ctfloat%20overMix%20%3D%20colAcc.a%3B%5Cn%5Ctfloat%20overlayDepth%20%3D%200.3%3B%5Cn%5Ctif%20(fColor.a%20%3C%3D%200.0)%5Cn%5Ct%5CtoverMix%20%3D%201.0%3B%5Cn%5Ctelse%20if%20(((overFarthest)%20%3E%20backNearest))%20%7B%5Cn%5Ct%5Ctfloat%20dx%20%3D%20(overFarthest%20-%20backNearest)%2F1.73%3B%5Cn%5Ct%5Ctdx%20%3D%20fColor.a%20*%20pow(dx%2C%20overlayDepth)%3B%5Cn%5Ct%5CtoverMix%20*%3D%201.0%20-%20dx%3B%5Cn%5Ct%7D%5Cn%5CtfColor.rgb%20%3D%20mix(fColor.rgb%2C%20colAcc.rgb%2C%20overMix)%3B%5Cn%5CtfColor.a%20%3D%20max(fColor.a%2C%20colAcc.a)%3B%5Cn%7D%22%2Cf%3D%22%23version%20300%20es%5Cn%23line%20215%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20vec3%20rayDir%3B%5Cnuniform%20vec3%20texVox%3B%5Cnuniform%20int%20backgroundMasksOverlays%3B%5Cnuniform%20vec3%20volScale%3B%5Cnuniform%20vec4%20clipPlane%3B%5Cnuniform%20highp%20sampler3D%20volume%2C%20overlay%3B%5Cnuniform%20float%20overlays%3B%5Cnuniform%20float%20clipThick%3B%5Cnuniform%20vec3%20clipLo%3B%5Cnuniform%20vec3%20clipHi%3B%5Cnuniform%20float%20backOpacity%3B%5Cnuniform%20mat4%20mvpMtx%3B%5Cnuniform%20mat4%20matRAS%3B%5Cnuniform%20vec4%20clipPlaneColor%3B%5Cnuniform%20float%20renderOverlayBlend%3B%5Cnuniform%20highp%20sampler3D%20drawing%3B%5Cnuniform%20highp%20sampler2D%20colormap%3B%5Cnuniform%20vec2%20renderDrawAmbientOcclusionXY%3B%5Cnin%20vec3%20vColor%3B%5Cnout%20vec4%20fColor%3B%5Cn%22%2Bm%2B%22%5Cn%5Ctvoid%20main()%20%7B%5Cn%5Ctvec3%20start%20%3D%20vColor%3B%5Cn%5Ctgl_FragDepth%20%3D%200.0%3B%5Cn%5Ctvec3%20backPosition%20%3D%20GetBackPosition(start)%3B%5Cn%5Ctvec3%20dir%20%3D%20normalize(backPosition%20-%20start)%3B%5Cn%5CtclipVolumeStart(start%2C%20backPosition)%3B%5Cn%5Ctfloat%20len%20%3D%20length(backPosition%20-%20start)%3B%5Cn%5Ctfloat%20lenVox%20%3D%20length((texVox%20*%20start)%20-%20(texVox%20*%20backPosition))%3B%5Cn%5Ctif%20((lenVox%20%3C%200.5)%20%7C%7C%20(len%20%3E%203.0))%20%7B%20%2F%2Flength%20limit%20for%20parallel%20rays%5Cn%5Ct%5CtfColor%20%3D%20vec4(0.0%2C0.0%2C0.0%2C0.0)%3B%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ct%7D%5Cn%5Ctfloat%20sliceSize%20%3D%20len%20%2F%20lenVox%3B%20%2F%2Fe.g.%20if%20ray%20length%20is%201.0%20and%20traverses%2050%20voxels%2C%20each%20voxel%20is%200.02%20in%20unit%20cube%5Cn%5Ctfloat%20stepSize%20%3D%20sliceSize%3B%20%2F%2Fquality%3A%20larger%20step%20is%20faster%20traversal%2C%20but%20fewer%20samples%5Cn%5Ctfloat%20opacityCorrection%20%3D%20stepSize%2FsliceSize%3B%5Cn%5Ctvec4%20deltaDir%20%3D%20vec4(dir.xyz%20*%20stepSize%2C%20stepSize)%3B%5Cn%5Ctvec4%20samplePos%20%3D%20vec4(start.xyz%2C%200.0)%3B%20%2F%2Fray%20position%5Cn%5Ctvec4%20colAcc%20%3D%20vec4(0.0%2C0.0%2C0.0%2C0.0)%3B%5Cn%5Ctvec4%20firstHit%20%3D%20vec4(0.0%2C0.0%2C0.0%2C2.0%20*%20len)%3B%5Cn%5Ctconst%20float%20earlyTermination%20%3D%200.95%3B%5Cn%5Ctfloat%20backNearest%20%3D%20len%3B%20%2F%2Fassume%20no%20hit%5Cn%5Ctfloat%20dis%20%3D%20len%3B%5Cn%5Ct%2F%2Fcheck%20if%20axial%20plane%20is%20closest%5Cn%5Ctvec4%20aClip%20%3D%20vec4(0.0%2C%200.0%2C%201.0%2C%20(1.0-%20clipPlane.z)%20-%200.5)%3B%5Cn%5Ctfloat%20adis%20%3D%20(-aClip.a%20-%20dot(aClip.xyz%2C%20samplePos.xyz-0.5))%20%2F%20dot(dir%2CaClip.xyz)%3B%5Cn%5Ctif%20(adis%20%3E%200.0)%5Cn%5Ct%5Ctdis%20%3D%20min(adis%2C%20dis)%3B%5Cn%5Ct%2F%2Fcheck%20of%20coronal%20plane%20is%20closest%5Cn%5Ctvec4%20cClip%20%3D%20vec4(0.0%2C%201.0%2C%200.0%2C%20(1.0-%20clipPlane.y)%20-%200.5)%3B%5Cn%5Ctfloat%20cdis%20%3D%20(-cClip.a%20-%20dot(cClip.xyz%2C%20samplePos.xyz-0.5))%20%2F%20dot(dir%2CcClip.xyz)%3B%5Cn%5Ctif%20(cdis%20%3E%200.0)%5Cn%5Ct%5Ctdis%20%3D%20min(cdis%2C%20dis)%3B%5Cn%5Ct%2F%2Fcheck%20if%20coronal%20slice%20is%20closest%5Cn%5Ctvec4%20sClip%20%3D%20vec4(1.0%2C%200.0%2C%200.0%2C%20(1.0-%20clipPlane.x)%20-%200.5)%3B%5Cn%5Ctfloat%20sdis%20%3D%20(-sClip.a%20-%20dot(sClip.xyz%2C%20samplePos.xyz-0.5))%20%2F%20dot(dir%2CsClip.xyz)%3B%5Cn%5Ctif%20(sdis%20%3E%200.0)%5Cn%5Ct%5Ctdis%20%3D%20min(sdis%2C%20dis)%3B%5Cn%5Ctif%20((dis%20%3E%200.0)%20%26%26%20(dis%20%3C%20len))%20%7B%5Cn%5Ct%5CtsamplePos%20%3D%20vec4(samplePos.xyz%2Bdir%20*%20dis%2C%20dis)%3B%5Cn%5Ct%5CtcolAcc%20%3D%20texture(volume%2C%20samplePos.xyz)%3B%5Cn%5Ct%5CtcolAcc.a%20%3D%20earlyTermination%3B%5Cn%5Ct%5CtfirstHit%20%3D%20samplePos%3B%5Cn%5Ct%5CtbackNearest%20%3D%20min(backNearest%2C%20samplePos.a)%3B%5Cn%5Ct%7D%5Cn%5Ct%2F%2Fthe%20following%20are%20only%20used%20by%20overlays%5Cn%5Ctvec4%20clipPlaneColorX%20%3D%20clipPlaneColor%3B%5Cn%5Ctbool%20isColorPlaneInVolume%20%3D%20false%3B%5Cn%5Ctfloat%20lenNoClip%20%3D%20len%3B%5Cn%5Ctbool%20isClip%20%3D%20false%3B%5Cn%5Ctvec4%20clipPos%20%3D%20applyClip(dir%2C%20samplePos%2C%20len%2C%20isClip)%3B%5Cn%5Ctfloat%20stepSizeFast%20%3D%20sliceSize%20*%201.9%3B%5Cn%5Ctvec4%20deltaDirFast%20%3D%20vec4(dir.xyz%20*%20stepSizeFast%2C%20stepSizeFast)%3B%5Cn%5Ctif%20(samplePos.a%20%3C%200.0)%5Cn%5Ct%5Ctvec4%20samplePos%20%3D%20vec4(start.xyz%2C%200.0)%3B%20%2F%2Fray%20position%5Cn%5Ctfloat%20ran%20%3D%20fract(sin(gl_FragCoord.x%20*%2012.9898%20%2B%20gl_FragCoord.y%20*%2078.233)%20*%2043758.5453)%3B%5Cn%5CtsamplePos%20%2B%3D%20deltaDir%20*%20ran%3B%20%2F%2Fjitter%20ray%5Cn%22%2BA%2Cg%3D%22%23version%20300%20es%5Cn%23line%20215%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20vec3%20rayDir%3B%5Cnuniform%20vec3%20texVox%3B%5Cnuniform%20int%20backgroundMasksOverlays%3B%5Cnuniform%20vec3%20volScale%3B%5Cnuniform%20vec4%20clipPlane%3B%5Cnuniform%20highp%20sampler3D%20volume%2C%20overlay%3B%5Cnuniform%20float%20overlays%3B%5Cnuniform%20float%20clipThick%3B%5Cnuniform%20vec3%20clipLo%3B%5Cnuniform%20vec3%20clipHi%3B%5Cnuniform%20float%20backOpacity%3B%5Cnuniform%20mat4%20mvpMtx%3B%5Cnuniform%20mat4%20matRAS%3B%5Cnuniform%20vec4%20clipPlaneColor%3B%5Cnuniform%20float%20renderOverlayBlend%3B%5Cnuniform%20highp%20sampler3D%20drawing%3B%5Cnuniform%20highp%20sampler2D%20colormap%3B%5Cnuniform%20vec2%20renderDrawAmbientOcclusionXY%3B%5Cnin%20vec3%20vColor%3B%5Cnout%20vec4%20fColor%3B%5Cn%22%2Bm%2Bu%2B%22while%20(samplePos.a%20%3C%3D%20len)%20%7B%5Cn%5Ct%5Ctvec4%20colorSample%20%3D%20texture(volume%2C%20samplePos.xyz)%3B%5Cn%5Ct%5CtsamplePos%20%2B%3D%20deltaDir%3B%20%2F%2Fadvance%20ray%20position%5Cn%5Ct%5Ctif%20(colorSample.a%20%3E%3D%200.01)%20%7B%5Cn%5Ct%5Ct%5Ctif%20(firstHit.a%20%3E%20lenNoClip)%5Cn%5Ct%5Ct%5Ct%5CtfirstHit%20%3D%20samplePos%3B%5Cn%5Ct%5Ct%5CtbackNearest%20%3D%20min(backNearest%2C%20samplePos.a)%3B%5Cn%5Ct%5Ct%5CtcolorSample.a%20%3D%201.0-pow((1.0%20-%20colorSample.a)%2C%20opacityCorrection)%3B%5Cn%5Ct%5Ct%5CtcolorSample.rgb%20*%3D%20colorSample.a%3B%5Cn%5Ct%5Ct%5CtcolAcc%3D%20(1.0%20-%20colAcc.a)%20*%20colorSample%20%2B%20colAcc%3B%5Cn%5Ct%5Ct%5Ctif%20(%20colAcc.a%20%3E%20earlyTermination%20)%5Cn%5Ct%5Ct%5Ct%5Ctbreak%3B%5Cn%5Ct%5Ct%7D%5Cn%5Ct%7D%5Cn%22%2BA%2Cp%3D%22%23version%20300%20es%5Cn%23line%20215%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20vec3%20rayDir%3B%5Cnuniform%20vec3%20texVox%3B%5Cnuniform%20int%20backgroundMasksOverlays%3B%5Cnuniform%20vec3%20volScale%3B%5Cnuniform%20vec4%20clipPlane%3B%5Cnuniform%20highp%20sampler3D%20volume%2C%20overlay%3B%5Cnuniform%20float%20overlays%3B%5Cnuniform%20float%20clipThick%3B%5Cnuniform%20vec3%20clipLo%3B%5Cnuniform%20vec3%20clipHi%3B%5Cnuniform%20float%20backOpacity%3B%5Cnuniform%20mat4%20mvpMtx%3B%5Cnuniform%20mat4%20normMtx%3B%5Cnuniform%20mat4%20matRAS%3B%5Cnuniform%20vec4%20clipPlaneColor%3B%5Cnuniform%20float%20renderOverlayBlend%3B%5Cnuniform%20highp%20sampler3D%20drawing%2C%20gradient%3B%5Cnuniform%20highp%20sampler2D%20colormap%3B%5Cnuniform%20highp%20sampler2D%20matCap%3B%5Cnuniform%20vec2%20renderDrawAmbientOcclusionXY%3B%5Cnuniform%20float%20gradientAmount%3B%5Cnin%20vec3%20vColor%3B%5Cnout%20vec4%20fColor%3B%5Cn%22%2Bm%2Bu%2B%22%5Cn%5Ctfloat%20startPos%20%3D%20samplePos.a%3B%5Cn%5Ctfloat%20clipClose%20%3D%20clipPos.a%20%2B%203.0%20*%20deltaDir.a%3B%20%2F%2Fdo%20not%20apply%20gradients%20near%20clip%20plane%5Cn%5Ctfloat%20brighten%20%3D%202.0%3B%20%2F%2Fmodulating%20makes%20average%20intensity%20darker%200.5%20*%200.5%20%3D%200.25%5Cn%5Ct%2F%2Fvec4%20prevGrad%20%3D%20vec4(0.0)%3B%5Cn%5Ctwhile%20(samplePos.a%20%3C%3D%20len)%20%7B%5Cn%5Ct%5Ctvec4%20colorSample%20%3D%20texture(volume%2C%20samplePos.xyz)%3B%5Cn%5Ct%5Ctif%20(colorSample.a%20%3E%3D%200.0)%20%7B%5Cn%5Ct%5Ct%5Ctvec4%20grad%20%3D%20texture(gradient%2C%20samplePos.xyz)%3B%5Cn%5Ct%5Ct%5Ctgrad.rgb%20%3D%20normalize(grad.rgb*2.0%20-%201.0)%3B%5Cn%5Ct%5Ct%5Ct%2F%2Fif%20(grad.a%20%3C%20prevGrad.a)%5Cn%5Ct%5Ct%5Ct%2F%2F%5Ctgrad.rgb%20%3D%20prevGrad.rgb%3B%5Cn%5Ct%5Ct%5Ct%2F%2FprevGrad%20%3D%20grad%3B%5Cn%5Ct%5Ct%5Ctvec3%20n%20%3D%20mat3(normMtx)%20*%20grad.rgb%3B%5Cn%5Ct%5Ct%5Ctn.y%20%3D%20-%20n.y%3B%5Cn%5Ct%5Ct%5Ctvec4%20mc%20%3D%20vec4(texture(matCap%2C%20n.xy%20*%200.5%20%2B%200.5).rgb%2C%201.0)%20*%20brighten%3B%5Cn%5Ct%5Ct%5Ctmc%20%3D%20mix(vec4(1.0)%2C%20mc%2C%20gradientAmount)%3B%5Cn%5Ct%5Ct%5Ctif%20(samplePos.a%20%3E%20clipClose)%5Cn%5Ct%5Ct%5Ct%5CtcolorSample.rgb%20*%3D%20mc.rgb%3B%5Cn%5Ct%5Ct%5Ctif%20(firstHit.a%20%3E%20lenNoClip)%5Cn%5Ct%5Ct%5Ct%5CtfirstHit%20%3D%20samplePos%3B%5Cn%5Ct%5Ct%5CtbackNearest%20%3D%20min(backNearest%2C%20samplePos.a)%3B%5Cn%5Ct%5Ct%5CtcolorSample.a%20%3D%201.0-pow((1.0%20-%20colorSample.a)%2C%20opacityCorrection)%3B%5Cn%5Ct%5Ct%5CtcolorSample.rgb%20*%3D%20colorSample.a%3B%5Cn%5Ct%5Ct%5CtcolAcc%3D%20(1.0%20-%20colAcc.a)%20*%20colorSample%20%2B%20colAcc%3B%5Cn%5Ct%5Ct%5Ctif%20(%20colAcc.a%20%3E%20earlyTermination%20)%5Cn%5Ct%5Ct%5Ct%5Ctbreak%3B%5Cn%5Ct%5Ct%7D%5Cn%5Ct%5CtsamplePos%20%2B%3D%20deltaDir%3B%20%2F%2Fadvance%20ray%20position%5Cn%5Ct%7D%5Cn%22%2BA%2Cv%3D%22%23version%20300%20es%5Cn%23line%20392%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnuniform%20int%20axCorSag%3B%5Cnuniform%20mat4%20mvpMtx%3B%5Cnuniform%20mat4%20frac2mm%3B%5Cnuniform%20float%20slice%3B%5Cnout%20vec3%20texPos%3B%5Cnvoid%20main(void)%20%7B%5Cn%5CttexPos%20%3D%20vec3(pos.x%2C%20pos.y%2C%20slice)%3B%5Cn%5Ctif%20(axCorSag%20%3E%201)%5Cn%5Ct%5CttexPos%20%3D%20vec3(slice%2C%20pos.x%2C%20pos.y)%3B%5Cn%5Ctelse%20if%20(axCorSag%20%3E%200)%5Cn%5Ct%5CttexPos%20%3D%20vec3(pos.x%2C%20slice%2C%20pos.y)%3B%5Cn%5Ctvec4%20mm%20%3D%20frac2mm%20*%20vec4(texPos%2C%201.0)%3B%5Cn%5Ctgl_Position%20%3D%20mvpMtx%20*%20mm%3B%5Cn%7D%22%2Cx%3D%22%23version%20300%20es%5Cn%23line%20411%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20highp%20sampler3D%20volume%2C%20overlay%3B%5Cnuniform%20int%20backgroundMasksOverlays%3B%5Cnuniform%20float%20overlayOutlineWidth%3B%5Cnuniform%20float%20overlayAlphaShader%3B%5Cnuniform%20int%20axCorSag%3B%5Cnuniform%20float%20overlays%3B%5Cnuniform%20float%20opacity%3B%5Cnuniform%20float%20drawOpacity%3B%5Cnuniform%20bool%20isAlphaClipDark%3B%5Cnuniform%20highp%20sampler3D%20drawing%3B%5Cnuniform%20highp%20sampler2D%20colormap%3B%5Cnin%20vec3%20texPos%3B%5Cnout%20vec4%20color%3B%22%2Bd%2B'void%20main()%20%7B%5Cn%5Ct%2F%2Fcolor%20%3D%20vec4(1.0%2C%200.0%2C%201.0%2C%201.0)%3Breturn%3B%5Cn%5Ctvec4%20background%20%3D%20texture(volume%2C%20texPos)%3B%5Cn%5Ctcolor%20%3D%20vec4(background.rgb%2C%20opacity)%3B%5Cn%5Ctif%20((isAlphaClipDark)%20%26%26%20(background.a%20%3D%3D%200.0))%20color.a%20%3D%200.0%3B%20%2F%2FFSLeyes%20clipping%20range%5Cn%5Ctvec4%20ocolor%20%3D%20vec4(0.0)%3B%5Cn%5Ctfloat%20overlayAlpha%20%3D%20overlayAlphaShader%3B%5Cn%5Ctif%20(overlays%20%3E%200.0)%20%7B%5Cn%5Ct%5Ctocolor%20%3D%20texture(overlay%2C%20texPos)%3B%5Cn%5Ct%5Ct%2F%2FdFdx%20for%20%22boxing%22%20issue%20435%20has%20aliasing%20on%20some%20implementations%20(coarse%20vs%20fine)%5Cn%5Ct%5Ct%2F%2Fhowever%2C%20this%20only%20identifies%2050%25%20of%20the%20edges%20due%20to%20aliasing%20effects%5Cn%5Ct%5Ct%2F%2F%20http%3A%2F%2Fwww.aclockworkberry.com%2Fshader-derivative-functions%2F%5Cn%5Ct%5Ct%2F%2F%20https%3A%2F%2Fbgolus.medium.com%2Fdistinctive-derivative-differences-cce38d36797b%5Cn%5Ct%5Ct%2F%2Fif%20((ocolor.a%20%3E%3D%201.0)%20%26%26%20((dFdx(ocolor.a)%20!%3D%200.0)%20%7C%7C%20(dFdy(ocolor.a)%20!%3D%200.0)%20%20))%5Cn%5Ct%5Ct%2F%2F%5Ctocolor.rbg%20%3D%20vec3(0.0%2C%200.0%2C%200.0)%3B%5Cn%5Ct%5Ctbool%20isOutlineBelowNotAboveThreshold%20%3D%20true%3B%5Cn%5Ct%5Ctif%20(isOutlineBelowNotAboveThreshold)%20%7B%5Cn%5Ct%5Ct%5Ctif%20((overlayOutlineWidth%20%3E%200.0)%20%26%26%20(ocolor.a%20%3C%201.0))%20%7B%20%2F%2Fcheck%20voxel%20neighbors%20for%20edge%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vx%20%3D%20(overlayOutlineWidth%20)%20%2F%20vec3(textureSize(overlay%2C%200))%3B%5Cn%5Ct%5Ct%5Ct%5Ct%2F%2F6%20voxel%20neighbors%20that%20share%20a%20face%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxR%20%3D%20vec3(texPos.x%2Bvx.x%2C%20texPos.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxL%20%3D%20vec3(texPos.x-vx.x%2C%20texPos.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxA%20%3D%20vec3(texPos.x%2C%20texPos.y%2Bvx.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxP%20%3D%20vec3(texPos.x%2C%20texPos.y-vx.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxS%20%3D%20vec3(texPos.x%2C%20texPos.y%2C%20texPos.z%2Bvx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxI%20%3D%20vec3(texPos.x%2C%20texPos.y%2C%20texPos.z-vx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctfloat%20a%20%3D%200.0%3B%5Cn%5Ct%5Ct%5Ct%5Ctif%20(axCorSag%20!%3D%202)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxR).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxL).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ctif%20(axCorSag%20!%3D%201)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxA).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxP).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ctif%20(axCorSag%20!%3D%200)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxS).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxI).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ctbool%20isCheckCorners%20%3D%20true%3B%5Cn%5Ct%5Ct%5Ct%5Ctif%20(isCheckCorners)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%2F%2F12%20voxel%20neighbors%20that%20share%20an%20edge%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxRA%20%3D%20vec3(texPos.x%2Bvx.x%2C%20texPos.y%2Bvx.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxLA%20%3D%20vec3(texPos.x-vx.x%2C%20texPos.y%2Bvx.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxRP%20%3D%20vec3(texPos.x%2Bvx.x%2C%20texPos.y-vx.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxLP%20%3D%20vec3(texPos.x-vx.x%2C%20texPos.y-vx.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxRS%20%3D%20vec3(texPos.x%2Bvx.x%2C%20texPos.y%2C%20texPos.z%2Bvx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxLS%20%3D%20vec3(texPos.x-vx.x%2C%20texPos.y%2C%20texPos.z%2Bvx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxRI%20%3D%20vec3(texPos.x%2Bvx.x%2C%20texPos.y%2C%20texPos.z-vx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxLI%20%3D%20vec3(texPos.x-vx.x%2C%20texPos.y%2C%20texPos.z-vx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxAS%20%3D%20vec3(texPos.x%2C%20texPos.y%2Bvx.y%2C%20texPos.z%2Bvx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxPS%20%3D%20vec3(texPos.x%2C%20texPos.y-vx.y%2C%20texPos.z%2Bvx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxAI%20%3D%20vec3(texPos.x%2C%20texPos.y%2Bvx.y%2C%20texPos.z-vx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxPI%20%3D%20vec3(texPos.x%2C%20texPos.y-vx.y%2C%20texPos.z-vx.z)%3B%5Cn%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctif%20(axCorSag%20%3D%3D%200)%20%7B%20%2F%2Faxial%20corners%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxRA).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxLA).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxRP).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxLP).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctif%20(axCorSag%20%3D%3D%201)%20%7B%20%2F%2Fcoronal%20corners%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxRS).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxLS).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxRI).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxLI).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctif%20(axCorSag%20%3D%3D%202)%20%7B%20%2F%2Fsagittal%20corners%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxAS).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxPS).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxAI).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxPI).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ctif%20(a%20%3E%3D%201.0)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctocolor%20%3D%20vec4(0.0%2C%200.0%2C%200.0%2C%201.0)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5CtoverlayAlpha%20%3D%201.0%3B%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%7D%5Cn%5Cn%5Ct%5Ct%7D%20else%20%7B%5Cn%5Ct%5Ct%5Ctif%20((overlayOutlineWidth%20%3E%200.0)%20%26%26%20(ocolor.a%20%3E%3D%201.0))%20%7B%20%2F%2Fcheck%20voxel%20neighbors%20for%20edge%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vx%20%3D%20(overlayOutlineWidth%20)%20%2F%20vec3(textureSize(overlay%2C%200))%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxR%20%3D%20vec3(texPos.x%2Bvx.x%2C%20texPos.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxL%20%3D%20vec3(texPos.x-vx.x%2C%20texPos.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxA%20%3D%20vec3(texPos.x%2C%20texPos.y%2Bvx.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxP%20%3D%20vec3(texPos.x%2C%20texPos.y-vx.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxS%20%3D%20vec3(texPos.x%2C%20texPos.y%2C%20texPos.z%2Bvx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxI%20%3D%20vec3(texPos.x%2C%20texPos.y%2C%20texPos.z-vx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctfloat%20a%20%3D%201.0%3B%5Cn%5Ct%5Ct%5Ct%5Ctif%20(axCorSag%20!%3D%202)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20min(a%2C%20texture(overlay%2C%20vxR).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20min(a%2C%20texture(overlay%2C%20vxL).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ctif%20(axCorSag%20!%3D%201)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20min(a%2C%20texture(overlay%2C%20vxA).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20min(a%2C%20texture(overlay%2C%20vxP).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ctif%20(axCorSag%20!%3D%200)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20min(a%2C%20texture(overlay%2C%20vxS).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20min(a%2C%20texture(overlay%2C%20vxI).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ctif%20(a%20%3C%201.0)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctocolor%20%3D%20vec4(0.0%2C%200.0%2C%200.0%2C%201.0)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5CtoverlayAlpha%20%3D%201.0%3B%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%7D%20%2F%2Foutline%20above%20threshold%5Cn%5Ct%7D%5Cn%5Cn'%2Cw%3D%22%5Ctocolor.a%20*%3D%20overlayAlpha%3B%5Cn%5Ctvec4%20dcolor%20%3D%20drawColor(texture(drawing%2C%20texPos).r%2C%20drawOpacity)%3B%5Cn%5Ctif%20(dcolor.a%20%3E%200.0)%20%7B%5Cn%5Ct%5Ctcolor.rgb%20%3D%20mix(color.rgb%2C%20dcolor.rgb%2C%20dcolor.a)%3B%5Cn%5Ct%5Ctcolor.a%20%3D%20max(drawOpacity%2C%20color.a)%3B%5Cn%5Ct%7D%5Cn%5Ctif%20((backgroundMasksOverlays%20%3E%200)%20%26%26%20(background.a%20%3D%3D%200.0))%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ctfloat%20a%20%3D%20color.a%20%2B%20ocolor.a%20*%20(1.0%20-%20color.a)%3B%20%2F%2F%20premultiplied%20alpha%5Cn%5Ctif%20(a%20%3D%3D%200.0)%20return%3B%5Cn%5Ctcolor.rgb%20%3D%20mix(color.rgb%2C%20ocolor.rgb%2C%20ocolor.a%20%2F%20a)%3B%5Cn%5Ctcolor.a%20%3D%20a%3B%5Cn%7D%22%2CC%3Dx%2Bw%2Cb%3Dx%2B%22%5Ctif%20(ocolor.a%20%3E%200.0)%20%7B%5Cn%5Ct%5Ct%2F%2Fhttps%3A%2F%2Fgamedev.stackexchange.com%2Fquestions%2F102889%2Fis-it-possible-to-convert-vec4-to-int-in-glsl-using-opengl-es%5Cn%5Ct%5Ctuint%20alpha%20%3D%20uint(ocolor.a%20*%20255.0)%3B%5Cn%5Ct%5Ctvec3%20xyzFlip%20%3D%20vec3(float((uint(1)%20%26%20alpha)%20%3E%20uint(0))%2C%20float((uint(2)%20%26%20alpha)%20%3E%20uint(0))%2C%20float((uint(4)%20%26%20alpha)%20%3E%20uint(0)))%3B%5Cn%5Ct%5Ct%2F%2Fconvert%20from%200%20and%201%20to%20-1%20and%201%5Cn%5Ct%5CtxyzFlip%20%3D%20(xyzFlip%20*%202.0)%20-%201.0%3B%5Cn%5Ct%5Ct%2F%2Fhttps%3A%2F%2Fmath.stackexchange.com%2Fquestions%2F1905533%2Ffind-perpendicular-distance-from-point-to-line-in-3d%5Cn%5Ct%5Ct%2F%2Fv1%20principle%20direction%20of%20tensor%20for%20this%20voxel%5Cn%5Ct%5Ctvec3%20v1%20%3D%20ocolor.rgb%3B%5Cn%5Ct%5Ct%2F%2Fflips%20encode%20polarity%20to%20convert%20from%200..1%20to%20-1..1%20(27%20bits%20vs%2024%20bit%20precision)%5Cn%5Ct%5Ctv1%20%3D%20normalize(%20v1%20*%20xyzFlip)%3B%5Cn%5Ct%5Ctvec3%20vxl%20%3D%20fract(texPos%20*%20vec3(textureSize(volume%2C%200)))%20-%200.5%3B%5Cn%5Ct%5Ct%2F%2Fvxl%20coordinates%20now%20-0.5..%2B0.5%20so%200%2C0%2C0%20is%20origin%5Cn%5Ct%5Ctvxl.x%20%3D%20-vxl.x%3B%5Cn%5Ct%5Ctfloat%20t%20%3D%20dot(vxl%2Cv1)%3B%5Cn%5Ct%5Ctvec3%20P%20%3D%20t%20*%20v1%3B%5Cn%5Ct%5Ctfloat%20dx%20%3D%20length(P-vxl)%3B%5Cn%5Ct%5Ctocolor.a%20%3D%201.0%20-%20smoothstep(0.2%2C0.25%2C%20dx)%3B%5Cn%5Ct%5Ct%2F%2Fif%20modulation%20was%20applied%2C%20use%20that%20to%20scale%20alpha%20not%20color%3A%5Cn%5Ct%5Ctocolor.a%20*%3D%20length(ocolor.rgb)%3B%5Cn%5Ct%5Ctocolor.rgb%20%3D%20normalize(ocolor.rgb)%3B%5Cn%5Ct%5Ct%2F%2Fcompute%20distance%20one%20half%20voxel%20closer%20to%20viewer%3A%5Cn%5Ct%5Ctfloat%20pan%20%3D%200.5%3B%5Cn%5Ct%5Ctif%20(axCorSag%20%3D%3D%200)%5Cn%5Ct%5Ct%5Ctvxl.z%20-%3D%20pan%3B%5Cn%5Ct%5Ctif%20(axCorSag%20%3D%3D%201)%5Cn%5Ct%5Ct%5Ctvxl.y%20-%3D%20pan%3B%5Cn%5Ct%5Ctif%20(axCorSag%20%3D%3D%202)%5Cn%5Ct%5Ct%5Ctvxl.x%20%2B%3D%20pan%3B%5Cn%5Ct%5Ctt%20%3D%20dot(vxl%2Cv1)%3B%5Cn%5Ct%5CtP%20%3D%20t%20*%20v1%3B%5Cn%5Ct%5Ctfloat%20dx2%20%3D%20length(P-vxl)%3B%5Cn%5Ct%5Ctocolor.rgb%20%2B%3D%20(dx2-dx-(0.5%20*%20pan))%20*%201.0%3B%5Cn%5Ct%7D%5Cn%22%2Bw%2Cy%3D%22%23version%20300%20es%5Cn%23line%20480%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20vec4%20lineColor%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctcolor%20%3D%20lineColor%3B%5Cn%7D%22%2CI%3D%22%23version%20300%20es%5Cn%23line%20613%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec3%20vPos%3B%5Cnout%20vec2%20TexCoord%3B%5Cnvoid%20main()%20%7B%5Cn%5CtTexCoord%20%3D%20vPos.xy%3B%5Cn%5Ctgl_Position%20%3D%20vec4(%20(vPos.xy-vec2(0.5%2C0.5))%20*%202.0%2C%200.0%2C%201.0)%3B%5Cn%7D%22%2CM%3D%22%23version%20300%20es%5Cnuniform%20highp%20usampler3D%20intensityVol%3B%5Cn%22%2CD%3D%22%23version%20300%20es%5Cnuniform%20highp%20isampler3D%20intensityVol%3B%5Cn%22%2CF%3D%22%23version%20300%20es%5Cnuniform%20highp%20sampler3D%20intensityVol%3B%5Cn%22%2CV%3D%22%23line%20636%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec2%20TexCoord%3B%5Cnout%20vec4%20FragColor%3B%5Cnuniform%20float%20coordZ%3B%5Cnuniform%20float%20layer%3B%5Cnuniform%20highp%20sampler2D%20colormap%3B%5Cnuniform%20lowp%20sampler3D%20blend3D%3B%5Cnuniform%20float%20opacity%3B%5Cnuniform%20vec4%20xyzaFrac%3B%5Cnuniform%20mat4%20mtx%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ctvec4%20vx%20%3D%20vec4(TexCoord.x%2C%20TexCoord.y%2C%20coordZ%2C%201.0)%20*%20mtx%3B%5Cn%5Ctuint%20idx%20%3D%20uint(texture(intensityVol%2C%20vx.xyz).r)%3B%5Cn%5CtFragColor%20%3D%20vec4(0.0%2C%200.0%2C%200.0%2C%200.0)%3B%5Cn%5Ctif%20(idx%20%3D%3D%20uint(0))%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ct%2F%2Fidx%20%3D%20((idx%20-%20uint(1))%20%25%20uint(100))%2Buint(1)%3B%5Cn%5Ctfloat%20textureWidth%20%3D%20float(textureSize(colormap%2C%200).x)%3B%5Cn%5Ctfloat%20fx%20%3D%20(float(idx)%2B0.5)%20%2F%20textureWidth%3B%5Cn%5Ctfloat%20nlayer%20%3D%20float(textureSize(colormap%2C%200).y)%3B%5Cn%5Ctfloat%20y%20%3D%20((2.0%20*%20layer)%20%2B%201.5)%2Fnlayer%3B%5Cn%5CtFragColor%20%3D%20texture(colormap%2C%20vec2(fx%2C%20y)).rgba%3B%5Cn%5Ctfloat%20alpha%20%3D%20FragColor.a%3B%5Cn%5CtFragColor.a%20*%3D%20opacity%3B%5Cn%5Ctif%20(xyzaFrac.a%20%3E%200.0)%20%7B%20%2F%2Foutline%5Cn%5Ct%5Ctvx%20%3D%20vec4(TexCoord.x%2BxyzaFrac.x%2C%20TexCoord.y%2C%20coordZ%2C%201.0)%20*%20mtx%3B%5Cn%5Ct%5Ctuint%20R%20%3D%20uint(texture(intensityVol%2C%20vx.xyz).r)%3B%5Cn%5Ct%5Ctvx%20%3D%20vec4(TexCoord.x-xyzaFrac.x%2C%20TexCoord.y%2C%20coordZ%2C%201.0)%20*%20mtx%3B%5Cn%5Ct%5Ctuint%20L%20%3D%20uint(texture(intensityVol%2C%20vx.xyz).r)%3B%5Cn%5Ct%5Ctvx%20%3D%20vec4(TexCoord.x%2C%20TexCoord.y%2BxyzaFrac.y%2C%20coordZ%2C%201.0)%20*%20mtx%3B%5Cn%5Ct%5Ctuint%20A%20%3D%20uint(texture(intensityVol%2C%20vx.xyz).r)%3B%5Cn%5Ct%5Ctvx%20%3D%20vec4(TexCoord.x%2C%20TexCoord.y-xyzaFrac.y%2C%20coordZ%2C%201.0)%20*%20mtx%3B%5Cn%5Ct%5Ctuint%20P%20%3D%20uint(texture(intensityVol%2C%20vx.xyz).r)%3B%5Cn%5Ct%5Ctvx%20%3D%20vec4(TexCoord.x%2C%20TexCoord.y%2C%20coordZ%2BxyzaFrac.z%2C%201.0)%20*%20mtx%3B%5Cn%5Ct%5Ctuint%20S%20%3D%20uint(texture(intensityVol%2C%20vx.xyz).r)%3B%5Cn%5Ct%5Ctvx%20%3D%20vec4(TexCoord.x%2C%20TexCoord.y%2C%20coordZ-xyzaFrac.z%2C%201.0)%20*%20mtx%3B%5Cn%5Ct%5Ctuint%20I%20%3D%20uint(texture(intensityVol%2C%20vx.xyz).r)%3B%5Cn%5Ct%5Ctif%20((idx%20!%3D%20R)%20%7C%7C%20(idx%20!%3D%20L)%20%7C%7C%20(idx%20!%3D%20A)%20%7C%7C%20(idx%20!%3D%20P)%20%7C%7C%20(idx%20!%3D%20S)%20%7C%7C%20(idx%20!%3D%20I))%5Cn%5Ct%5Ct%5CtFragColor.a%20%3D%20alpha%20*%20xyzaFrac.a%3B%5Cn%5Ct%7D%5Cn%7D%22%2CT%3D%22%23line%20691%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec2%20TexCoord%3B%5Cnout%20vec4%20FragColor%3B%5Cnuniform%20float%20coordZ%3B%5Cnuniform%20float%20layer%3B%5Cnuniform%20float%20scl_slope%3B%5Cnuniform%20float%20scl_inter%3B%5Cnuniform%20float%20cal_max%3B%5Cnuniform%20float%20cal_min%3B%5Cnuniform%20float%20cal_maxNeg%3B%5Cnuniform%20float%20cal_minNeg%3B%5Cnuniform%20bool%20isAlphaThreshold%3B%5Cnuniform%20bool%20isAdditiveBlend%3B%5Cnuniform%20highp%20sampler2D%20colormap%3B%5Cnuniform%20lowp%20sampler3D%20blend3D%3B%5Cnuniform%20int%20modulation%3B%5Cnuniform%20highp%20sampler3D%20modulationVol%3B%5Cnuniform%20float%20opacity%3B%5Cnuniform%20mat4%20mtx%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ctvec4%20vx%20%3D%20vec4(TexCoord.xy%2C%20coordZ%2C%201.0)%20*%20mtx%3B%5Cn%5Ctif%20((vx.x%20%3C%200.0)%20%7C%7C%20(vx.x%20%3E%201.0)%20%7C%7C%20(vx.y%20%3C%200.0)%20%7C%7C%20(vx.y%20%3E%201.0)%20%7C%7C%20(vx.z%20%3C%200.0)%20%7C%7C%20(vx.z%20%3E%201.0))%20%7B%5Cn%5Ct%5Ct%2F%2Fset%20transparent%20if%20out%20of%20range%5Cn%5Ct%5Ct%2F%2Fhttps%3A%2F%2Fwebglfundamentals.org%2Fwebgl%2Fwebgl-3d-textures-repeat-clamp.html%5Cn%5Ct%5CtFragColor%20%3D%20texture(blend3D%2C%20vec3(TexCoord.xy%2C%20coordZ))%3B%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ct%7D%5Cn%5Ctfloat%20f%20%3D%20(scl_slope%20*%20float(texture(intensityVol%2C%20vx.xyz).r))%20%2B%20scl_inter%3B%5Cn%5Ctfloat%20mn%20%3D%20cal_min%3B%5Cn%5Ctfloat%20mx%20%3D%20cal_max%3B%5Cn%5Ctif%20(isAlphaThreshold)%5Cn%5Ct%5Ctmn%20%3D%200.0%3B%5Cn%5Ctfloat%20r%20%3D%20max(0.00001%2C%20abs(mx%20-%20mn))%3B%5Cn%5Ctmn%20%3D%20min(mn%2C%20mx)%3B%5Cn%5Ctfloat%20txl%20%3D%20mix(0.0%2C%201.0%2C%20(f%20-%20mn)%20%2F%20r)%3B%5Cn%5Ct%2F%2Fhttps%3A%2F%2Fstackoverflow.com%2Fquestions%2F5879403%2Fopengl-texture-coordinates-in-pixel-space%5Cn%5Ctfloat%20nlayer%20%3D%20float(textureSize(colormap%2C%200).y)%3B%5Cn%5Ct%2F%2Feach%20volume%20has%20two%20color%20maps%3A%5Cn%5Ct%2F%2F%20(layer*2)%20%3D%20negative%20and%20(layer%20*%202)%20%2B%201%20%3D%20postive%5Cn%5Ctfloat%20y%20%3D%20((2.0%20*%20layer)%20%2B%201.5)%2Fnlayer%3B%5Cn%5CtFragColor%20%3D%20texture(colormap%2C%20vec2(txl%2C%20y)).rgba%3B%5Cn%5Ct%2F%2Fnegative%20colors%5Cn%5Ctmn%20%3D%20cal_minNeg%3B%5Cn%5Ctmx%20%3D%20cal_maxNeg%3B%5Cn%5Ctif%20(isAlphaThreshold)%5Cn%5Ct%5Ctmx%20%3D%200.0%3B%5Cn%5Ct%2F%2Fif%20((!isnan(cal_minNeg))%20%26%26%20(%20f%20%3C%20mx))%20%7B%5Cn%5Ctif%20((cal_minNeg%20%3C%20cal_maxNeg)%20%26%26%20(%20f%20%3C%20mx))%20%7B%5Cn%5Ct%5Ctr%20%3D%20max(0.00001%2C%20abs(mx%20-%20mn))%3B%5Cn%5Ct%5Ctmn%20%3D%20min(mn%2C%20mx)%3B%5Cn%5Ct%5Cttxl%20%3D%201.0%20-%20mix(0.0%2C%201.0%2C%20(f%20-%20mn)%20%2F%20r)%3B%5Cn%5Ct%5Cty%20%3D%20((2.0%20*%20layer)%20%2B%200.5)%2Fnlayer%3B%5Cn%5Ct%5CtFragColor%20%3D%20texture(colormap%2C%20vec2(txl%2C%20y))%3B%5Cn%5Ct%7D%5Cn%5Ctif%20(layer%20%3E%200.7)%5Cn%5Ct%5CtFragColor.a%20%3D%20step(0.00001%2C%20FragColor.a)%3B%5Cn%5Ct%2F%2Fif%20(modulation%20%3E%2010)%5Cn%5Ct%2F%2F%5CtFragColor.a%20*%3D%20texture(modulationVol%2C%20vx.xyz).r%3B%5Cn%5Ct%2F%2F%5CtFragColor.rgb%20*%3D%20texture(modulationVol%2C%20vx.xyz).r%3B%5Cn%5Ctif%20(isAlphaThreshold)%20%7B%5Cn%5Ct%5Ctif%20((cal_minNeg%20!%3D%20cal_maxNeg)%20%26%26%20(%20f%20%3C%200.0)%20%26%26%20(f%20%3E%20cal_maxNeg))%5Cn%5Ct%5Ct%5CtFragColor.a%20%3D%20pow(-f%20%2F%20-cal_maxNeg%2C%202.0)%3B%5Cn%5Ct%5Ctelse%20if%20((f%20%3E%200.0)%20%26%26%20(cal_min%20%3E%200.0))%5Cn%5Ct%5Ct%5CtFragColor.a%20*%3D%20pow(f%20%2F%20cal_min%2C%202.0)%3B%20%2F%2Fissue435%3A%20%20A%20%3D%20(V%2FX)**2%5Cn%5Ct%5Ct%2F%2FFragColor.g%20%3D%200.0%3B%5Cn%5Ct%7D%5Cn%5Ctif%20(modulation%20%3D%3D%201)%20%7B%5Cn%5Ct%5CtFragColor.rgb%20*%3D%20texture(modulationVol%2C%20vx.xyz).r%3B%5Cn%5Ct%7D%20else%20if%20(modulation%20%3D%3D%202)%20%7B%5Cn%5Ct%5CtFragColor.a%20%3D%20texture(modulationVol%2C%20vx.xyz).r%3B%5Cn%5Ct%7D%5Cn%5CtFragColor.a%20*%3D%20opacity%3B%5Cn%5Ctif%20(layer%20%3C%201.0)%20return%3B%5Cn%5Ctvec4%20prevColor%20%3D%20texture(blend3D%2C%20vec3(TexCoord.xy%2C%20coordZ))%3B%5Cn%5Ct%2F%2F%20https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FAlpha_compositing%5Cn%5Ctfloat%20aout%20%3D%20FragColor.a%20%2B%20(1.0%20-%20FragColor.a)%20*%20prevColor.a%3B%5Cn%5Ctif%20(aout%20%3C%3D%200.0)%20return%3B%5Cn%5Ctif%20(isAdditiveBlend)%5Cn%5Ct%5CtFragColor.rgb%20%3D%20((FragColor.rgb%20*%20FragColor.a)%20%2B%20(prevColor.rgb%20*%20prevColor.a))%20%2F%20aout%3B%5Cn%5Ctelse%5Cn%5Ct%5CtFragColor.rgb%20%3D%20((FragColor.rgb%20*%20FragColor.a)%20%2B%20(prevColor.rgb%20*%20prevColor.a%20*%20(1.0%20-%20FragColor.a)))%20%2F%20aout%3B%5Cn%5CtFragColor.a%20%3D%20aout%3B%5Cn%7D%22%2CE%3D%22%23version%20300%20es%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnlayout(location%3D1)%20in%20vec4%20norm%3B%5Cnlayout(location%3D2)%20in%20vec4%20clr%3B%5Cnuniform%20mat4%20mvpMtx%3B%5Cn%2F%2Funiform%20mat4%20modelMtx%3B%5Cnuniform%20mat4%20normMtx%3B%5Cnout%20vec4%20vClr%3B%5Cnout%20vec3%20vN%3B%5Cnout%20vec4%20vPc%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ctvec3%20lightPosition%20%3D%20vec3(0.0%2C%200.0%2C%20-10.0)%3B%5Cn%5CtvPc%20%3D%20mvpMtx%20*%20vec4(pos%2C%201.0)%3B%5Cn%5Ctgl_Position%20%3D%20vPc%3B%5Cn%5CtvN%20%3D%20normalize((normMtx%20*%20vec4(norm.xyz%2C1.0)).xyz)%3B%5Cn%5Ct%2F%2FvV%20%3D%20-vec3(modelMtx*vec4(pos%2C1.0))%3B%5Cn%5CtvClr%20%3D%20clr%3B%5Cn%7D%22%2CS%3D%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnflat%20in%20vec3%20vN%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctvec3%20r%20%3D%20vec3(0.0%2C%200.0%2C%201.0)%3B%20%2F%2FrayDir%3A%20for%20orthographic%20projections%20moving%20in%20Z%20direction%20(no%20need%20for%20normal%20matrix)%5Cn%5Ctfloat%20ambient%20%3D%200.35%3B%5Cn%5Ctfloat%20diffuse%20%3D%200.5%3B%5Cn%5Ctfloat%20specular%20%3D%200.2%3B%5Cn%5Ctfloat%20shininess%20%3D%2010.0%3B%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ctvec3%20lightPosition%20%3D%20vec3(0.0%2C%2010.0%2C%20-5.0)%3B%5Cn%5Ctvec3%20l%20%3D%20normalize(lightPosition)%3B%5Cn%5Ctfloat%20lightNormDot%20%3D%20dot(n%2C%20l)%3B%5Cn%5Ctvec3%20a%20%3D%20vClr.rgb%20*%20ambient%3B%5Cn%5Ctvec3%20d%20%3D%20max(lightNormDot%2C%200.0)%20*%20vClr.rgb%20*%20diffuse%3B%5Cn%5Ctfloat%20s%20%3D%20specular%20*%20pow(max(dot(reflect(l%2C%20n)%2C%20r)%2C%200.0)%2C%20shininess)%3B%5Cn%5Ctcolor%20%3D%20vec4(a%20%2B%20d%20%2B%20s%2C%20opacity)%3B%5Cn%7D%22%2CB%3D%22%23version%20300%20es%5Cn%23line%201260%5Cn%2F%2Fprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20vec3%20rayDir%3B%5Cnuniform%20vec3%20volScale%3B%5Cnuniform%20vec3%20texVox%3B%5Cnuniform%20vec4%20clipPlane%3B%5Cnuniform%20highp%20sampler3D%20volume%2C%20overlay%3B%5Cnuniform%20float%20overlays%3B%5Cnuniform%20float%20clipThick%3B%5Cnuniform%20vec3%20clipLo%3B%5Cnuniform%20vec3%20clipHi%3B%5Cnuniform%20mat4%20matRAS%3B%5Cnuniform%20mat4%20mvpMtx%3B%5Cnuniform%20float%20drawOpacity%2C%20renderOverlayBlend%3B%5Cnuniform%20highp%20sampler3D%20drawing%3B%5Cnuniform%20highp%20sampler2D%20colormap%3B%5Cnuniform%20int%20backgroundMasksOverlays%3B%5Cnin%20vec3%20vColor%3B%5Cnout%20vec4%20fColor%3B%5Cn%22%2Bm%2B%22%5Cnvoid%20main()%20%7B%5Cn%5Ctint%20id%20%3D%20254%3B%5Cn%5Ctvec3%20start%20%3D%20vColor%3B%5Cn%5Ctgl_FragDepth%20%3D%200.0%3B%5Cn%5CtfColor%20%3D%20vec4(0.0%2C%200.0%2C%200.0%2C%200.0)%3B%20%2F%2Fassume%20no%20hit%3A%20ID%20%3D%200%5Cn%5Ctfloat%20fid%20%3D%20float(id%20%26%20255)%2F%20255.0%3B%5Cn%5Ctvec3%20backPosition%20%3D%20GetBackPosition(start)%3B%5Cn%5Ctvec3%20dir%20%3D%20normalize(backPosition%20-%20start)%3B%5Cn%5CtclipVolumeStart(start%2C%20backPosition)%3B%5Cn%5Ctfloat%20len%20%3D%20length(backPosition%20-%20start)%3B%5Cn%5Ctfloat%20lenVox%20%3D%20length((texVox%20*%20start)%20-%20(texVox%20*%20backPosition))%3B%5Cn%5Ctif%20((lenVox%20%3C%200.5)%20%7C%7C%20(len%20%3E%203.0))%20return%3B%2F%2Fdiscard%3B%20%2F%2Flength%20limit%20for%20parallel%20rays%5Cn%5Ctfloat%20sliceSize%20%3D%20len%20%2F%20lenVox%3B%20%2F%2Fe.g.%20if%20ray%20length%20is%201.0%20and%20traverses%2050%20voxels%2C%20each%20voxel%20is%200.02%20in%20unit%20cube%5Cn%5Ctfloat%20stepSize%20%3D%20sliceSize%3B%20%2F%2Fquality%3A%20larger%20step%20is%20faster%20traversal%2C%20but%20fewer%20samples%5Cn%5Ctfloat%20opacityCorrection%20%3D%20stepSize%2FsliceSize%3B%5Cn%5Ctdir%20%3D%20normalize(dir)%3B%5Cn%5Ctvec4%20samplePos%20%3D%20vec4(start.xyz%2C%200.0)%3B%20%2F%2Fray%20position%5Cn%5Ctfloat%20lenNoClip%20%3D%20len%3B%5Cn%5Ctbool%20isClip%20%3D%20false%3B%5Cn%5Ctvec4%20clipPos%20%3D%20applyClip(dir%2C%20samplePos%2C%20len%2C%20isClip)%3B%5Cn%5Ctif%20(isClip)%20fColor%20%3D%20vec4(samplePos.xyz%2C%20253.0%20%2F%20255.0)%3B%20%2F%2Fassume%20no%20hit%3A%20ID%20%3D%200%5Cn%5Ct%2F%2Fstart%3A%20OPTIONAL%20fast%20pass%3A%20rapid%20traversal%20until%20first%20hit%5Cn%5Ctfloat%20stepSizeFast%20%3D%20sliceSize%20*%201.9%3B%5Cn%5Ctvec4%20deltaDirFast%20%3D%20vec4(dir.xyz%20*%20stepSizeFast%2C%20stepSizeFast)%3B%5Cn%5Ctwhile%20(samplePos.a%20%3C%3D%20len)%20%7B%5Cn%5Ct%5Ctfloat%20val%20%3D%20texture(volume%2C%20samplePos.xyz).a%3B%5Cn%5Ct%5Ctif%20(val%20%3E%200.01)%20%7B%5Cn%5Ct%5Ct%5CtfColor%20%3D%20vec4(samplePos.rgb%2C%20fid)%3B%5Cn%5Ct%5Ct%5Ctgl_FragDepth%20%3D%20frac2ndc(samplePos.xyz)%3B%5Cn%5Ct%5Ct%5Ctbreak%3B%5Cn%5Ct%5Ct%7D%5Cn%5Ct%5CtsamplePos%20%2B%3D%20deltaDirFast%3B%20%2F%2Fadvance%20ray%20position%5Cn%5Ct%7D%5Cn%5Ct%2F%2Fend%3A%20fast%20pass%5Cn%5Ctif%20((overlays%20%3C%201.0)%20%7C%7C%20(backgroundMasksOverlays%20%3E%200))%20%7B%5Cn%5Ct%5Ctreturn%3B%20%2F%2Fbackground%20hit%2C%20no%20overlays%5Cn%5Ct%7D%5Cn%5Ct%2F%2Foverlay%20pass%5Cn%5Ctlen%20%3D%20min(lenNoClip%2C%20samplePos.a)%3B%20%2F%2Fonly%20find%20overlay%20closer%20than%20background%5Cn%5CtsamplePos%20%3D%20vec4(start.xyz%2C%200.0)%3B%20%2F%2Fray%20position%5Cn%5Ctwhile%20(samplePos.a%20%3C%3D%20len)%20%7B%5Cn%5Ct%5Ctfloat%20val%20%3D%20texture(overlay%2C%20samplePos.xyz).a%3B%5Cn%5Ct%5Ctif%20(val%20%3E%200.01)%20%7B%5Cn%5Ct%5Ct%5CtfColor%20%3D%20vec4(samplePos.rgb%2C%20fid)%3B%5Cn%5Ct%5Ct%5Ctgl_FragDepth%20%3D%20frac2ndc(samplePos.xyz)%3B%5Cn%5Ct%5Ct%5Ctreturn%3B%5Cn%5Ct%5Ct%7D%5Cn%5Ct%5CtsamplePos%20%2B%3D%20deltaDirFast%3B%20%2F%2Fadvance%20ray%20position%5Cn%5Ct%7D%5Cn%5Ct%2F%2Fif%20(fColor.a%20%3D%3D%200.0)%20discard%3B%20%2F%2Fno%20hit%20in%20either%20background%20or%20overlays%5Cn%5Ct%2F%2Fyou%20only%20get%20here%20if%20there%20is%20a%20hit%20with%20the%20background%20that%20is%20closer%20than%20any%20overlay%5Cn%7D%22%2CU%3D%22%23version%20300%20es%5Cn%23line%20286%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec3%20vPos%3B%5Cnout%20vec2%20TexCoord%3B%5Cnvoid%20main()%20%7B%5Cn%20%20%20%20TexCoord%20%3D%20vPos.xy%3B%5Cn%20%20%20%20gl_Position%20%3D%20vec4(%20(vPos.xy-vec2(0.5%2C0.5))*%202.0%2C%200.0%2C%201.0)%3B%5Cn%7D%22%2CR%3Dnew%20Float32Array(%5B-1%2C-1%2C-1%2C.28%2C.28%2C.28%2C-1%2C-1%2C-1%2C.28%2C.28%2C.28%2C-1%2C1%2C-1%2C.28%2C.28%2C.28%2C1%2C-1%2C-1%2C.28%2C.28%2C.28%2C1%2C1%2C-1%2C.28%2C.28%2C.28%2C1%2C1%2C-1%2C.28%2C.28%2C.28%2C-1%2C-1%2C1%2C.8%2C.8%2C.8%2C-1%2C-1%2C1%2C.8%2C.8%2C.8%2C1%2C-1%2C1%2C.8%2C.8%2C.8%2C-1%2C1%2C1%2C.8%2C.8%2C.8%2C1%2C1%2C1%2C.8%2C.8%2C.8%2C1%2C1%2C1%2C.8%2C.8%2C.8%2C-1%2C1%2C-1%2C0%2C0%2C.74%2C-1%2C1%2C-1%2C0%2C0%2C.74%2C-1%2C1%2C1%2C0%2C0%2C.74%2C1%2C1%2C-1%2C0%2C0%2C.74%2C1%2C1%2C1%2C0%2C0%2C.74%2C1%2C1%2C1%2C0%2C0%2C.74%2C-1%2C-1%2C-1%2C.42%2C0%2C.42%2C-1%2C-1%2C-1%2C.42%2C0%2C.42%2C1%2C-1%2C-1%2C.42%2C0%2C.42%2C-1%2C-1%2C1%2C.42%2C0%2C.42%2C1%2C-1%2C1%2C.42%2C0%2C.42%2C1%2C-1%2C1%2C.42%2C0%2C.42%2C-1%2C-1%2C-1%2C.64%2C0%2C0%2C-1%2C-1%2C-1%2C.64%2C0%2C0%2C-1%2C-1%2C1%2C.64%2C0%2C0%2C-1%2C1%2C-1%2C.64%2C0%2C0%2C-1%2C1%2C1%2C.64%2C0%2C0%2C-1%2C1%2C1%2C.64%2C0%2C0%2C1%2C-1%2C-1%2C0%2C.5%2C0%2C1%2C-1%2C-1%2C0%2C.5%2C0%2C1%2C1%2C-1%2C0%2C.5%2C0%2C1%2C-1%2C1%2C0%2C.5%2C0%2C1%2C1%2C1%2C0%2C.5%2C0%2C1%2C1%2C1%2C0%2C.5%2C0%2C-.45%2C1%2C-.8%2C0%2C0%2C0%2C-.45%2C1%2C-.8%2C0%2C0%2C0%2C-.45%2C1%2C.8%2C0%2C0%2C0%2C-.25%2C1%2C-.8%2C0%2C0%2C0%2C-.25%2C1%2C.8%2C0%2C0%2C0%2C-.25%2C1%2C.8%2C0%2C0%2C0%2C-.25%2C1%2C.6%2C0%2C0%2C0%2C-.25%2C1%2C.6%2C0%2C0%2C0%2C-.25%2C1%2C.8%2C0%2C0%2C0%2C.45%2C1%2C.6%2C0%2C0%2C0%2C.25%2C1%2C.8%2C0%2C0%2C0%2C.25%2C1%2C.8%2C0%2C0%2C0%2C.25%2C1%2C.1%2C0%2C0%2C0%2C.25%2C1%2C.1%2C0%2C0%2C0%2C.25%2C1%2C.6%2C0%2C0%2C0%2C.45%2C1%2C.1%2C0%2C0%2C0%2C.45%2C1%2C.6%2C0%2C0%2C0%2C.45%2C1%2C.6%2C0%2C0%2C0%2C-.25%2C1%2C-.1%2C0%2C0%2C0%2C-.25%2C1%2C-.1%2C0%2C0%2C0%2C-.25%2C1%2C.1%2C0%2C0%2C0%2C.25%2C1%2C-.1%2C0%2C0%2C0%2C.45%2C1%2C.1%2C0%2C0%2C0%2C.45%2C1%2C.1%2C0%2C0%2C0%2C.45%2C-1%2C-.8%2C0%2C0%2C0%2C.45%2C-1%2C-.8%2C0%2C0%2C0%2C.05%2C-1%2C.8%2C0%2C0%2C0%2C.25%2C-1%2C-.8%2C0%2C0%2C0%2C-.15%2C-1%2C.8%2C0%2C0%2C0%2C-.15%2C-1%2C.8%2C0%2C0%2C0%2C-.25%2C-1%2C-.8%2C0%2C0%2C0%2C-.25%2C-1%2C-.8%2C0%2C0%2C0%2C.05%2C-1%2C.8%2C0%2C0%2C0%2C-.45%2C-1%2C-.8%2C0%2C0%2C0%2C-.15%2C-1%2C.8%2C0%2C0%2C0%2C-.15%2C-1%2C.8%2C0%2C0%2C0%2C.13%2C-1%2C-.3%2C0%2C0%2C0%2C.13%2C-1%2C-.3%2C0%2C0%2C0%2C.07%2C-1%2C-.1%2C0%2C0%2C0%2C-.33%2C-1%2C-.3%2C0%2C0%2C0%2C-.27%2C-1%2C-.1%2C0%2C0%2C0%2C-.27%2C-1%2C-.1%2C0%2C0%2C0%2C-.45%2C.6%2C1%2C0%2C0%2C0%2C-.45%2C.6%2C1%2C0%2C0%2C0%2C-.45%2C.4%2C1%2C0%2C0%2C0%2C-.25%2C.8%2C1%2C0%2C0%2C0%2C-.25%2C.4%2C1%2C0%2C0%2C0%2C-.25%2C.4%2C1%2C0%2C0%2C0%2C-.25%2C.8%2C1%2C0%2C0%2C0%2C-.25%2C.8%2C1%2C0%2C0%2C0%2C-.25%2C.6%2C1%2C0%2C0%2C0%2C.25%2C.8%2C1%2C0%2C0%2C0%2C.45%2C.6%2C1%2C0%2C0%2C0%2C.45%2C.6%2C1%2C0%2C0%2C0%2C.25%2C.8%2C1%2C0%2C0%2C0%2C.25%2C.8%2C1%2C0%2C0%2C0%2C.25%2C-.1%2C1%2C0%2C0%2C0%2C.45%2C.6%2C1%2C0%2C0%2C0%2C.45%2C.1%2C1%2C0%2C0%2C0%2C.45%2C.1%2C1%2C0%2C0%2C0%2C-.25%2C.1%2C1%2C0%2C0%2C0%2C-.25%2C.1%2C1%2C0%2C0%2C0%2C-.45%2C-.1%2C1%2C0%2C0%2C0%2C.25%2C.1%2C1%2C0%2C0%2C0%2C.25%2C-.1%2C1%2C0%2C0%2C0%2C.25%2C-.1%2C1%2C0%2C0%2C0%2C-.45%2C-.1%2C1%2C0%2C0%2C0%2C-.45%2C-.1%2C1%2C0%2C0%2C0%2C-.45%2C-.6%2C1%2C0%2C0%2C0%2C-.25%2C-.1%2C1%2C0%2C0%2C0%2C-.25%2C-.8%2C1%2C0%2C0%2C0%2C-.25%2C-.8%2C1%2C0%2C0%2C0%2C-.25%2C-.6%2C1%2C0%2C0%2C0%2C-.25%2C-.6%2C1%2C0%2C0%2C0%2C-.25%2C-.8%2C1%2C0%2C0%2C0%2C.45%2C-.6%2C1%2C0%2C0%2C0%2C.25%2C-.8%2C1%2C0%2C0%2C0%2C.25%2C-.8%2C1%2C0%2C0%2C0%2C.25%2C-.4%2C1%2C0%2C0%2C0%2C.25%2C-.4%2C1%2C0%2C0%2C0%2C.25%2C-.6%2C1%2C0%2C0%2C0%2C.45%2C-.4%2C1%2C0%2C0%2C0%2C.45%2C-.6%2C1%2C0%2C0%2C0%2C.45%2C-.6%2C1%2C0%2C0%2C0%2C-.1%2C-.8%2C-1%2C0%2C0%2C0%2C-.1%2C-.8%2C-1%2C0%2C0%2C0%2C-.1%2C.8%2C-1%2C0%2C0%2C0%2C.1%2C-.8%2C-1%2C0%2C0%2C0%2C.1%2C.8%2C-1%2C0%2C0%2C0%2C.1%2C.8%2C-1%2C0%2C0%2C0%2C-1%2C-.45%2C-.8%2C0%2C0%2C0%2C-1%2C-.45%2C-.8%2C0%2C0%2C0%2C-1%2C-.45%2C.8%2C0%2C0%2C0%2C-1%2C-.25%2C-.8%2C0%2C0%2C0%2C-1%2C-.25%2C.8%2C0%2C0%2C0%2C-1%2C-.25%2C.8%2C0%2C0%2C0%2C-1%2C-.25%2C-.8%2C0%2C0%2C0%2C-1%2C-.25%2C-.8%2C0%2C0%2C0%2C-1%2C-.25%2C-.6%2C0%2C0%2C0%2C-1%2C.45%2C-.8%2C0%2C0%2C0%2C-1%2C.45%2C-.6%2C0%2C0%2C0%2C-1%2C.45%2C-.6%2C0%2C0%2C0%2C1%2C.45%2C-.8%2C0%2C0%2C0%2C1%2C.45%2C-.8%2C0%2C0%2C0%2C1%2C.45%2C.8%2C0%2C0%2C0%2C1%2C.25%2C-.8%2C0%2C0%2C0%2C1%2C.25%2C.8%2C0%2C0%2C0%2C1%2C.25%2C.8%2C0%2C0%2C0%2C1%2C.25%2C.6%2C0%2C0%2C0%2C1%2C.25%2C.6%2C0%2C0%2C0%2C1%2C.25%2C.8%2C0%2C0%2C0%2C1%2C-.45%2C.6%2C0%2C0%2C0%2C1%2C-.25%2C.8%2C0%2C0%2C0%2C1%2C-.25%2C.8%2C0%2C0%2C0%2C1%2C-.25%2C.1%2C0%2C0%2C0%2C1%2C-.25%2C.1%2C0%2C0%2C0%2C1%2C-.25%2C.6%2C0%2C0%2C0%2C1%2C-.45%2C.1%2C0%2C0%2C0%2C1%2C-.45%2C.6%2C0%2C0%2C0%2C1%2C-.45%2C.6%2C0%2C0%2C0%2C1%2C.25%2C-.1%2C0%2C0%2C0%2C1%2C.25%2C-.1%2C0%2C0%2C0%2C1%2C.25%2C.1%2C0%2C0%2C0%2C1%2C-.25%2C-.1%2C0%2C0%2C0%2C1%2C-.45%2C.1%2C0%2C0%2C0%2C1%2C-.45%2C.1%2C0%2C0%2C0%2C1%2C-.25%2C-.8%2C0%2C0%2C0%2C1%2C-.25%2C-.8%2C0%2C0%2C0%2C1%2C-.05%2C-.1%2C0%2C0%2C0%2C1%2C-.45%2C-.8%2C0%2C0%2C0%2C1%2C-.25%2C-.1%2C0%2C0%2C0%2C1%2C-.25%2C-.1%2C0%2C0%2C0%5D)%3Bimport%7Bmat4%20as%20N%2Cvec3%20as%20P%7Dfrom%22gl-matrix%22%3Bvar%20L%3Dclass%7Bconstructor(t%2Ci%2Cs%2Cr%2Cn%3Dnull%2Ca%3Dnull)%7Be(this%2C%22sphereIdx%22%2C%5B%5D)%2Ce(this%2C%22sphereVtx%22%2C%5B%5D)%2Ce(this%2C%22renderShaders%22%2C%5B%5D)%2Ce(this%2C%22isVisible%22%2C!0)%2Ce(this%2C%22isPickable%22%2C!0)%2Ce(this%2C%22vertexBuffer%22)%2Ce(this%2C%22indexCount%22)%2Ce(this%2C%22indexBuffer%22)%2Ce(this%2C%22vao%22)%2Ce(this%2C%22mode%22)%2Ce(this%2C%22glFlags%22%2C0)%2Ce(this%2C%22id%22)%2Ce(this%2C%22colorId%22)%2Ce(this%2C%22modelMatrix%22%2CN.create())%2Ce(this%2C%22scale%22%2C%5B1%2C1%2C1%5D)%2Ce(this%2C%22position%22%2C%5B0%2C0%2C0%5D)%2Ce(this%2C%22rotation%22%2C%5B0%2C0%2C0%5D)%2Ce(this%2C%22rotationRadians%22%2C0)%2Ce(this%2C%22extentsMin%22%2C%5B%5D)%2Ce(this%2C%22extentsMax%22%2C%5B%5D)%2Ce(this%2C%22furthestVertexFromOrigin%22)%2Ce(this%2C%22originNegate%22)%2Ce(this%2C%22fieldOfViewDeObliqueMM%22)%2Ce(this%2C%22mm%22)%2Cthis.vertexBuffer%3Di%2Cthis.indexCount%3Dr%2Cthis.indexBuffer%3Dn%2Cthis.vao%3Da%2Cthis.mode%3Ds%2Cthis.id%3Dt%2Cthis.colorId%3D%5B(255%26t)%2F255%2C(t%3E%3E8%26255)%2F255%2C(t%3E%3E16%26255)%2F255%2C(t%3E%3E24%26255)%2F255%5D%7D%7D%3Be(L%2C%22BLEND%22%2C1)%2Ce(L%2C%22CULL_FACE%22%2C2)%2Ce(L%2C%22CULL_FRONT%22%2C4)%2Ce(L%2C%22CULL_BACK%22%2C8)%2Ce(L%2C%22ENABLE_DEPTH_TEST%22%2C16)%2Ce(L%2C%22generateCrosshairs%22%2C(function(t%2Ce%2Ci%2Cs%2Cr%2Cn%2Ca%3D20%2Co%3D0)%7Bconst%20l%3DL.generateCrosshairsGeometry(t%2Ci%2Cs%2Cr%2Cn%2Ca%2Co)%3Breturn%20new%20L(e%2Cl.vertexBuffer%2Ct.TRIANGLES%2Cl.indexCount%2Cl.indexBuffer%2Cl.vao)%7D))%2Ce(L%2C%22generateCrosshairsGeometry%22%2C(function(t%2Ce%2Ci%2Cs%2Cr%2Cn%3D20%2Ca%3D0)%7Bconst%20o%3D%5B%5D%2Cl%3D%5B%5D%2Ch%3Dr*a%3Bif(h%3C%3D0)%7Blet%20t%3DP.fromValues(i%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D)%2Ca%3DP.fromValues(s%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D)%3BL.makeCylinder(o%2Cl%2Ct%2Ca%2Cr%2Cn)%2Ct%3DP.fromValues(e%5B0%5D%2Ci%5B1%5D%2Ce%5B2%5D)%2Ca%3DP.fromValues(e%5B0%5D%2Cs%5B1%5D%2Ce%5B2%5D)%2CL.makeCylinder(o%2Cl%2Ct%2Ca%2Cr%2Cn)%2Ct%3DP.fromValues(e%5B0%5D%2Ce%5B1%5D%2Ci%5B2%5D)%2Ca%3DP.fromValues(e%5B0%5D%2Ce%5B1%5D%2Cs%5B2%5D)%2CL.makeCylinder(o%2Cl%2Ct%2Ca%2Cr%2Cn)%7Delse%7Blet%20t%3DP.fromValues(i%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D)%2Ca%3DP.fromValues(e%5B0%5D-h%2Ce%5B1%5D%2Ce%5B2%5D)%3BL.makeCylinder(o%2Cl%2Ct%2Ca%2Cr%2Cn%2C!1)%2Ct%3DP.fromValues(e%5B0%5D%2Bh%2Ce%5B1%5D%2Ce%5B2%5D)%2Ca%3DP.fromValues(s%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D)%2CL.makeCylinder(o%2Cl%2Ct%2Ca%2Cr%2Cn%2C!1)%2Ct%3DP.fromValues(e%5B0%5D%2Ci%5B1%5D%2Ce%5B2%5D)%2Ca%3DP.fromValues(e%5B0%5D%2Ce%5B1%5D-h%2Ce%5B2%5D)%2CL.makeCylinder(o%2Cl%2Ct%2Ca%2Cr%2Cn%2C!1)%2Ct%3DP.fromValues(e%5B0%5D%2Ce%5B1%5D%2Bh%2Ce%5B2%5D)%2Ca%3DP.fromValues(e%5B0%5D%2Cs%5B1%5D%2Ce%5B2%5D)%2CL.makeCylinder(o%2Cl%2Ct%2Ca%2Cr%2Cn%2C!1)%2Ct%3DP.fromValues(e%5B0%5D%2Ce%5B1%5D%2Ci%5B2%5D)%2Ca%3DP.fromValues(e%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D-h)%2CL.makeCylinder(o%2Cl%2Ct%2Ca%2Cr%2Cn%2C!1)%2Ct%3DP.fromValues(e%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D%2Bh)%2Ca%3DP.fromValues(e%5B0%5D%2Ce%5B1%5D%2Cs%5B2%5D)%2CL.makeCylinder(o%2Cl%2Ct%2Ca%2Cr%2Cn%2C!1)%7Dconst%20c%3Dt.createBuffer()%3Bif(null%3D%3D%3Dc)throw%20new%20Error(%22could%20not%20instantiate%20vertex%20buffer%22)%3Bt.bindBuffer(t.ARRAY_BUFFER%2Cc)%2Ct.bufferData(t.ARRAY_BUFFER%2Cnew%20Float32Array(o)%2Ct.STATIC_DRAW)%3Bconst%20d%3Dt.createBuffer()%3Bif(null%3D%3D%3Dd)throw%20new%20Error(%22could%20not%20instantiate%20index%20buffer%22)%3Bt.bindBuffer(t.ELEMENT_ARRAY_BUFFER%2Cd)%2Ct.bufferData(t.ELEMENT_ARRAY_BUFFER%2Cnew%20Uint32Array(l)%2Ct.STATIC_DRAW)%3Bconst%20m%3Dt.createVertexArray()%3Breturn%20t.bindVertexArray(m)%2Ct.bindBuffer(t.ELEMENT_ARRAY_BUFFER%2Cd)%2Ct.bindBuffer(t.ARRAY_BUFFER%2Cc)%2Ct.enableVertexAttribArray(0)%2Ct.vertexAttribPointer(0%2C3%2Ct.FLOAT%2C!1%2C0%2C0)%2Ct.bindVertexArray(null)%2C%7BvertexBuffer%3Ac%2CindexBuffer%3Ad%2CindexCount%3Al.length%2Cvao%3Am%7D%7D))%2Ce(L%2C%22getFirstPerpVector%22%2C(function(t)%7Bconst%20e%3DP.fromValues(0%2C0%2C0)%3Breturn%200%3D%3D%3Dt%5B0%5D%3Fe%5B0%5D%3D1%3A0%3D%3D%3Dt%5B1%5D%3Fe%5B1%5D%3D1%3A0%3D%3D%3Dt%5B2%5D%3Fe%5B2%5D%3D1%3A(e%5B0%5D%3Dt%5B2%5D%2Ce%5B1%5D%3Dt%5B2%5D%2Ce%5B2%5D%3D-(t%5B0%5D%2Bt%5B1%5D)%2CP.normalize(e%2Ce))%2Ce%7D))%2Ce(L%2C%22subdivide%22%2C(function(t%2Ce)%7Blet%20i%3Dt.length%2F3%2Cs%3De.length%2F3%3Bconst%20r%3Ds%2Cn%3DP.create()%2Ca%3DP.create()%3Bfor(let%20o%3D0%3Bo%3Cr%3Bo%2B%2B)%7Bconst%20r%3De%5B3*o%2B0%5D%2Cl%3De%5B3*o%2B1%5D%2Ch%3De%5B3*o%2B2%5D%2Cc%3DP.fromValues(t%5B3*r%2B0%5D%2Ct%5B3*r%2B1%5D%2Ct%5B3*r%2B2%5D)%2Cd%3DP.fromValues(t%5B3*l%2B0%5D%2Ct%5B3*l%2B1%5D%2Ct%5B3*l%2B2%5D)%2Cm%3DP.fromValues(t%5B3*h%2B0%5D%2Ct%5B3*h%2B1%5D%2Ct%5B3*h%2B2%5D)%3BP.add(n%2Cc%2Cd)%2CP.normalize(a%2Cn)%2Ct.push(...a)%2CP.add(n%2Cd%2Cm)%2CP.normalize(a%2Cn)%2Ct.push(...a)%2CP.add(n%2Cc%2Cm)%2CP.normalize(a%2Cn)%2Ct.push(...a)%3Blet%20u%3D%5Bi%2Ci%2B1%2Ci%2B2%5D%3Be.push(...u)%2Cu%3D%5Br%2Ci%2Ci%2B2%5D%2Ce.push(...u)%2Cu%3D%5Bi%2Cl%2Ci%2B1%5D%2Ce.push(...u)%2Ce%5B3*o%2B0%5D%3Di%2B2%2Ce%5B3*o%2B1%5D%3Di%2B1%2Ce%5B3*o%2B2%5D%3Dh%2Cs%2B%3D3%2Ci%2B%3D3%7D%7D))%2Ce(L%2C%22weldVertices%22%2C(function(t%2Ce)%7Bconst%20i%3Dt.length%2F3%3Blet%20s%3D0%3Bconst%20r%3Dnew%20Int32Array(i)%3Bfor(let%20e%3D0%3Be%3Ci-1%3Be%2B%2B)%7Bif(0!%3D%3Dr%5Be%5D)continue%3Br%5Be%5D%3Ds%3Blet%20n%3D3*e%3Bconst%20a%3Dt%5Bn%5D%2Co%3Dt%5Bn%2B1%5D%2Cl%3Dt%5Bn%2B2%5D%3Bfor(let%20h%3De%2B1%3Bh%3Ci%3Bh%2B%2B)n%2B%3D3%2Ca%3D%3D%3Dt%5Bn%5D%26%26o%3D%3D%3Dt%5Bn%2B1%5D%26%26l%3D%3D%3Dt%5Bn%2B2%5D%26%26(r%5Bh%5D%3Ds)%3Bs%2B%2B%7Dif(s%3D%3D%3Di)return%20t%3Bconst%20n%3De.length%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)e%5Bt%5D%3Dr%5Be%5Bt%5D%5D%3Bconst%20a%3Dt.slice(0%2C3*s-1)%3Bfor(let%20e%3D0%3Be%3Ci-1%3Be%2B%2B)%7Bconst%20i%3D3*e%2Cs%3D3*r%5Be%5D%3Ba%5Bs%5D%3Dt%5Bi%5D%2Ca%5Bs%2B1%5D%3Dt%5Bi%2B1%5D%2Ca%5Bs%2B2%5D%3Dt%5Bi%2B2%5D%7Dreturn%20a%7D))%2Ce(L%2C%22makeSphere%22%2C(function(t%2Ce%2Ci%2Cs%3D%5B0%2C0%2C0%5D)%7Blet%20r%3D%5B0%2C0%2C1%2C.894%2C0%2C.447%2C.276%2C.851%2C.447%2C-.724%2C.526%2C.447%2C-.724%2C-.526%2C.447%2C.276%2C-.851%2C.447%2C.724%2C.526%2C-.447%2C-.276%2C.851%2C-.447%2C-.894%2C0%2C-.447%2C-.276%2C-.851%2C-.447%2C.724%2C-.526%2C-.447%2C0%2C0%2C-1%5D%3Bconst%20n%3D%5B0%2C1%2C2%2C0%2C2%2C3%2C0%2C3%2C4%2C0%2C4%2C5%2C0%2C5%2C1%2C7%2C6%2C11%2C8%2C7%2C11%2C9%2C8%2C11%2C10%2C9%2C11%2C6%2C10%2C11%2C6%2C2%2C1%2C7%2C3%2C2%2C8%2C4%2C3%2C9%2C5%2C4%2C10%2C1%2C5%2C6%2C7%2C2%2C7%2C8%2C3%2C8%2C9%2C4%2C9%2C10%2C5%2C10%2C6%2C1%5D%3BL.subdivide(r%2Cn)%2CL.subdivide(r%2Cn)%2Cr%3DL.weldVertices(r%2Cn)%3Bfor(let%20t%3D0%3Bt%3Cr.length%3Bt%2B%2B)r%5Bt%5D%3Dr%5Bt%5D*i%3Bconst%20a%3Dr.length%2F3%3Blet%20o%3D0%3Bfor(let%20t%3D0%3Bt%3Ca%3Bt%2B%2B)r%5Bo%5D%3Dr%5Bo%5D%2Bs%5B0%5D%2Co%2B%2B%2Cr%5Bo%5D%3Dr%5Bo%5D%2Bs%5B1%5D%2Co%2B%2B%2Cr%5Bo%5D%3Dr%5Bo%5D%2Bs%5B2%5D%2Co%2B%2B%3Bconst%20l%3DMath.floor(t.length%2F3)%3Bfor(let%20t%3D0%3Bt%3Cn.length%3Bt%2B%2B)n%5Bt%5D%3Dn%5Bt%5D%2Bl%3Be.push(...n)%2Ct.push(...r)%7D))%2Ce(L%2C%22makeCylinder%22%2C(function(t%2Ce%2Ci%2Cs%2Cr%2Cn%3D20%2Ca%3D!0)%7Bn%3C3%26%26(n%3D3)%3Bconst%20o%3DP.create()%3BP.subtract(o%2Cs%2Ci)%2CP.normalize(o%2Co)%3Bconst%20l%3DL.getFirstPerpVector(o)%2Ch%3DP.create()%3BP.cross(h%2Co%2Cl)%2CP.normalize(h%2Ch)%3Blet%20c%3D2*n%2Cd%3D2*n%3Ba%26%26(d%2B%3D2*n%2Cc%2B%3D2)%3Bconst%20m%3DMath.floor(t.length%2F3)%2Cu%3Dnew%20Uint32Array(3*d)%2CA%3Dnew%20Float32Array(3*c)%3Bfunction%20f(t%2Ce)%7BA%5B3*t%2B0%5D%3De%5B0%5D%2CA%5B3*t%2B1%5D%3De%5B1%5D%2CA%5B3*t%2B2%5D%3De%5B2%5D%7Dfunction%20g(t%2Ce%2Ci%2Cs)%7Bu%5B3*t%2B0%5D%3De%2Bm%2Cu%5B3*t%2B1%5D%3Di%2Bm%2Cu%5B3*t%2B2%5D%3Ds%2Bm%7Dconst%20p%3D2*n%2Cv%3Dp%2B1%3Ba%26%26(f(p%2Ci)%2Cf(v%2Cs))%3Bconst%20x%3DP.create()%2Cw%3DP.create()%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)%7Bconst%20e%3DMath.cos(t%2Fn*2*Math.PI)%2Co%3DMath.sin(t%2Fn*2*Math.PI)%3Bx%5B0%5D%3Dr*(e*l%5B0%5D%2Bo*h%5B0%5D)%2Cx%5B1%5D%3Dr*(e*l%5B1%5D%2Bo*h%5B1%5D)%2Cx%5B2%5D%3Dr*(e*l%5B2%5D%2Bo*h%5B2%5D)%2CP.add(w%2Ci%2Cx)%2Cf(t%2Cw)%2CP.add(w%2Cs%2Cx)%2Cf(t%2Bn%2Cw)%3Blet%20c%3D0%3Bt%3Cn-1%26%26(c%3Dt%2B1)%2Cg(2*t%2Ct%2Cc%2Ct%2Bn)%2Cg(2*t%2B1%2Cc%2Cc%2Bn%2Ct%2Bn)%2Ca%26%26(g(2*n%2Bt%2Ct%2Cp%2Cc)%2Cg(2*n%2Bt%2Bn%2Cv%2Ct%2Bn%2Cc%2Bn))%7De.push(...u)%2Ct.push(...A)%7D))%2Ce(L%2C%22makeColoredCylinder%22%2C(function(t%2Ce%2Ci%2Cs%2Cr%2Cn%2Ca%3D%5B192%2C0%2C0%2C255%5D%2Co%3D20%2Cl%3D!1)%7Blet%20h%3Dt.length%2F3%3BL.makeCylinder(t%2Ce%2Cs%2Cr%2Cn%2Co%2Cl)%2Ch%3Dt.length%2F3-h%3Bconst%20c%3D%5B%5D%3Bfor(let%20t%3D0%3Bt%3C4*h-1%3Bt%2B%3D4)c%5Bt%5D%3Da%5B0%5D%2Cc%5Bt%2B1%5D%3Da%5B1%5D%2Cc%5Bt%2B2%5D%3Da%5B2%5D%2Cc%5Bt%2B3%5D%3Da%5B3%5D%3Bi.push(...c)%7D))%2Ce(L%2C%22makeColoredSphere%22%2C(function(t%2Ce%2Ci%2Cs%2Cr%3D%5B0%2C0%2C0%5D%2Cn%3D%5B0%2C0%2C192%2C255%5D)%7Blet%20a%3Dt.length%2F3%3BL.makeSphere(t%2Ce%2Cs%2Cr)%2Ca%3Dt.length%2F3-a%3Bconst%20o%3D%5B%5D%3Bfor(let%20t%3D0%3Bt%3C4*a-1%3Bt%2B%3D4)o%5Bt%5D%3Dn%5B0%5D%2Co%5Bt%2B1%5D%3Dn%5B1%5D%2Co%5Bt%2B2%5D%3Dn%5B2%5D%2Co%5Bt%2B3%5D%3Dn%5B3%5D%3Bi.push(...o)%7D))%3Bvar%20k%3DL%3Bimport%7Bvec3%20as%20O%2Cvec4%20as%20Y%7Dfrom%22gl-matrix%22%3Bimport%7Bv4%20as%20K%7Dfrom%22%40lukeed%2Fuuid%22%3Bvar%20G%3D%7B%7D%3B((e%2Ci)%3D%3E%7Bfor(var%20s%20in%20i)t(e%2Cs%2C%7Bget%3Ai%5Bs%5D%2Cenumerable%3A!0%7D)%7D)(G%2C%7B%24itksnap%3A()%3D%3EW%2C%24slicer3d%3A()%3D%3EH%2Cactc%3A()%3D%3EQ%2Cafni_blues_inv%3A()%3D%3E%24t%2Cafni_reds_inv%3A()%3D%3Ete%2Cbcgwhw%3A()%3D%3Eq%2Cbcgwhw_dark%3A()%3D%3Ez%2Cblue%3A()%3D%3E_%2Cblue2cyan%3A()%3D%3EZ%2Cblue2magenta%3A()%3D%3Ej%2Cblue2red%3A()%3D%3EX%2Cbluegrn%3A()%3D%3EJ%2Cbone%3A()%3D%3E%24%2Cbronze%3A()%3D%3Ett%2Ccet_l17%3A()%3D%3Eet%2Ccividis%3A()%3D%3Eit%2Ccool%3A()%3D%3Est%2Ccopper%3A()%3D%3Ent%2Ccopper2%3A()%3D%3Ert%2Cct_airways%3A()%3D%3Eat%2Cct_artery%3A()%3D%3Eot%2Cct_bones%3A()%3D%3Elt%2Cct_brain%3A()%3D%3Ect%2Cct_brain_gray%3A()%3D%3Eht%2Cct_cardiac%3A()%3D%3Edt%2Cct_head%3A()%3D%3Emt%2Cct_kidneys%3A()%3D%3Eut%2Cct_liver%3A()%3D%3EAt%2Cct_muscles%3A()%3D%3Eft%2Cct_scalp%3A()%3D%3Egt%2Cct_skull%3A()%3D%3Ept%2Cct_soft%3A()%3D%3Evt%2Cct_soft_tissue%3A()%3D%3Ext%2Cct_surface%3A()%3D%3Ewt%2Cct_vessels%3A()%3D%3ECt%2Cct_w_contrast%3A()%3D%3Ebt%2Ccubehelix%3A()%3D%3Eyt%2Celectric_blue%3A()%3D%3EIt%2Cfreesurfer%3A()%3D%3EMt%2Cge_color%3A()%3D%3EDt%2Cgold%3A()%3D%3EFt%2Cgray%3A()%3D%3EVt%2Cgreen%3A()%3D%3ETt%2Cgreen2cyan%3A()%3D%3EEt%2Cgreen2orange%3A()%3D%3ESt%2Chot%3A()%3D%3EUt%2Chotiron%3A()%3D%3EBt%2Chsv%3A()%3D%3ERt%2Cinferno%3A()%3D%3ENt%2Cjet%3A()%3D%3EPt%2Clinspecer%3A()%3D%3ELt%2Cmagma%3A()%3D%3Ekt%2Cmako%3A()%3D%3EOt%2Cnih%3A()%3D%3EYt%2Cplasma%3A()%3D%3EKt%2Crandom%3A()%3D%3EGt%2Cred%3A()%3D%3EWt%2Credyell%3A()%3D%3EHt%2Crocket%3A()%3D%3EQt%2Croi_i256%3A()%3D%3Eee%2Csurface%3A()%3D%3Ezt%2Cturbo%3A()%3D%3Eqt%2Cviolet%3A()%3D%3EXt%2Cviridis%3A()%3D%3Ejt%2Cwarm%3A()%3D%3EZt%2Cwinter%3A()%3D%3EJt%2Cx_rain%3A()%3D%3E_t%7D)%3Bvar%20W%3D%7BR%3A%5B0%2C255%2C0%2C0%2C255%2C0%2C255%2C255%2C0%2C205%2C210%2C102%2C0%2C0%2C46%2C255%2C106%2C221%2C233%2C165%2C255%2C147%2C218%2C75%2C255%2C60%2C255%2C255%2C218%2C0%2C188%2C255%2C255%2C222%2C127%2C139%2C124%2C255%2C70%2C0%2C238%2C238%2C240%2C245%2C184%2C32%2C255%2C25%2C112%2C34%2C248%2C245%2C255%2C144%2C173%2C65%2C255%2C250%2C128%2C50%2C244%2C255%2C123%2C255%2C173%2C255%2C127%2C255%2C143%2C220%2C253%2C255%2C0%2C0%2C128%2C255%2C250%2C148%2C178%2C255%2C135%2C100%2C240%2C250%2C255%2C107%2C135%2C0%2C139%2C245%2C186%2C255%2C255%2C0%2C210%2C255%2C47%2C72%2C175%2C128%2C176%2C255%2C139%2C240%2C255%2C216%2C119%2C219%2C72%2C255%2C199%2C154%2C189%2C240%2C230%2C0%2C85%2C64%2C153%2C205%2C250%2C95%2C0%2C255%2C224%2C176%2C138%2C30%2C240%2C152%2C160%5D%2CG%3A%5B0%2C0%2C255%2C0%2C255%2C255%2C0%2C239%2C0%2C133%2C180%2C205%2C0%2C139%2C139%2C228%2C90%2C160%2C150%2C42%2C250%2C112%2C112%2C0%2C182%2C179%2C235%2C228%2C165%2C128%2C143%2C105%2C218%2C184%2C255%2C69%2C252%2C255%2C130%2C100%2C130%2C232%2C255%2C222%2C134%2C178%2C20%2C25%2C128%2C139%2C248%2C255%2C160%2C238%2C255%2C105%2C99%2C240%2C0%2C205%2C164%2C255%2C104%2C165%2C216%2C192%2C255%2C140%2C188%2C20%2C245%2C250%2C206%2C255%2C0%2C250%2C128%2C0%2C34%2C127%2C206%2C149%2C230%2C235%2C245%2C142%2C206%2C0%2C0%2C245%2C85%2C228%2C222%2C191%2C105%2C248%2C79%2C61%2C238%2C128%2C224%2C240%2C0%2C255%2C215%2C191%2C136%2C112%2C209%2C0%2C21%2C205%2C183%2C248%2C230%2C250%2C107%2C224%2C50%2C92%2C250%2C158%2C128%2C69%2C255%2C196%2C43%2C144%2C128%2C251%2C82%5D%2CB%3A%5B0%2C0%2C0%2C255%2C0%2C255%2C255%2C213%2C205%2C63%2C140%2C170%2C128%2C139%2C87%2C225%2C205%2C221%2C122%2C42%2C250%2C219%2C214%2C130%2C193%2C113%2C205%2C196%2C32%2C128%2C143%2C180%2C185%2C135%2C0%2C19%2C0%2C224%2C180%2C0%2C238%2C170%2C240%2C179%2C11%2C170%2C147%2C112%2C144%2C34%2C255%2C250%2C122%2C144%2C47%2C225%2C71%2C230%2C0%2C50%2C96%2C240%2C238%2C0%2C230%2C203%2C212%2C0%2C143%2C60%2C230%2C240%2C209%2C127%2C128%2C205%2C114%2C211%2C34%2C80%2C235%2C237%2C140%2C215%2C238%2C35%2C250%2C139%2C139%2C220%2C211%2C181%2C173%2C255%2C30%2C220%2C79%2C139%2C238%2C0%2C230%2C245%2C0%2C255%2C0%2C216%2C153%2C147%2C204%2C255%2C133%2C50%2C107%2C255%2C250%2C154%2C47%2C208%2C204%2C92%2C210%2C160%2C0%2C0%2C255%2C222%2C226%2C255%2C128%2C152%2C45%5D%2CA%3A%5B0%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%5D%2CI%3A%5B0%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2C30%2C31%2C32%2C33%2C34%2C35%2C36%2C37%2C38%2C39%2C40%2C41%2C42%2C43%2C44%2C45%2C46%2C47%2C48%2C49%2C50%2C51%2C52%2C53%2C54%2C55%2C56%2C57%2C58%2C59%2C60%2C61%2C62%2C63%2C64%2C65%2C66%2C67%2C68%2C69%2C70%2C71%2C72%2C73%2C74%2C75%2C76%2C77%2C78%2C79%2C80%2C81%2C82%2C83%2C84%2C85%2C86%2C87%2C88%2C89%2C90%2C91%2C92%2C93%2C94%2C95%2C96%2C97%2C98%2C99%2C100%2C101%2C102%2C103%2C104%2C105%2C106%2C107%2C108%2C109%2C110%2C111%2C112%2C113%2C114%2C115%2C116%2C117%2C118%2C119%2C120%2C121%2C122%2C123%2C124%2C125%2C126%2C127%2C128%2C129%2C130%5D%7D%2CH%3D%7Blabels%3A%5B%22background%22%2C%22tissue%22%2C%22bone%22%2C%22skin%22%2C%22connective%20tissue%22%2C%22blood%22%2C%22organ%22%2C%22mass%22%2C%22muscle%22%2C%22foreign%20object%22%2C%22waste%22%2C%22teeth%22%2C%22fat%22%2C%22gray%20matter%22%2C%22white%20matter%22%2C%22nerve%22%2C%22vein%22%2C%22artery%22%2C%22capillary%22%2C%22ligament%22%2C%22tendon%22%2C%22cartilage%22%2C%22meniscus%22%2C%22lymph%20node%22%2C%22lymphatic%20vessel%22%2C%22cerebro-spinal%20fluid%22%2C%22bile%22%2C%22urine%22%2C%22feces%22%2C%22gas%22%2C%22fluid%22%2C%22edema%22%2C%22bleeding%22%2C%22necrosis%22%2C%22clot%22%2C%22embolism%22%2C%22head%22%2C%22central%20nervous%20system%22%2C%22brain%22%2C%22gray%20matter%20of%20brain%22%2C%22telencephalon%22%2C%22cerebral%20cortex%22%2C%22right%20frontal%20lobe%22%2C%22left%20frontal%20lobe%22%2C%22right%20temporal%20lobe%22%2C%22left%20temporal%20lobe%22%2C%22right%20parietal%20lobe%22%2C%22left%20parietal%20lobe%22%2C%22right%20occipital%20lobe%22%2C%22left%20occipital%20lobe%22%2C%22right%20insular%20lobe%22%2C%22left%20insular%20lobe%22%2C%22right%20limbic%20lobe%22%2C%22left%20limbic%20lobe%22%2C%22right%20striatum%22%2C%22left%20striatum%22%2C%22right%20caudate%20nucleus%22%2C%22left%20caudate%20nucleus%22%2C%22right%20putamen%22%2C%22left%20putamen%22%2C%22right%20pallidum%22%2C%22left%20pallidum%22%2C%22right%20amygdaloid%20complex%22%2C%22left%20amygdaloid%20complex%22%2C%22diencephalon%22%2C%22thalamus%22%2C%22right%20thalamus%22%2C%22left%20thalamus%22%2C%22pineal%20gland%22%2C%22midbrain%22%2C%22substantia%20nigra%22%2C%22right%20substantia%20nigra%22%2C%22left%20substantia%20nigra%22%2C%22cerebral%20white%20matter%22%2C%22right%20superior%20longitudinal%20fasciculus%22%2C%22left%20superior%20longitudinal%20fasciculus%22%2C%22right%20inferior%20longitudinal%20fasciculus%22%2C%22left%20inferior%20longitudinal%20fasciculus%22%2C%22right%20arcuate%20fasciculus%22%2C%22left%20arcuate%20fasciculus%22%2C%22right%20uncinate%20fasciculus%22%2C%22left%20uncinate%20fasciculus%22%2C%22right%20cingulum%20bundle%22%2C%22left%20cingulum%20bundle%22%2C%22projection%20fibers%22%2C%22right%20corticospinal%20tract%22%2C%22left%20corticospinal%20tract%22%2C%22right%20optic%20radiation%22%2C%22left%20optic%20radiation%22%2C%22right%20medial%20lemniscus%22%2C%22left%20medial%20lemniscus%22%2C%22right%20superior%20cerebellar%20peduncle%22%2C%22left%20superior%20cerebellar%20peduncle%22%2C%22right%20middle%20cerebellar%20peduncle%22%2C%22left%20middle%20cerebellar%20peduncle%22%2C%22right%20inferior%20cerebellar%20peduncle%22%2C%22left%20inferior%20cerebellar%20peduncle%22%2C%22optic%20chiasm%22%2C%22right%20optic%20tract%22%2C%22left%20optic%20tract%22%2C%22right%20fornix%22%2C%22left%20fornix%22%2C%22commissural%20fibers%22%2C%22corpus%20callosum%22%2C%22posterior%20commissure%22%2C%22cerebellar%20white%20matter%22%2C%22CSF%20space%22%2C%22ventricles%20of%20brain%22%2C%22right%20lateral%20ventricle%22%2C%22left%20lateral%20ventricle%22%2C%22right%20third%20ventricle%22%2C%22left%20third%20ventricle%22%2C%22cerebral%20aqueduct%22%2C%22fourth%20ventricle%22%2C%22subarachnoid%20space%22%2C%22spinal%20cord%22%2C%22gray%20matter%20of%20spinal%20cord%22%2C%22white%20matter%20of%20spinal%20cord%22%2C%22endocrine%20system%20of%20brain%22%2C%22pituitary%20gland%22%2C%22adenohypophysis%22%2C%22neurohypophysis%22%2C%22meninges%22%2C%22dura%20mater%22%2C%22arachnoid%22%2C%22pia%20mater%22%2C%22muscles%20of%20head%22%2C%22salivary%20glands%22%2C%22lips%22%2C%22nose%22%2C%22tongue%22%2C%22soft%20palate%22%2C%22right%20inner%20ear%22%2C%22left%20inner%20ear%22%2C%22right%20external%20ear%22%2C%22left%20external%20ear%22%2C%22right%20middle%20ear%22%2C%22left%20middle%20ear%22%2C%22right%20eyeball%22%2C%22left%20eyeball%22%2C%22skull%22%2C%22right%20frontal%20bone%22%2C%22left%20frontal%20bone%22%2C%22right%20parietal%20bone%22%2C%22left%20parietal%20bone%22%2C%22right%20temporal%20bone%22%2C%22left%20temporal%20bone%22%2C%22right%20sphenoid%20bone%22%2C%22left%20sphenoid%20bone%22%2C%22right%20ethmoid%20bone%22%2C%22left%20ethmoid%20bone%22%2C%22occipital%20bone%22%2C%22maxilla%22%2C%22right%20zygomatic%20bone%22%2C%22right%20lacrimal%20bone%22%2C%22vomer%20bone%22%2C%22right%20palatine%20bone%22%2C%22left%20palatine%20bone%22%2C%22mandible%22%2C%22neck%22%2C%22muscles%20of%20neck%22%2C%22pharynx%22%2C%22larynx%22%2C%22thyroid%20gland%22%2C%22right%20parathyroid%20glands%22%2C%22left%20parathyroid%20glands%22%2C%22skeleton%20of%20neck%22%2C%22hyoid%20bone%22%2C%22cervical%20vertebral%20column%22%2C%22thorax%22%2C%22trachea%22%2C%22bronchi%22%2C%22right%20lung%22%2C%22left%20lung%22%2C%22superior%20lobe%20of%20right%20lung%22%2C%22superior%20lobe%20of%20left%20lung%22%2C%22middle%20lobe%20of%20right%20lung%22%2C%22inferior%20lobe%20of%20right%20lung%22%2C%22inferior%20lobe%20of%20left%20lung%22%2C%22pleura%22%2C%22heart%22%2C%22right%20atrium%22%2C%22left%20atrium%22%2C%22atrial%20septum%22%2C%22ventricular%20septum%22%2C%22right%20ventricle%20of%20heart%22%2C%22left%20ventricle%20of%20heart%22%2C%22mitral%20valve%22%2C%22tricuspid%20valve%22%2C%22aortic%20valve%22%2C%22pulmonary%20valve%22%2C%22aorta%22%2C%22pericardium%22%2C%22pericardial%20cavity%22%2C%22esophagus%22%2C%22thymus%22%2C%22mediastinum%22%2C%22skin%20of%20thoracic%20wall%22%2C%22muscles%20of%20thoracic%20wall%22%2C%22skeleton%20of%20thorax%22%2C%22thoracic%20vertebral%20column%22%2C%22ribs%22%2C%22sternum%22%2C%22right%20clavicle%22%2C%22left%20clavicle%22%2C%22abdominal%20cavity%22%2C%22abdomen%22%2C%22peritoneum%22%2C%22omentum%22%2C%22peritoneal%20cavity%22%2C%22retroperitoneal%20space%22%2C%22stomach%22%2C%22duodenum%22%2C%22small%20bowel%22%2C%22colon%22%2C%22anus%22%2C%22liver%22%2C%22biliary%20tree%22%2C%22gallbladder%22%2C%22pancreas%22%2C%22spleen%22%2C%22urinary%20system%22%2C%22right%20kidney%22%2C%22left%20kidney%22%2C%22right%20ureter%22%2C%22left%20ureter%22%2C%22urinary%20bladder%22%2C%22urethra%22%2C%22right%20adrenal%20gland%22%2C%22left%20adrenal%20gland%22%2C%22female%20internal%20genitalia%22%2C%22uterus%22%2C%22right%20fallopian%20tube%22%2C%22left%20fallopian%20tube%22%2C%22right%20ovary%22%2C%22left%20ovary%22%2C%22vagina%22%2C%22male%20internal%20genitalia%22%2C%22prostate%22%2C%22right%20seminal%20vesicle%22%2C%22left%20seminal%20vesicle%22%2C%22right%20deferent%20duct%22%2C%22left%20deferent%20duct%22%2C%22skin%20of%20abdominal%20wall%22%2C%22muscles%20of%20abdominal%20wall%22%2C%22skeleton%20of%20abdomen%22%2C%22lumbar%20vertebral%20column%22%2C%22female%20external%20genitalia%22%2C%22male%20external%20genitalia%22%2C%22skeleton%20of%20upper%20limb%22%2C%22muscles%20of%20upper%20limb%22%2C%22right%20upper%20limb%22%2C%22left%20upper%20limb%22%2C%22right%20shoulder%22%2C%22left%20shoulder%22%2C%22right%20arm%22%5D%2CR%3A%5B0%2C128%2C241%2C177%2C111%2C216%2C221%2C144%2C192%2C220%2C78%2C255%2C230%2C200%2C250%2C244%2C0%2C216%2C183%2C183%2C152%2C111%2C178%2C68%2C111%2C85%2C0%2C214%2C78%2C218%2C170%2C140%2C188%2C216%2C145%2C150%2C177%2C244%2C250%2C200%2C68%2C128%2C83%2C83%2C162%2C162%2C141%2C141%2C182%2C182%2C188%2C188%2C154%2C154%2C177%2C177%2C30%2C30%2C210%2C210%2C48%2C48%2C98%2C98%2C69%2C166%2C122%2C122%2C253%2C145%2C46%2C0%2C0%2C250%2C127%2C127%2C159%2C159%2C125%2C125%2C106%2C106%2C154%2C154%2C126%2C201%2C201%2C78%2C78%2C174%2C174%2C139%2C139%2C148%2C148%2C186%2C186%2C99%2C156%2C156%2C64%2C64%2C138%2C97%2C126%2C194%2C85%2C88%2C88%2C88%2C88%2C88%2C88%2C88%2C88%2C244%2C200%2C250%2C82%2C57%2C60%2C92%2C255%2C255%2C255%2C255%2C201%2C70%2C188%2C177%2C166%2C182%2C229%2C229%2C174%2C174%2C201%2C201%2C194%2C194%2C241%2C203%2C203%2C229%2C229%2C255%2C255%2C209%2C209%2C248%2C248%2C255%2C196%2C255%2C255%2C255%2C242%2C242%2C222%2C177%2C213%2C184%2C150%2C62%2C62%2C62%2C242%2C250%2C255%2C177%2C182%2C175%2C197%2C197%2C172%2C172%2C202%2C224%2C224%2C255%2C206%2C210%2C203%2C233%2C195%2C181%2C152%2C159%2C166%2C218%2C225%2C224%2C255%2C184%2C211%2C47%2C255%2C173%2C188%2C255%2C226%2C253%2C244%2C205%2C205%2C186%2C177%2C255%2C234%2C204%2C180%2C216%2C255%2C205%2C204%2C255%2C221%2C0%2C139%2C249%2C157%2C203%2C185%2C185%2C247%2C247%2C222%2C124%2C249%2C249%2C244%2C255%2C255%2C227%2C213%2C213%2C193%2C216%2C230%2C245%2C245%2C241%2C241%2C177%2C171%2C217%2C212%2C185%2C185%2C198%2C194%2C177%2C177%2C177%2C177%2C177%5D%2CG%3A%5B0%2C174%2C214%2C122%2C184%2C101%2C130%2C238%2C104%2C245%2C63%2C250%2C220%2C200%2C250%2C214%2C151%2C101%2C156%2C214%2C189%2C184%2C212%2C172%2C197%2C188%2C145%2C230%2C63%2C255%2C250%2C224%2C65%2C191%2C60%2C98%2C122%2C214%2C250%2C200%2C131%2C174%2C146%2C146%2C115%2C115%2C93%2C93%2C166%2C166%2C135%2C135%2C150%2C150%2C140%2C140%2C111%2C111%2C157%2C157%2C129%2C129%2C153%2C153%2C110%2C113%2C101%2C101%2C135%2C92%2C101%2C108%2C108%2C250%2C150%2C150%2C116%2C116%2C102%2C102%2C174%2C174%2C146%2C146%2C126%2C160%2C160%2C152%2C152%2C140%2C140%2C126%2C126%2C120%2C120%2C135%2C135%2C106%2C171%2C171%2C123%2C123%2C95%2C113%2C161%2C195%2C188%2C106%2C106%2C106%2C106%2C106%2C106%2C106%2C106%2C214%2C200%2C250%2C174%2C157%2C143%2C162%2C244%2C244%2C244%2C244%2C121%2C163%2C91%2C122%2C84%2C105%2C147%2C147%2C122%2C122%2C112%2C112%2C142%2C142%2C213%2C179%2C179%2C204%2C204%2C243%2C243%2C185%2C185%2C223%2C223%2C230%2C172%2C255%2C250%2C237%2C217%2C217%2C198%2C122%2C124%2C105%2C208%2C162%2C162%2C162%2C206%2C210%2C255%2C122%2C228%2C216%2C165%2C165%2C138%2C138%2C164%2C186%2C186%2C245%2C110%2C115%2C108%2C138%2C100%2C85%2C55%2C63%2C70%2C123%2C130%2C97%2C244%2C122%2C171%2C150%2C244%2C121%2C95%2C239%2C202%2C232%2C217%2C179%2C179%2C124%2C122%2C255%2C234%2C142%2C119%2C132%2C253%2C167%2C168%2C224%2C130%2C145%2C150%2C180%2C108%2C136%2C102%2C102%2C182%2C182%2C154%2C186%2C186%2C186%2C170%2C181%2C190%2C153%2C141%2C141%2C123%2C146%2C158%2C172%2C172%2C172%2C172%2C124%2C85%2C198%2C188%2C135%2C135%2C175%2C98%2C122%2C122%2C122%2C122%2C122%5D%2CB%3A%5B0%2C128%2C145%2C101%2C210%2C79%2C101%2C144%2C88%2C20%2C0%2C220%2C70%2C235%2C210%2C49%2C206%2C79%2C220%2C211%2C207%2C210%2C242%2C100%2C131%2C255%2C30%2C130%2C0%2C255%2C250%2C228%2C28%2C216%2C66%2C83%2C101%2C49%2C225%2C215%2C98%2C128%2C164%2C164%2C105%2C105%2C137%2C137%2C110%2C110%2C166%2C166%2C201%2C201%2C190%2C190%2C85%2C85%2C166%2C166%2C126%2C126%2C112%2C112%2C53%2C137%2C38%2C38%2C192%2C109%2C131%2C112%2C112%2C225%2C88%2C88%2C163%2C163%2C154%2C154%2C155%2C155%2C83%2C83%2C55%2C133%2C133%2C141%2C141%2C103%2C103%2C177%2C177%2C72%2C72%2C135%2C135%2C24%2C108%2C108%2C147%2C147%2C74%2C158%2C197%2C164%2C255%2C215%2C215%2C215%2C215%2C215%2C215%2C215%2C215%2C49%2C215%2C225%2C128%2C110%2C83%2C109%2C209%2C209%2C209%2C209%2C77%2C117%2C95%2C101%2C94%2C107%2C118%2C118%2C90%2C90%2C73%2C73%2C0%2C0%2C144%2C77%2C77%2C109%2C109%2C152%2C152%2C85%2C85%2C131%2C131%2C138%2C68%2C167%2C160%2C145%2C123%2C123%2C101%2C101%2C109%2C108%2C243%2C114%2C114%2C114%2C142%2C139%2C207%2C101%2C255%2C244%2C145%2C145%2C115%2C115%2C140%2C162%2C162%2C217%2C84%2C89%2C81%2C112%2C73%2C57%2C13%2C27%2C38%2C97%2C104%2C76%2C209%2C154%2C143%2C103%2C209%2C88%2C76%2C172%2C134%2C158%2C154%2C108%2C108%2C161%2C101%2C220%2C194%2C178%2C153%2C105%2C229%2C142%2C143%2C199%2C101%2C30%2C98%2C111%2C162%2C116%2C83%2C83%2C164%2C164%2C132%2C223%2C150%2C150%2C147%2C158%2C165%2C130%2C113%2C113%2C103%2C127%2C140%2C147%2C147%2C151%2C151%2C92%2C68%2C131%2C102%2C134%2C134%2C125%2C79%2C101%2C101%2C101%2C101%2C101%5D%2CA%3A%5B0%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%5D%2CI%3A%5B0%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2C30%2C31%2C32%2C33%2C34%2C35%2C36%2C37%2C38%2C39%2C40%2C41%2C42%2C43%2C44%2C45%2C46%2C47%2C48%2C49%2C50%2C51%2C52%2C53%2C54%2C55%2C56%2C57%2C58%2C59%2C60%2C61%2C62%2C63%2C64%2C65%2C66%2C67%2C68%2C69%2C70%2C71%2C72%2C73%2C74%2C75%2C76%2C77%2C78%2C79%2C80%2C81%2C82%2C83%2C84%2C85%2C86%2C87%2C88%2C89%2C90%2C91%2C92%2C93%2C94%2C95%2C96%2C97%2C98%2C99%2C100%2C101%2C102%2C103%2C104%2C105%2C106%2C107%2C108%2C109%2C110%2C111%2C112%2C113%2C114%2C115%2C116%2C117%2C118%2C119%2C120%2C121%2C122%2C123%2C124%2C125%2C126%2C127%2C128%2C129%2C130%2C131%2C132%2C133%2C134%2C135%2C136%2C137%2C138%2C139%2C140%2C141%2C142%2C143%2C144%2C145%2C146%2C147%2C148%2C149%2C150%2C151%2C152%2C153%2C154%2C155%2C156%2C157%2C158%2C159%2C160%2C161%2C162%2C163%2C164%2C165%2C166%2C167%2C168%2C169%2C170%2C171%2C172%2C173%2C174%2C175%2C176%2C177%2C178%2C179%2C180%2C181%2C182%2C183%2C184%2C185%2C186%2C187%2C188%2C189%2C190%2C191%2C192%2C193%2C194%2C195%2C196%2C197%2C198%2C199%2C200%2C201%2C202%2C203%2C204%2C205%2C206%2C207%2C208%2C209%2C210%2C211%2C212%2C213%2C214%2C215%2C216%2C217%2C218%2C219%2C220%2C221%2C222%2C223%2C224%2C225%2C226%2C227%2C228%2C229%2C230%2C231%2C232%2C233%2C234%2C235%2C236%2C237%2C238%2C239%2C240%2C241%2C242%2C243%2C244%2C245%2C246%2C247%2C248%2C249%2C250%2C251%2C252%2C253%2C254%2C255%5D%7D%2CQ%3D%7BR%3A%5B0%2C0%2C24%2C248%2C255%5D%2CG%3A%5B0%2C0%2C177%2C254%2C0%5D%2CB%3A%5B0%2C136%2C0%2C0%2C0%5D%2CA%3A%5B0%2C32%2C64%2C78%2C128%5D%2CI%3A%5B0%2C64%2C128%2C156%2C255%5D%7D%2Cz%3D%7BR%3A%5B0%2C248%2C242%2C235%2C229%2C222%2C212%2C202%2C193%2C183%2C173%2C145%2C117%2C78%2C39%2C0%2C0%2C0%2C0%2C0%2C0%2C64%2C128%2C191%2C255%2C255%2C255%2C255%2C255%2C238%2C221%2C204%2C214%2C224%2C235%2C245%2C255%2C249%2C242%2C236%2C229%2C223%2C217%2C210%2C204%2C197%2C191%2C184%2C176%2C169%2C161%2C154%2C146%2C139%2C132%2C124%2C117%2C109%2C102%2C0%5D%2CG%3A%5B0%2C251%2C247%2C243%2C239%2C235%2C235%2C235%2C235%2C235%2C235%2C216%2C197%2C174%2C150%2C127%2C153%2C178%2C204%2C229%2C255%2C255%2C255%2C255%2C255%2C220%2C185%2C150%2C115%2C77%2C38%2C0%2C31%2C61%2C92%2C122%2C153%2C138%2C122%2C107%2C92%2C77%2C61%2C46%2C31%2C15%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%5D%2CB%3A%5B0%2C254%2C253%2C252%2C251%2C250%2C251%2C252%2C253%2C254%2C255%2C226%2C198%2C132%2C66%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C40%2C80%2C120%2C160%2C200%2C199%2C198%2C197%2C196%2C196%2C195%2C194%2C193%2C192%2C191%2C184%2C176%2C169%2C161%2C154%2C146%2C139%2C132%2C124%2C117%2C109%2C102%2C0%5D%2CA%3A%5B256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%5D%2CI%3A%5B0%2C4%2C8%2C12%2C16%2C20%2C24%2C28%2C32%2C36%2C40%2C44%2C48%2C52%2C56%2C60%2C64%2C68%2C72%2C76%2C80%2C84%2C88%2C92%2C96%2C100%2C104%2C108%2C112%2C116%2C120%2C124%2C128%2C132%2C136%2C140%2C144%2C148%2C152%2C156%2C160%2C164%2C168%2C172%2C176%2C180%2C184%2C188%2C192%2C196%2C200%2C204%2C208%2C212%2C216%2C220%2C224%2C228%2C232%2C236%2C240%2C244%2C248%2C255%5D%7D%2Cq%3D%7BR%3A%5B255%2C248%2C242%2C235%2C229%2C222%2C212%2C202%2C193%2C183%2C173%2C145%2C117%2C78%2C39%2C0%2C0%2C0%2C0%2C0%2C0%2C64%2C128%2C191%2C255%2C255%2C255%2C255%2C255%2C238%2C221%2C204%2C214%2C224%2C235%2C245%2C255%2C249%2C242%2C236%2C229%2C223%2C217%2C210%2C204%2C197%2C191%2C184%2C176%2C169%2C161%2C154%2C146%2C139%2C132%2C124%2C117%2C109%2C102%2C0%5D%2CG%3A%5B255%2C251%2C247%2C243%2C239%2C235%2C235%2C235%2C235%2C235%2C235%2C216%2C197%2C174%2C150%2C127%2C153%2C178%2C204%2C229%2C255%2C255%2C255%2C255%2C255%2C220%2C185%2C150%2C115%2C77%2C38%2C0%2C31%2C61%2C92%2C122%2C153%2C138%2C122%2C107%2C92%2C77%2C61%2C46%2C31%2C15%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%5D%2CB%3A%5B255%2C254%2C253%2C252%2C251%2C250%2C251%2C252%2C253%2C254%2C255%2C226%2C198%2C132%2C66%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C40%2C80%2C120%2C160%2C200%2C199%2C198%2C197%2C196%2C196%2C195%2C194%2C193%2C192%2C191%2C184%2C176%2C169%2C161%2C154%2C146%2C139%2C132%2C124%2C117%2C109%2C102%2C0%5D%2CA%3A%5B256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%5D%2CI%3A%5B0%2C4%2C8%2C12%2C16%2C20%2C24%2C28%2C32%2C36%2C40%2C44%2C48%2C52%2C56%2C60%2C64%2C68%2C72%2C76%2C80%2C84%2C88%2C92%2C96%2C100%2C104%2C108%2C112%2C116%2C120%2C124%2C128%2C132%2C136%2C140%2C144%2C148%2C152%2C156%2C160%2C164%2C168%2C172%2C176%2C180%2C184%2C188%2C192%2C196%2C200%2C204%2C208%2C212%2C216%2C220%2C224%2C228%2C232%2C236%2C240%2C244%2C248%2C255%5D%7D%2CX%3D%7BR%3A%5B0%2C0%2C0%2C0%2C196%2C255%5D%2CG%3A%5B0%2C32%2C128%2C128%2C128%2C32%5D%2CB%3A%5B0%2C255%2C196%2C0%2C0%2C0%5D%2CA%3A%5B0%2C128%2C64%2C64%2C64%2C128%5D%2CI%3A%5B0%2C1%2C64%2C128%2C192%2C255%5D%7D%2Cj%3D%7BR%3A%5B0%2C255%5D%2CG%3A%5B0%2C0%5D%2CB%3A%5B255%2C255%5D%2CA%3A%5B0%2C128%5D%2CI%3A%5B0%2C255%5D%7D%2CZ%3D%7BR%3A%5B0%2C0%5D%2CG%3A%5B0%2C255%5D%2CB%3A%5B255%2C255%5D%2CA%3A%5B0%2C128%5D%2CI%3A%5B0%2C255%5D%7D%2CJ%3D%7BR%3A%5B0%2C0%2C0%2C0%5D%2CG%3A%5B0%2C1%2C128%2C255%5D%2CB%3A%5B0%2C222%2C127%2C32%5D%2CA%3A%5B0%2C0%2C64%2C128%5D%2CI%3A%5B0%2C1%2C128%2C255%5D%7D%2C_%3D%7BR%3A%5B0%2C0%2C0%5D%2CG%3A%5B0%2C0%2C0%5D%2CB%3A%5B0%2C128%2C255%5D%2CA%3A%5B0%2C64%2C128%5D%2CI%3A%5B0%2C128%2C255%5D%7D%2C%24%3D%7BR%3A%5B0%2C103%2C255%5D%2CG%3A%5B0%2C126%2C255%5D%2CB%3A%5B0%2C165%2C255%5D%2CA%3A%5B0%2C76%2C128%5D%2CI%3A%5B0%2C153%2C255%5D%7D%2Ctt%3D%7BR%3A%5B0%2C43%2C103%2C199%2C216%2C255%5D%2CG%3A%5B0%2C0%2C37%2C155%2C213%2C255%5D%2CB%3A%5B0%2C0%2C20%2C97%2C201%2C255%5D%2CA%3A%5B0%2C44%2C48%2C54%2C56%2C56%5D%2CI%3A%5B0%2C64%2C128%2C196%2C240%2C255%5D%7D%2Cet%3D%7BR%3A%5B0%2C9%2C24%2C33%2C40%2C46%2C52%2C57%2C62%2C66%2C70%2C74%2C78%2C81%2C85%2C88%2C91%2C94%2C98%2C101%2C103%2C106%2C109%2C112%2C114%2C117%2C119%2C121%2C124%2C126%2C128%2C130%2C133%2C135%2C137%2C139%2C141%2C143%2C145%2C147%2C149%2C151%2C153%2C155%2C157%2C159%2C161%2C163%2C164%2C166%2C168%2C169%2C171%2C172%2C174%2C175%2C177%2C178%2C180%2C181%2C183%2C184%2C186%2C187%2C189%2C190%2C191%2C193%2C194%2C196%2C197%2C198%2C199%2C200%2C201%2C202%2C203%2C204%2C205%2C206%2C207%2C208%2C209%2C210%2C211%2C212%2C213%2C214%2C215%2C216%2C217%2C218%2C219%2C220%2C221%2C222%2C222%2C223%2C224%2C224%2C225%2C226%2C226%2C227%2C228%2C228%2C229%2C229%2C230%2C231%2C231%2C232%2C233%2C233%2C234%2C234%2C235%2C235%2C236%2C236%2C236%2C237%2C237%2C237%2C238%2C238%2C238%2C239%2C239%2C239%2C240%2C240%2C240%2C241%2C241%2C241%2C242%2C242%2C242%2C243%2C243%2C243%2C243%2C243%2C243%2C243%2C243%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C245%2C245%2C245%2C245%2C245%2C245%2C245%2C245%2C245%2C245%2C245%2C245%2C245%2C245%2C245%2C245%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C243%2C243%2C243%2C243%2C243%2C243%2C243%2C243%2C243%2C243%2C243%2C243%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C241%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C243%2C243%2C244%2C244%2C245%2C246%2C246%2C247%2C247%2C248%2C249%2C249%2C250%2C250%2C251%2C251%2C252%2C252%2C253%2C253%2C254%2C254%2C254%5D%2CG%3A%5B42%2C41%2C41%2C41%2C40%2C40%2C40%2C39%2C39%2C39%2C38%2C38%2C37%2C37%2C36%2C36%2C35%2C35%2C34%2C34%2C33%2C32%2C32%2C31%2C30%2C30%2C30%2C30%2C29%2C29%2C29%2C29%2C28%2C28%2C28%2C27%2C27%2C27%2C26%2C26%2C26%2C25%2C25%2C25%2C24%2C24%2C24%2C24%2C24%2C25%2C25%2C26%2C27%2C27%2C28%2C28%2C29%2C30%2C30%2C31%2C31%2C32%2C33%2C33%2C34%2C34%2C35%2C36%2C36%2C37%2C38%2C39%2C40%2C42%2C43%2C44%2C45%2C47%2C48%2C49%2C50%2C51%2C53%2C54%2C55%2C56%2C57%2C58%2C59%2C60%2C62%2C63%2C64%2C65%2C66%2C68%2C69%2C71%2C72%2C73%2C75%2C76%2C77%2C79%2C80%2C81%2C83%2C84%2C85%2C87%2C88%2C89%2C90%2C92%2C93%2C94%2C95%2C97%2C98%2C100%2C101%2C102%2C104%2C105%2C107%2C108%2C109%2C111%2C112%2C113%2C115%2C116%2C117%2C119%2C120%2C121%2C122%2C124%2C125%2C126%2C128%2C129%2C130%2C132%2C133%2C134%2C136%2C137%2C138%2C140%2C141%2C142%2C144%2C145%2C146%2C147%2C149%2C150%2C151%2C153%2C154%2C155%2C156%2C158%2C159%2C160%2C161%2C163%2C164%2C165%2C167%2C168%2C169%2C170%2C172%2C173%2C174%2C175%2C176%2C178%2C179%2C180%2C181%2C183%2C184%2C185%2C186%2C187%2C189%2C190%2C191%2C192%2C193%2C194%2C196%2C197%2C198%2C199%2C200%2C201%2C203%2C204%2C205%2C206%2C207%2C208%2C209%2C211%2C212%2C213%2C214%2C215%2C216%2C217%2C218%2C219%2C220%2C221%2C222%2C223%2C224%2C225%2C226%2C228%2C229%2C230%2C231%2C232%2C233%2C234%2C235%2C236%2C237%2C238%2C238%2C239%2C240%2C241%2C241%2C242%2C243%2C244%2C244%2C245%2C246%2C247%2C248%2C248%2C249%2C250%2C251%2C251%2C252%2C253%2C254%2C255%5D%2CB%3A%5B167%2C167%2C166%2C166%2C166%2C165%2C165%2C165%2C164%2C164%2C164%2C163%2C163%2C162%2C162%2C162%2C161%2C161%2C161%2C160%2C160%2C160%2C159%2C159%2C158%2C158%2C157%2C157%2C156%2C155%2C155%2C154%2C154%2C153%2C153%2C152%2C151%2C151%2C150%2C150%2C149%2C149%2C148%2C147%2C147%2C146%2C146%2C145%2C144%2C144%2C143%2C143%2C142%2C141%2C141%2C140%2C139%2C139%2C138%2C137%2C137%2C136%2C135%2C135%2C134%2C133%2C133%2C132%2C131%2C131%2C130%2C130%2C129%2C128%2C128%2C127%2C127%2C126%2C125%2C125%2C124%2C124%2C123%2C123%2C122%2C121%2C121%2C120%2C119%2C119%2C118%2C118%2C117%2C116%2C116%2C116%2C115%2C115%2C114%2C114%2C113%2C113%2C113%2C112%2C112%2C111%2C111%2C110%2C110%2C109%2C109%2C109%2C108%2C108%2C107%2C107%2C106%2C106%2C106%2C106%2C106%2C105%2C105%2C105%2C105%2C105%2C105%2C105%2C104%2C104%2C104%2C104%2C104%2C103%2C103%2C103%2C103%2C103%2C102%2C102%2C102%2C103%2C103%2C103%2C103%2C104%2C104%2C104%2C104%2C104%2C105%2C105%2C105%2C105%2C106%2C106%2C106%2C106%2C106%2C107%2C107%2C107%2C107%2C108%2C108%2C109%2C110%2C111%2C111%2C112%2C113%2C113%2C114%2C115%2C115%2C116%2C117%2C117%2C118%2C119%2C120%2C120%2C121%2C122%2C122%2C123%2C124%2C125%2C126%2C128%2C129%2C130%2C131%2C132%2C134%2C135%2C136%2C137%2C138%2C140%2C141%2C142%2C143%2C144%2C146%2C147%2C148%2C149%2C150%2C152%2C153%2C155%2C157%2C158%2C160%2C162%2C163%2C165%2C167%2C168%2C170%2C172%2C173%2C175%2C177%2C178%2C180%2C182%2C183%2C185%2C187%2C188%2C190%2C193%2C196%2C199%2C201%2C204%2C207%2C210%2C212%2C215%2C218%2C221%2C224%2C226%2C229%2C232%2C235%2C238%2C240%2C243%2C246%2C249%2C252%2C255%5D%2CA%3A%5B0%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%5D%2CI%3A%5B0%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2C30%2C31%2C32%2C33%2C34%2C35%2C36%2C37%2C38%2C39%2C40%2C41%2C42%2C43%2C44%2C45%2C46%2C47%2C48%2C49%2C50%2C51%2C52%2C53%2C54%2C55%2C56%2C57%2C58%2C59%2C60%2C61%2C62%2C63%2C64%2C65%2C66%2C67%2C68%2C69%2C70%2C71%2C72%2C73%2C74%2C75%2C76%2C77%2C78%2C79%2C80%2C81%2C82%2C83%2C84%2C85%2C86%2C87%2C88%2C89%2C90%2C91%2C92%2C93%2C94%2C95%2C96%2C97%2C98%2C99%2C100%2C101%2C102%2C103%2C104%2C105%2C106%2C107%2C108%2C109%2C110%2C111%2C112%2C113%2C114%2C115%2C116%2C117%2C118%2C119%2C120%2C121%2C122%2C123%2C124%2C125%2C126%2C127%2C128%2C129%2C130%2C131%2C132%2C133%2C134%2C135%2C136%2C137%2C138%2C139%2C140%2C141%2C142%2C143%2C144%2C145%2C146%2C147%2C148%2C149%2C150%2C151%2C152%2C153%2C154%2C155%2C156%2C157%2C158%2C159%2C160%2C161%2C162%2C163%2C164%2C165%2C166%2C167%2C168%2C169%2C170%2C171%2C172%2C173%2C174%2C175%2C176%2C177%2C178%2C179%2C180%2C181%2C182%2C183%2C184%2C185%2C186%2C187%2C188%2C189%2C190%2C191%2C192%2C193%2C194%2C195%2C196%2C197%2C198%2C199%2C200%2C201%2C202%2C203%2C204%2C205%2C206%2C207%2C208%2C209%2C210%2C211%2C212%2C213%2C214%2C215%2C216%2C217%2C218%2C219%2C220%2C221%2C222%2C223%2C224%2C225%2C226%2C227%2C228%2C229%2C230%2C231%2C232%2C233%2C234%2C235%2C236%2C237%2C238%2C239%2C240%2C241%2C242%2C243%2C244%2C245%2C246%2C247%2C248%2C249%2C250%2C251%2C252%2C253%2C254%2C255%5D%7D%2Cit%3D%7BR%3A%5B0%2C86%2C166%2C255%5D%2CG%3A%5B32%2C92%2C156%2C233%5D%2CB%3A%5B76%2C108%2C117%2C69%5D%2CA%3A%5B0%2C56%2C80%2C88%5D%2CI%3A%5B0%2C64%2C192%2C255%5D%7D%2Cst%3D%7BR%3A%5B0%2C0%2C0%5D%2CG%3A%5B127%2C196%2C254%5D%2CB%3A%5B255%2C255%2C255%5D%2CA%3A%5B0%2C64%2C128%5D%2CI%3A%5B0%2C128%2C255%5D%7D%2Crt%3D%7BR%3A%5B0%2C61%2C122%2C183%2C244%2C255%5D%2CG%3A%5B0%2C41%2C81%2C122%2C163%2C255%5D%2CB%3A%5B0%2C25%2C51%2C76%2C102%2C255%5D%2CA%3A%5B0%2C25%2C51%2C71%2C102%2C128%5D%2CI%3A%5B0%2C51%2C102%2C153%2C204%2C255%5D%7D%2Cnt%3D%7BR%3A%5B0%2C61%2C122%2C183%2C244%2C255%5D%2CG%3A%5B0%2C41%2C81%2C122%2C163%2C203%5D%2CB%3A%5B0%2C25%2C51%2C76%2C102%2C127%5D%2CA%3A%5B0%2C25%2C51%2C71%2C102%2C128%5D%2CI%3A%5B0%2C51%2C102%2C153%2C204%2C255%5D%7D%2Cat%3D%7Bmin%3A-643%2Cmax%3A-235%2CR%3A%5B0%2C0%2C0%5D%2CG%3A%5B154%2C154%2C154%5D%2CB%3A%5B179%2C179%2C101%5D%2CA%3A%5B0%2C32%2C0%5D%2CI%3A%5B0%2C163%2C255%5D%7D%2Cot%3D%7Bmin%3A114%2Cmax%3A800%2CR%3A%5B0%2C255%2C255%2C255%5D%2CG%3A%5B0%2C0%2C129%2C255%5D%2CB%3A%5B0%2C0%2C0%2C255%5D%2CA%3A%5B0%2C64%2C88%2C228%5D%2CI%3A%5B0%2C80%2C160%2C255%5D%7D%2Clt%3D%7Bmin%3A180%2Cmax%3A600%2CR%3A%5B0%2C0%2C113%2C255%5D%2CG%3A%5B0%2C0%2C109%2C250%5D%2CB%3A%5B0%2C0%2C101%2C245%5D%2CA%3A%5B0%2C0%2C100%2C160%5D%2CI%3A%5B0%2C1%2C128%2C255%5D%7D%2Cht%3D%7Bmin%3A-10%2Cmax%3A110%2CR%3A%5B0%2C127%2C255%5D%2CG%3A%5B0%2C127%2C255%5D%2CB%3A%5B0%2C127%2C255%5D%2CA%3A%5B0%2C48%2C128%5D%2CI%3A%5B0%2C124%2C255%5D%7D%2Cct%3D%7Bmin%3A-10%2Cmax%3A110%2CR%3A%5B0%2C199%2C255%5D%2CG%3A%5B0%2C127%2C255%5D%2CB%3A%5B0%2C127%2C255%5D%2CA%3A%5B0%2C48%2C128%5D%2CI%3A%5B0%2C124%2C255%5D%7D%2Cdt%3D%7Bmin%3A-80%2Cmax%3A1e3%2CR%3A%5B0%2C189%2C150%2C150%2C150%2C150%2C255%5D%2CG%3A%5B0%2C169%2C54%2C54%2C54%2C54%2C240%5D%2CB%3A%5B0%2C153%2C52%2C52%2C52%2C52%2C242%5D%2CA%3A%5B0%2C32%2C64%2C0%2C0%2C64%2C64%5D%2CI%3A%5B0%2C1%2C82%2C92%2C234%2C242%2C255%5D%7D%2Cmt%3D%7Bmin%3A-590%2Cmax%3A600%2CR%3A%5B0%2C241%2C241%2C248%2C248%2C178%2C178%2C232%2C255%2C255%2C255%5D%2CG%3A%5B0%2C156%2C156%2C222%2C222%2C36%2C36%2C51%2C255%2C255%2C255%5D%2CB%3A%5B0%2C130%2C130%2C169%2C169%2C24%2C24%2C37%2C255%2C255%2C255%5D%2CA%3A%5B0%2C8%2C0%2C0%2C0%2C64%2C64%2C0%2C0%2C222%2C222%5D%2CI%3A%5B0%2C2%2C3%2C64%2C122%2C142%2C172%2C182%2C252%2C253%2C255%5D%7D%2Cut%3D%7Bmin%3A114%2Cmax%3A302%2CR%3A%5B0%2C255%2C255%5D%2CG%3A%5B0%2C129%2C255%5D%2CB%3A%5B0%2C0%2C255%5D%2CA%3A%5B0%2C88%2C228%5D%2CI%3A%5B0%2C103%2C255%5D%7D%2CAt%3D%7Bmin%3A-23%2Cmax%3A246%2CR%3A%5B0%2C44%2C255%2C255%2C255%5D%2CG%3A%5B0%2C128%2C90%2C255%2C255%5D%2CB%3A%5B0%2C0%2C70%2C0%2C255%5D%2CA%3A%5B0%2C0%2C82%2C184%2C228%5D%2CI%3A%5B0%2C64%2C131%2C196%2C255%5D%7D%2Cft%3D%7Bmin%3A-100%2Cmax%3A246%2CR%3A%5B0%2C128%2C159%2C255%2C255%2C255%2C255%5D%2CG%3A%5B0%2C0%2C56%2C90%2C0%2C255%2C255%5D%2CB%3A%5B0%2C0%2C41%2C70%2C0%2C0%2C255%5D%2CA%3A%5B0%2C63%2C105%2C135%2C167%2C184%2C228%5D%2CI%3A%5B0%2C100%2C128%2C155%2C180%2C209%2C255%5D%7D%2Cgt%3D%7Bmin%3A-590%2Cmax%3A600%2CR%3A%5B0%2C241%2C241%2C248%2C248%2C178%2C232%2C255%2C255%5D%2CG%3A%5B0%2C156%2C156%2C222%2C222%2C36%2C51%2C255%2C255%5D%2CB%3A%5B0%2C130%2C130%2C169%2C169%2C24%2C37%2C255%2C255%5D%2CA%3A%5B0%2C63%2C105%2C135%2C167%2C184%2C228%2C228%2C228%5D%2CI%3A%5B0%2C1%2C52%2C127%2C137%2C162%2C172%2C252%2C255%5D%7D%2Cpt%3D%7Bmin%3A140%2Cmax%3A1024%2CR%3A%5B0%2C2%2C113%2C255%5D%2CG%3A%5B0%2C1%2C109%2C250%5D%2CB%3A%5B0%2C1%2C101%2C245%5D%2CA%3A%5B0%2C1%2C96%2C168%5D%2CI%3A%5B0%2C1%2C128%2C255%5D%7D%2Cvt%3D%7Bmin%3A-923%2Cmax%3A679%2CR%3A%5B0%2C0%2C0%2C0%2C0%2C255%2C255%2C255%5D%2CG%3A%5B154%2C154%2C154%2C154%2C0%2C0%2C254%2C255%5D%2CB%3A%5B179%2C179%2C179%2C179%2C0%2C0%2C0%2C255%5D%2CA%3A%5B0%2C3%2C8%2C0%2C0%2C10%2C15%2C20%5D%2CI%3A%5B0%2C30%2C62%2C88%2C170%2C200%2C232%2C255%5D%7D%2Cxt%3D%7Bmin%3A-10%2Cmax%3A110%2CR%3A%5B0%2C199%2C255%5D%2CG%3A%5B0%2C127%2C255%5D%2CB%3A%5B0%2C127%2C255%5D%2CA%3A%5B0%2C48%2C128%5D%2CI%3A%5B0%2C124%2C255%5D%7D%2Cwt%3D%7Bmin%3A-600%2Cmax%3A100%2CR%3A%5B0%2C134%2C255%5D%2CG%3A%5B0%2C109%2C250%5D%2CB%3A%5B0%2C101%2C245%5D%2CA%3A%5B0%2C60%2C148%5D%2CI%3A%5B0%2C128%2C255%5D%7D%2CCt%3D%7Bmin%3A114%2Cmax%3A246%2CR%3A%5B0%2C255%2C255%5D%2CG%3A%5B0%2C128%2C255%5D%2CB%3A%5B0%2C128%2C255%5D%2CA%3A%5B0%2C64%2C96%5D%2CI%3A%5B0%2C87%2C255%5D%7D%2Cbt%3D%7Bmin%3A50%2Cmax%3A1e3%2CR%3A%5B98%2C210%2C169%2C128%2C255%5D%2CG%3A%5B94%2C26%2C77%2C128%2C255%5D%2CB%3A%5B45%2C21%2C74%2C128%2C255%5D%2CA%3A%5B0%2C25%2C0%2C4%2C168%5D%2CI%3A%5B0%2C41%2C87%2C154%2C255%5D%7D%2Cyt%3D%7BR%3A%5B0%2C13%2C21%2C26%2C27%2C25%2C22%2C21%2C22%2C28%2C39%2C54%2C75%2C98%2C124%2C148%2C171%2C189%2C202%2C210%2C213%2C211%2C206%2C200%2C195%2C193%2C195%2C201%2C211%2C225%2C240%2C255%5D%2CG%3A%5B0%2C5%2C11%2C20%2C31%2C44%2C58%2C72%2C86%2C99%2C109%2C116%2C120%2C122%2C122%2C122%2C121%2C121%2C124%2C129%2C137%2C147%2C161%2C175%2C190%2C205%2C218%2C229%2C238%2C245%2C251%2C255%5D%2CB%3A%5B0%2C14%2C30%2C46%2C61%2C71%2C77%2C78%2C75%2C68%2C60%2C52%2C48%2C47%2C53%2C65%2C83%2C105%2C131%2C157%2C183%2C205%2C222%2C235%2C241%2C243%2C242%2C240%2C239%2C240%2C245%2C255%5D%2CA%3A%5B0%2C4%2C8%2C12%2C17%2C21%2C25%2C29%2C33%2C37%2C41%2C45%2C50%2C54%2C58%2C62%2C66%2C70%2C74%2C78%2C83%2C87%2C91%2C95%2C99%2C103%2C107%2C111%2C116%2C120%2C124%2C128%5D%2CI%3A%5B0%2C8%2C16%2C25%2C33%2C41%2C49%2C58%2C66%2C74%2C82%2C90%2C99%2C107%2C115%2C123%2C132%2C140%2C148%2C156%2C165%2C173%2C181%2C189%2C197%2C206%2C214%2C222%2C230%2C239%2C247%2C255%5D%7D%2CIt%3D%7BR%3A%5B0%2C10%2C136%2C255%5D%2CG%3A%5B0%2C39%2C220%2C255%5D%2CB%3A%5B0%2C223%2C253%2C255%5D%2CA%3A%5B0%2C48%2C64%2C70%5D%2CI%3A%5B0%2C92%2C192%2C255%5D%7D%2CMt%3D%7BR%3A%5B0%2C245%2C205%2C120%2C196%2C220%2C230%2C0%2C122%2C236%2C12%2C204%2C42%2C119%2C220%2C103%2C60%2C255%2C165%2C160%2C0%2C245%2C205%2C120%2C196%2C220%2C230%2C0%2C122%2C236%2C13%2C220%2C103%2C255%2C165%2C160%2C0%2C120%2C200%2C255%2C255%2C164%2C164%2C164%2C234%2C0%2C0%2C0%2C0%2C0%5D%2CG%3A%5B0%2C245%2C62%2C18%2C58%2C248%2C148%2C118%2C186%2C13%2C48%2C182%2C204%2C159%2C216%2C255%2C60%2C165%2C42%2C32%2C200%2C245%2C62%2C18%2C58%2C248%2C148%2C118%2C186%2C13%2C48%2C216%2C255%2C165%2C42%2C32%2C200%2C190%2C70%2C148%2C148%2C108%2C108%2C108%2C169%2C0%2C0%2C0%2C0%2C0%5D%2CB%3A%5B0%2C245%2C78%2C134%2C250%2C164%2C34%2C14%2C220%2C176%2C255%2C142%2C164%2C176%2C20%2C255%2C60%2C0%2C42%2C240%2C200%2C245%2C78%2C134%2C250%2C164%2C34%2C14%2C220%2C176%2C255%2C20%2C255%2C0%2C42%2C240%2C221%2C150%2C255%2C10%2C10%2C226%2C226%2C226%2C30%2C64%2C112%2C160%2C208%2C255%5D%2CA%3A%5B0%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%5D%2CI%3A%5B0%2C2%2C3%2C4%2C5%2C7%2C8%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C24%2C26%2C28%2C30%2C31%2C41%2C42%2C43%2C44%2C46%2C47%2C49%2C50%2C51%2C52%2C53%2C54%2C58%2C60%2C62%2C63%2C72%2C77%2C78%2C79%2C80%2C81%2C82%2C85%2C251%2C252%2C253%2C254%2C255%5D%7D%2CDt%3D%7BR%3A%5B0%2C0%2C128%2C255%2C255%5D%2CG%3A%5B0%2C128%2C0%2C128%2C255%5D%2CB%3A%5B0%2C125%2C255%2C0%2C255%5D%2CA%3A%5B0%2C32%2C64%2C96%2C128%5D%2CI%3A%5B0%2C63%2C128%2C192%2C255%5D%7D%2CFt%3D%7BR%3A%5B0%2C142%2C227%2C255%5D%2CG%3A%5B0%2C85%2C170%2C255%5D%2CB%3A%5B0%2C14%2C76%2C255%5D%2CA%3A%5B0%2C42%2C84%2C128%5D%2CI%3A%5B0%2C85%2C170%2C255%5D%7D%2CVt%3D%7BR%3A%5B0%2C255%5D%2CG%3A%5B0%2C255%5D%2CB%3A%5B0%2C255%5D%2CA%3A%5B0%2C128%5D%2CI%3A%5B0%2C255%5D%7D%2CTt%3D%7BR%3A%5B0%2C0%2C0%5D%2CG%3A%5B0%2C128%2C255%5D%2CB%3A%5B0%2C0%2C0%5D%2CA%3A%5B0%2C64%2C128%5D%2CI%3A%5B0%2C128%2C255%5D%7D%2CEt%3D%7BR%3A%5B0%2C0%2C0%5D%2CG%3A%5B72%2C72%2C255%5D%2CB%3A%5B0%2C255%2C255%5D%2CA%3A%5B0%2C64%2C128%5D%2CI%3A%5B0%2C88%2C255%5D%7D%2CSt%3D%7BR%3A%5B0%2C255%2C255%5D%2CG%3A%5B72%2C88%2C255%5D%2CB%3A%5B0%2C0%2C0%5D%2CA%3A%5B0%2C64%2C128%5D%2CI%3A%5B0%2C88%2C255%5D%7D%2CBt%3D%7BR%3A%5B0%2C255%2C255%2C255%5D%2CG%3A%5B0%2C0%2C126%2C255%5D%2CB%3A%5B0%2C0%2C0%2C255%5D%2CA%3A%5B0%2C64%2C96%2C128%5D%2CI%3A%5B0%2C128%2C191%2C255%5D%7D%2CUt%3D%7BR%3A%5B3%2C255%2C255%2C255%5D%2CG%3A%5B0%2C0%2C255%2C255%5D%2CB%3A%5B0%2C0%2C0%2C255%5D%2CA%3A%5B0%2C48%2C96%2C128%5D%2CI%3A%5B0%2C95%2C191%2C255%5D%7D%2CRt%3D%7BR%3A%5B255%2C255%2C0%2C0%2C0%2C255%2C255%5D%2CG%3A%5B0%2C255%2C255%2C255%2C0%2C0%2C0%5D%2CB%3A%5B0%2C0%2C0%2C255%2C255%2C255%2C0%5D%2CA%3A%5B0%2C14%2C28%2C43%2C57%2C71%2C85%5D%2CI%3A%5B0%2C43%2C85%2C128%2C170%2C213%2C255%5D%7D%2CNt%3D%7BR%3A%5B0%2C120%2C237%2C240%5D%2CG%3A%5B0%2C28%2C105%2C249%5D%2CB%3A%5B4%2C109%2C37%2C33%5D%2CA%3A%5B0%2C56%2C80%2C88%5D%2CI%3A%5B0%2C64%2C192%2C255%5D%7D%2CPt%3D%7BR%3A%5B0%2C0%2C127%2C255%2C127%5D%2CG%3A%5B0%2C127%2C255%2C127%2C0%5D%2CB%3A%5B127%2C255%2C127%2C0%2C0%5D%2CA%3A%5B0%2C32%2C64%2C96%2C128%5D%2CI%3A%5B0%2C63%2C128%2C192%2C255%5D%7D%2CLt%3D%7BR%3A%5B94%2C50%2C90%2C152%2C215%2C238%2C249%2C254%2C252%2C241%2C209%2C158%5D%2CG%3A%5B79%2C131%2C186%2C214%2C240%2C244%2C237%2C210%2C157%2C100%2C57%2C1%5D%2CB%3A%5B162%2C189%2C167%2C164%2C155%2C169%2C168%2C123%2C86%2C68%2C79%2C66%5D%2CA%3A%5B0%2C12%2C23%2C35%2C47%2C58%2C70%2C81%2C93%2C105%2C116%2C128%5D%2CI%3A%5B0%2C23%2C46%2C70%2C93%2C116%2C139%2C162%2C185%2C209%2C232%2C255%5D%7D%2Ckt%3D%7BR%3A%5B0%2C148%2C183%2C223%2C247%2C252%5D%2CG%3A%5B0%2C44%2C55%2C74%2C112%2C253%5D%2CB%3A%5B4%2C128%2C121%2C104%2C92%2C191%5D%2CA%3A%5B0%2C44%2C53%2C64%2C75%2C107%5D%2CI%3A%5B0%2C107%2C128%2C154%2C179%2C255%5D%7D%2COt%3D%7BR%3A%5B11%2C59%2C55%2C222%5D%2CG%3A%5B4%2C45%2C165%2C245%5D%2CB%3A%5B5%2C91%2C172%2C229%5D%2CA%3A%5B0%2C23%2C70%2C107%5D%2CI%3A%5B0%2C56%2C167%2C255%5D%7D%2CYt%3D%7BR%3A%5B0%2C85%2C0%2C0%2C0%2C0%2C0%2C0%2C85%2C255%2C255%2C255%2C172%5D%2CG%3A%5B0%2C0%2C0%2C0%2C85%2C170%2C255%2C255%2C255%2C255%2C85%2C0%2C0%5D%2CB%3A%5B0%2C170%2C85%2C255%2C255%2C170%2C170%2C0%2C85%2C0%2C0%2C0%2C0%5D%2CA%3A%5B0%2C5%2C10%2C21%2C26%2C32%2C37%2C42%2C48%2C53%2C64%2C72%2C85%5D%2CI%3A%5B0%2C15%2C31%2C63%2C79%2C95%2C111%2C127%2C143%2C159%2C191%2C217%2C255%5D%7D%2CKt%3D%7BR%3A%5B13%2C156%2C237%2C240%5D%2CG%3A%5B8%2C23%2C121%2C249%5D%2CB%3A%5B135%2C158%2C83%2C33%5D%2CA%3A%5B0%2C56%2C80%2C88%5D%2CI%3A%5B0%2C64%2C192%2C255%5D%7D%2CGt%3D%7BR%3A%5B208%2C71%2C33%2C192%2C32%2C195%2C208%2C173%2C233%2C202%2C25%2C210%2C145%2C89%2C87%2C245%2C246%2C38%2C3%2C25%2C57%2C167%2C245%2C86%2C227%2C208%2C81%2C64%2C90%2C199%2C140%2C48%2C212%2C180%2C70%2C120%2C9%2C192%2C245%2C177%2C65%2C157%2C9%2C193%2C100%2C181%2C125%2C145%2C62%2C8%2C108%2C36%2C140%2C237%2C242%2C248%2C161%2C189%2C41%2C114%2C65%2C121%2C97%2C50%2C238%2C149%2C44%2C214%2C124%2C167%2C40%2C167%2C127%2C178%2C231%2C30%2C173%2C244%2C193%2C203%2C204%2C238%2C139%2C135%2C71%2C234%2C234%2C217%2C66%2C14%2C129%2C19%2C97%2C165%2C112%2C244%2C35%2C73%2C192%2C12%2C149%2C71%2C33%2C192%2C32%2C195%2C208%2C173%2C233%2C202%2C25%2C210%2C145%2C89%2C87%2C245%2C246%2C38%2C3%2C25%2C57%2C167%2C245%2C86%2C227%2C208%2C81%2C64%2C90%2C199%2C140%2C48%2C212%2C180%2C70%2C120%2C9%2C192%2C245%2C177%2C65%2C157%2C9%2C193%2C100%2C181%2C125%2C145%2C62%2C8%2C108%2C36%2C140%2C237%2C242%2C248%2C161%2C189%2C41%2C114%2C65%2C121%2C97%2C50%2C238%2C149%2C44%2C214%2C124%2C167%2C40%2C167%2C127%2C178%2C231%2C30%2C173%2C244%2C193%2C203%2C204%2C238%2C139%2C135%2C71%2C234%2C234%2C217%2C66%2C14%2C129%2C19%2C97%2C165%2C112%2C244%2C35%2C73%2C192%2C12%2C149%2C71%2C33%2C192%2C32%2C195%2C208%2C173%2C233%2C202%2C25%2C210%2C145%2C89%2C87%2C245%2C246%2C38%2C3%2C25%2C57%2C167%2C245%2C86%2C227%2C208%2C81%2C64%2C90%2C199%2C140%2C48%2C212%2C180%2C70%2C120%2C9%2C192%2C245%2C177%2C65%2C157%2C9%2C193%2C100%2C181%2C125%2C145%2C62%2C8%2C108%2C36%2C140%2C237%2C242%2C248%5D%2CG%3A%5B182%2C46%2C78%2C199%2C79%2C89%2C41%2C208%2C135%2C20%2C154%2C35%2C21%2C43%2C230%2C113%2C191%2C147%2C208%2C37%2C28%2C27%2C86%2C203%2C25%2C209%2C148%2C187%2C139%2C111%2C48%2C102%2C76%2C110%2C106%2C130%2C37%2C160%2C34%2C222%2C90%2C165%2C245%2C222%2C102%2C47%2C19%2C130%2C4%2C232%2C137%2C211%2C240%2C11%2C140%2C21%2C42%2C22%2C241%2C61%2C99%2C115%2C199%2C166%2C114%2C190%2C204%2C60%2C233%2C66%2C115%2C230%2C125%2C103%2C203%2C125%2C13%2C176%2C94%2C131%2C39%2C198%2C167%2C124%2C67%2C175%2C254%2C1%2C15%2C198%2C62%2C237%2C159%2C31%2C218%2C58%2C244%2C47%2C61%2C67%2C94%2C46%2C78%2C199%2C79%2C89%2C41%2C208%2C135%2C20%2C154%2C35%2C21%2C43%2C230%2C113%2C191%2C147%2C208%2C37%2C28%2C27%2C86%2C203%2C25%2C209%2C148%2C187%2C139%2C111%2C48%2C102%2C76%2C110%2C106%2C130%2C37%2C160%2C34%2C222%2C90%2C165%2C245%2C222%2C102%2C47%2C19%2C130%2C4%2C232%2C137%2C211%2C240%2C11%2C140%2C21%2C42%2C22%2C241%2C61%2C99%2C115%2C199%2C166%2C114%2C190%2C204%2C60%2C233%2C66%2C115%2C230%2C125%2C103%2C203%2C125%2C13%2C176%2C94%2C131%2C39%2C198%2C167%2C124%2C67%2C175%2C254%2C1%2C15%2C198%2C62%2C237%2C159%2C31%2C218%2C58%2C244%2C47%2C61%2C67%2C94%2C46%2C78%2C199%2C79%2C89%2C41%2C208%2C135%2C20%2C154%2C35%2C21%2C43%2C230%2C113%2C191%2C147%2C208%2C37%2C28%2C27%2C86%2C203%2C25%2C209%2C148%2C187%2C139%2C111%2C48%2C102%2C76%2C110%2C106%2C130%2C37%2C160%2C34%2C222%2C90%2C165%2C245%2C222%2C102%2C47%2C19%2C130%2C4%2C232%2C137%2C211%2C240%2C11%2C140%2C21%5D%2CB%3A%5B191%2C154%2C43%2C10%2C207%2C204%2C164%2C231%2C136%2C58%2C239%2C30%2C147%2C230%2C101%2C111%2C150%2C35%2C128%2C57%2C252%2C79%2C173%2C120%2C25%2C126%2C81%2C85%2C8%2C7%2C122%2C237%2C190%2C152%2C246%2C182%2C130%2C219%2C67%2C76%2C167%2C178%2C235%2C250%2C28%2C61%2C186%2C250%2C199%2C67%2C58%2C50%2C86%2C182%2C108%2C77%2C89%2C112%2C59%2C125%2C226%2C50%2C205%2C227%2C125%2C128%2C104%2C27%2C59%2C66%2C53%2C133%2C159%2C203%2C97%2C125%2C139%2C159%2C158%2C7%2C215%2C47%2C140%2C226%2C223%2C231%2C44%2C110%2C184%2C61%2C233%2C47%2C67%2C148%2C22%2C120%2C173%2C156%2C117%2C181%2C94%2C154%2C43%2C10%2C207%2C204%2C164%2C231%2C136%2C58%2C239%2C30%2C147%2C230%2C101%2C111%2C150%2C35%2C128%2C57%2C252%2C79%2C173%2C120%2C25%2C126%2C81%2C85%2C8%2C7%2C122%2C237%2C190%2C152%2C246%2C182%2C130%2C219%2C67%2C76%2C167%2C178%2C235%2C250%2C28%2C61%2C186%2C250%2C199%2C67%2C58%2C50%2C86%2C182%2C108%2C77%2C89%2C112%2C59%2C125%2C226%2C50%2C205%2C227%2C125%2C128%2C104%2C27%2C59%2C66%2C53%2C133%2C159%2C203%2C97%2C125%2C139%2C159%2C158%2C7%2C215%2C47%2C140%2C226%2C223%2C231%2C44%2C110%2C184%2C61%2C233%2C47%2C67%2C148%2C22%2C120%2C173%2C156%2C117%2C181%2C94%2C154%2C43%2C10%2C207%2C204%2C164%2C231%2C136%2C58%2C239%2C30%2C147%2C230%2C101%2C111%2C150%2C35%2C128%2C57%2C252%2C79%2C173%2C120%2C25%2C126%2C81%2C85%2C8%2C7%2C122%2C237%2C190%2C152%2C246%2C182%2C130%2C219%2C67%2C76%2C167%2C178%2C235%2C250%2C28%2C61%2C186%2C250%2C199%2C67%2C58%2C50%2C86%2C182%2C108%2C77%5D%2CA%3A%5B0%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%5D%2CI%3A%5B0%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2C30%2C31%2C32%2C33%2C34%2C35%2C36%2C37%2C38%2C39%2C40%2C41%2C42%2C43%2C44%2C45%2C46%2C47%2C48%2C49%2C50%2C51%2C52%2C53%2C54%2C55%2C56%2C57%2C58%2C59%2C60%2C61%2C62%2C63%2C64%2C65%2C66%2C67%2C68%2C69%2C70%2C71%2C72%2C73%2C74%2C75%2C76%2C77%2C78%2C79%2C80%2C81%2C82%2C83%2C84%2C85%2C86%2C87%2C88%2C89%2C90%2C91%2C92%2C93%2C94%2C95%2C96%2C97%2C98%2C99%2C100%2C101%2C102%2C103%2C104%2C105%2C106%2C107%2C108%2C109%2C110%2C111%2C112%2C113%2C114%2C115%2C116%2C117%2C118%2C119%2C120%2C121%2C122%2C123%2C124%2C125%2C126%2C127%2C128%2C129%2C130%2C131%2C132%2C133%2C134%2C135%2C136%2C137%2C138%2C139%2C140%2C141%2C142%2C143%2C144%2C145%2C146%2C147%2C148%2C149%2C150%2C151%2C152%2C153%2C154%2C155%2C156%2C157%2C158%2C159%2C160%2C161%2C162%2C163%2C164%2C165%2C166%2C167%2C168%2C169%2C170%2C171%2C172%2C173%2C174%2C175%2C176%2C177%2C178%2C179%2C180%2C181%2C182%2C183%2C184%2C185%2C186%2C187%2C188%2C189%2C190%2C191%2C192%2C193%2C194%2C195%2C196%2C197%2C198%2C199%2C200%2C201%2C202%2C203%2C204%2C205%2C206%2C207%2C208%2C209%2C210%2C211%2C212%2C213%2C214%2C215%2C216%2C217%2C218%2C219%2C220%2C221%2C222%2C223%2C224%2C225%2C226%2C227%2C228%2C229%2C230%2C231%2C232%2C233%2C234%2C235%2C236%2C237%2C238%2C239%2C240%2C241%2C242%2C243%2C244%2C245%2C246%2C247%2C248%2C249%2C250%2C251%2C252%2C253%2C254%2C255%5D%7D%2CWt%3D%7BR%3A%5B0%2C128%2C255%5D%2CG%3A%5B0%2C0%2C0%5D%2CB%3A%5B0%2C0%2C0%5D%2CA%3A%5B0%2C64%2C128%5D%2CI%3A%5B0%2C128%2C255%5D%7D%2CHt%3D%7BR%3A%5B192%2C224%2C255%5D%2CG%3A%5B1%2C128%2C255%5D%2CB%3A%5B0%2C0%2C0%5D%2CA%3A%5B0%2C64%2C128%5D%2CI%3A%5B0%2C128%2C255%5D%7D%2CQt%3D%7BR%3A%5B3%2C112%2C144%2C188%2C236%2C246%2C255%5D%2CG%3A%5B5%2C31%2C29%2C22%2C76%2C158%2C250%5D%2CB%3A%5B26%2C87%2C91%2C86%2C62%2C117%2C235%5D%2CA%3A%5B0%2C30%2C38%2C49%2C67%2C85%2C107%5D%2CI%3A%5B0%2C73%2C92%2C118%2C160%2C205%2C255%5D%7D%2Czt%3D%7BR%3A%5B1%2C240%2C255%5D%2CG%3A%5B1%2C128%2C255%5D%2CB%3A%5B1%2C128%2C255%5D%2CA%3A%5B0%2C76%2C128%5D%2CI%3A%5B0%2C153%2C255%5D%7D%2Cqt%3D%7BR%3A%5B48%2C48%2C64%2C70%2C65%2C25%2C132%2C195%2C244%2C254%2C218%2C122%5D%2CG%3A%5B18%2C18%2C64%2C107%2C150%2C226%2C255%2C241%2C199%2C158%2C57%2C4%5D%2CB%3A%5B59%2C59%2C162%2C227%2C255%2C187%2C81%2C52%2C58%2C47%2C7%2C3%5D%2CA%3A%5B0%2C22%2C26%2C30%2C34%2C43%2C52%2C57%2C63%2C67%2C77%2C86%5D%2CI%3A%5B0%2C1%2C16%2C32%2C49%2C83%2C118%2C140%2C164%2C181%2C219%2C255%5D%7D%2CXt%3D%7BR%3A%5B0%2C128%2C255%5D%2CG%3A%5B0%2C0%2C0%5D%2CB%3A%5B0%2C128%2C255%5D%2CA%3A%5B0%2C64%2C128%5D%2CI%3A%5B0%2C128%2C255%5D%7D%2Cjt%3D%7BR%3A%5B68%2C49%2C53%2C253%5D%2CG%3A%5B1%2C104%2C183%2C231%5D%2CB%3A%5B84%2C142%2C121%2C37%5D%2CA%3A%5B0%2C56%2C80%2C88%5D%2CI%3A%5B0%2C64%2C192%2C255%5D%7D%2CZt%3D%7BR%3A%5B255%2C255%2C255%5D%2CG%3A%5B127%2C196%2C254%5D%2CB%3A%5B0%2C0%2C0%5D%2CA%3A%5B0%2C64%2C128%5D%2CI%3A%5B0%2C128%2C255%5D%7D%2CJt%3D%7BR%3A%5B0%2C0%2C0%5D%2CG%3A%5B0%2C128%2C255%5D%2CB%3A%5B255%2C196%2C128%5D%2CA%3A%5B0%2C64%2C128%5D%2CI%3A%5B0%2C128%2C255%5D%7D%2C_t%3D%7BR%3A%5B3%2C64%2C0%2C0%2C255%2C255%2C255%5D%2CG%3A%5B0%2C0%2C0%2C255%2C255%2C192%2C3%5D%2CB%3A%5B0%2C32%2C48%2C56%2C64%2C96%2C128%5D%2CA%3A%5B0%2C8%2C16%2C24%2C32%2C52%2C80%5D%2CI%3A%5B0%2C32%2C64%2C96%2C160%2C192%2C255%5D%7D%2C%24t%3D%7Bmin%3A0%2Cmax%3A0%2CR%3A%5B0%2C37%5D%2CG%3A%5B242%2C0%5D%2CB%3A%5B255%2C255%5D%2CA%3A%5B0%2C64%5D%2CI%3A%5B0%2C255%5D%7D%2Cte%3D%7BR%3A%5B255%2C255%5D%2CG%3A%5B255%2C11%5D%2CB%3A%5B0%2C0%5D%2CA%3A%5B0%2C64%5D%2CI%3A%5B0%2C255%5D%7D%2Cee%3D%7Bmin%3A0%2Cmax%3A0%2CR%3A%5B65%2C10%2C223%2C120%2C216%2C207%2C251%2C93%2C252%2C217%2C21%2C253%2C131%2C165%2C173%2C143%2C144%2C217%2C86%2C89%2C63%2C254%2C172%2C1%2C142%2C107%2C42%2C78%2C221%2C8%2C222%2C71%2C127%2C126%2C167%2C33%2C104%2C2%2C208%2C216%2C0%2C251%2C7%2C105%2C2%2C101%2C248%2C190%2C253%2C62%2C255%2C224%2C166%2C37%2C110%2C138%2C45%2C34%2C6%2C37%2C69%2C201%2C43%2C122%2C199%2C37%2C173%2C194%2C103%2C211%2C75%2C159%2C96%2C4%2C239%2C98%2C110%2C193%2C253%2C166%2C40%2C255%2C48%2C130%2C140%2C243%2C101%2C9%2C177%2C220%2C133%2C32%2C4%2C81%2C48%2C48%2C210%2C109%2C60%2C132%2C1%2C119%2C1%2C159%2C247%2C33%2C212%2C187%2C253%2C144%2C196%2C254%2C168%2C79%2C64%2C196%2C39%2C97%2C73%2C173%2C104%2C216%2C217%2C43%2C101%2C119%2C254%2C5%2C237%2C103%2C203%2C122%2C57%2C87%2C251%2C164%2C19%2C75%2C200%2C2%2C252%2C150%2C66%2C0%2C255%2C157%2C23%2C254%2C55%2C16%2C240%2C161%2C69%2C253%2C207%2C195%2C5%2C60%2C255%2C251%2C200%2C217%2C134%2C123%2C253%2C180%2C27%2C246%2C130%2C136%2C250%2C232%2C4%2C125%2C140%2C22%2C253%2C255%2C13%2C180%2C123%2C61%2C254%2C111%2C10%2C185%2C76%2C192%2C255%2C223%2C186%2C61%2C198%2C5%2C172%2C13%2C83%2C172%2C171%2C6%2C23%2C73%2C134%2C133%2C109%2C61%2C213%2C55%2C57%2C132%2C36%2C209%2C2%2C144%2C1%2C253%2C68%2C155%2C3%2C160%2C2%2C77%2C121%2C70%2C67%2C176%2C223%2C131%2C4%2C162%2C232%2C255%2C150%2C94%2C235%2C191%2C207%2C10%2C246%2C0%2C225%2C4%2C209%2C116%2C57%2C112%2C172%2C253%2C1%2C6%2C92%2C227%2C73%2C62%2C135%2C223%5D%2CG%3A%5B162%2C50%2C112%2C245%2C4%2C124%2C176%2C243%2C56%2C125%2C183%2C139%2C182%2C68%2C189%2C4%2C225%2C10%2C20%2C223%2C7%2C46%2C31%2C193%2C225%2C250%2C219%2C41%2C2%2C100%2C83%2C181%2C34%2C150%2C72%2C223%2C168%2C248%2C80%2C253%2C7%2C117%2C214%2C2%2C248%2C10%2C3%2C59%2C179%2C160%2C90%2C244%2C146%2C4%2C207%2C4%2C125%2C255%2C96%2C100%2C1%2C208%2C130%2C51%2C116%2C181%2C236%2C53%2C244%2C5%2C165%2C28%2C181%2C86%2C96%2C42%2C254%2C1%2C134%2C194%2C214%2C92%2C41%2C204%2C137%2C86%2C207%2C3%2C143%2C3%2C100%2C239%2C164%2C94%2C65%2C251%2C131%2C244%2C173%2C57%2C143%2C107%2C217%2C53%2C210%2C0%2C148%2C250%2C45%2C198%2C81%2C40%2C61%2C218%2C252%2C88%2C171%2C0%2C248%2C24%2C248%2C4%2C41%2C100%2C187%2C46%2C208%2C145%2C43%2C168%2C121%2C46%2C175%2C250%2C125%2C107%2C233%2C112%2C207%2C231%2C174%2C215%2C53%2C9%2C43%2C153%2C52%2C124%2C128%2C65%2C210%2C147%2C255%2C147%2C63%2C200%2C148%2C254%2C0%2C179%2C241%2C42%2C239%2C2%2C230%2C8%2C82%2C135%2C87%2C16%2C3%2C87%2C86%2C151%2C254%2C8%2C255%2C86%2C53%2C19%2C7%2C192%2C171%2C201%2C253%2C247%2C197%2C103%2C251%2C126%2C0%2C149%2C54%2C183%2C61%2C126%2C79%2C113%2C10%2C103%2C184%2C75%2C11%2C195%2C222%2C136%2C149%2C131%2C8%2C99%2C240%2C177%2C252%2C255%2C198%2C16%2C7%2C68%2C178%2C66%2C191%2C150%2C73%2C26%2C211%2C109%2C78%2C209%2C240%2C254%2C1%2C166%2C247%2C131%2C2%2C0%2C167%2C127%2C133%2C10%2C43%2C99%2C235%2C3%2C214%2C142%2C176%2C82%2C132%2C38%2C10%2C249%2C255%2C215%2C44%2C81%5D%2CB%3A%5B176%2C182%2C248%2C37%2C117%2C35%2C96%2C69%2C32%2C152%2C108%2C20%2C237%2C250%2C2%2C89%2C141%2C216%2C111%2C251%2C211%2C149%2C10%2C44%2C214%2C103%2C31%2C251%2C3%2C32%2C252%2C246%2C97%2C1%2C219%2C167%2C197%2C4%2C36%2C116%2C206%2C118%2C106%2C43%2C205%2C204%2C114%2C69%2C127%2C205%2C87%2C80%2C41%2C251%2C145%2C204%2C253%2C161%2C247%2C1%2C149%2C9%2C43%2C253%2C97%2C72%2C136%2C161%2C171%2C181%2C26%2C255%2C108%2C80%2C218%2C214%2C231%2C255%2C84%2C31%2C109%2C4%2C218%2C3%2C217%2C36%2C68%2C85%2C241%2C39%2C221%2C2%2C240%2C2%2C173%2C42%2C206%2C5%2C110%2C46%2C103%2C27%2C212%2C184%2C2%2C207%2C246%2C45%2C116%2C72%2C110%2C253%2C38%2C105%2C248%2C159%2C243%2C81%2C192%2C93%2C141%2C145%2C24%2C157%2C234%2C131%2C57%2C178%2C62%2C75%2C65%2C176%2C148%2C40%2C253%2C66%2C76%2C240%2C51%2C154%2C17%2C251%2C139%2C253%2C207%2C9%2C114%2C49%2C200%2C254%2C96%2C73%2C138%2C118%2C204%2C102%2C137%2C89%2C145%2C161%2C4%2C112%2C66%2C234%2C147%2C178%2C212%2C205%2C185%2C11%2C203%2C131%2C2%2C250%2C118%2C169%2C1%2C185%2C154%2C53%2C171%2C197%2C61%2C175%2C249%2C96%2C15%2C254%2C95%2C5%2C222%2C75%2C246%2C194%2C2%2C61%2C180%2C25%2C133%2C165%2C15%2C233%2C59%2C35%2C221%2C140%2C109%2C7%2C114%2C255%2C198%2C0%2C115%2C168%2C252%2C23%2C242%2C80%2C75%2C142%2C137%2C255%2C12%2C182%2C68%2C201%2C4%2C111%2C37%2C228%2C83%2C248%2C24%2C192%2C249%2C5%2C54%2C223%2C160%2C122%2C160%2C114%2C145%2C119%2C252%2C31%2C253%2C250%2C10%2C214%2C8%2C47%2C0%2C142%2C222%2C70%5D%2CA%3A%5B0%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%5D%2CI%3A%5B0%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2C30%2C31%2C32%2C33%2C34%2C35%2C36%2C37%2C38%2C39%2C40%2C41%2C42%2C43%2C44%2C45%2C46%2C47%2C48%2C49%2C50%2C51%2C52%2C53%2C54%2C55%2C56%2C57%2C58%2C59%2C60%2C61%2C62%2C63%2C64%2C65%2C66%2C67%2C68%2C69%2C70%2C71%2C72%2C73%2C74%2C75%2C76%2C77%2C78%2C79%2C80%2C81%2C82%2C83%2C84%2C85%2C86%2C87%2C88%2C89%2C90%2C91%2C92%2C93%2C94%2C95%2C96%2C97%2C98%2C99%2C100%2C101%2C102%2C103%2C104%2C105%2C106%2C107%2C108%2C109%2C110%2C111%2C112%2C113%2C114%2C115%2C116%2C117%2C118%2C119%2C120%2C121%2C122%2C123%2C124%2C125%2C126%2C127%2C128%2C129%2C130%2C131%2C132%2C133%2C134%2C135%2C136%2C137%2C138%2C139%2C140%2C141%2C142%2C143%2C144%2C145%2C146%2C147%2C148%2C149%2C150%2C151%2C152%2C153%2C154%2C155%2C156%2C157%2C158%2C159%2C160%2C161%2C162%2C163%2C164%2C165%2C166%2C167%2C168%2C169%2C170%2C171%2C172%2C173%2C174%2C175%2C176%2C177%2C178%2C179%2C180%2C181%2C182%2C183%2C184%2C185%2C186%2C187%2C188%2C189%2C190%2C191%2C192%2C193%2C194%2C195%2C196%2C197%2C198%2C199%2C200%2C201%2C202%2C203%2C204%2C205%2C206%2C207%2C208%2C209%2C210%2C211%2C212%2C213%2C214%2C215%2C216%2C217%2C218%2C219%2C220%2C221%2C222%2C223%2C224%2C225%2C226%2C227%2C228%2C229%2C230%2C231%2C232%2C233%2C234%2C235%2C236%2C237%2C238%2C239%2C240%2C241%2C242%2C243%2C244%2C245%2C246%2C247%2C248%2C249%2C250%2C251%2C252%2C253%2C254%2C255%5D%7D%2Cie%3Dclass%7Bconstructor()%7Be(this%2C%22gamma%22%2C1)%2Ce(this%2C%22version%22%2C.1)%2Ce(this%2C%22cluts%22%2C%7B%7D)%3Bconst%20t%3DObject.keys(G).filter((t%3D%3E!t.startsWith(%22%24%22))).sort(new%20Intl.Collator(%22en%22).compare)%3Bfor(const%20e%20of%20t)this.cluts%5Be%5D%3DG%5Be%5D%7DaddColormap(t%2Ce)%7Bthis.cluts%5Bt%5D%3De%7Dcolormaps()%7Breturn%20Object.keys(this.cluts)%7DcolorMaps()%7Breturn%20this.colormaps()%7DcolormapFromKey(t)%7Blet%20e%3Dthis.cluts%5Bt%5D%3Breturn%20void%200!%3D%3De%3Fe%3A(e%3Dthis.cluts%5Bt.toLowerCase()%5D%2Cvoid%200!%3D%3De%3Fe%3A(t.length%3E0%26%26l.warn(%22No%20color%20map%20named%20%22%2Bt)%2C%7Bmin%3A0%2Cmax%3A0%2CR%3A%5B0%2C255%5D%2CG%3A%5B0%2C255%5D%2CB%3A%5B0%2C255%5D%2CA%3A%5B0%2C255%5D%2CI%3A%5B0%2C255%5D%7D))%7Dcolormap(t%3D%22%22%2Ce%3D!1)%7Bconst%20i%3Dthis.colormapFromKey(t)%3Breturn%20this.makeLut(i.R%2Ci.G%2Ci.B%2Ci.A%2Ci.I%2Ce)%7DmakeLabelLut(t%2Ce%3D255)%7Bif(void%200%3D%3D%3Dt.R%7C%7Cvoid%200%3D%3D%3Dt.G%7C%7Cvoid%200%3D%3D%3Dt.B)throw%20new%20Error(%60Invalid%20colormap%20table%3A%20%24%7Bt%7D%60)%3Bconst%20i%3Dt.R.length%2Cs%3Dt.I%3F%3F%5B...Array(i).keys()%5D%3Bif(i!%3D%3Dt.G.length%7C%7Ci!%3D%3Dt.B.length%7C%7Ci!%3D%3Ds.length)throw%20new%20Error(%60colormap%20does%20not%20make%20sense%3A%20%24%7Bt%7D%60)%3Blet%20r%3Dnew%20Uint8ClampedArray(i).fill(e)%3Br%5B0%5D%3D0%2Cvoid%200!%3D%3Dt.A%26%26(r%3DUint8ClampedArray.from(t.A))%3Bconst%20n%3DMath.min(...s)%2Ca%3DMath.max(...s)%2Co%3Da-n%2B1%2Cl%3Dnew%20Uint8ClampedArray(4*o).fill(0)%3Bfor(let%20e%3D0%3Be%3Ci%3Be%2B%2B)%7Blet%20i%3D4*(s%5Be%5D-n)%3Bl%5Bi%2B%2B%5D%3Dt.R%5Be%5D%2Cl%5Bi%2B%2B%5D%3Dt.G%5Be%5D%2Cl%5Bi%2B%2B%5D%3Dt.B%5Be%5D%2Cl%5Bi%2B%2B%5D%3Dr%5Be%5D%7Dconst%20h%3D%7Blut%3Al%2Cmin%3An%2Cmax%3Aa%7D%3Bif(t.labels)%7Bconst%20e%3Dt.labels.length%3Bif(e%3D%3D%3Do)h.labels%3Dt.labels%3Belse%20if(e%3D%3D%3Di)%7Bh.labels%3DArray(o).fill(%22%3F%22)%3Bfor(let%20e%3D0%3Be%3Ci%3Be%2B%2B)%7Bconst%20i%3Ds%5Be%5D%3Bh.labels%5Bi%5D%3Dt.labels%5Be%5D%7D%7D%7Dreturn%20h%7Dasync%20makeLabelLutFromUrl(t)%7Bconst%20e%3Dawait%20fetch(t)%2Ci%3Dawait%20e.json()%3Breturn%20this.makeLabelLut(i)%7DmakeDrawLut(t)%7Blet%20e%3D%22object%22%3D%3Dtypeof%20t%3Ft%3AG%5Bt%5D%3Bvoid%200%3D%3D%3De%26%26(e%3D%7Bmin%3A0%2Cmax%3A0%2CR%3A%5B0%2C255%2C0%2C0%2C255%2C0%2C255%5D%2CG%3A%5B0%2C0%2C255%2C0%2C255%2C255%2C0%5D%2CB%3A%5B0%2C0%2C0%2C255%2C0%2C255%2C255%5D%2CA%3A%5B0%2C255%2C255%2C255%2C255%2C255%2C255%5D%2CI%3A%5B0%2C255%5D%7D)%3Bconst%20i%3Dthis.makeLabelLut(e%2C255)%3Bif(void%200%3D%3D%3Di.labels%26%26(i.labels%3D%5B%5D)%2Ci.labels.length%3C256)%7Bfor(let%20t%3Di.labels.length%3Bt%3C256%3Bt%2B%2B)i.labels.push(t.toString())%7Dconst%20s%3Dnew%20Uint8ClampedArray(1024)%3Blet%20r%3D0%3Bfor(let%20t%3D0%3Bt%3C256%3Bt%2B%2B)s%5Br%2B%2B%5D%3D255%2Cs%5Br%2B%2B%5D%3D0%2Cs%5Br%2B%2B%5D%3D0%2Cs%5Br%2B%2B%5D%3D255%3Bs%5B3%5D%3D0%3Bconst%20n%3DMath.min(i.lut.length%2C1024)%3Bif(n%3E0)for(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)s%5Bt%5D%3Di.lut%5Bt%5D%3Breturn%7Blut%3As%2Clabels%3Ai.labels%7D%7DmakeLut(t%2Ce%2Ci%2Cs%2Cr%2Cn)%7Bconst%20a%3Dt.length%2Co%3D%5B...t%5D%2Ch%3D%5B...e%5D%2Cc%3D%5B...i%5D%3Bif(!r)%7Br%3Dnew%20Array(a)%3Bfor(let%20t%3D0%3Bt%3Ca%3Bt%2B%2B)r%5Bt%5D%3Dt%2F(a-1)*255%7Ds%7C%7C((s%3Dnew%20Array(a).fill(64))%5B0%5D%3D0)%3Blet%20d%3DUint8ClampedArray.from(s)%2Cm%3DUint8ClampedArray.from(r)%3Bif(n)for(let%20n%3D0%3Bn%3Ca%3Bn%2B%2B)o%5Bn%5D%3Dt%5Ba-1-n%5D%2Ch%5Bn%5D%3De%5Ba-1-n%5D%2Cc%5Bn%5D%3Di%5Ba-1-n%5D%2Cd%5Bn%5D%3D255-s%5Ba-1-n%5D%2Cm%5Bn%5D%3D255-r%5Ba-1-n%5D%3Bconst%20u%3Dnew%20Uint8ClampedArray(1024)%3Bif(void%200%3D%3D%3Dm)%7Bm%3Dnew%20Uint8ClampedArray(a).fill(0)%3Bfor(let%20t%3D0%3Bt%3Ca%3Bt%2B%2B)m%5Bt%5D%3DMath.round(255*t%2F(a-1))%7Dvoid%200%3D%3D%3Dd%26%26(d%3Dnew%20Uint8ClampedArray(a).fill(64)%2Cd%5B0%5D%3D0)%3Bfor(let%20t%3D0%3Bt%3Ca-1%3Bt%2B%2B)%7Bconst%20e%3Dm%5Bt%5D%3Blet%20i%3Dm%5Bt%2B1%5D%3B0%3D%3D%3Dt%26%260!%3D%3De%26%26l.warn(%22colormap%20issue%3A%20indices%20expected%20to%20start%20with%200%20not%20%22%2Ce)%2Ct%3D%3D%3Dm.length-2%26%26255!%3D%3Di%26%26(l.warn(%22padding%20colormap%3A%20indices%20expected%20end%20with%20255%20not%20%22%2Ci)%2Ci%3D255)%3Bconst%20s%3Di-e%3Blet%20r%3D4*e%3Bfor(let%20n%3De%3Bn%3C%3Di%3Bn%2B%2B)%7Bconst%20i%3D(n-e)%2Fs%3Bu%5Br%2B%2B%5D%3Do%5Bt%5D%2Bi*(o%5Bt%2B1%5D-o%5Bt%5D)%2Cu%5Br%2B%2B%5D%3Dh%5Bt%5D%2Bi*(h%5Bt%2B1%5D-h%5Bt%5D)%2Cu%5Br%2B%2B%5D%3Dc%5Bt%5D%2Bi*(c%5Bt%2B1%5D-c%5Bt%5D)%2Cu%5Br%2B%2B%5D%3Dd%5Bt%5D%2Bi*(d%5Bt%2B1%5D-d%5Bt%5D)%7D%7Dif(1%3D%3D%3Dthis.gamma)return%20u%3Bfor(let%20t%3D0%3Bt%3C1020%3Bt%2B%2B)t%254!%3D3%26%26(u%5Bt%5D%3D255*Math.pow(u%5Bt%5D%2F255%2C1%2Fthis.gamma))%3Breturn%20u%7D%7D%2Cse%3Dnew%20ie%3Bimport%7Bvec3%20as%20re%7Dfrom%22gl-matrix%22%3Bimport%7BgzipSync%20as%20ne%7Dfrom%22fflate%2Fbrowser%22%3Bvar%20ae%3Dclass%7Bstatic%20getClusterBoundaryU8(t%2Ce)%7Bconst%20i%3Dnew%20Array(t.length).fill(!1)%2Cs%3Dnew%20Array(t.length).fill(!1)%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)t%5Be%5D%3E0%26%26(s%5Be%5D%3D!0)%3Bconst%20r%3De.length%2F3%3Blet%20n%3D0%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)%7Bconst%20t%3De%5Bn%5D%2Cr%3De%5Bn%2B1%5D%2Ca%3De%5Bn%2B2%5D%3Bn%2B%3D3%2Cs%5Bt%5D%3D%3D%3Ds%5Br%5D%26%26s%5Bt%5D%3D%3D%3Ds%5Ba%5D%26%26s%5Br%5D%3D%3D%3Ds%5Ba%5D%7C%7C(i%5Bt%5D%3D!0%2Ci%5Br%5D%3D!0%2Ci%5Ba%5D%3D!0)%7Dreturn%20i%7Dstatic%20createMZ3(t%2Ce%2Ci%3D!1)%7Bconst%20s%3De.length%2F3%2Cr%3Dt.length%2F3%2Cn%3D3*s*4%2Ca%3Dnew%20ArrayBuffer(16%2Bn%2B3*r*4)%2Co%3Dnew%20DataView(a)%3Bo.setUint16(0%2C23117%2C!0)%2Co.setUint16(2%2C3%2C!0)%2Co.setUint32(4%2Cs%2C!0)%2Co.setUint32(8%2Cr%2C!0)%2Co.setUint32(12%2C0%2C!0)%3Blet%20l%3D16%3Breturn%20new%20Uint32Array(a%2Cl%2Ce.length).set(e)%2Cl%2B%3Dn%2Cnew%20Float32Array(a%2Cl%2Ct.length).set(t)%2Ci%3Fne(new%20Uint8Array(a))%3Aa%7Dstatic%20createOBJ(t%2Ce)%7Blet%20i%3D%22%22%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%3D3)i%2B%3D%60v%20%24%7Bt%5Be%5D%7D%20%24%7Bt%5Be%2B1%5D%7D%20%24%7Bt%5Be%2B2%5D%7D%5Cn%60%3Bfor(let%20t%3D0%3Bt%3Ce.length%3Bt%2B%3D3)i%2B%3D%60f%20%24%7Be%5Bt%5D%2B1%7D%20%24%7Be%5Bt%2B1%5D%2B1%7D%20%24%7Be%5Bt%2B2%5D%2B1%7D%5Cn%60%3Breturn(new%20TextEncoder).encode(i).buffer%7Dstatic%20createSTL(t%2Ce)%7Bconst%20i%3De.length%2F3%2Cs%3Dnew%20ArrayBuffer(84%2B50*i)%2Cr%3Dnew%20DataView(s)%3Bfor(let%20t%3D0%3Bt%3C80%3Bt%2B%2B)r.setUint8(t%2C0)%3Br.setUint32(80%2Ci%2C!0)%3Blet%20n%3D84%3Bfor(let%20i%3D0%3Bi%3Ce.length%3Bi%2B%3D3)%7Bconst%20s%3D3*e%5Bi%5D%2Ca%3D3*e%5Bi%2B1%5D%2Co%3D3*e%5Bi%2B2%5D%3Br.setFloat32(n%2C0%2C!0)%2Cr.setFloat32(n%2B4%2C0%2C!0)%2Cr.setFloat32(n%2B8%2C0%2C!0)%2Cn%2B%3D12%2Cr.setFloat32(n%2Ct%5Bs%5D%2C!0)%2Cr.setFloat32(n%2B4%2Ct%5Bs%2B1%5D%2C!0)%2Cr.setFloat32(n%2B8%2Ct%5Bs%2B2%5D%2C!0)%2Cn%2B%3D12%2Cr.setFloat32(n%2Ct%5Ba%5D%2C!0)%2Cr.setFloat32(n%2B4%2Ct%5Ba%2B1%5D%2C!0)%2Cr.setFloat32(n%2B8%2Ct%5Ba%2B2%5D%2C!0)%2Cn%2B%3D12%2Cr.setFloat32(n%2Ct%5Bo%5D%2C!0)%2Cr.setFloat32(n%2B4%2Ct%5Bo%2B1%5D%2C!0)%2Cr.setFloat32(n%2B8%2Ct%5Bo%2B2%5D%2C!0)%2Cn%2B%3D12%2Cr.setUint16(n%2C0%2C!0)%2Cn%2B%3D2%7Dreturn%20s%7Dstatic%20downloadArrayBuffer(t%2Ce)%7Bconst%20i%3Dnew%20Blob(%5Bt%5D%2C%7Btype%3A%22application%2Foctet-stream%22%7D)%2Cs%3DURL.createObjectURL(i)%2Cr%3Ddocument.createElement(%22a%22)%3Br.href%3Ds%2Cr.download%3De%2Cdocument.body.appendChild(r)%2Cr.style.display%3D%22none%22%2Cr.click()%2CsetTimeout((()%3D%3E%7Bdocument.body.removeChild(r)%2CURL.revokeObjectURL(s)%7D)%2C0)%7Dstatic%20saveMesh(t%2Ce%2Ci%3D%22.mz3%22%2Cs%3D!1)%7Blet%20r%3Dnew%20ArrayBuffer(0)%3Breturn%2F%5C.obj%24%2Fi.test(i)%3Fr%3Dthis.createOBJ(t%2Ce)%3A%2F%5C.stl%24%2Fi.test(i)%3Fr%3Dthis.createSTL(t%2Ce)%3A(%2F%5C.mz3%24%2Fi.test(i)%7C%7C(i%2B%3D%22.mz3%22)%2Cr%3Dthis.createMZ3(t%2Ce%2Cs))%2Ci.length%3E4%26%26this.downloadArrayBuffer(r%2Ci)%2Cr%7Dstatic%20getClusterBoundary(t%2Ce)%7Bconst%20i%3Dnew%20Uint32Array(t.buffer)%2Cs%3Dnew%20Array(i.length).fill(!1)%2Cr%3De.length%2F3%3Blet%20n%3D0%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)%7Bconst%20t%3De%5Bn%5D%2Cr%3De%5Bn%2B1%5D%2Ca%3De%5Bn%2B2%5D%3Bn%2B%3D3%2Ci%5Bt%5D%3D%3D%3Di%5Br%5D%26%26i%5Bt%5D%3D%3D%3Di%5Ba%5D%26%26i%5Br%5D%3D%3D%3Di%5Ba%5D%7C%7C(s%5Bt%5D%3D!0%2Cs%5Br%5D%3D!0%2Cs%5Ba%5D%3D!0)%7Dreturn%20s%7Dstatic%20getExtents(t)%7Bif(!ArrayBuffer.isView(t)%26%26!Array.isArray(t)%7C%7Ct.length%3C3)return%7BmxDx%3A0%2CextentsMin%3A0%2CextentsMax%3A0%7D%3Blet%20e%3D0%3Bconst%20i%3Dre.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D)%2Cs%3Dre.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D)%3Bfor(let%20r%3D0%3Br%3Ct.length%3Br%2B%3D3)%7Bconst%20n%3Dre.fromValues(t%5Br%5D%2Ct%5Br%2B1%5D%2Ct%5Br%2B2%5D)%3Be%3DMath.max(e%2Cre.len(n))%2Cre.min(i%2Ci%2Cn)%2Cre.max(s%2Cs%2Cn)%7Dreturn%7BmxDx%3Ae%2CextentsMin%3A%5Bi%5B0%5D%2Ci%5B1%5D%2Ci%5B2%5D%5D%2CextentsMax%3A%5Bs%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D%5D%7D%7Dstatic%20generateNormals(t%2Ce)%7Bconst%20i%3D%5B%5D%3Blet%20s%3Bconst%20r%3Dt.length%3Blet%20n%2Ca%2Co%2Cl%2Ch%2Cc%2Cd%2Cm%2Cu%3Bconst%20A%3Dnew%20Float32Array(r)%2Cf%3De.length%3Bfor(s%3D0%3Bs%3Cf%3Bs%2B%3D3)%7Bd%3D3*e%5Bs%5D%2Cm%3D3*e%5Bs%2B1%5D%2Cu%3D3*e%5Bs%2B2%5D%3Bconst%20r%3D%5Bt%5Bd%5D%2Ct%5Bd%2B1%5D%2Ct%5Bd%2B2%5D%5D%2Cf%3D%5Bt%5Bm%5D%2Ct%5Bm%2B1%5D%2Ct%5Bm%2B2%5D%5D%2Cg%3D%5Bt%5Bu%5D%2Ct%5Bu%2B1%5D%2Ct%5Bu%2B2%5D%5D%3Bn%3Df%5B0%5D-r%5B0%5D%2Ca%3Df%5B1%5D-r%5B1%5D%2Co%3Df%5B2%5D-r%5B2%5D%2Cl%3Dg%5B0%5D-r%5B0%5D%2Ch%3Dg%5B1%5D-r%5B1%5D%2Cc%3Dg%5B2%5D-r%5B2%5D%2Ci%5B0%5D%3Dh*o-c*a%2Ci%5B1%5D%3Dc*n-l*o%2Ci%5B2%5D%3Dl*a-h*n%2CA%5Bd%5D%2B%3Di%5B0%5D%2CA%5Bd%2B1%5D%2B%3Di%5B1%5D%2CA%5Bd%2B2%5D%2B%3Di%5B2%5D%2CA%5Bm%5D%2B%3Di%5B0%5D%2CA%5Bm%2B1%5D%2B%3Di%5B1%5D%2CA%5Bm%2B2%5D%2B%3Di%5B2%5D%2CA%5Bu%5D%2B%3Di%5B0%5D%2CA%5Bu%2B1%5D%2B%3Di%5B1%5D%2CA%5Bu%2B2%5D%2B%3Di%5B2%5D%7Dfor(s%3D0%3Bs%3Cr%3Bs%2B%3D3)%7Bi%5B0%5D%3D-1*A%5Bs%5D%2Ci%5B1%5D%3D-1*A%5Bs%2B1%5D%2Ci%5B2%5D%3D-1*A%5Bs%2B2%5D%3Blet%20t%3Di%5B0%5D*i%5B0%5D%2Bi%5B1%5D*i%5B1%5D%2Bi%5B2%5D*i%5B2%5D%3Bt%3E0%26%26(t%3D1%2FMath.sqrt(t)%2Ci%5B0%5D*%3Dt%2Ci%5B1%5D*%3Dt%2Ci%5B2%5D*%3Dt)%2CA%5Bs%5D%3Di%5B0%5D%2CA%5Bs%2B1%5D%3Di%5B1%5D%2CA%5Bs%2B2%5D%3Di%5B2%5D%7Dreturn%20A%7D%7D%3Bimport%7Bmat4%20as%20oe%2Cvec4%20as%20le%2Cvec3%20as%20he%7Dfrom%22gl-matrix%22%3Bimport%7BdecompressSync%20as%20ce%2CunzipSync%20as%20de%7Dfrom%22fflate%2Fbrowser%22%3Bimport%20me%20from%22array-equal%22%3Bimport%7Bcompress%20as%20ue%2Cdecompress%20as%20Ae%2CdecompressSync%20as%20fe%2CstrFromU8%20as%20ge%2CstrToU8%20as%20pe%7Dfrom%22fflate%2Fbrowser%22%3Bimport%7Bmat4%20as%20ve%2Cvec3%20as%20xe%2Cvec4%20as%20we%7Dfrom%22gl-matrix%22%3Bvar%20Ce%3Dclass%20t%7Bstatic%20arrayBufferToBase64(e)%7Bconst%20i%3Dnew%20Uint8Array(e)%3Breturn%20t.uint8tob64(i)%7Dstatic%20readMatV4(t)%7Blet%20e%3Dt.byteLength%3Bif(e%3C40)throw%20new%20Error(%22File%20too%20small%20to%20be%20MAT%20v4%3A%20bytes%20%3D%20%22%2Bt.byteLength)%3Blet%20i%3Dnew%20DataView(t)%2Cs%3Di.getUint16(0%2C!0)%2Cr%3Dt%3Bif(35615%3D%3D%3Ds%7C%7C8075%3D%3D%3Ds)%7Bconst%20n%3Dfe(new%20Uint8Array(t))%3Bi%3Dnew%20DataView(n.buffer)%2Cs%3Di.getUint16(0%2C!0)%2Cr%3Dn.buffer%2Ce%3Dr.byteLength%7Dconst%20n%3Dnew%20TextDecoder(%22utf-8%22)%2Ca%3Dnew%20Uint8Array(r)%3Blet%20o%3D0%3Bconst%20l%3D%7B%7D%3Bfunction%20h()%7Bconst%20t%3Di.getUint32(o%2C!0)%2Ce%3Di.getUint32(o%2B4%2C!0)%2Cs%3Di.getUint32(o%2B8%2C!0)%2Cr%3Di.getUint32(o%2B12%2C!0)%2Ch%3Di.getUint32(o%2B16%2C!0)%3Bif(o%2B%3D20%2C0!%3D%3Dr)throw%20new%20Error(%22Matlab%20V4%20reader%20does%20not%20support%20imaginary%20numbers%22)%3Bconst%20c%3De*s%3Bif(c%3C1)throw%20new%20Error(%22mrows%20*%20ncols%20must%20be%20greater%20than%20one%22)%3Bconst%20d%3Dnew%20Uint8Array(a.subarray(o%2Co%2Bh))%2Cm%3Dn.decode(d).trim().replaceAll(%22%5C0%22%2C%22%22)%2Cu%3D(A%3Dt%2CMath.floor(A%2F10)%2510)%3Bvar%20A%3Blet%20f%3D8%3Bif(u%3E%3D1%26%26u%3C%3D2)f%3D4%3Belse%20if(u%3E%3D3%26%26u%3C%3D4)f%3D2%3Belse%20if(5%3D%3D%3Du)f%3D1%3Belse%20if(0!%3D%3Du)throw%20new%20Error(%22impossible%20Matlab%20v4%20datatype%22)%3Bif(o%2B%3Dh%2Ct%3E50)throw%20new%20Error(%22Does%20not%20appear%20to%20be%20little-endian%20V4%20Matlab%20file%22)%3Bconst%20g%3Do%2Bc*f%3Bl%5Bm%5D%3Dfunction(t%2Ce%2Ci)%7Bconst%20s%3Dnew%20Uint8Array(a.subarray(e%2Ci))%3Breturn%201%3D%3D%3Dt%3Fnew%20Float32Array(s.buffer)%3A2%3D%3D%3Dt%3Fnew%20Int32Array(s.buffer)%3A3%3D%3D%3Dt%3Fnew%20Int16Array(s.buffer)%3A4%3D%3D%3Dt%3Fnew%20Uint16Array(s.buffer)%3A5%3D%3D%3Dt%3Fnew%20Uint8Array(s.buffer)%3Anew%20Float64Array(s.buffer)%7D(u%2Co%2Cg)%2Co%3Dg%7Dfor(%3Bo%2B20%3Ce%3B)h()%3Breturn%20l%7Dstatic%20uint8tob64(t)%7Blet%20e%3D%22%22%3Bconst%20i%3D%22ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%2B%2F%22%2Cs%3Dt.byteLength%2Cr%3Ds%253%2Cn%3Ds-r%3Blet%20a%2Co%2Cl%2Ch%2Cc%3Bfor(let%20s%3D0%3Bs%3Cn%3Bs%2B%3D3)c%3Dt%5Bs%5D%3C%3C16%7Ct%5Bs%2B1%5D%3C%3C8%7Ct%5Bs%2B2%5D%2Ca%3D(16515072%26c)%3E%3E18%2Co%3D(258048%26c)%3E%3E12%2Cl%3D(4032%26c)%3E%3E6%2Ch%3D63%26c%2Ce%2B%3Di%5Ba%5D%2Bi%5Bo%5D%2Bi%5Bl%5D%2Bi%5Bh%5D%3Breturn%201%3D%3D%3Dr%3F(c%3Dt%5Bn%5D%2Ca%3D(252%26c)%3E%3E2%2Co%3D(3%26c)%3C%3C4%2Ce%2B%3Di%5Ba%5D%2Bi%5Bo%5D%2B%22%3D%3D%22)%3A2%3D%3D%3Dr%26%26(c%3Dt%5Bn%5D%3C%3C8%7Ct%5Bn%2B1%5D%2Ca%3D(64512%26c)%3E%3E10%2Co%3D(1008%26c)%3E%3E4%2Cl%3D(15%26c)%3C%3C2%2Ce%2B%3Di%5Ba%5D%2Bi%5Bo%5D%2Bi%5Bl%5D%2B%22%3D%22)%2Ce%7Dstatic%20download(t%2Ce%2Ci)%7Bconst%20s%3Ddocument.createElement(%22a%22)%2Cr%3DArray.isArray(t)%3Ft%3A%5Bt%5D%2Cn%3Dnew%20Blob(r%2C%7Btype%3Ai%7D)%3Bs.href%3DURL.createObjectURL(n)%2Cs.download%3De%2Cs.click()%7Dstatic%20readFileAsync(t)%7Breturn%20new%20Promise(((e%2Ci)%3D%3E%7Bconst%20s%3Dnew%20FileReader%3Bs.onload%3D()%3D%3E%7Be(s.result)%7D%2Cs.onerror%3Di%2Cs.readAsArrayBuffer(t)%7D))%7Dstatic%20blobToBase64(t)%7Breturn%20new%20Promise((e%3D%3E%7Bconst%20i%3Dnew%20FileReader%3Bi.onloadend%3D()%3D%3Ee(i.result)%2Ci.readAsDataURL(t)%7D))%7Dstatic%20async%20decompressBase64String(e)%7Bconst%20i%3Datob(e)%2Cs%3Dnew%20ArrayBuffer(i.length)%2Cr%3Dnew%20Uint8Array(s)%3Bfor(let%20t%3D0%3Bt%3Ci.length%3Bt%2B%2B)r%5Bt%5D%3Di.charCodeAt(t)%3Breturn%20t.decompressArrayBuffer(r)%7Dstatic%20async%20compressToBase64String(e)%7Bconst%20i%3Dawait%20t.compressStringToArrayBuffer(e)%3Breturn%20t.uint8tob64(new%20Uint8Array(i))%7Dstatic%20async%20compressStringToArrayBuffer(t)%7Breturn%20new%20Promise(((e%2Ci)%3D%3E%7Bconst%20s%3Dpe(t)%3Bue(s%2C((t%2Cs)%3D%3E%7Bt%3Fi(t)%3Ae(s.buffer)%7D))%7D))%7Dstatic%20isArrayBufferCompressed(t)%7Bif(t%26%26t.byteLength)%7Bconst%20e%3Dnew%20Uint8Array(t)%3Breturn%208075%3D%3D%3D(e%5B0%5D%3C%3C8%7Ce%5B1%5D)%7Dreturn!1%7Dstatic%20async%20decompressArrayBuffer(t)%7Breturn%20new%20Promise(((e%2Ci)%3D%3E%7Bconst%20s%3Dnew%20Uint8Array(t)%3BAe(s%2C((t%2Cs)%3D%3E%7Bif(t)i(t)%3Belse%7Bconst%20t%3Dge(s)%3Be(t)%7D%7D))%7D))%7Dstatic%20arraysAreEqual(t%2Ce)%7Breturn%20me(t%2Ce)%7Dstatic%20range(t%2Ce%2Ci)%7Breturn%20Array.from(%7Blength%3A(e-t)%2Fi%2B1%7D%2C((e%2Cs)%3D%3Et%2Bs*i))%7Dstatic%20sph2cartDeg(t%2Ce)%7Bconst%20i%3D-e*(Math.PI%2F180)%2Cs%3D(t-90)%25360*(Math.PI%2F180)%2Cr%3D%5BMath.cos(i)*Math.cos(s)%2CMath.cos(i)*Math.sin(s)%2CMath.sin(i)%5D%2Cn%3DMath.sqrt(r%5B0%5D*r%5B0%5D%2Br%5B1%5D*r%5B1%5D%2Br%5B2%5D*r%5B2%5D)%3Breturn%20n%3C%3D0%7C%7C(r%5B0%5D%2F%3Dn%2Cr%5B1%5D%2F%3Dn%2Cr%5B2%5D%2F%3Dn)%2Cr%7Dstatic%20vox2mm(t%2Ce)%7Bconst%20i%3Dve.clone(e)%3Bve.transpose(i%2Ci)%3Bconst%20s%3Dwe.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2C1)%3Bwe.transformMat4(s%2Cs%2Ci)%3Breturn%20xe.fromValues(s%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D)%7D%7D%2Cbe%3Dl%2Cye%3Dclass%20t%7Bstatic%20readTRACT(t)%7Bconst%20e%3Dt.byteLength%3Bif(e%3C20)throw%20new%20Error(%22File%20too%20small%20to%20be%20niml.tract%3A%20bytes%20%3D%20%22%2Be)%3Bconst%20i%3Dnew%20DataView(t)%2Cs%3Dnew%20Uint8Array(t)%3Blet%20r%3D0%3Bfunction%20n()%7Bfor(%3Br%3Ce%26%2660!%3D%3Ds%5Br%5D%3B)r%2B%2B%3Bconst%20i%3Dr%3Bfor(%3Br%3Ce%26%2662!%3D%3Ds%5Br%5D%3B)r%2B%2B%3Breturn%20r%2B%2B%2Cr-i%3C1%3F%22%22%3A(new%20TextDecoder).decode(t.slice(i%2Cr-1)).trim()%7Dlet%20a%3Dn()%3Bfunction%20o(t)%7Bconst%20e%3Da.indexOf(t)%3Bif(e%3C0)return%200%3Bconst%20i%3Da.indexOf('%22'%2Ce)%2B1%2Cs%3Da.indexOf('%22'%2Ci)%2Cr%3Da.slice(i%2Cs)%3Breturn%20parseInt(r)%7Dconst%20h%3Do(%22N_tracts%3D%22)%3B(!a.startsWith(%22%3Cnetwork%22)%7C%7Ch%3C1)%26%26l.warn(%22This%20is%20not%20a%20valid%20niml.tract%20file%20%22%2Ba)%3Blet%20c%3D0%3Bconst%20d%3D%5B%5D%3Bd.push(c)%3Bconst%20m%3D%5B%5D%2Cu%3D%5B%5D%3Bfor(let%20t%3D0%3Bt%3Ch%3Bt%2B%2B)%7Ba%3Dn()%3Bconst%20t%3Do(%22ni_dimen%3D%22)%2Ce%3Do(%22Bundle_Tag%3D%22)%2Cs%3Da.includes(%22binary.lsbfirst%22)%3Bfor(let%20n%3D0%3Bn%3Ct%3Bn%2B%2B)%7Br%2B%3D4%3Bconst%20t%3Di.getUint32(r%2Cs)%2F3%3Br%2B%3D4%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)m.push(i.getFloat32(r%2Cs))%2Cr%2B%3D4%2Cm.push(-i.getFloat32(r%2Cs))%2Cr%2B%3D4%2Cm.push(i.getFloat32(r%2Cs))%2Cr%2B%3D4%3Bc%2B%3Dt%2Cd.push(c)%2Cu.push(e)%7Da%3Dn()%7Dconst%20A%3D%5B%5D%3Breturn%20A.push(%7Bid%3A%22tract%22%2Cvals%3AFloat32Array.from(u)%7D)%2C%7Bpts%3Anew%20Float32Array(m)%2CoffsetPt0%3Anew%20Uint32Array(d)%2Cdps%3AA%7D%7Dstatic%20readTT(t)%7Blet%20e%3Dnew%20Uint32Array(0)%2Ci%3Dnew%20Float32Array(0)%3Bconst%20s%3DCe.readMatV4(t)%3Bif(!(%22trans_to_mni%22in%20s))throw%20new%20Error(%22TT%20format%20file%20must%20have%20'trans_to_mni'%22)%3Bif(!(%22voxel_size%22in%20s))throw%20new%20Error(%22TT%20format%20file%20must%20have%20'voxel_size'%22)%3Bif(!(%22track%22in%20s))throw%20new%20Error(%22TT%20format%20file%20must%20have%20'track'%22)%3Blet%20r%3Doe.create()%3Bconst%20n%3Ds.trans_to_mni%3Breturn%20r%3Doe.fromValues(n%5B0%5D%2Cn%5B1%5D%2Cn%5B2%5D%2Cn%5B3%5D%2Cn%5B4%5D%2Cn%5B5%5D%2Cn%5B6%5D%2Cn%5B7%5D%2Cn%5B8%5D%2Cn%5B9%5D%2Cn%5B10%5D%2Cn%5B11%5D%2Cn%5B12%5D%2Cn%5B13%5D%2Cn%5B14%5D%2Cn%5B15%5D)%2Coe.transpose(r%2Cr)%2Cfunction(t)%7Bconst%20s%3Dnew%20DataView(t.buffer)%2Cn%3D%5B%5D%3Blet%20a%3D0%2Co%3D0%3Bfor(%3Bo%3Ct.length%3B)%7Bn.push(o)%3Bconst%20t%3Ds.getUint32(o%2C!0)%3Bo%3Do%2Bt%2B13%2Ca%2B%3Dt%7De%3Dnew%20Uint32Array(n.length%2B1)%2Ci%3Dnew%20Float32Array(a)%3Blet%20l%3D0%3Bfor(let%20t%3D0%3Bt%3Cn.length%3Bt%2B%2B)%7Be%5Bt%5D%3Dl%2F3%3Blet%20r%3Dn%5Bt%5D%3Bconst%20a%3Ds.getUint32(r%2C!0)%2F3%3Blet%20o%3Ds.getInt32(r%2B4%2C!0)%2Ch%3Ds.getInt32(r%2B8%2C!0)%2Cc%3Ds.getInt32(r%2B12%2C!0)%3Br%2B%3D16%2Ci%5Bl%2B%2B%5D%3Do%2Ci%5Bl%2B%2B%5D%3Dh%2Ci%5Bl%2B%2B%5D%3Dc%3Bfor(let%20t%3D2%3Bt%3C%3Da%3Bt%2B%2B)o%2B%3Ds.getInt8(r%2B%2B)%2Ch%2B%3Ds.getInt8(r%2B%2B)%2Cc%2B%3Ds.getInt8(r%2B%2B)%2Ci%5Bl%2B%2B%5D%3Do%2Ci%5Bl%2B%2B%5D%3Dh%2Ci%5Bl%2B%2B%5D%3Dc%7Dfor(let%20t%3D0%3Bt%3Cl%3Bt%2B%2B)i%5Bt%5D%3Di%5Bt%5D%2F32%3Blet%20h%3D0%3Bfor(let%20t%3D0%3Bt%3Cl%2F3%3Bt%2B%2B)%7Bconst%20t%3Dle.fromValues(i%5Bh%5D%2Ci%5Bh%2B1%5D%2Ci%5Bh%2B2%5D%2C1)%3Ble.transformMat4(t%2Ct%2Cr)%2Ci%5Bh%2B%2B%5D%3Dt%5B0%5D%2Ci%5Bh%2B%2B%5D%3Dt%5B1%5D%2Ci%5Bh%2B%2B%5D%3Dt%5B2%5D%7De%5Bn.length%5D%3Dl%2F3%7D(s.track)%2C%7Bpts%3Ai%2CoffsetPt0%3Ae%7D%7Dstatic%20readTRX(t)%7Bfunction%20e(t)%7Bconst%20e%3D(31744%26t)%3E%3E10%2Ci%3D1023%26t%3Breturn(t%3E%3E15%3F-1%3A1)*(e%3F31%3D%3D%3De%3Fi%3FNaN%3A1%2F0%3AMath.pow(2%2Ce-15)*(1%2Bi%2F1024)%3Ai%2F1024*6103515625e-14)%7Dlet%20i%3D0%2Cs%3D0%2Cr%3Dnew%20Float32Array(%5B%5D)%3Bconst%20n%3D%5B%5D%2Ca%3D%5B%5D%2Co%3D%5B%5D%2Cl%3D%5B%5D%3Blet%20h%3D%5B%5D%2Cc%3D!1%3Bconst%20d%3Dde(new%20Uint8Array(t)%2C%7Bfilter%3At%3D%3Et.originalSize%3E0%7D)%2Cm%3DObject.keys(d)%3Bfor(let%20t%3D0%2Cu%3Dm.length%3Bt%3Cu%3Bt%2B%2B)%7Bconst%20u%3Dm%5Bt%5D.split(%22%2F%22)%2CA%3Du.slice(-1)%5B0%5D%3Bif(A.startsWith(%22.%22))continue%3Bconst%20f%3Du.slice(-2)%5B0%5D%2Cg%3DA.split(%22.%22)%5B0%5D%2Cp%3Dd%5Bm%5Bt%5D%5D%3Bif(A.includes(%22header.json%22))%7Bconst%20t%3D(new%20TextDecoder).decode(p)%3Bh%3DJSON.parse(t)%3Bcontinue%7Dlet%20v%3D0%2Cx%3D%5B%5D%3Bif(A.endsWith(%22.uint64%22)%7C%7CA.endsWith(%22.int64%22))%7Bv%3Dp.length%2F8%2Cx%3Dnew%20Uint32Array(v)%3Bconst%20t%3Dnew%20Uint32Array(p.buffer)%3Blet%20e%3D0%3Bfor(let%20i%3D0%3Bi%3Cv%3Bi%2B%2B)x%5Bi%5D%3Dt%5Be%5D%2C0!%3D%3Dt%5Be%2B1%5D%26%26(c%3D!0)%2Ce%2B%3D2%7Delse%20if(A.endsWith(%22.uint32%22))x%3Dnew%20Uint32Array(p.buffer)%3Belse%20if(A.endsWith(%22.uint16%22))x%3Dnew%20Uint16Array(p.buffer)%3Belse%20if(A.endsWith(%22.uint8%22))x%3Dnew%20Uint8Array(p.buffer)%3Belse%20if(A.endsWith(%22.int32%22))x%3Dnew%20Int32Array(p.buffer)%3Belse%20if(A.endsWith(%22.int16%22))x%3Dnew%20Int16Array(p.buffer)%3Belse%20if(A.endsWith(%22.int8%22))x%3Dnew%20Int8Array(p.buffer)%3Belse%20if(A.endsWith(%22.float64%22))x%3Dnew%20Float64Array(p.buffer)%3Belse%20if(A.endsWith(%22.float32%22))x%3Dnew%20Float32Array(p.buffer)%3Belse%7Bif(!A.endsWith(%22.float16%22))continue%3B%7Bv%3Dp.length%2F2%2Cx%3Dnew%20Float32Array(v)%3Bconst%20t%3Dnew%20Uint16Array(p.buffer)%2Ci%3Dnew%20Float32Array(65536)%3Bfor(let%20t%3D0%3Bt%3C65536%3Bt%2B%2B)i%5Bt%5D%3De(t)%3Bfor(let%20e%3D0%3Be%3Cv%3Be%2B%2B)x%5Be%5D%3Di%5Bt%5Be%5D%5D%7D%7Dif(v%3Dx.length%2Cf.includes(%22groups%22))a.push(%7Bid%3Ag%2Cvals%3AFloat32Array.from(x.slice())%7D)%3Belse%20if(f.includes(%22dpv%22))l.push(%7Bid%3Ag%2Cvals%3AFloat32Array.from(x.slice())%7D)%3Belse%20if(f.includes(%22dps%22))o.push(%7Bid%3Ag%2Cvals%3AFloat32Array.from(x.slice())%7D)%3Belse%7Bif(A.startsWith(%22offsets.%22))%7Bi%3Dv%3Bfor(let%20t%3D0%3Bt%3Cv%3Bt%2B%2B)n%5Bt%5D%3Dx%5Bt%5D%7DA.startsWith(%22positions.3.%22)%26%26(s%3Dv%2Cr%3Dnew%20Float32Array(x))%7D%7Dif(0%3D%3D%3Di%7C%7C0%3D%3D%3Ds)throw%20new%20Error(%22Failure%20reading%20TRX%20format%20(no%20offsets%20or%20points).%22)%3Bif(c)throw%20new%20Error(%22Too%20many%20vertices%3A%20JavaScript%20does%20not%20support%2064%20bit%20integers%22)%3Breturn%20n%5Bi%5D%3Ds%2F3%2C%7Bpts%3Ar%2CoffsetPt0%3Anew%20Uint32Array(n)%2Cdpg%3Aa%2Cdps%3Ao%2Cdpv%3Al%2Cheader%3Ah%7D%7Dstatic%20readTSF(t%2Ce%3D0)%7Bconst%20i%3Dnew%20Float32Array(e)%2Cs%3Dt.byteLength%3Bif(s%3C20)throw%20new%20Error(%22File%20too%20small%20to%20be%20TSF%3A%20bytes%20%3D%20%22%2Bs)%3Bconst%20r%3Dnew%20Uint8Array(t)%3Blet%20n%3D0%3Bfunction%20a()%7Bfor(%3Bn%3Cs%26%2610%3D%3D%3Dr%5Bn%5D%3B)n%2B%2B%3Bconst%20e%3Dn%3Bfor(%3Bn%3Cs%26%2610!%3D%3Dr%5Bn%5D%3B)n%2B%2B%3Breturn%20n%2B%2B%2Cn-e%3C1%3F%22%22%3A(new%20TextDecoder).decode(t.slice(e%2Cn-1))%7Dlet%20o%3Da()%3Bif(!o.includes(%22mrtrix%20track%20scalars%22))throw%20new%20Error(%22Not%20a%20valid%20TSF%20file%22)%3Blet%20l%3D-1%3Bfor(%3Bn%3Cs%26%26!o.includes(%22END%22)%3B)if(o%3Da()%2Co.toLowerCase().startsWith(%22file%3A%22)%26%26(l%3DparseInt(o.split(%22%20%22).pop()))%2Co.toLowerCase().startsWith(%22datatype%3A%22)%26%26!o.endsWith(%22Float32LE%22))throw%20new%20Error(%22Only%20supports%20TSF%20files%20with%20Float32LE%22)%3Bif(l%3C20)throw%20new%20Error(%22Not%20a%20valid%20TSF%20file%20(missing%20file%20offset)%22)%3Bn%3Dl%3Bconst%20h%3Dnew%20DataView(t)%3Blet%20c%3D0%3Bfor(%3Bn%2B4%3C%3Ds%26%26c%3Ce%3B)%7Bconst%20t%3Dh.getFloat32(n%2C!0)%3Bif(n%2B%3D4%2CisFinite(t))i%5Bc%2B%2B%5D%3Dt%3Belse%20if(!isNaN(t))break%7Dreturn%20i%7Dstatic%20readTCK(t)%7Bconst%20e%3Dt.byteLength%3Bif(e%3C20)throw%20new%20Error(%22File%20too%20small%20to%20be%20TCK%3A%20bytes%20%3D%20%22%2Be)%3Bconst%20i%3Dnew%20Uint8Array(t)%3Blet%20s%3D0%3Bfunction%20r()%7Bfor(%3Bs%3Ce%26%2610%3D%3D%3Di%5Bs%5D%3B)s%2B%2B%3Bconst%20r%3Ds%3Bfor(%3Bs%3Ce%26%2610!%3D%3Di%5Bs%5D%3B)s%2B%2B%3Breturn%20s%2B%2B%2Cs-r%3C1%3F%22%22%3A(new%20TextDecoder).decode(t.slice(r%2Cs-1))%7Dlet%20n%3Dr()%3Bif(!n.includes(%22mrtrix%20tracks%22))throw%20new%20Error(%22Not%20a%20valid%20TCK%20file%22)%3Blet%20a%3D-1%3Bfor(%3Bs%3Ce%26%26!n.includes(%22END%22)%3B)n%3Dr()%2Cn.toLowerCase().startsWith(%22file%3A%22)%26%26(a%3DparseInt(n.split(%22%20%22).pop()))%3Bif(a%3C20)throw%20new%20Error(%22Not%20a%20valid%20TCK%20file%20(missing%20file%20offset)%22)%3Bs%3Da%3Bconst%20o%3Dnew%20DataView(t)%3Blet%20l%3D0%2Ch%3Dnew%20Uint32Array(e%2F16)%2Cc%3D0%2Cd%3D0%2Cm%3Dnew%20Float32Array(e%2F4)%3Bfor(h%5B0%5D%3D0%3Bs%2B12%3Ce%3B)%7Bconst%20t%3Do.getFloat32(s%2C!0)%3Bs%2B%3D4%3Bconst%20e%3Do.getFloat32(s%2C!0)%3Bs%2B%3D4%3Bconst%20i%3Do.getFloat32(s%2C!0)%3Bif(s%2B%3D4%2CisFinite(t))m%5Bd%2B%2B%5D%3Dt%2Cm%5Bd%2B%2B%5D%3De%2Cm%5Bd%2B%2B%5D%3Di%2Cl%2B%2B%3Belse%20if(h%5Bc%2B%2B%5D%3Dl%2C!isNaN(t))break%7Dreturn%20m%3Dm.slice(0%2Cd)%2Ch%3Dh.slice(0%2Cc)%2C%7Bpts%3Am%2CoffsetPt0%3Ah%7D%7Dstatic%20readTRK(t)%7Blet%20e%3Dnew%20DataView(t)%2Ci%3De.getUint32(0%2C!0)%3Bif(1128354388!%3D%3Di)%7Blet%20s%3Bif(4247762216%3D%3D%3Di)throw%20new%20Error(%22zstd%20TRK%20decompression%20is%20not%20supported%22)%3Bs%3Dce(new%20Uint8Array(t))%2Ct%3Ds.buffer%2Ce%3Dnew%20DataView(t)%2Ci%3De.getUint32(0%2C!0)%7Dconst%20s%3De.getUint32(992%2C!0)%2Cr%3De.getUint32(996%2C!0)%3Bif(s%3E2%7C%7C1e3!%3D%3Dr%7C%7C1128354388!%3D%3Di)throw%20new%20Error(%22Not%20a%20valid%20TRK%20file%22)%3Bconst%20n%3De.getInt16(36%2C!0)%2Ca%3D%5B%5D%3Bfor(let%20e%3D0%3Be%3Cn%3Be%2B%2B)%7Bconst%20i%3Dnew%20Uint8Array(t.slice(38%2B20*e%2C58%2B20*e))%2Cs%3D(new%20TextDecoder).decode(i).split(%22%5C0%22).shift()%3Ba.push(%7Bid%3As.trim()%2Cvals%3A%5B%5D%7D)%7Dconst%20o%3De.getFloat32(12%2C!0)%2Ch%3De.getFloat32(16%2C!0)%2Cc%3De.getFloat32(20%2C!0)%2Cd%3Doe.fromValues(1%2Fo%2C0%2C0%2C-.5%2C0%2C1%2Fh%2C0%2C-.5%2C0%2C0%2C1%2Fc%2C-.5%2C0%2C0%2C0%2C1)%2Cm%3De.getInt16(238%2C!0)%2Cu%3D%5B%5D%3Bfor(let%20e%3D0%3Be%3Cm%3Be%2B%2B)%7Bconst%20i%3Dnew%20Uint8Array(t.slice(240%2B20*e%2C260%2B20*e))%2Cs%3D(new%20TextDecoder).decode(i).split(%22%5C0%22).shift()%3Bu.push(%7Bid%3As.trim()%2Cvals%3A%5B%5D%7D)%7Dconst%20A%3Doe.create()%3Bfor(let%20t%3D0%3Bt%3C16%3Bt%2B%2B)A%5Bt%5D%3De.getFloat32(440%2B4*t%2C!0)%3B0%3D%3D%3DA%5B15%5D%26%26(l.warn(%22TRK%20vox_to_ras%20not%20set%22)%2Coe.identity(A))%3Bconst%20f%3Doe.create()%3Boe.mul(f%2Cd%2CA)%3Blet%20g%3Dnull%2Cp%3Dnull%3Bg%3Dnew%20Int32Array(t.slice(r))%2Cp%3Dnew%20Float32Array(g.buffer)%3Bconst%20v%3Dg.length%3Bif(v%3C1)throw%20new%20Error(%22Empty%20TRK%20file.%22)%3Blet%20x%3D0%2Cw%3D0%2CC%3Dnew%20Uint32Array(g.length%2F4)%2Cb%3D0%2Cy%3Dnew%20Float32Array(g.length)%2CI%3D0%3Bfor(%3Bx%3Cv%3B)%7Bconst%20t%3Dg%5Bx%5D%3Bx%2B%3D1%2CC%5Bb%2B%2B%5D%3Dw%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bconst%20t%3Dp%5Bx%2B0%5D%2Ce%3Dp%5Bx%2B1%5D%2Ci%3Dp%5Bx%2B2%5D%3Bif(x%2B%3D3%2Cy%5BI%2B%2B%5D%3Dt*f%5B0%5D%2Be*f%5B1%5D%2Bi*f%5B2%5D%2Bf%5B3%5D%2Cy%5BI%2B%2B%5D%3Dt*f%5B4%5D%2Be*f%5B5%5D%2Bi*f%5B6%5D%2Bf%5B7%5D%2Cy%5BI%2B%2B%5D%3Dt*f%5B8%5D%2Be*f%5B9%5D%2Bi*f%5B10%5D%2Bf%5B11%5D%2Cn%3E0)for(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)a%5Bt%5D.vals.push(p%5Bx%5D)%2Cx%2B%2B%3Bw%2B%2B%7Dif(m%3E0)for(let%20t%3D0%3Bt%3Cm%3Bt%2B%2B)u%5Bt%5D.vals.push(p%5Bx%5D)%2Cx%2B%2B%7Dconst%20M%3D%5B%5D%3Bfor(let%20t%3D0%3Bt%3Cu.length%3Bt%2B%2B)M.push(%7Bid%3Au%5Bt%5D.id%2Cvals%3AFloat32Array.from(u%5Bt%5D.vals)%7D)%3Bconst%20D%3D%5B%5D%3Bfor(let%20t%3D0%3Bt%3Ca.length%3Bt%2B%2B)D.push(%7Bid%3Aa%5Bx%5D.id%2Cvals%3AFloat32Array.from(a%5Bx%5D.vals)%7D)%3Breturn%20C%5Bb%2B%2B%5D%3Dw%2Cy%3Dy.slice(0%2CI)%2CC%3DC.slice(0%2Cb)%2C%7Bpts%3Ay%2CoffsetPt0%3AC%2Cdps%3AM%2Cdpv%3AD%7D%7Dstatic%20readTxtVTK(t)%7Bconst%20e%3Dnew%20TextDecoder(%22utf-8%22).decode(t).split(%22%5Cn%22)%3Bif(e.length%3C7%7C%7C!e%5B0%5D.startsWith(%22%23%20vtk%20DataFile%22))throw%20new%20Error(%22Invalid%20VTK%20image%22)%3Bif(!e%5B2%5D.startsWith(%22ASCII%22))throw%20new%20Error(%22Not%20ASCII%20VTK%20mesh%22)%3Blet%20i%3D3%3Bfor(%3Be%5Bi%5D.length%3C1%3B)i%2B%2B%3Bif(!e%5Bi%5D.includes(%22POLYDATA%22))throw%20new%20Error(%22Not%20ASCII%20VTK%20polydata%22)%3Bfor(i%2B%2B%3Be%5Bi%5D.length%3C1%3B)i%2B%2B%3Bif(!e%5Bi%5D.startsWith(%22POINTS%22))throw%20new%20Error(%22Not%20VTK%20POINTS%22)%3Blet%20s%3De%5Bi%5D.trim().split(%2F%5Cs%2B%2F)%3Bconst%20r%3DparseInt(s%5B1%5D)%2Cn%3D3*r%2Ca%3Dnew%20Float32Array(3*r)%3Blet%20o%3D0%3Bfor(%3Bo%3C3*r%3B)%7Bi%2B%2B%3Bconst%20t%3De%5Bi%5D.trim().trim().split(%2F%5Cs%2B%2F)%3Bfor(let%20e%3D0%3Be%3Ct.length%26%26!(o%3E%3Dn)%3Be%2B%2B)a%5Bo%5D%3DparseFloat(t%5Be%5D)%2Co%2B%2B%7Dconst%20l%3D%5B%5D%3Bfor(i%2B%2B%3Be%5Bi%5D.length%3C1%3B)i%2B%2B%3Bif(e%5Bi%5D.startsWith(%22METADATA%22))%7Bfor(%3Be%5Bi%5D.length%3E1%3B)i%2B%2B%3Bi%2B%2B%7Dif(s%3De%5Bi%5D.trim().split(%2F%5Cs%2B%2F)%2Ci%2B%2B%2Cs%5B0%5D.includes(%22LINES%22))%7Bconst%20t%3DparseInt(s%5B1%5D)%3Bif(t%3C1)throw%20new%20Error(%22Corrupted%20VTK%20ASCII%22)%3Blet%20r%3De%5Bi%5D.trim()%3Bconst%20n%3D%5B%5D%3Blet%20o%3D%5B%5D%3Bif(r.startsWith(%22OFFSETS%22))%7Bi%2B%2B%3Blet%20s%3D0%3Bfor(%3Bs%3Ct%3B)%7Br%3De%5Bi%5D.trim()%2Ci%2B%2B%3Bconst%20a%3Dr.trim().split(%2F%5Cs%2B%2F)%3Bfor(let%20e%3D0%3Be%3Ca.length%26%26(n%5Bs%5D%3DparseInt(a%5Be%5D)%2Cs%2B%2B%2C!(s%3E%3Dt))%3Be%2B%2B)%3B%7Do%3DArray.from(a)%7Delse%7Blet%20s%3Dfunction()%7Br%3De%5Bi%5D.trim()%3Bconst%20t%3Dr.trim().split(%2F%5Cs%2B%2F)%3Bh%3D%5B%5D%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)h.push(parseInt(t%5Be%5D))%3Bc%3D0%2Ci%2B%2B%7D%2Cl%3D0%3Bn%5B0%5D%3D0%3Blet%20h%3D%5B%5D%2Cc%3D0%3Bs()%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bc%3E%3Dh.length%26%26s()%3Bconst%20t%3Dh%5Bc%2B%2B%5D%3Bl%2B%3Dt%2Cn%5Be%2B1%5D%3Dl%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bc%3E%3Dh.length%26%26s()%3Bconst%20t%3D3*h%5Bc%2B%2B%5D%3Bo.push(a%5Bt%2B0%5D)%2Co.push(a%5Bt%2B1%5D)%2Co.push(a%5Bt%2B2%5D)%7D%7D%7Dreturn%7Bpts%3AFloat32Array.from(o)%2CoffsetPt0%3AUint32Array.from(n)%7D%7Dif(s%5B0%5D.includes(%22TRIANGLE_STRIPS%22))%7Bconst%20t%3DparseInt(s%5B1%5D)%3Bfor(let%20s%3D0%3Bs%3Ct%3Bs%2B%2B)%7Bconst%20t%3De%5Bi%5D.trim()%3Bi%2B%2B%3Bconst%20s%3Dt.trim().split(%2F%5Cs%2B%2F)%2Cr%3DparseInt(s%5B0%5D)-2%3Blet%20n%3D1%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)t%252%3F(l.push(parseInt(s%5Bn%2B2%5D))%2Cl.push(parseInt(s%5Bn%2B1%5D))%2Cl.push(parseInt(s%5Bn%5D)))%3A(l.push(parseInt(s%5Bn%5D))%2Cl.push(parseInt(s%5Bn%2B1%5D))%2Cl.push(parseInt(s%5Bn%2B2%5D)))%2Cn%2B%3D1%7D%7Delse%7Bif(!s%5B0%5D.includes(%22POLYGONS%22))throw%20new%20Error(%22Unsupported%20ASCII%20VTK%20datatype%20%22%2Bs%5B0%5D)%3B%7Bconst%20t%3DparseInt(s%5B1%5D)%3Bfor(let%20s%3D0%3Bs%3Ct%3Bs%2B%2B)%7Bconst%20t%3De%5Bi%5D.trim()%3Bi%2B%2B%3Bconst%20s%3Dt.trim().split(%2F%5Cs%2B%2F)%2Cr%3DparseInt(s%5B0%5D)-2%2Cn%3DparseInt(s%5B1%5D)%3Blet%20a%3DparseInt(s%5B2%5D)%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)%7Bconst%20e%3DparseInt(s%5B3%2Bt%5D)%3Bl.push(n)%2Cl.push(a)%2Cl.push(e)%2Ca%3De%7D%7D%7D%7Dreturn%7Bpositions%3Aa%2Cindices%3Anew%20Uint32Array(l)%7D%7Dstatic%20readLayer(e%3D%22%22%2Ci%2Cs%2Cr%3D.5%2Cn%3D%22warm%22%2Ca%3D%22winter%22%2Co%3D!1%2Ch%3Dnull%2Cc%3Dnull%2Cd%3D0)%7Bconst%20m%3D%7B...Ie%2CcolormapInvert%3A!1%2CalphaThreshold%3A!1%2CisTransparentBelowCalMin%3A!0%2CisAdditiveBlend%3A!1%2CcolorbarVisible%3A!0%7D%2Cu%3D%2F(%3F%3A%5C.(%5B%5E.%5D%2B))%3F%24%2F%3Blet%20A%3Du.exec(e)%5B1%5D%3BA%3DA.toUpperCase()%2C%22GZ%22%3D%3D%3DA%26%26(A%3Du.exec(e.slice(0%2C-3))%5B1%5D%2CA%3DA.toUpperCase())%3Bconst%20f%3Ds.vertexCount%2F3%3Bif(s.offsetPt0)%7Bif(%22TSF%22!%3D%3DA)throw%20new%20Error(%22readLayer%20for%20streamlines%20only%20supports%20TSF%20files.%22)%3Bconst%20r%3Ds.pts.length%2F3%2Cn%3De.split(%22%2F%22)%3Blet%20a%3D%22Unknown%22%3Bif(n.length%3E1)%7Bn.pop()%26%26(a%3Da.split(%22.%22).slice(0%2C-1).join(%22.%22))%7Dconst%20o%3Dt.readTSF(i%2Cr)%3Bs.dpv%7C%7C(s.dpv%3D%5B%5D)%3Bconst%20l%3Do.reduce(((t%2Ce)%3D%3EMath.min(t%2Ce)))%2Ch%3Do.reduce(((t%2Ce)%3D%3EMath.max(t%2Ce)))%3Breturn%20s.dpv.push(%7Bid%3Aa%2Cvals%3AFloat32Array.from(o.slice())%2Cglobal_min%3Al%2Cglobal_max%3Ah%2Ccal_min%3Al%2Ccal_max%3Ah%7D)%2Cm%7Dif(f%3C3)return%20void%20l.error(%22n_vert%20%3C%203%20in%20layer%22)%3Bif(%22MZ3%22%3D%3D%3DA)m.values%3Dt.readMZ3(i%2Cf)%3Belse%20if(%22ANNOT%22%3D%3D%3DA)%7Bconst%20e%3Dt.readANNOT(i%2Cf%2C!0)%3Be%20instanceof%20Uint32Array%3Fm.values%3De%3A(m.values%3De.scalars%2Cm.colormapLabel%3De.colormapLabel)%7Delse%20if(%22CRV%22%3D%3D%3DA%7C%7C%22CURV%22%3D%3D%3DA%7C%7C%22THICKNESS%22%3D%3D%3DA%7C%7C%22AREA%22%3D%3D%3DA)m.values%3Dt.readCURV(i%2Cf)%2Cm.isTransparentBelowCalMin%3D!1%3Belse%20if(%22GII%22%3D%3D%3DA)%7Bconst%20e%3Dt.readGII(i%2Cf)%3Bm.values%3De.scalars%2Cm.colormapLabel%3De.colormapLabel%7Delse%20if(%22MGH%22%3D%3D%3DA%7C%7C%22MGZ%22%3D%3D%3DA)%7Bconst%20e%3Dt.readMGH(i%2Cf%2C!0)%3B%22scalars%22in%20e%3F(m.values%3De.scalars%2Cm.colormapLabel%3De.colormapLabel)%3Am.values%3De%7Delse%20if(%22NII%22%3D%3D%3DA)m.values%3Dt.readNII(i%2Cf%2Cs.anatomicalStructurePrimary)%3Belse%20if(%22SMP%22%3D%3D%3DA)m.values%3Dt.readSMP(i%2Cf)%3Belse%20if(%22STC%22%3D%3D%3DA)m.values%3Dt.readSTC(i%2Cf)%3Belse%7Bif(!t.isCurv(i))return%20l.warn(%22Unknown%20layer%20overlay%20format%20%22%2Be)%2Cm%3Bm.values%3Dt.readCURV(i%2Cf)%2Cm.isTransparentBelowCalMin%3D!1%7Dif(!m.values)return%20void%20l.error(%22no%20values%20in%20layer%22)%3Bm.nFrame4D%3Dm.values.length%2Ff%2Cm.frame4D%3D0%2Cm.outlineBorder%3Dd%3Blet%20g%3Dm.values%5B0%5D%2Cp%3Dm.values%5B0%5D%3Bfor(let%20t%3D0%3Bt%3Cm.values.length%3Bt%2B%2B)g%3DMath.min(g%2Cm.values%5Bt%5D)%2Cp%3DMath.max(p%2Cm.values%5Bt%5D)%3Breturn%20m.global_min%3Dg%2Cm.global_max%3Dp%2Cm.cal_min%3Dh%7C%7C0%2Ch%7C%7C(m.cal_min%3Dg)%2Cm.cal_max%3Dc%7C%7C0%2Cc%7C%7C(m.cal_max%3Dp)%2Cm.cal_minNeg%3DNaN%2Cm.cal_maxNeg%3DNaN%2Cm.opacity%3Dr%2Cm.colormap%3Dn%2Cm.colormapNegative%3Da%2Cm.useNegativeCmap%3Do%2Cm%7Dstatic%20readSMP(t%2Ce)%7Bconst%20i%3Dt.byteLength%3Blet%20s%3Dnew%20DataView(t)%2Cr%3Ds.getUint16(0%2C!0)%3Bif(r%3E5)%7Bconst%20e%3Dce(new%20Uint8Array(t))%3Bs%3Dnew%20DataView(e.buffer)%2Cr%3Ds.getUint16(0%2C!0)%2Ct%3De.buffer%7Dr%3E5%26%26l.error(%22Unsupported%20or%20invalid%20BrainVoyager%20SMP%20version%20%22%2Br)%3Bconst%20n%3Ds.getUint32(2%2C!0)%3Bn!%3D%3De%26%26l.error(%22SMP%20file%20has%20%22%2Bn%2B%22%20vertices%2C%20background%20mesh%20has%20%22%2Be)%3Bconst%20a%3Ds.getUint16(6%2C!0)%2Co%3Dnew%20Float32Array(n*a)%2Ch%3D%5B%5D%3Blet%20c%3D9%3Bfunction%20d()%7Bconst%20e%3Dc%3Bfor(%3Bc%3Ci%26%260!%3D%3Ds.getUint8(c)%3B)c%2B%2B%3Breturn%20c%2B%2B%2C(new%20TextDecoder).decode(t.slice(e%2Cc-1))%7Dd()%3Bfor(let%20e%3D0%3Be%3Ca%3Be%2B%2B)%7Bconst%20i%3D%7B%7D%3Bi.mapType%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4%2Cr%3E%3D3%26%263%3D%3D%3Di.mapType%26%26(i.nLags%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4%2Ci.mnLag%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4%2Ci.mxLag%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4%2Ci.ccOverlay%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4)%2Ci.clusterSize%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4%2Ci.clusterCheck%3Ds.getUint8(c)%2Cc%2B%3D1%2Ci.critThresh%3Ds.getFloat32(c%2C!0)%2Cc%2B%3D4%2Ci.maxThresh%3Ds.getFloat32(c%2C!0)%2Cc%2B%3D4%2Cr%3E%3D4%26%26(i.includeValuesGreaterThreshMax%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4)%2Ci.df1%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4%2Ci.df2%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4%2Cr%3E%3D5%3F(i.posNegFlag%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4)%3Ai.posNegFlag%3D3%2Ci.cortexBonferroni%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4%2Ci.posMinRGB%3D%5B0%2C0%2C0%5D%2Ci.posMaxRGB%3D%5B0%2C0%2C0%5D%2Ci.negMinRGB%3D%5B0%2C0%2C0%5D%2Ci.negMaxRGB%3D%5B0%2C0%2C0%5D%2Cr%3E%3D2%26%26(i.posMinRGB%5B0%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Ci.posMinRGB%5B1%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Ci.posMinRGB%5B2%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Ci.posMaxRGB%5B0%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Ci.posMaxRGB%5B1%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Ci.posMaxRGB%5B2%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Cr%3E%3D4%26%26(i.negMinRGB%5B0%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Ci.negMinRGB%5B1%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Ci.negMinRGB%5B2%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Ci.negMaxRGB%5B0%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Ci.negMaxRGB%5B1%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Ci.negMaxRGB%5B2%5D%3Ds.getUint8(c)%2Cc%2B%2B)%2Ci.enableSMPColor%3Ds.getUint8(c)%2Cc%2B%2B%2Cr%3E%3D4%26%26(i.lut%3Dd())%2Ci.colorAlpha%3Ds.getFloat32(c%2C!0)%2Cc%2B%3D4)%2Ci.name%3Dd()%3Bconst%20a%3Dnew%20Float32Array(t%2Cc%2Cn)%3Bo.set(a%2Ce*n)%2Cc%2B%3D4*n%2Ch.push(i)%7Dreturn%20o%7Dstatic%20readSTC(t%2Ce)%7Bconst%20i%3Dnew%20DataView(t)%2Cs%3Di.getInt32(8%2C!1)%3Bif(s!%3D%3De)throw%20new%20Error(%22Overlay%20has%20%22%2Bs%2B%22%20vertices%2C%20expected%20%22%2Be)%3Blet%20r%3D12%2B4*s%3Bconst%20n%3Di.getUint32(r%2C!1)%3Br%2B%3D4%3Bconst%20a%3Dnew%20Float32Array(n*s)%3Bfor(let%20t%3D0%3Bt%3Cn*s%3Bt%2B%2B)a%5Bt%5D%3Di.getFloat32(r%2C!1)%2Cr%2B%3D4%3Breturn%20a%7Dstatic%20isCurv(t)%7Bconst%20e%3Dnew%20DataView(t)%2Ci%3De.getUint8(0)%2Cs%3De.getUint8(1)%2Cr%3De.getUint8(2)%3Breturn%20255%3D%3D%3Di%26%26255%3D%3D%3Ds%26%26255%3D%3D%3Dr%7C%7C(be.debug(%22Unable%20to%20recognize%20file%20type%3A%20does%20not%20appear%20to%20be%20FreeSurfer%20format.%22)%2C!1)%7Dstatic%20readCURV(t%2Ce)%7Bconst%20i%3Dnew%20DataView(t)%2Cs%3Di.getUint8(0)%2Cr%3Di.getUint8(1)%2Cn%3Di.getUint8(2)%2Ca%3Di.getUint32(3%2C!1)%2Co%3Di.getUint32(11%2C!1)%3Bif(255%3D%3D%3Ds%26%26255%3D%3D%3Dr%26%26255%3D%3D%3Dn%7C%7Cbe.debug(%22Unable%20to%20recognize%20file%20type%3A%20does%20not%20appear%20to%20be%20FreeSurfer%20format.%22)%2Ce!%3D%3Da)throw%20new%20Error(%22CURV%20file%20has%20different%20number%20of%20vertices%20(%20%22%2Ba%2B%22)than%20mesh%20(%22%2Be%2B%22)%22)%3Bif(t.byteLength%3C15%2B4*a*o)throw%20new%20Error(%22CURV%20file%20smaller%20than%20specified%22)%3Bconst%20l%3Dnew%20Float32Array(o*a)%3Blet%20h%3D15%3Bfor(let%20t%3D0%3Bt%3Co*a%3Bt%2B%2B)l%5Bt%5D%3Di.getFloat32(h%2C!1)%2Ch%2B%3D4%3Blet%20c%3Dl%5B0%5D%2Cd%3Dl%5B0%5D%3Bfor(let%20t%3D0%3Bt%3Cl.length%3Bt%2B%2B)c%3DMath.min(c%2Cl%5Bt%5D)%2Cd%3DMath.max(d%2Cl%5Bt%5D)%3Bconst%20m%3D1%2F(d-c)%3Bfor(let%20t%3D0%3Bt%3Cl.length%3Bt%2B%2B)l%5Bt%5D%3D1-(l%5Bt%5D-c)*m%3Breturn%20l%7Dstatic%20readANNOT(t%2Ce%2Ci%3D!1)%7Bconst%20s%3Dnew%20DataView(t)%2Cr%3Ds.getUint32(0%2C!1)%3Bif(e!%3D%3Dthis.decimateLayerVertices(r%2Ce))throw%20new%20Error(%22ANNOT%20file%20has%20different%20number%20of%20vertices%20than%20mesh%22)%3Bif(t.byteLength%3C4%2B8*r)throw%20new%20Error(%22ANNOT%20file%20smaller%20than%20specified%22)%3Blet%20n%3D0%3Bconst%20a%3Dnew%20Uint32Array(r)%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)%7Ba%5Bs.getUint32(n%2B%3D4%2C!1)%5D%3Ds.getUint32(n%2B%3D4%2C!1)%7Dif(!i)return%20a%3Blet%20o%3D0%3Btry%7Bo%3Ds.getInt32(n%2B%3D4%2C!1)%7Dcatch(t)%7Breturn%20a%7Dif(1!%3D%3Do)return%20a%3Bif(s.getInt32(n%2B%3D4%2C!1)%3E0)return%20a%3Bconst%20h%3Ds.getInt32(n%2B%3D4%2C!1)%2Cc%3Ds.getInt32(n%2B%3D4%2C!1)%3Bn%2B%3Dc%3Bconst%20d%3Ds.getInt32(n%2B%3D4%2C!1)%3Bif(d%3C1)return%20a%3Bconst%20m%3D%7BR%3AArray(h).fill(0)%2CG%3AArray(h).fill(0)%2CB%3AArray(h).fill(0)%2CA%3AArray(h).fill(0)%2CI%3AArray(h).fill(0)%2Clabels%3AArray(h).fill(%22%22)%7D%3Bfor(let%20t%3D0%3Bt%3Cd%3Bt%2B%2B)%7Bconst%20t%3Ds.getInt32(n%2B%3D4%2C!1)%2Ce%3Ds.getInt32(n%2B%3D4%2C!1)%3Bn%2B%3D4%3Blet%20i%3D%22%22%3Bfor(let%20t%3D0%3Bt%3Ce%3Bt%2B%2B)%7Bconst%20t%3Ds.getUint8(n%2B%2B)%3Bif(0%3D%3D%3Dt)break%3Bi%2B%3DString.fromCharCode(t)%7Dn-%3D4%3Bconst%20r%3Ds.getInt32(n%2B%3D4%2C!1)%2Ca%3Ds.getInt32(n%2B%3D4%2C!1)%2Co%3Ds.getInt32(n%2B%3D4%2C!1)%2Cc%3Ds.getInt32(n%2B%3D4%2C!1)%3Bt%3C0%7C%7Ct%3E%3Dh%3Fl.warn(%22annot%20entry%20out%20of%20range%22)%3A(m.R%5Bt%5D%3Dr%2Cm.G%5Bt%5D%3Da%2Cm.B%5Bt%5D%3Do%2Cm.A%5Bt%5D%3Dc%2Cm.I%5Bt%5D%3D(c%3C%3C24)%2B(o%3C%3C16)%2B(a%3C%3C8)%2Br%2Cm.labels%5Bt%5D%3Di)%7Dconst%20u%3Dnew%20Float32Array(r)%3Bu.fill(-1)%3Blet%20A%3D0%3Bfor(let%20t%3D0%3Bt%3Ce%3Bt%2B%2B)%7Bconst%20e%3Da%5Bt%5D%3Bfor(let%20i%3D0%3Bi%3Ch%3Bi%2B%2B)if(m.I%5Bi%5D%3D%3D%3De)%7Bu%5Bt%5D%3Di%3Bbreak%7Du%5Bt%5D%3C0%26%26(A%2B%2B%2Cu%5Bt%5D%3D0)%7DA%3E0%26%26l.error(%60annot%20vertex%20colors%20do%20not%20match%20%24%7BA%7D%20of%20%24%7Br%7D%20vertices.%60)%3Bfor(let%20t%3D0%3Bt%3Ch%3Bt%2B%2B)m.I%5Bt%5D%3Dt%3Breturn%7Bscalars%3Au%2CcolormapLabel%3Ase.makeLabelLut(m)%7D%7Dstatic%20readNV(t)%7Bconst%20e%3Dt.byteLength%2Ci%3Dnew%20Uint8Array(t)%3Blet%20s%3D0%3Bfunction%20r()%7Bfor(%3Bs%3Ce%26%2610%3D%3D%3Di%5Bs%5D%3B)s%2B%2B%3Bconst%20r%3Ds%3Bfor(%3Bs%3Ce%26%2610!%3D%3Di%5Bs%5D%3B)s%2B%2B%3Breturn%20s%2B%2B%2Cs-r%3C1%3F%22%22%3A(new%20TextDecoder).decode(t.slice(r%2Cs-1))%7Dlet%20n%2Ca%2Co%3D0%2Cl%3D0%2Ch%3D0%2Cc%3D0%3Bfor(%3Bs%3Ce%3B)%7Bconst%20t%3Dr()%3Bif(t.startsWith(%22%23%22))continue%3Bconst%20e%3Dt.trim().split(%2F%5Cs%2B%2F)%3Bif(o%3C1)o%3DparseInt(e%5B0%5D)%2Cn%3Dnew%20Float32Array(3*o)%3Belse%20if(h%3C3*o)n%5Bh%5D%3DparseFloat(e%5B0%5D)%2Cn%5Bh%2B1%5D%3DparseFloat(e%5B1%5D)%2Cn%5Bh%2B2%5D%3DparseFloat(e%5B2%5D)%2Ch%2B%3D3%3Belse%20if(l%3C1)l%3DparseInt(e%5B0%5D)%2Ca%3Dnew%20Uint32Array(3*l)%3Belse%7Bif(c%3E%3D3*l)break%3Ba%5Bc%2B2%5D%3DparseInt(e%5B0%5D)-1%2Ca%5Bc%2B1%5D%3DparseInt(e%5B1%5D)-1%2Ca%5Bc%2B0%5D%3DparseInt(e%5B2%5D)-1%2Cc%2B%3D3%7D%7Dreturn%7Bpositions%3An%2Cindices%3Aa%7D%7Dstatic%20readASC(t)%7Bconst%20e%3Dt.byteLength%2Ci%3Dnew%20Uint8Array(t)%3Blet%20s%3D0%3Bfunction%20r()%7Bfor(%3Bs%3Ce%26%2610%3D%3D%3Di%5Bs%5D%3B)s%2B%2B%3Bconst%20r%3Ds%3Bfor(%3Bs%3Ce%26%2610!%3D%3Di%5Bs%5D%3B)s%2B%2B%3Breturn%20s%2B%2B%2Cs-r%3C1%3F%22%22%3A(new%20TextDecoder).decode(t.slice(r%2Cs-1))%7Dlet%20n%3Dr()%3Bn.startsWith(%22%23!ascii%22)%7C%7Cl.warn(%22Invalid%20ASC%20mesh%22)%2Cn%3Dr()%3Blet%20a%3Dn.trim().split(%2F%5Cs%2B%2F)%3Bconst%20o%3DparseInt(a%5B0%5D)%2Ch%3DparseInt(a%5B1%5D)%2Cc%3Dnew%20Float32Array(3*o)%3Blet%20d%3D0%3Bfor(let%20t%3D0%3Bt%3Co%3Bt%2B%2B)n%3Dr()%2Ca%3Dn.trim().split(%2F%5Cs%2B%2F)%2Cc%5Bd%5D%3DparseFloat(a%5B0%5D)%2Cc%5Bd%2B1%5D%3DparseFloat(a%5B1%5D)%2Cc%5Bd%2B2%5D%3DparseFloat(a%5B2%5D)%2Cd%2B%3D3%3Bconst%20m%3Dnew%20Uint32Array(3*h)%3Bd%3D0%3Bfor(let%20t%3D0%3Bt%3Ch%3Bt%2B%2B)n%3Dr()%2Ca%3Dn.trim().split(%2F%5Cs%2B%2F)%2Cm%5Bd%5D%3DparseInt(a%5B0%5D)%2Cm%5Bd%2B1%5D%3DparseInt(a%5B1%5D)%2Cm%5Bd%2B2%5D%3DparseInt(a%5B2%5D)%2Cd%2B%3D3%3Breturn%7Bpositions%3Ac%2Cindices%3Am%7D%7Dstatic%20readVTK(e)%7Bconst%20i%3De.byteLength%3Bif(i%3C20)throw%20new%20Error(%22File%20too%20small%20to%20be%20VTK%3A%20bytes%20%3D%20%22%2Be.byteLength)%3Bconst%20s%3Dnew%20Uint8Array(e)%3Blet%20r%3D0%3Bfunction%20n(t%3D!0)%7Bif(t)for(%3Br%3Ci%26%2610%3D%3D%3Ds%5Br%5D%3B)r%2B%2B%3Bconst%20n%3Dr%3Bfor(%3Br%3Ci%26%2610!%3D%3Ds%5Br%5D%3B)r%2B%2B%3Breturn%20r%2B%2B%2Cr-n%3C1%3F%22%22%3A(new%20TextDecoder).decode(e.slice(n%2Cr-1))%7Dlet%20a%3Dn()%3Bif(!a.startsWith(%22%23%20vtk%20DataFile%22))throw%20new%20Error(%22Invalid%20VTK%20mesh%22)%3Bif(a%3Dn(!1)%2Ca%3Dn()%2Ca.startsWith(%22ASCII%22))return%20t.readTxtVTK(e)%3Bif(!a.startsWith(%22BINARY%22))throw%20new%20Error(%22Invalid%20VTK%20image%2C%20expected%20ASCII%20or%20BINARY%20%22%2Ba)%3Bif(a%3Dn()%2C!a.includes(%22POLYDATA%22))throw%20new%20Error(%22Only%20able%20to%20read%20VTK%20POLYDATA%20%22%2Ba)%3Ba%3Dn()%2Ca.includes(%22POINTS%22)%26%26(a.includes(%22double%22)%7C%7Ca.includes(%22float%22))%7C%7Cl.warn(%22Only%20able%20to%20read%20VTK%20float%20or%20double%20POINTS%22%2Ba)%3Bconst%20o%3Da.includes(%22double%22)%3Blet%20h%3Da.trim().split(%2F%5Cs%2B%2F)%3Bconst%20c%3D3*parseInt(h%5B1%5D)%2Cd%3Dnew%20Float32Array(c)%2Cm%3Dnew%20DataView(e)%3Bif(o)for(let%20t%3D0%3Bt%3Cc%3Bt%2B%2B)d%5Bt%5D%3Dm.getFloat64(r%2C!1)%2Cr%2B%3D8%3Belse%20for(let%20t%3D0%3Bt%3Cc%3Bt%2B%2B)d%5Bt%5D%3Dm.getFloat32(r%2C!1)%2Cr%2B%3D4%3Ba%3Dn()%2Ch%3Da.trim().split(%2F%5Cs%2B%2F)%3Bconst%20u%3D%5B%5D%3Bif(h%5B0%5D.includes(%22LINES%22))%7Bconst%20t%3DparseInt(h%5B1%5D)%2Ce%3Dr%3Bif(a%3Dn()%2Ca.startsWith(%22OFFSETS%22))%7Blet%20e%3D!1%3Ba.includes(%22int64%22)%26%26(e%3D!0)%3Bconst%20i%3Dnew%20Uint32Array(t)%3Bif(e)%7Blet%20e%3D!1%3Bfor(let%20s%3D0%3Bs%3Ct%3Bs%2B%2B)%7Blet%20t%3Dm.getInt32(r%2C!1)%3B0!%3D%3Dt%26%26(e%3D!0)%2Cr%2B%3D4%2Ct%3Dm.getInt32(r%2C!1)%2Cr%2B%3D4%2Ci%5Bs%5D%3Dt%7De%26%26l.warn(%22int32%20overflow%3A%20JavaScript%20does%20not%20support%20int64%22)%7Delse%20for(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bconst%20t%3Dm.getInt32(r%2C!1)%3Br%2B%3D4%2Ci%5Be%5D%3Dt%7Dreturn%7Bpts%3Ad%2CoffsetPt0%3Ai%7D%7Dr%3De%3Blet%20i%3D0%3Bconst%20s%3D%5B%5D%2Co%3D%5B%5D%3Bs.push(i)%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bconst%20t%3Dm.getInt32(r%2C!1)%3Br%2B%3D4%2Ci%2B%3Dt%2Cs.push(i)%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bconst%20t%3D3*m.getInt32(r%2C!1)%3Br%2B%3D4%2Co.push(d%5Bt%2B0%5D)%2Co.push(d%5Bt%2B1%5D)%2Co.push(d%5Bt%2B2%5D)%7D%7Dreturn%7Bpts%3AFloat32Array.from(o)%2CoffsetPt0%3AUint32Array.from(s)%7D%7Dif(h%5B0%5D.includes(%22TRIANGLE_STRIPS%22))%7Bconst%20t%3DparseInt(h%5B1%5D)%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bconst%20t%3Dm.getInt32(r%2C!1)-2%3Br%2B%3D4%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)e%252%3F(u.push(m.getInt32(r%2B8%2C!1))%2Cu.push(m.getInt32(r%2B4%2C!1))%2Cu.push(m.getInt32(r%2C!1)))%3A(u.push(m.getInt32(r%2C!1))%2Cu.push(m.getInt32(r%2B4%2C!1))%2Cu.push(m.getInt32(r%2B8%2C!1)))%2Cr%2B%3D4%3Br%2B%3D8%7D%7Delse%7Bif(!h%5B0%5D.includes(%22POLYGONS%22))throw%20new%20Error(%22Unsupported%20binary%20VTK%20datatype%20%22%2Bh%5B0%5D)%3B%7Bconst%20t%3DparseInt(h%5B1%5D)%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bconst%20t%3Dm.getInt32(r%2C!1)-2%3Bif(0%3D%3D%3De%26%26t%3E65535)throw%20new%20Error(%22Invalid%20VTK%20binary%20polygons%20using%20little-endian%20data%20(MRtrix)%22)%3Br%2B%3D4%3Bconst%20i%3Dm.getInt32(r%2C!1)%3Br%2B%3D4%3Blet%20s%3Dm.getInt32(r%2C!1)%3Br%2B%3D4%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bconst%20t%3Dm.getInt32(r%2C!1)%3Br%2B%3D4%2Cu.push(i)%2Cu.push(s)%2Cu.push(t)%2Cs%3Dt%7D%7D%7D%7Dreturn%7Bpositions%3Ad%2Cindices%3Anew%20Uint32Array(u)%7D%7Dstatic%20readDFS(t)%7Bconst%20e%3Dnew%20DataView(t)%2Ci%3De.getUint32(0%2C!0)%2Cs%3De.getUint16(4%2C!0)%3B1599292996%3D%3D%3Di%26%2617740%3D%3D%3Ds%7C%7Cl.warn(%22Not%20a%20little-endian%20brainsuite%20DFS%20mesh%22)%3Bconst%20r%3De.getUint32(12%2C!0)%2Cn%3De.getUint32(24%2C!0)%2Ca%3De.getUint32(28%2C!0)%2Co%3De.getUint32(48%2C!0)%3Blet%20h%3Dr%3Bconst%20c%3Dnew%20Uint32Array(t%2Ch%2C3*n)%3Bh%2B%3D3*n*4%3Bconst%20d%3Dnew%20Float32Array(t%2Ch%2C3*a)%3Bfor(let%20t%3D0%3Bt%3C3*a%3Bt%2B%3D3)%7Bconst%20e%3Dd%5Bt%5D%3Bd%5Bt%5D%3Dd%5Bt%2B1%5D%2Cd%5Bt%2B1%5D%3De%7Dlet%20m%3Breturn%20o%3E%3D0%26%26(m%3Dnew%20Float32Array(t%2Co%2C3*a))%2C%7Bpositions%3Ad%2Cindices%3Ac%2Ccolors%3Am%7D%7Dstatic%20readMZ3(t%2Ce%3D0)%7Bif(t.byteLength%3C20)throw%20new%20Error(%22File%20too%20small%20to%20be%20mz3%3A%20bytes%20%3D%20%22%2Bt.byteLength)%3Blet%20i%3Dnew%20DataView(t)%2Cs%3Di.getUint16(0%2C!0)%2Cr%3Dt%3Bif(35615%3D%3D%3Ds%7C%7C8075%3D%3D%3Ds)%7Bconst%20e%3Dce(new%20Uint8Array(t))%3Bi%3Dnew%20DataView(e.buffer)%2Cs%3Di.getUint16(0%2C!0)%2Cr%3De.buffer%7Dconst%20n%3Di.getUint16(2%2C!0)%2Ca%3Di.getUint32(4%2C!0)%3Blet%20o%3Di.getUint32(8%2C!0)%3Bconst%20h%3Di.getUint32(12%2C!0)%3Bif(be.debug(%22MZ3%20magic%20%25d%20attr%20%25d%20face%20%25d%20vert%20%25d%20skip%20%25d%22%2Cs%2Cn%2Ca%2Co%2Ch)%2C23117!%3D%3Ds)throw%20new%20Error(%22Invalid%20MZ3%20file%22)%3Bconst%20c%3D!!(1%26n)%2Cd%3D!!(2%26n)%2Cm%3D!!(4%26n)%3Blet%20u%3D!!(8%26n)%3Bconst%20A%3D!!(16%26n)%3Bif(n%3E63)throw%20new%20Error(%22Unsupported%20future%20version%20of%20MZ3%20file%22)%3Blet%20f%3D4%3BA%26%26(f%3D8)%3Blet%20g%3D0%3Bif(e%3E0%26%26!c%26%26a%3C1%26%26!m%26%26(u%3D!0)%2Cu)%7Blet%20t%3De%3B0%3D%3D%3De%26%26(t%3Do)%3Bconst%20i%3D16%2Bh%2B(c%3F1%3A0)*a*12%2B(d%3F1%3A0)*t*12%2B(m%3F1%3A0)*t*4%2Cs%3DMath.floor((r.byteLength-i)%2Ff)%3Bo!%3D%3De%26%26s%25e%3D%3D0%26%26(l.warn(%22Issue%20729%3A%20mz3%20mismatch%20scalar%20NVERT%20does%20not%20match%20mesh%20NVERT%22)%2Co%3De)%2Cg%3DMath.floor(s%2Fo)%2Cg%3C1%26%26(l.warn(%22Corrupt%20MZ3%3A%20file%20reports%20NSCALAR%20but%20not%20enough%20bytes%22)%2Cu%3D!1)%7Dif(o%3C3%26%26e%3C3)throw%20new%20Error(%22Not%20a%20mesh%20MZ3%20file%20(maybe%20scalar)%22)%3Be%3E0%26%26e!%3D%3Do%26%26l.warn(%22Layer%20has%20%22%2Bo%2B%22vertices%2C%20but%20background%20mesh%20has%20%22%2Be)%3Blet%20p%3D16%2Bh%2Cv%3Dnull%3Bc%26%26(v%3Dnew%20Uint32Array(r%2Cp%2C3*a)%2Cp%2B%3D3*a*4)%3Blet%20x%3Dnull%3Bd%26%26(x%3Dnew%20Float32Array(r%2Cp%2C3*o)%2Cp%2B%3D3*o*4)%3Blet%20w%3Dnull%3Bif(m)%7Bw%3Dnew%20Float32Array(3*o)%3Bconst%20t%3Dnew%20Uint8Array(r%2Cp%2C4*o)%3Bp%2B%3D4*o%3Blet%20e%3D0%2Ci%3D0%3Bfor(let%20s%3D0%3Bs%3Co%3Bs%2B%2B)%7Bfor(let%20s%3D0%3Bs%3C3%3Bs%2B%2B)w%5Be%5D%3Dt%5Bi%5D%2F255%2Ce%2B%2B%2Ci%2B%2B%3Bi%2B%2B%7D%7Dlet%20C%3Dnew%20Float32Array%3Bif(!m%26%26u%26%26g%3E0)%7Bif(A)%7Bconst%20t%3Dnew%20Float64Array(r%2Cp%2Cg*o)%3BC%3DFloat32Array.from(t)%7Delse%20C%3Dnew%20Float32Array(r%2Cp%2Cg*o)%3Bp%2B%3Df*g*o%7Dreturn%20e%3E0%3FC%3A%7Bpositions%3Ax%2Cindices%3Av%2Cscalars%3AC%2Ccolors%3Aw%7D%7Dstatic%20readPLY(t)%7Bconst%20e%3Dt.byteLength%2Ci%3Dnew%20Uint8Array(t)%3Blet%20s%3D0%3Bfunction%20r()%7Bfor(%3Bs%3Ce%26%2610%3D%3D%3Di%5Bs%5D%3B)s%2B%2B%3Bconst%20r%3Ds%3Bfor(%3Bs%3Ce%26%2610!%3D%3Di%5Bs%5D%3B)s%2B%2B%3Breturn%20s%2B%2B%2Cs-r%3C1%3F%22%22%3A(new%20TextDecoder).decode(t.slice(r%2Cs-1))%7Dlet%20n%3Dr()%3Bif(!n.startsWith(%22ply%22))throw%20new%20Error(%22Not%20a%20valid%20PLY%20file%22)%3Bn%3Dr()%3Bconst%20a%3Dn.includes(%22ascii%22)%3Bfunction%20o(t)%7Bif(%22char%22%3D%3D%3Dt%7C%7C%22uchar%22%3D%3D%3Dt%7C%7C%22int8%22%3D%3D%3Dt%7C%7C%22uint8%22%3D%3D%3Dt)return%201%3Bif(%22short%22%3D%3D%3Dt%7C%7C%22ushort%22%3D%3D%3Dt%7C%7C%22int16%22%3D%3D%3Dt%7C%7C%22uint16%22%3D%3D%3Dt)return%202%3Bif(%22int%22%3D%3D%3Dt%7C%7C%22uint%22%3D%3D%3Dt%7C%7C%22int32%22%3D%3D%3Dt%7C%7C%22uint32%22%3D%3D%3Dt%7C%7C%22float%22%3D%3D%3Dt%7C%7C%22float32%22%3D%3D%3Dt)return%204%3Bif(%22double%22%3D%3D%3Dt)return%208%3Bthrow%20new%20Error(%22Unknown%20data%20type%3A%20%22%2Bt)%7Dconst%20h%3Dn.includes(%22binary_little_endian%22)%3Blet%20c%3D0%2Cd%3D!1%2Cm%3D0%2Cu%3D0%2CA%3D0%2Cf%3D0%2Cg%3D0%2Cp%3D0%2Cv%3D0%3Bfor(%3Bs%3Ce%26%26!n.startsWith(%22end_header%22)%3B)%7Bif(n%3Dr()%2Cn.startsWith(%22comment%22))continue%3Blet%20t%3Dn.split(%2F%5Cs%2F)%3Bif(n.startsWith(%22element%20vertex%22))for(c%3DparseInt(t%5Bt.length-1%5D)%2Cn%3Dr()%2Ct%3Dn.split(%2F%5Cs%2F)%3Bn.startsWith(%22property%22)%3B)%7Bconst%20e%3Dt%5B1%5D%3B%22x%22%3D%3D%3Dt%5B2%5D%26%26e.startsWith(%22double%22)%3Fd%3D!0%3A%22x%22!%3D%3Dt%5B2%5D%7C%7Ce.startsWith(%22float%22)%7C%7Cl.error(%22Error%3A%20expect%20ply%20xyz%20to%20be%20float%20or%20double%3A%20%22%2Bn)%2Cm%2B%3Do(e)%2Cn%3Dr()%2Ct%3Dn.split(%2F%5Cs%2F)%7Dif(n.startsWith(%22element%20face%22))for(v%3DparseInt(t%5Bt.length-1%5D)%2Cn%3Dr()%2Ct%3Dn.split(%2F%5Cs%2F)%3Bn.startsWith(%22property%22)%3B)%7Bif(%22list%22%3D%3D%3Dt%5B1%5D)A%3Do(t%5B2%5D)%2Cf%3Do(t%5B3%5D)%2Cu%2B%3DA%2B3*f%3Belse%7Bconst%20e%3Do(t%5B1%5D)%3Bu%2B%3De%2C0%3D%3D%3Df%26%26(g%2B%3De%2Cp%2B%2B)%7Dn%3Dr()%2Ct%3Dn.split(%2F%5Cs%2F)%7D%7Dif(a)%7Bv%3C1%26%26l.error(%60Malformed%20ply%20format%3A%20faces%20%24%7Bv%7D%20%60)%3Bconst%20t%3Dnew%20Float32Array(3*c)%3Blet%20e%3D0%3Bfor(let%20i%3D0%3Bi%3Cc%3Bi%2B%2B)%7Bn%3Dr()%3Bconst%20i%3Dn.split(%2F%5Cs%2F)%3Bt%5Be%5D%3DparseFloat(i%5B0%5D)%2Ct%5Be%2B1%5D%3DparseFloat(i%5B1%5D)%2Ct%5Be%2B2%5D%3DparseFloat(i%5B2%5D)%2Ce%2B%3D3%7Dlet%20i%3Dnew%20Uint32Array(3*v)%2Cs%3D0%3Bfor(let%20t%3D0%3Bt%3Cv%3Bt%2B%2B)%7Bn%3Dr()%3Bconst%20t%3Dn.split(%2F%5Cs%2F)%2Ce%3DparseInt(t%5Bp%5D)-2%3Bif(e%3C1)break%3Bif(s%2B3*e%3Ei.length)%7Bconst%20t%3Dnew%20Uint32Array(i.length%2Bi.length)%3Bt.set(i)%2Ci%3Dt.slice()%7Dconst%20a%3DparseInt(t%5Bp%2B1%5D)%3Blet%20o%3DparseInt(t%5Bp%2B2%5D)%3Bfor(let%20r%3D0%3Br%3Ce%3Br%2B%2B)%7Bconst%20e%3DparseInt(t%5Bp%2B3%2Br%5D)%3Bi%5Bs%2B0%5D%3Da%2Ci%5Bs%2B1%5D%3Do%2Ci%5Bs%2B2%5D%3De%2Co%3De%2Cs%2B%3D3%7D%7Dreturn%20i.length!%3D%3Ds%26%26(i%3Di.slice(0%2Cs))%2C%7Bpositions%3At%2Cindices%3Ai%7D%7D(m%3C12%7C%7CA%3C1%7C%7Cf%3C1%7C%7Cv%3C1)%26%26l.warn(%60Malformed%20ply%20format%3A%20stride%20%24%7Bm%7D%20count%20%24%7BA%7D%20iBytes%20%24%7Bf%7D%20iStrideBytes%20%24%7Bu%7D%20iPadBytes%20%24%7Bg%7D%20faces%20%24%7Bv%7D%60)%3Bconst%20x%3Dnew%20DataView(t)%3Blet%20w%3Bif(s%254%3D%3D0%26%2612%3D%3D%3Dm%26%26h)w%3Dnew%20Float32Array(t%2Cs%2C3*c)%2Cs%2B%3Dc*m%3Belse%7Bw%3Dnew%20Float32Array(3*c)%3Blet%20t%3D0%3Bfor(let%20e%3D0%3Be%3Cc%3Be%2B%2B)d%3F(w%5Bt%5D%3Dx.getFloat64(s%2Ch)%2Cw%5Bt%2B1%5D%3Dx.getFloat64(s%2B8%2Ch)%2Cw%5Bt%2B2%5D%3Dx.getFloat64(s%2B16%2Ch))%3A(w%5Bt%5D%3Dx.getFloat32(s%2Ch)%2Cw%5Bt%2B1%5D%3Dx.getFloat32(s%2B4%2Ch)%2Cw%5Bt%2B2%5D%3Dx.getFloat32(s%2B8%2Ch))%2Ct%2B%3D3%2Cs%2B%3Dm%7Dconst%20C%3Dnew%20Uint32Array(3*v)%3Blet%20b%3D!0%2Cy%3D0%3Bif(1%3D%3D%3DA%26%264%3D%3D%3Df%26%2613%3D%3D%3Du)for(let%20t%3D0%3Bt%3Cv%3Bt%2B%2B)%7Bconst%20t%3Dx.getUint8(s)%3Bs%2B%3DA%2C3!%3D%3Dt%26%26(b%3D!1)%2CC%5By%5D%3Dx.getUint32(s%2Ch)%2Cs%2B%3D4%2CC%5By%2B1%5D%3Dx.getUint32(s%2Ch)%2Cs%2B%3D4%2CC%5By%2B2%5D%3Dx.getUint32(s%2Ch)%2Cs%2B%3D4%2Cy%2B%3D3%7Delse%7Blet%20t%3Ds%3Bfor(let%20e%3D0%3Be%3Cv%3Be%2B%2B)%7Bs%3Dt%2Bg%3Blet%20e%3D0%3B1%3D%3D%3DA%3Fe%3Dx.getUint8(s)%3A2%3D%3D%3DA%3Fe%3Dx.getUint16(s%2Ch)%3A4%3D%3D%3DA%26%26(e%3Dx.getUint32(s%2Ch))%2Cs%2B%3DA%2C3!%3D%3De%26%26(b%3D!1)%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)1%3D%3D%3Df%3FC%5By%5D%3Dx.getUint8(s)%3A2%3D%3D%3Df%3FC%5By%5D%3Dx.getUint16(s%2Ch)%3A4%3D%3D%3Df%26%26(C%5By%5D%3Dx.getUint32(s%2Ch))%2Cy%2B%2B%2Cs%2B%3Df%3Bt%2B%3Du%7D%7Dreturn%20b%7C%7Cl.warn(%22Only%20able%20to%20read%20PLY%20meshes%20limited%20to%20triangles.%22)%2C%7Bpositions%3Aw%2Cindices%3AC%7D%7Dstatic%20readICO(t)%7Bconst%20e%3Dnew%20TextDecoder(%22utf-8%22).decode(t).split(%22%5Cn%22)%3Blet%20i%3De%5B0%5D.trim().split(%2F%5Cs%2B%2F)%3Bi.length%3E1%26%26l.warn(%22This%20is%20not%20a%20valid%20FreeSurfer%20ICO%2FTRI%20mesh.%22)%3Bconst%20s%3DparseInt(i%5B0%5D)%2Cr%3Dnew%20Float32Array(3*s)%3Blet%20n%3D1%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)%7Bconst%20t%3De%5Bn%5D.trim().split(%2F%5Cs%2B%2F)%3Bn%2B%2B%3Blet%20i%3DparseInt(t%5B0%5D)-1%3Bconst%20a%3DparseFloat(t%5B1%5D)%2Co%3DparseFloat(t%5B2%5D)%2Ch%3DparseFloat(t%5B3%5D)%3Bif(i%3C0%7C%7Ci%3E%3Ds)%7Bl.error(%22ICO%20vertices%20corrupted%22)%3Bbreak%7Di*%3D3%2Cr%5Bi%5D%3Da%2Cr%5Bi%2B1%5D%3Do%2Cr%5Bi%2B2%5D%3Dh%7Di%3De%5Bn%5D.trim().split(%2F%5Cs%2B%2F)%2Cn%2B%2B%3Bconst%20a%3DparseInt(i%5B0%5D)%2Co%3Dnew%20Uint32Array(3*a)%3Bfor(let%20t%3D0%3Bt%3Ca%3Bt%2B%2B)%7Bconst%20t%3De%5Bn%5D.trim().split(%2F%5Cs%2B%2F)%3Bn%2B%2B%3Blet%20i%3DparseInt(t%5B0%5D)-1%3Bconst%20s%3DparseInt(t%5B1%5D)-1%2Cr%3DparseInt(t%5B2%5D)-1%2Ch%3DparseInt(t%5B3%5D)-1%3Bif(i%3C0%7C%7Ci%3E%3Da)%7Bl.error(%22ICO%20indices%20corrupted%22)%3Bbreak%7Di*%3D3%2Co%5Bi%5D%3Ds%2Co%5Bi%2B1%5D%3Dr%2Co%5Bi%2B2%5D%3Dh%7Dfor(let%20t%3D0%3Bt%3Co.length%3Bt%2B%3D3)%7Bconst%20e%3Do%5Bt%5D%3Bo%5Bt%5D%3Do%5Bt%2B1%5D%2Co%5Bt%2B1%5D%3De%7Dreturn%7Bpositions%3Ar%2Cindices%3Ao%7D%7Dstatic%20readGEO(t%2Ce%3D!1)%7Bconst%20i%3Dnew%20TextDecoder(%22utf-8%22).decode(t).split(%22%5Cn%22)%2Cs%3Di%5B0%5D.trim().split(%2F%5Cs%2B%2F)%2Cr%3DparseInt(s%5B0%5D)%3Blet%20n%3DparseInt(s%5B1%5D)%2Ca%3DparseInt(s%5B2%5D)%3Bconst%20o%3DparseInt(s%5B3%5D)%3B(r%3E1%7C%7Co!%3D%3D3*a)%26%26l.warn(%22Multi-part%20BYU%2FGEO%20header%20or%20not%20a%20triangular%20mesh.%22)%3Bconst%20h%3D%5B%5D%3Bn*%3D3%3Blet%20c%3D0%2Cd%3D2%3Bfor(%3Bc%3Cn%3B)%7Bconst%20t%3Di%5Bd%5D.trim().split(%2F%5Cs%2B%2F)%3Bd%2B%2B%3Bfor(let%20e%3D0%3Be%3Ct.length%26%26(h.push(parseFloat(t%5Be%5D))%2Cc%2B%2B%2C!(c%3E%3Dn))%3Be%2B%2B)%3B%7Dconst%20m%3D%5B%5D%3Ba*%3D3%3Blet%20u%3D0%3Bfor(%3Bu%3Ca%3B)%7Bconst%20t%3Di%5Bd%5D.trim().split(%2F%5Cs%2B%2F)%3Bd%2B%2B%3Bfor(let%20e%3D0%3Be%3Ct.length%26%26(m.push(Math.abs(parseInt(t%5Be%5D))-1)%2Cu%2B%2B%2C!(u%3E%3Da))%3Be%2B%2B)%3B%7Dif(e)for(let%20t%3D0%3Bt%3Cm.length%3Bt%2B%3D3)%7Bconst%20e%3Dm%5Bt%5D%3Bm%5Bt%5D%3Dm%5Bt%2B1%5D%2Cm%5Bt%2B1%5D%3De%7Dreturn%7Bpositions%3Anew%20Float32Array(h)%2Cindices%3Anew%20Uint32Array(m)%7D%7Dstatic%20readOFF(t)%7Bconst%20e%3Dnew%20TextDecoder(%22utf-8%22).decode(t).split(%22%5Cn%22)%2Ci%3D%5B%5D%2Cs%3D%5B%5D%3Blet%20r%3D0%3Be%5Br%5D.includes(%22OFF%22)%3Fr%2B%2B%3Al.warn(%22File%20does%20not%20start%20with%20OFF%22)%3Blet%20n%3De%5Br%5D.trim().split(%2F%5Cs%2B%2F)%3Bconst%20a%3DparseInt(n%5B0%5D)%2Co%3DparseInt(n%5B1%5D)%3Br%2B%2B%3Bfor(let%20t%3D0%3Bt%3Ca%3Bt%2B%2B)%7Bn%3De%5Br%5D.trim().split(%2F%5Cs%2B%2F)%2Ci.push(parseFloat(n%5B0%5D))%2Ci.push(parseFloat(n%5B1%5D))%2Ci.push(parseFloat(n%5B2%5D))%2Cr%2B%2B%7Dfor(let%20t%3D0%3Bt%3Co%3Bt%2B%2B)%7Bn%3De%5Br%5D.trim().split(%2F%5Cs%2B%2F)%3B3!%3D%3DparseInt(n%5B0%5D)%26%26l.warn(%22Only%20able%20to%20read%20OFF%20files%20with%20triangular%20meshes%22)%2Cs.push(parseInt(n%5B1%5D))%2Cs.push(parseInt(n%5B2%5D))%2Cs.push(parseInt(n%5B3%5D))%2Cr%2B%2B%7Dreturn%7Bpositions%3Anew%20Float32Array(i)%2Cindices%3Anew%20Uint32Array(s)%7D%7Dstatic%20readOBJMNI(t)%7Bconst%20e%3Dnew%20TextDecoder(%22utf-8%22).decode(t).trim().split(%2F%5Cs*%2C%5Cs*%7C%5Cs%2B%2F)%3B(e.length%3C1%7C%7C%22P%22!%3D%3De%5B0%5D)%26%26l.warn(%22This%20is%20not%20a%20valid%20MNI%20OBJ%20mesh.%22)%3Blet%20i%3D6%3Bconst%20s%3DparseInt(e%5Bi%2B%2B%5D)%2Cr%3D3*s%2Cn%3Dnew%20Float32Array(r)%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)n%5Bt%5D%3DparseFloat(e%5Bi%2B%2B%5D)%3Bi%2B%3Dr%3Bconst%20a%3DparseInt(e%5Bi%2B%2B%5D)%2Co%3DparseInt(e%5Bi%2B%2B%5D)%3B(a%3C1%7C%7Co%3C0%7C%7Co%3E2)%26%26l.warn(%22This%20is%20not%20a%20valid%20MNI%20OBJ%20mesh.%22)%3Blet%20h%3D1%3B1%3D%3D%3Do%3Fh%3Da%3A1%3D%3D%3Do%26%26(h%3Ds)%2Ci%2B%3D4*h%2Ci%2B%3Da%3Bconst%20c%3D3*a%2Cd%3Dnew%20Uint32Array(c)%3Bfor(let%20t%3D0%3Bt%3Cc%3Bt%2B%2B)d%5Bt%5D%3DparseInt(e%5Bi%2B%2B%5D)%3Breturn%7Bpositions%3An%2Cindices%3Ad%7D%7Dstatic%20readOBJ(t)%7Bconst%20e%3Dnew%20TextDecoder(%22utf-8%22).decode(t)%3Bif(%22P%22%3D%3D%3De%5B0%5D)return%20this.readOBJMNI(t)%3Bconst%20i%3De.split(%22%5Cn%22)%2Cs%3Di.length%2Cr%3D%5B%5D%2Cn%3D%5B%5D%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)%7Bconst%20e%3Di%5Bt%5D%3Bif(%22v%22%3D%3D%3De%5B0%5D%26%26%22%20%22%3D%3D%3De%5B1%5D)%7Bconst%20t%3De.trim().split(%2F%5Cs%2B%2F)%3Br.push(parseFloat(t%5B1%5D))%2Cr.push(parseFloat(t%5B2%5D))%2Cr.push(parseFloat(t%5B3%5D))%7Dif(%22f%22%3D%3D%3De%5B0%5D)%7Bconst%20t%3De.trim().split(%2F%5Cs%2B%2F)%2Ci%3Dt.length-3%3Bif(i%3C1)break%3Blet%20s%3Dt%5B1%5D.split(%22%2F%22)%3Bconst%20r%3DparseInt(s%5B0%5D)-1%3Bs%3Dt%5B2%5D.split(%22%2F%22)%3Blet%20a%3DparseInt(s%5B0%5D)-1%3Bfor(let%20e%3D0%3Be%3Ci%3Be%2B%2B)%7Bs%3Dt%5B3%2Be%5D.split(%22%2F%22)%3Bconst%20i%3DparseInt(s%5B0%5D)-1%3Bn.push(r)%2Cn.push(a)%2Cn.push(i)%2Ca%3Di%7D%7D%7Dreturn%7Bpositions%3Anew%20Float32Array(r)%2Cindices%3Anew%20Uint32Array(n)%7D%7Dstatic%20readFreeSurfer(e)%7Bconst%20i%3Dnew%20Uint8Array(e)%3Bif(35%3D%3D%3Di%5B0%5D%26%2633%3D%3D%3Di%5B1%5D%26%2697%3D%3D%3Di%5B2%5D)return%20t.readASC(e)%3Bconst%20s%3Dnew%20DataView(e)%2Cr%3Ds.getUint32(0%2C!1)%2Cn%3Ds.getUint32(4%2C!1)%3B4294966883%3D%3D%3Dr%26%261919246708%3D%3D%3Dn%7C%7Cbe.debug(%22Unable%20to%20recognize%20file%20type%3A%20does%20not%20appear%20to%20be%20FreeSurfer%20format.%22)%3Blet%20a%3D0%3Bfor(%3B10!%3D%3Ds.getUint8(a)%3B)a%2B%2B%3Ba%2B%3D2%3Blet%20o%3Ds.getUint32(a%2C!1)%3Ba%2B%3D4%3Blet%20h%3Ds.getUint32(a%2C!1)%3Ba%2B%3D4%2Co*%3D3%3Bconst%20c%3Dnew%20Float32Array(o)%3Bfor(let%20t%3D0%3Bt%3Co%3Bt%2B%2B)c%5Bt%5D%3Ds.getFloat32(a%2C!1)%2Ca%2B%3D4%3Bh*%3D3%3Bconst%20d%3Dnew%20Uint32Array(h)%3Bfor(let%20t%3D0%3Bt%3Ch%3Bt%2B%2B)d%5Bt%5D%3Ds.getUint32(a%2C!1)%2Ca%2B%3D4%3Bconst%20m%3Ds.getUint32(a%2C!1)%3Ba%2B%3D4%3Blet%20u%3D20%3D%3D%3Dm%3Bif(!u)%7Bconst%20t%3Ds.getUint32(a%2C!1)%3Ba%2B%3D4%3Bconst%20e%3Ds.getUint32(a%2C!1)%3Ba%2B%3D4%2Cu%3D2%3D%3D%3Dm%26%260%3D%3D%3Dt%26%2620%3D%3D%3De%7Dif(u)%7Bconst%20t%3D(new%20TextDecoder).decode(e.slice(a)).trim().split(%22%5Cn%22)%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)%7Bif(!t%5Be%5D.startsWith(%22cras%22))continue%3Bconst%20i%3Dt%5Be%5D.split(%22%3D%22)%5B1%5D.trim().split(%22%20%22).map(Number)%2Cs%3DMath.floor(c.length%2F3)%3Blet%20r%3D0%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)c%5Br%5D%2B%3Di%5B0%5D%2Cr%2B%2B%2Cc%5Br%5D%2B%3Di%5B1%5D%2Cr%2B%2B%2Cc%5Br%5D%2B%3Di%5B2%5D%2Cr%2B%2B%7D%7Delse%20l.warn(%22Unknown%20FreeSurfer%20Mesh%20extension%20code.%22)%3Breturn%7Bpositions%3Ac%2Cindices%3Ad%7D%7Dstatic%20readSRF(e)%7Bconst%20i%3Dnew%20Uint8Array(e)%3Bif(35%3D%3D%3Di%5B0%5D%26%2633%3D%3D%3Di%5B1%5D%26%2697%3D%3D%3Di%5B2%5D)return%20t.readASC(e)%3Bif(31%3D%3D%3Di%5B0%5D%26%26139%3D%3D%3Di%5B1%5D)%7Be%3Dce(new%20Uint8Array(e)).buffer%7Dconst%20s%3Dnew%20DataView(e)%2Cr%3Ds.getFloat32(0%2C!0)%2Cn%3Ds.getUint32(8%2C!0)%2Ca%3Ds.getUint32(12%2C!0)%2Co%3Ds.getFloat32(16%2C!0)%2Ch%3Ds.getFloat32(20%2C!0)%2Cc%3Ds.getFloat32(24%2C!0)%2Cd%3Dnew%20Float32Array(3*n)%3Blet%20m%3D28%2Cu%3D1%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)d%5Bu%5D%3D-s.getFloat32(m%2C!0)%2Bo%2Cu%2B%3D3%2Cm%2B%3D4%3Bu%3D2%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)d%5Bu%5D%3D-s.getFloat32(m%2C!0)%2Bh%2Cu%2B%3D3%2Cm%2B%3D4%3Bu%3D0%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)d%5Bu%5D%3D-s.getFloat32(m%2C!0)%2Bc%2Cu%2B%3D3%2Cm%2B%3D4%3Bm%3D28%2B24*n%3Bconst%20A%3Ds.getFloat32(m%2C!0)%2Cf%3Ds.getFloat32(m%2B4%2C!0)%2Cg%3Ds.getFloat32(m%2B8%2C!0)%2Cp%3Ds.getFloat32(m%2B16%2C!0)%2Cv%3Ds.getFloat32(m%2B20%2C!0)%2Cx%3Ds.getFloat32(m%2B24%2C!0)%3Bm%2B%3D32%3Bconst%20w%3Dnew%20Float32Array(3*n)%2CC%3Dnew%20Uint32Array(e%2Cm%2Cn)%3Bu%3D0%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)%7Bconst%20e%3DC%5Bt%5D%3Be%3E1056964608%26%26(w%5Bu%2B0%5D%3D(e%3E%3E16%26255)%2F255%2Cw%5Bu%2B1%5D%3D(e%3E%3E8%26255)%2F255%2Cw%5Bu%2B2%5D%3D(255%26e)%2F255)%2C0%3D%3D%3De%26%26(w%5Bu%2B0%5D%3DA%2Cw%5Bu%2B1%5D%3Df%2Cw%5Bu%2B2%5D%3Dg)%2C1%3D%3D%3De%26%26(w%5Bu%2B0%5D%3Dp%2Cw%5Bu%2B1%5D%3Dv%2Cw%5Bu%2B2%5D%3Dx)%2Cu%2B%3D3%7Dm%2B%3D4*n%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)%7Bm%2B%3D4%2B4*s.getUint32(m%2C!0)%7Dconst%20b%3Dnew%20Uint32Array(3*a)%3Bfor(let%20t%3D0%3Bt%3C3*a%3Bt%2B%2B)b%5Bt%5D%3Ds.getInt32(m%2C!0)%2Cm%2B%3D4%3Breturn%204!%3D%3Dr%26%26l.warn(%22Not%20valid%20SRF%22)%2C%7Bpositions%3Ad%2Cindices%3Ab%2Ccolors%3Aw%7D%7Dstatic%20readTxtSTL(t)%7Bconst%20e%3Dnew%20TextDecoder(%22utf-8%22).decode(t).split(%22%5Cn%22)%3Bif(!e%5B0%5D.startsWith(%22solid%22))throw%20new%20Error(%22Not%20a%20valid%20STL%20file%22)%3Bconst%20i%3D%5B%5D%3Bfor(let%20t%3D1%3Bt%3Ce.length%3Bt%2B%2B)%7Bif(!e%5Bt%5D.includes(%22vertex%22))continue%3Bconst%20s%3De%5Bt%5D.trim().split(%2F%5Cs%2B%2F)%3Bfor(let%20t%3D1%3Bt%3Cs.length%3Bt%2B%2B)i.push(parseFloat(s%5Bt%5D))%7Dconst%20s%3DMath.floor(i.length%2F3)%3Bif(3*s!%3D%3Di.length)throw%20new%20Error(%22Unable%20to%20parse%20ASCII%20STL%20file.%22)%3Bconst%20r%3Dnew%20Float32Array(i)%2Cn%3Dnew%20Uint32Array(s)%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)n%5Bt%5D%3Dt%3Breturn%7Bpositions%3Ar%2Cindices%3An%7D%7Dstatic%20readSTL(e)%7Bif(e.byteLength%3C134)throw%20new%20Error(%22File%20too%20small%20to%20be%20STL%3A%20bytes%20%3D%20%22%2Be.byteLength)%3Bconst%20i%3Dnew%20DataView(e)%3Bif(1768714099%3D%3D%3Di.getUint32(0%2C!0))return%20t.readTxtSTL(e)%3Bconst%20s%3Di.getUint32(80%2C!0)%2Cr%3D3*s%3Bif(e.byteLength%3C84%2B50*s)throw%20new%20Error(%22STL%20file%20too%20small%20to%20store%20triangles%20%3D%20%22%2Bs)%3Bconst%20n%3Dnew%20Uint32Array(r)%2Ca%3Dnew%20Float32Array(3*r)%3Blet%20o%3D96%2Cl%3D0%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)%7Bfor(let%20t%3D0%3Bt%3C9%3Bt%2B%2B)a%5Bl%5D%3Di.getFloat32(o%2C!0)%2Cl%2B%3D1%2Co%2B%3D4%3Bo%2B%3D14%7Dfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)n%5Bt%5D%3Dt%3Breturn%7Bpositions%3Aa%2Cindices%3An%7D%7Dstatic%20decimateLayerVertices(t%2Ce)%7Bif(t%25e%3D%3D0)return%20t%3Bconst%20i%3DMath.round(Math.log((t-2)%2F10)%2FMath.log(4))%2Cs%3DMath.round(Math.log((e-2)%2F10)%2FMath.log(4))%2Cr%3D10*Math.pow(4%2Ci)%2B2%2Cn%3D10*Math.pow(4%2Cs)%2B2%3Breturn%20r!%3D%3Dt%7C%7Cn!%3D%3De%3Ft%3Ae%7Dstatic%20readNII2(t%2Ce%3D0%2Ci%3D%22%22)%7Blet%20s%3Dnew%20Float32Array%3Bconst%20r%3Dt.byteLength%3Blet%20n%3D!0%3Bconst%20a%3Dnew%20DataView(t)%3Blet%20o%3Da.getUint16(0%2Cn)%3Bif(469893120%3D%3D%3Do%26%26(n%3D!1%2Co%3Da.getUint16(0%2Cn))%2C540!%3D%3Do)throw%20new%20Error(%22Not%20a%20valid%20NIfTI-2%20dataset%22)%3Bconst%20h%3DNumber(a.getBigInt64(168%2Cn))%2Cc%3Da.getFloat64(176%2Cn)%2Cd%3Da.getFloat64(184%2Cn)%3B1%3D%3D%3Dc%26%260%3D%3D%3Dd%7C%7Cl.warn(%22ignoring%20scale%20slope%20and%20intercept%22)%3Bconst%20m%3Da.getUint32(504%2Cn)%2Cu%3Da.getUint16(12%2Cn)%3Bif(2!%3D%3Du%26%264!%3D%3Du%26%268!%3D%3Du%26%2616!%3D%3Du)throw%20new%20Error(%22Unsupported%20NIfTI%20datatype%20%22%2Bu)%3Blet%20A%3D1%3Bconst%20f%3D%5B1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%5D%3Bfor(let%20t%3D1%3Bt%3C8%3Bt%2B%2B)f%5Bt%5D%3DMath.max(Number(a.getBigInt64(16%2B8*t%2Cn))%2C1)%2CA*%3Df%5Bt%5D%3Bif(m%3E%3D3e3%26%26m%3C%3D3099%26%26h%3E580)%7Blet%20s%3Dfunction()%7Bfor(%3Bw%3Cr%26%2610%3D%3D%3Dv%5Bw%5D%3B)w%2B%2B%3Bconst%20e%3Dw%3Bfor(%3Bw%3Cr%26%2610!%3D%3Dv%5Bw%5D%3B)w%2B%2B%3Breturn%20w%2B%2B%2Cw-e%3C1%3F%22%22%3A(new%20TextDecoder).decode(t.slice(e%2Cw-1)).trim()%7D%2Co%3Dfunction()%7Blet%20t%3Ds()%3Bif(!t.startsWith(%22%3C%22)%7C%7Ct.endsWith(%22%3E%22))return%20t%3Bfor(%3Bw%3Cr%26%26!t.endsWith(%22%3E%22)%3B)t%2B%3Ds()%3Breturn%20t%7D%2Cc%3Dfunction(t%2Ce%3D!1)%7Bconst%20i%3Dx.indexOf(t)%3Bif(i%3C0)return%201%3Bconst%20s%3Dx.indexOf('%22'%2Ci)%2B1%2Cr%3Dx.indexOf('%22'%2Cs)%2Cn%3Dx.slice(s%2Cr)%3Breturn%20e%3Fn%3AparseInt(n)%7D%2Cd%3D0%2Cm%3D0%2CA%3D0%2Cg%3D%22%22%2Cp%3Dnew%20Uint32Array%3Bconst%20v%3Dnew%20Uint8Array(t)%3Blet%20x%2Cw%3D552%3Bconst%20C%3Df%5B5%5D%2Cb%3Dnew%20Float32Array(e*C)%3Bfor(%3Bw%3Cr%26%26(x%3Do()%2C!x.includes(%22%3C%2FCIFTI%3E%22))%3B)if(x.includes(%22%3CBrainModel%22))%7Bconst%20t%3Dc(%22SurfaceNumberOfVertices%3D%22)%2Cs%3Dc(%22BrainStructure%3D%22%2C!0).toUpperCase()%3Bif(t%25e!%3D0)continue%3Blet%20r%3D!1%3Bif(i.includes(%22CORTEX%22)%26%26s.includes(%22CORTEX%22)%26%26(r%3D!0)%2C!r)continue%3Bif(r%3D!1%2Ci.includes(%22LEFT%22)%26%26s.includes(%22LEFT%22)%26%26(r%3D!0)%2Ci.includes(%22RIGHT%22)%26%26s.includes(%22RIGHT%22)%26%26(r%3D!0)%2C!r)continue%3Bif(A%3Dt%2Cd%3Dc(%22IndexOffset%3D%22)%2Cm%3Dc(%22IndexCount%3D%22)%2Cg%3Ds%2Cx.includes(%22%3CVertexIndices%3E%22)%7C%7C(x%3Do())%2C!x.startsWith(%22%3CVertexIndices%3E%22)%7C%7C!x.endsWith(%22%3C%2FVertexIndices%3E%22))return%20l.warn(%22Unable%20to%20find%20CIfTI%20%3CVertexIndices%3E%22)%2Cb%3Bx%3Dx.slice(15%2C-16)%3Bconst%20n%3Dx.trim().split(%2F%5Cs%2B%2F)%3Bn.length%3Cm%26%26l.error(%22Error%20parsing%20VertexIndices%22)%2Cp%3Dnew%20Uint32Array(m)%3Bfor(let%20t%3D0%3Bt%3Cm%3Bt%2B%2B)p%5Bt%5D%3DparseInt(n%5Bt%5D)%7Dif(0%3D%3D%3DA%7C%7C0%3D%3D%3Dp.length)return%20l.warn(%22Unable%20to%20find%20CIfTI%20structure%20that%20matches%20the%20mesh.%22)%2Cb%3Bif(16!%3D%3Du)return%20l.warn(%22Only%20able%20to%20read%20float32%20CIfTI%20(only%20known%20datatype).%22)%2Cb%3Bconst%20y%3Dnew%20Float32Array(m*C)%2CI%3Dh%2BC*d*4%3Bfor(let%20t%3D0%3Bt%3Cm*C%3Bt%2B%2B)y%5Bt%5D%3Da.getFloat32(I%2B4*t%2Cn)%3Blet%20M%3D0%3Bfor(let%20t%3D0%3Bt%3Cm%3Bt%2B%2B)for(let%20i%3D0%3Bi%3CC%3Bi%2B%2B)b%5Bp%5Bt%5D%2Bi*e%5D%3Dy%5BM%5D%2CM%2B%2B%3Breturn%20l.debug(%22CIfTI%20diagnostics%22%2CA%2Cg%2Cd%2Cm%2Cd%2Ci)%2Cb%7Dif(A%3Dthis.decimateLayerVertices(A%2Ce)%2CA%25e!%3D0)throw%20new%20Error(%22Vertices%20in%20layer%20(%22%2BA%2B%22)%20is%20not%20a%20multiple%20of%20number%20of%20vertices%20(%22%2Be%2B%22)%22)%3Bif(n)16%3D%3D%3Du%3Fs%3Dnew%20Float32Array(t%2Ch%2CA)%3A8%3D%3D%3Du%3Fs%3Dnew%20Int32Array(t%2Ch%2CA)%3A4%3D%3D%3Du%26%26(s%3Dnew%20Int16Array(t%2Ch%2CA))%3Belse%20if(16%3D%3D%3Du)%7Bs%3Dnew%20Float32Array(A)%3Bfor(let%20t%3D0%3Bt%3CA%3Bt%2B%2B)s%5Bt%5D%3Da.getFloat32(h%2B4*t%2Cn)%7Delse%20if(8%3D%3D%3Du)%7Bs%3Dnew%20Int32Array(A)%3Bfor(let%20t%3D0%3Bt%3CA%3Bt%2B%2B)s%5Bt%5D%3Da.getInt32(h%2B4*t%2Cn)%7Delse%20if(4%3D%3D%3Du)%7Bs%3Dnew%20Int16Array(A)%3Bfor(let%20t%3D0%3Bt%3CA%3Bt%2B%2B)s%5Bt%5D%3Da.getInt16(h%2B2*t%2Cn)%7Dreturn%202%3D%3D%3Du%26%26(s%3Dnew%20Uint8Array(t%2Ch%2CA))%2Cs%7Dstatic%20readNII(e%2Ci%3D0%2Cs%3D%22%22)%7Blet%20r%3Dnew%20Float32Array%2Cn%3D!0%2Ca%3Dnew%20DataView(e)%2Co%3Da.getUint16(0%2Cn)%3Bif(540%3D%3D%3Do%7C%7C469893120%3D%3D%3Do)return%20t.readNII2(e%2Ci%2Cs)%3Bif(23553%3D%3D%3Do%26%26(n%3D!1%2Co%3Da.getUint16(0%2Cn))%2C348!%3D%3Do)%7Bconst%20r%3Dce(new%20Uint8Array(e))%3Bif(a%3Dnew%20DataView(r.buffer)%2Ce%3Dr.buffer%2Co%3Da.getUint16(0%2Cn)%2C540%3D%3D%3Do%7C%7C469893120%3D%3D%3Do)return%20t.readNII2(e%2Ci%2Cs)%3B23553%3D%3D%3Do%26%26(n%3D!1%2Co%3Da.getUint16(0%2Cn))%7D348!%3D%3Do%26%26l.error(%22Not%20a%20valid%20NIfTI%20image.%22)%3Bconst%20h%3Da.getFloat32(108%2Cn)%2Cc%3Da.getFloat32(112%2Cn)%2Cd%3Da.getFloat32(116%2Cn)%3B1%3D%3D%3Dc%26%260%3D%3D%3Dd%7C%7Cl.warn(%22ignoring%20scale%20slope%20and%20intercept%22)%3Bconst%20m%3Da.getUint16(70%2Cn)%3Bif(2!%3D%3Dm%26%264!%3D%3Dm%26%268!%3D%3Dm%26%2616!%3D%3Dm)throw%20new%20Error(%22Unsupported%20NIfTI%20datatype%20%22%2Bm)%3Blet%20u%3D1%3Bfor(let%20t%3D1%3Bt%3C8%3Bt%2B%2B)%7Bconst%20e%3Da.getUint16(40%2B2*t%2Cn)%3Bu*%3DMath.max(e%2C1)%7Dif(u%3Dthis.decimateLayerVertices(u%2Ci)%2Cu%25i!%3D0)throw%20new%20Error(%22Vertices%20in%20layer%20(%22%2Bu%2B%22)%20is%20not%20a%20multiple%20of%20number%20of%20vertices%20(%22%2Bi%2B%22)%22)%3Bif(n)16%3D%3D%3Dm%3Fr%3Dnew%20Float32Array(e%2Ch%2Cu)%3A8%3D%3D%3Dm%3Fr%3Dnew%20Int32Array(e%2Ch%2Cu)%3A4%3D%3D%3Dm%26%26(r%3Dnew%20Int16Array(e%2Ch%2Cu))%3Belse%20if(16%3D%3D%3Dm)%7Br%3Dnew%20Float32Array(u)%3Bfor(let%20t%3D0%3Bt%3Cu%3Bt%2B%2B)r%5Bt%5D%3Da.getFloat32(h%2B4*t%2Cn)%7Delse%20if(8%3D%3D%3Dm)%7Br%3Dnew%20Int32Array(u)%3Bfor(let%20t%3D0%3Bt%3Cu%3Bt%2B%2B)r%5Bt%5D%3Da.getInt32(h%2B4*t%2Cn)%7Delse%20if(4%3D%3D%3Dm)%7Br%3Dnew%20Int16Array(u)%3Bfor(let%20t%3D0%3Bt%3Cu%3Bt%2B%2B)r%5Bt%5D%3Da.getInt16(h%2B2*t%2Cn)%7Dreturn%202%3D%3D%3Dm%26%26(r%3Dnew%20Uint8Array(e%2Ch%2Cu))%2Cr%7Dstatic%20readMGH(t%2Ce%3D0%2Ci%3D!1)%7Blet%20s%3Dnew%20DataView(t)%2Cr%3Dt%3Bif(31%3D%3D%3Ds.getUint8(0)%26%26139%3D%3D%3Ds.getUint8(1))%7Bconst%20e%3Dce(new%20Uint8Array(t))%3Br%3Dnew%20ArrayBuffer(e.byteLength)%2Cnew%20Uint8Array(r).set(new%20Uint8Array(e))%2Cs%3Dnew%20DataView(e.buffer)%7Dconst%20n%3Ds.getInt32(0%2C!1)%2Ca%3DMath.max(1%2Cs.getInt32(4%2C!1))%2Co%3DMath.max(1%2Cs.getInt32(8%2C!1))%2Ch%3DMath.max(1%2Cs.getInt32(12%2C!1))%2Cc%3DMath.max(1%2Cs.getInt32(16%2C!1))%2Cd%3Ds.getInt32(20%2C!1)%3Blet%20m%3D284%3Bconst%20u%3D!1%3B(1!%3D%3Dn%7C%7Cd%3C0%7C%7Cd%3E4)%26%26l.warn(%22Not%20a%20valid%20MGH%20file%22)%3Blet%20A%3Da*o*h*c%2Cf%3D%5B%5D%3Bif(A%3Dthis.decimateLayerVertices(A%2Ce)%2CA%25e!%3D0)return%20l.warn(%22Vertices%20in%20layer%20(%22%2BA%2B%22)%20is%20not%20a%20multiple%20of%20number%20of%20vertices%20(%22%2Be%2B%22)%22)%2Cf%3Bif(3%3D%3D%3Dd)%7Bf%3Dnew%20Float32Array(A)%3Bfor(let%20t%3D0%3Bt%3CA%3Bt%2B%2B)f%5Bt%5D%3Ds.getFloat32(m%2B4*t%2Cu)%7Delse%20if(1%3D%3D%3Dd)%7Bf%3Dnew%20Int32Array(A)%3Bfor(let%20t%3D0%3Bt%3CA%3Bt%2B%2B)f%5Bt%5D%3Ds.getInt32(m%2B4*t%2Cu)%7Delse%20if(4%3D%3D%3Dd)%7Bf%3Dnew%20Int16Array(A)%3Bfor(let%20t%3D0%3Bt%3CA%3Bt%2B%2B)f%5Bt%5D%3Ds.getInt16(m%2B2*t%2Cu)%7Delse%200%3D%3D%3Dd%26%26(f%3Dnew%20Uint8Array(t%2Cm%2CA))%3Bif(!i)return%20f%3Blet%20g%3D4%3B4%3D%3D%3Dd%26%26(g%3D2)%2C0%3D%3D%3Dd%26%26(g%3D1)%2Cm%2B%3Dg*A%2Cm%2B%3D16%3Bconst%20p%3Dr.byteLength%3Blet%20v%3Bfor(%3Bm%3Cp-8%3B)%7Blet%20t%3D0%3Bswitch(s.getInt32(m%2B%3D4%2Cu))%7Bcase%2030%3At%3Ds.getInt32(m%2B%3D4%2Cu)-1%3Bbreak%3Bcase%2020%3Acase%202%3At%3D0%3Bbreak%3Bcase%201%3At%3D0%3B%7Blet%20t%3Ds.getInt32(m%2B%3D4%2Cu)%3Bif(t%3E0)return%20l.warn(%22unsupported%20CTABreadFromBinaryV1%22)%2Cf%3Bif(t%3D-t%2C2!%3D%3Dt)return%20l.warn(%22CTABreadFromBinary%3A%20unknown%20version%22)%2Cf%3Bconst%20e%3Ds.getInt32(m%2B%3D4%2Cu)%3Bif(e%3C0)return%20l.warn(%22CTABreadFromBinaryV2%3A%20nentries%20was%20%22%2Ce)%2Cf%3Bconst%20i%3Ds.getInt32(m%2B%3D4%2Cu)%3Bm%2B%3Di%3Bconst%20r%3Ds.getInt32(m%2B%3D4%2Cu)%3Bif(r%3C0)return%20f%3Bconst%20n%3D%7BR%3A%5B%5D%2CG%3A%5B%5D%2CB%3A%5B%5D%2CA%3A%5B%5D%2CI%3A%5B%5D%2Clabels%3A%5B%5D%7D%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)%7Bconst%20t%3Ds.getInt32(m%2B%3D4%2Cu)%2Ce%3Ds.getInt32(m%2B%3D4%2Cu)%3Blet%20i%3Dm%2B4%2Cr%3D%22%22%3Bfor(let%20t%3D0%3Bt%3Ce%3Bt%2B%2B)%7Bconst%20t%3Ds.getUint8(i%2B%2B)%3Bif(0%3D%3D%3Dt)break%3Br%2B%3DString.fromCharCode(t)%7Dm%2B%3De%3Bconst%20a%3Ds.getInt32(m%2B%3D4%2Cu)%2Co%3Ds.getInt32(m%2B%3D4%2Cu)%2Cl%3Ds.getInt32(m%2B%3D4%2Cu)%2Ch%3D255-s.getInt32(m%2B%3D4%2Cu)%3Bn.I.push(t)%2Cn.R.push(a)%2Cn.G.push(o)%2Cn.B.push(l)%2Cn.A.push(h)%2Cn.labels.push(r)%7Dv%3Dse.makeLabelLut(n)%7Dbreak%3Bdefault%3At%3Ds.getInt32(m%2B%3D8%2Cu)%7Dm%2B%3Dt%7Dreturn%7Bscalars%3Af%2CcolormapLabel%3Av%7D%7Dstatic%20readX3D(t)%7Bconst%20e%3Dt.byteLength%3Bif(e%3C20)throw%20new%20Error(%22File%20too%20small%20to%20be%20X3D%3A%20bytes%20%3D%20%22%2Be)%3Bconst%20i%3Dnew%20Uint8Array(t)%3Blet%20s%3D0%3Bfunction%20r()%7Bfor(%3Bs%3Ce%26%2660!%3D%3Di%5Bs%5D%3B)s%2B%2B%3Bconst%20r%3Ds%3Bfor(%3Bs%3Ce%26%2662!%3D%3Di%5Bs%5D%3B)s%2B%2B%3Bconst%20n%3Ds%3Breturn(new%20TextDecoder).decode(t.slice(r%2Cn%2B1)).trim()%7Dlet%20n%3Dr()%3Bfunction%20a(t)%7Bconst%20e%3Dn.indexOf(t%2B%22%3D%22)%3Bif(e%3C0)return%22%22%3Bconst%20i%3Dn%5Be%2Bt.length%2B1%5D%2Cs%3Dn.indexOf(i%2Ce)%2B1%2Cr%3Dn.indexOf(i%2Cs)%3Breturn%20n.slice(s%2Cr)%7Dfunction%20o(t)%7Bconst%20e%3Dn.indexOf(t%2B%22%3D%22)%3Bif(e%3C0)return%201%3Bconst%20i%3Dn%5Be%2Bt.length%2B1%5D%2Cs%3Dn.indexOf(i%2Ce)%2B1%2Cr%3Dn.indexOf(i%2Cs)%3Blet%20a%3Dn.slice(s%2Cr).trim()%3Ba%3Da.replace(%2F%2C%5Cs*%24%2F%2C%22%22)%3Bconst%20o%3Da.trim().split(%2F%5Cs*%2C%5Cs*%7C%5Cs%2B%2F)%3Bif(o.length%3C2)return%20parseFloat(a)%3Blet%20l%3Dnew%20Array(o.length)%2Ch%3D0%3Bfor(let%20t%3D0%3Bt%3Co.length%3Bt%2B%2B)%7Bconst%20e%3DparseFloat(o%5Bt%5D)%3BisFinite(e)%26%26(l%5Bh%5D%3De%2Ch%2B%2B)%7Dreturn%20l%3Dl.slice(0%2Ch)%2Cl%7Dn.includes(%22xml%20version%22)%7C%7Cl.warn(%22Not%20a%20X3D%20image%22)%3Blet%20h%3D%5B%5D%2Cc%3D%5B%5D%2Cd%3D%5B%5D%2Cm%3D%5B%5D%2Cu%3D%5B0%2C0%2C0%2C0%5D%2CA%3D%5B0%2C0%2C0%2C0%5D%2Cf%3D%5B255%2C255%2C255%2C255%5D%2Cg%3D%5B255%2C255%2C255%2C255%5D%3Bconst%20p%3D%7B%7D%3Bfunction%20v()%7Bif(!n.endsWith(%22%2F%3E%22))if(n.startsWith(%22%3CAppearance%3E%22))for(%3Bs%3Ce%26%26!n.endsWith(%22%3C%2FAppearance%3E%22)%3B)n%2B%3Dr()%3Belse%20for(%3Bs%3Ce%26%26!n.endsWith(%22%2F%3E%22)%3B)n%2B%3Dr()%3Bconst%20t%3Da(%22USE%22)%3Bif(t.length%3E1)return%20void(t%20in%20p%3Ff%3Dp%5Bt%5D%3Al.warn(%22Unable%20to%20find%20DEF%20for%20%22%2Bt))%3Bconst%20i%3Do(%22diffuseColor%22)%3Bif(i.length%3C3)return%3Bf%5B0%5D%3DMath.round(255*i%5B0%5D)%2Cf%5B1%5D%3DMath.round(255*i%5B1%5D)%2Cf%5B2%5D%3DMath.round(255*i%5B2%5D)%3Bconst%20h%3Da(%22DEF%22)%3Bh.length%3C1%7C%7C(p%5Bh%5D%3Df)%7Dfor(%3Bs%3Ce%3B)if(n%3Dr()%2Cf%3Dg.slice()%2Cn.startsWith(%22%3CTransform%22)%26%26(u%3Do(%22translation%22)%2CA%3Do(%22rotation%22))%2Cn.startsWith(%22%3CAppearance%22)%26%26(v()%2Cg%3Df.slice())%2Cn.startsWith(%22%3CShape%22))%7Blet%20t%3D1%2Ci%3D1%2Ca%3D%5B%5D%2Cg%3D%5B%5D%3Bfor(%3Bs%3Ce%26%26(n%3Dr()%2Cn.startsWith(%22%3CAppearance%22)%26%26v()%2C!n.startsWith(%22%3C%2FShape%22))%3B)%7Bif(n.startsWith(%22%3CSphere%22)%26%26(t%3Do(%22radius%22)%2Ci%3D-1)%2Cn.startsWith(%22%3CCylinder%22)%26%26(t%3Do(%22radius%22)%2Ci%3Do(%22height%22))%2Cn.startsWith(%22%3CIndexedFaceSet%22)%26%26(i%3D-2%2Ca%3Do(%22coordIndex%22))%2Cn.startsWith(%22%3CIndexedTriangleSet%22)%26%26(i%3D-7%2Ca%3Do(%22index%22))%2Cn.startsWith(%22%3CIndexedTriangleStripSet%22)%26%26(i%3D-3%2Ca%3Do(%22index%22))%2Cn.startsWith(%22%3CCoordinate%22))%7Bg%3Do(%22point%22)%3Bconst%20t%3Dg.length%253%3B0!%3D%3Dt%26%26(g%3Dg.slice(0%2C-t))%7Dn.startsWith(%22%3CColor%22)%26%26(m%3Do(%22color%22))%2Cn.startsWith(%22%3CBox%22)%26%26(i%3D-4%2Cl.warn(%22Unsupported%20x3d%20shape%3A%20Box%22))%2Cn.startsWith(%22%3CCone%22)%26%26(i%3D-5%2Cl.warn(%22Unsupported%20x3d%20shape%3A%20Cone%22))%2Cn.startsWith(%22%3CElevationGrid%22)%26%26(i%3D-6%2Cl.warn(%22Unsupported%20x3d%20shape%3A%20ElevationGrid%22))%7Dif(i%3C-3%26%26-7!%3D%3Di)%3Belse%20if(i%3C-1)%7Bif(a.length%3C1%7C%7Cg.length%3C3%7C%7Cvoid%200%3D%3D%3Dg.length)%7Bl.warn(%22Indexed%20mesh%20must%20specify%20indices%20and%20points%22)%3Bbreak%7Dconst%20t%3DMath.floor(h.length%2F3)%3Blet%20e%3D2%3Bif(-7%3D%3D%3Di)c%3D%5B...c%2C...a%5D%3Belse%20if(-2%3D%3D%3Di)%7Blet%20i%3D0%3Bfor(%3Be%3Ca.length%3B)a%5Be%5D%3E%3D0%3F(c.push(a%5Bi%5D%2Bt)%2Cc.push(a%5Be-1%5D%2Bt)%2Cc.push(a%5Be-0%5D%2Bt)%2Ce%2B%3D1)%3A(e%2B%3D3%2Ci%3De-2)%7Delse%20for(%3Be%3Ca.length%3B)a%5Be%5D%3E%3D0%3F(c.push(a%5Be-2%5D%2Bt)%2Cc.push(a%5Be-1%5D%2Bt)%2Cc.push(a%5Be-0%5D%2Bt)%2Ce%2B%3D1)%3Ae%2B%3D3%3Bh%3D%5B...h%2C...g%5D%3Bconst%20s%3DMath.floor(g.length%2F3)%2Cr%3DArray(s).fill(f).flat()%3Bif(m.length%3D%3D%3D3*s)%7Blet%20t%3D0%2Ce%3D0%3Bfor(let%20i%3D0%3Bi%3Cs%3Bi%2B%2B)%7Bfor(let%20i%3D0%3Bi%3C3%3Bi%2B%2B)r%5Be%5D%3DMath.round(255*m%5Bt%5D)%2Ct%2B%2B%2Ce%2B%2B%3Be%2B%2B%7D%7Dd%3D%5B...d%2C...r%5D%7Delse%20if(i%3C0)k.makeColoredSphere(h%2Cc%2Cd%2Ct%2Cu%2Cf)%3Belse%7Bconst%20e%3Doe.create()%3Boe.fromRotation(e%2CA%5B3%5D%2C%5BA%5B0%5D%2CA%5B1%5D%2CA%5B2%5D%5D)%3Bconst%20s%3Dle.fromValues(0%2C.5*-i%2C0%2C1)%2Cr%3Dle.fromValues(0%2C.5*%2Bi%2C0%2C1)%3Ble.transformMat4(s%2Cs%2Ce)%2Cle.transformMat4(r%2Cr%2Ce)%2Cle.add(s%2Cs%2Cu)%2Cle.add(r%2Cr%2Cu)%3Bconst%20n%3Dhe.fromValues(s%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D)%2Ca%3Dhe.fromValues(r%5B0%5D%2Cr%5B1%5D%2Cr%5B2%5D)%3Bk.makeColoredCylinder(h%2Cc%2Cd%2Cn%2Ca%2Ct%2Cf)%7D%7Dreturn%7Bpositions%3AFloat32Array.from(h)%2Cindices%3AUint32Array.from(c)%2Crgba255%3AUint8Array.from(d)%7D%7Dstatic%20readGII(t%2Ce%3D0)%7Blet%20i%3Dt.byteLength%3Bif(i%3C20)throw%20new%20Error(%22File%20too%20small%20to%20be%20GII%3A%20bytes%20%3D%20%22%2Bi)%3Blet%20s%3Dnew%20TextDecoder(%22ascii%22).decode(t)%3Bif(31%3D%3D%3Ds%5B0%5D.charCodeAt(0))%7Bconst%20e%3Dce(new%20Uint8Array(t))%3Bt%3De.buffer%2Cs%3Dnew%20TextDecoder(%22ascii%22).decode(e.buffer)%7Dlet%20r%3D0%3Bfunction%20n()%7Blet%20e%3D!0%2Cn%3Dr%3Bfor(%3Be%3B)%7Bfor(%3Br%3Ci%26%26%22%3C%22!%3D%3Ds%5Br%5D%3B)r%2B%2B%3Bfor(n%3Dr%3Br%3Ci%26%26%22%3E%22!%3D%3Ds%5Br%5D%3B)r%2B%2B%3Bif(e%3D%22%2F%22%3D%3D%3Ds%5Br-1%5D%2Cn%2B1%3Ci%26%26%22%2F%22%3D%3D%3Ds%5Bn%2B1%5D%26%26(r%2B%3D1%2Ce%3D!0)%2Cr%3E%3Di)break%7Dconst%20a%3D(new%20TextDecoder).decode(t.slice(n%2B1%2Cr)).trim()%2Co%3Da.split(%22%20%22)%5B0%5D.trim()%2Cl%3Dr%3Blet%20h%3Dr%2Cc%3Dr%3Bif(%22%3F%22!%3D%3Ds%5Bn%2B1%5D%26%26%22!%22!%3D%3Ds%5Bn%2B1%5D)%7Bconst%20t%3D%22%3C%2F%22%2Bo%2B%22%3E%22%3Bh%3Ds.indexOf(t%2Cl)%2Cc%3Dh%2Bt.length-1%7Dreturn%7Bname%3Aa%2CstartPos%3An%2CcontentStartPos%3Al%2CcontentEndPos%3Ah%2CendPos%3Ac%7D%7Dlet%20a%3Dn()%3Bif(!a.name.startsWith(%22%3Fxml%22))throw%20new%20Error(%22readGII%3A%20Invalid%20XML%20file%22)%3Bfor(%3B!a.name.startsWith(%22GIFTI%22)%26%26a.endPos%3Ci%3B)a%3Dn()%3Bif(!a.name.startsWith(%22GIFTI%22)%7C%7Ca.contentStartPos%3D%3D%3Da.contentEndPos)throw%20new%20Error(%22readGII%3A%20XML%20file%20does%20not%20include%20GIFTI%20tag%22)%3Bi%3Da.contentEndPos%3Blet%20o%3Dnew%20Float32Array%2Ch%3Dnew%20Uint32Array%2Cc%3Dnew%20Float32Array%2Cd%3D%22%22%2Cm%3D!1%2Cu%3D!1%2CA%3D!1%2Cf%3D!1%2Cg%3D%5B1%2C1%2C1%5D%3Bconst%20p%3D%5B0%2C0%2C0%5D%3Blet%20v%3D0%2Cx%3D!1%2Cw%3D!1%2CC%3D0%2Cb%3D!1%3Ba.endPos%3Da.contentStartPos%3Blet%20y%3D%22%22%3Bfunction%20I(t%2Ce%3D!1)%7Bconst%20i%3Dy.indexOf(t)%3Bif(i%3C0)return%201%3Bconst%20s%3Dy.indexOf('%22'%2Ci)%2B1%2Cr%3Dy.indexOf('%22'%2Cs)%2Cn%3Dy.slice(s%2Cr)%3Breturn%20e%3FparseFloat(n)%3AparseInt(n)%7Dfunction%20M(t)%7Bconst%20e%3Dy.indexOf(t)%3Bif(e%3C0)return%22%22%3Bconst%20i%3De%2Bt.length%2Cs%3Dy.indexOf(%22%5D%22%2Ci)%3Breturn%20y.slice(i%2Cs)%7Dconst%20D%3D%7BR%3A%5B%5D%2CG%3A%5B%5D%2CB%3A%5B%5D%2CA%3A%5B%5D%2CI%3A%5B%5D%2Clabels%3A%5B%5D%7D%3Bfor(%3Ba.endPos%3Ci%26%26a.name.length%3E1%3B)if(a%3Dn()%2Ca.name.startsWith(%22Label%20Key%22)%26%26(y%3Da.name%2CD.I.push(I(%22Key%3D%22))%2CD.R.push(Math.round(255*I(%22Red%3D%22%2C!0)))%2CD.G.push(Math.round(255*I(%22Green%3D%22%2C!0)))%2CD.B.push(Math.round(255*I(%22Blue%3D%22%2C!0)))%2CD.A.push(Math.round(255*I(%22Alpha%22%2C!0)))%2Cy%3D(new%20TextDecoder).decode(t.slice(a.contentStartPos%2B1%2Ca.contentEndPos)).trim()%2CD.labels.push(M(%22%3C!%5BCDATA%5B%22)))%2C%22Data%22!%3D%3Da.name.trim())%7Bif(%22DataSpace%22%3D%3D%3Da.name.trim()%26%26(y%3D(new%20TextDecoder).decode(t.slice(a.contentStartPos%2B1%2Ca.contentEndPos)).trim()%2Cy.includes(%22NIFTI_XFORM_SCANNER_ANAT%22)%26%26(b%3D!0))%2C%22MD%22%3D%3D%3Da.name.trim()%26%26(y%3D(new%20TextDecoder).decode(t.slice(a.contentStartPos%2B1%2Ca.contentEndPos)).trim()%2Cy.includes(%22AnatomicalStructurePrimary%22)%26%26y.includes(%22CDATA%5B%22)%26%26(d%3DM(%22%3CValue%3E%3C!%5BCDATA%5B%22).toUpperCase())%2Cy.includes(%22VolGeom%22)%26%26y.includes(%22CDATA%5B%22)))%7Blet%20t%3D-1%3Bif(y.includes(%22VolGeomC_R%22)%26%26(t%3D0)%2Cy.includes(%22VolGeomC_A%22)%26%26(t%3D1)%2Cy.includes(%22VolGeomC_S%22)%26%26(t%3D2)%2Ct%3C0)continue%3Bp%5Bt%5D%3DparseFloat(M(%22%3CValue%3E%3C!%5BCDATA%5B%22))%7Da.name.startsWith(%22DataArray%22)%26%26(y%3Da.name%2Cg%3D%5B1%2C1%2C1%5D%2Cx%3Dy.includes('Encoding%3D%22GZipBase64Binary%22')%2Cw%3Dy.includes('Encoding%3D%22ASCII%22')%2Cm%3Dy.includes('Intent%3D%22NIFTI_INTENT_TRIANGLE%22')%2Cu%3Dy.includes('Intent%3D%22NIFTI_INTENT_POINTSET%22')%2CA%3Dy.includes('Intent%3D%22NIFTI_INTENT_VECTOR%22')%2Cf%3Dy.includes('ArrayIndexingOrder%3D%22ColumnMajorOrder%22')%2Cy.includes('DataType%3D%22NIFTI_TYPE_UINT8%22')%26%26(v%3D2)%2Cy.includes('DataType%3D%22NIFTI_TYPE_INT32%22')%26%26(v%3D8)%2Cy.includes('DataType%3D%22NIFTI_TYPE_FLOAT32%22')%26%26(v%3D16)%2Cy.includes('DataType%3D%22NIFTI_TYPE_FLOAT64%22')%26%26(v%3D32)%2Cg%5B0%5D%3DI(%22Dim0%3D%22)%2Cg%5B1%5D%3DI(%22Dim1%3D%22)%2Cg%5B2%5D%3DI(%22Dim2%3D%22))%7Delse%7Bif(A)continue%3Blet%20i%3Bif(y%3D(new%20TextDecoder).decode(t.slice(a.contentStartPos%2B1%2Ca.contentEndPos)).trim()%2Cw)%7Bconst%20t%3Dg%5B0%5D*g%5B1%5D*g%5B2%5D%2Ce%3Dy.split(%2F%5Cs%2B%2F)%3Bif(t!%3D%3De.length)throw%20new%20Error(%22Unable%20to%20parse%20ASCII%20GIfTI%22)%3Bif(2%3D%3D%3Dv%26%26(v%3D8)%2C32%3D%3D%3Dv%26%26(v%3D16)%2C8%3D%3D%3Dv)%7Bi%3Dnew%20Int32Array(t)%3Bfor(let%20s%3D0%3Bs%3Ct%3Bs%2B%2B)i%5Bs%5D%3DparseInt(e%5Bs%5D)%7Dif(16%3D%3D%3Dv)%7Bi%3Dnew%20Float32Array(t)%3Bfor(let%20s%3D0%3Bs%3Ct%3Bs%2B%2B)i%5Bs%5D%3DparseFloat(e%5Bs%5D)%7D%7Delse%20if(%22undefined%22%3D%3Dtypeof%20Buffer)%7Blet%20t%3Dfunction(t)%7Bconst%20e%3Datob(t)%2Ci%3De.length%2Cs%3Dnew%20Uint8Array(i)%3Bfor(let%20t%3D0%3Bt%3Ci%3Bt%2B%2B)s%5Bt%5D%3De.charCodeAt(t)%3Breturn%20s%7D%3Bif(x)%7Bconst%20e%3Dt(y.slice())%3Bi%3Dce(new%20Uint8Array(e))%7Delse%20i%3Dt(y.slice())%7Delse%20if(x)%7Bconst%20t%3DBuffer.from(y.slice()%2C%22base64%22)%3Bi%3Dce(new%20Uint8Array(t))%7Delse%20i%3DBuffer.from(y.slice()%2C%22base64%22)%3Bif(u)%7Bif(16!%3D%3Dv%26%26l.warn(%22expect%20positions%20as%20FLOAT32%22)%2Co%3Dnew%20Float32Array(i.buffer)%2Cf)%7Bconst%20t%3Do.slice()%2Ce%3Dt.length%2F3%3Blet%20i%3D0%3Bfor(let%20s%3D0%3Bs%3Ce%3Bs%2B%2B)for(let%20r%3D0%3Br%3C3%3Br%2B%2B)o%5Bi%5D%3Dt%5Br*e%2Bs%5D%2Ci%2B%2B%7D%7Delse%20if(m)%7Bif(8!%3D%3Dv%26%26l.warn(%22expect%20indices%20as%20INT32%22)%2Ch%3Dnew%20Uint32Array(i.buffer)%2Cf)%7Bconst%20t%3Dh.slice()%2Ce%3Dt.length%2F3%3Blet%20i%3D0%3Bfor(let%20s%3D0%3Bs%3Ce%3Bs%2B%2B)for(let%20r%3D0%3Br%3C3%3Br%2B%2B)h%5Bi%5D%3Dt%5Br*e%2Bs%5D%2Ci%2B%2B%7D%7Delse%7Blet%20t%2Cs%3Dfunction(t%2Ce)%7Bconst%20i%3Dt.length%2Cs%3Dnew%20Float32Array(i%2Be.length)%3Breturn%20s.set(t)%2Cs.set(e%2Ci)%2Cs%7D%3Bif(C%3Dg%5B0%5D*g%5B1%5D*g%5B2%5D%2C0!%3D%3De%26%26C%25e!%3D0%26%26l.warn(%22Number%20of%20vertices%20in%20scalar%20overlay%20(%22%2BC%2B%22)%20does%20not%20match%20mesh%20(%22%2Be%2B%22)%22)%2C2%3D%3D%3Dv)%7Bconst%20e%3Dnew%20Uint8Array(i.buffer)%3Bt%3DFloat32Array.from(e)%7Delse%20if(8%3D%3D%3Dv)%7Bconst%20e%3Dnew%20Int32Array(i.buffer)%3Bt%3DFloat32Array.from(e)%7Delse%20if(16%3D%3D%3Dv)t%3Dnew%20Float32Array(i.buffer)%3Belse%7Bif(32!%3D%3Dv)throw%20new%20Error(%60Invalid%20dataType%3A%20%24%7Bv%7D%60)%3B%7Bconst%20e%3Dnew%20Float64Array(i.buffer)%3Bt%3DFloat32Array.from(e)%7D%7Dc%3Ds(c%2Ct)%7D%7Dlet%20F%3Bif(D.I.length%3E1%26%26(F%3Dse.makeLabelLut(D))%2Ce%3E0)return%7Bscalars%3Ac%2CcolormapLabel%3AF%2CanatomicalStructurePrimary%3Ad%7D%3Bif(o.length%3E2%26%26!b%26%26(0!%3D%3Dp%5B0%5D%7C%7C0!%3D%3Dp%5B1%5D%7C%7C0!%3D%3Dp%5B2%5D))%7BC%3DMath.floor(o.length%2F3)%3Blet%20t%3D0%3Bfor(let%20e%3D0%3Be%3CC%3Be%2B%2B)o%5Bt%5D%2B%3Dp%5B0%5D%2Ct%2B%2B%2Co%5Bt%5D%2B%3Dp%5B1%5D%2Ct%2B%2B%2Co%5Bt%5D%2B%3Dp%5B2%5D%2Ct%2B%2B%7Dreturn%7Bpositions%3Ao%2Cindices%3Ah%2Cscalars%3Ac%2CcolormapLabel%3AF%2CanatomicalStructurePrimary%3Ad%7D%7D%7D%2CIe%3D%7Bcolormap%3A%22gray%22%2Copacity%3A0%2CnFrame4D%3A0%2Cframe4D%3A0%2CoutlineBorder%3A0%2Ccal_min%3A0%2Ccal_max%3A0%2Ccal_minNeg%3A0%2Ccal_maxNeg%3A0%2Cvalues%3Anew%20Array%7D%2CMe%3Dclass%7Bconstructor(t%3D%22%22%2Ci%3Dnull%2Cs%3D%22%22%2Cr%3D1%2Cn%3Dnew%20Uint8Array(%5B255%2C255%2C255%2C255%5D)%2Ca%3D!0%2Co%3D%5B%5D%2Cl%3D!0)%7Be(this%2C%22url%22)%2Ce(this%2C%22gl%22)%2Ce(this%2C%22name%22)%2Ce(this%2C%22opacity%22)%2Ce(this%2C%22rgba255%22)%2Ce(this%2C%22visible%22)%2Ce(this%2C%22layers%22)%2Ce(this%2C%22colorbarVisible%22)%2Cthis.url%3Dt%2Cthis.gl%3Di%2Cthis.name%3Ds%2Cthis.opacity%3Dr%2Cthis.rgba255%3Dn%2Cthis.visible%3Da%2Cthis.layers%3Do%2Cthis.colorbarVisible%3Dl%7D%7D%2CDe%3Dclass%20t%7Bconstructor(t%2Ci%2Cs%3D%22%22%2Cr%3Dnew%20Uint8Array(%5B255%2C255%2C255%2C255%5D)%2Cn%3D1%2Ca%3D!0%2Co%2Cl%3Dnull%2Ch%3Dnull%2Cc%3Dnull%2Cd%3Dnull%2Cm%3D!0%2Cu%3D%22%22)%7Be(this%2C%22id%22)%2Ce(this%2C%22name%22)%2Ce(this%2C%22anatomicalStructurePrimary%22)%2Ce(this%2C%22colorbarVisible%22)%2Ce(this%2C%22furthestVertexFromOrigin%22)%2Ce(this%2C%22extentsMin%22)%2Ce(this%2C%22extentsMax%22)%2Ce(this%2C%22opacity%22)%2Ce(this%2C%22visible%22)%2Ce(this%2C%22meshShaderIndex%22%2C0)%2Ce(this%2C%22offsetPt0%22%2Cnull)%2Ce(this%2C%22colormapInvert%22%2C!1)%2Ce(this%2C%22fiberGroupColormap%22%2Cnull)%2Ce(this%2C%22indexBuffer%22)%2Ce(this%2C%22vertexBuffer%22)%2Ce(this%2C%22vao%22)%2Ce(this%2C%22vaoFiber%22)%2Ce(this%2C%22pts%22)%2Ce(this%2C%22tris%22)%2Ce(this%2C%22layers%22)%2Ce(this%2C%22type%22%2C%22mesh%22)%2Ce(this%2C%22data_type%22)%2Ce(this%2C%22rgba255%22)%2Ce(this%2C%22fiberLength%22)%2Ce(this%2C%22fiberLengths%22)%2Ce(this%2C%22fiberDensity%22)%2Ce(this%2C%22fiberDither%22%2C.1)%2Ce(this%2C%22fiberColor%22%2C%22Global%22)%2Ce(this%2C%22fiberDecimationStride%22%2C1)%2Ce(this%2C%22fiberSides%22%2C5)%2Ce(this%2C%22fiberRadius%22%2C0)%2Ce(this%2C%22fiberOcclusion%22%2C0)%2Ce(this%2C%22f32PerVertex%22%2C5)%2Ce(this%2C%22fiberMask%22)%2Ce(this%2C%22colormap%22)%2Ce(this%2C%22dpg%22)%2Ce(this%2C%22dps%22)%2Ce(this%2C%22dpv%22)%2Ce(this%2C%22hasConnectome%22%2C!1)%2Ce(this%2C%22connectome%22)%2Ce(this%2C%22indexCount%22)%2Ce(this%2C%22vertexCount%22%2C1)%2Ce(this%2C%22nodeScale%22%2C4)%2Ce(this%2C%22edgeScale%22%2C1)%2Ce(this%2C%22legendLineThickness%22%2C0)%2Ce(this%2C%22nodeColormap%22%2C%22warm%22)%2Ce(this%2C%22edgeColormap%22%2C%22warm%22)%2Ce(this%2C%22nodeColormapNegative%22)%2Ce(this%2C%22edgeColormapNegative%22)%2Ce(this%2C%22nodeMinColor%22)%2Ce(this%2C%22nodeMaxColor%22)%2Ce(this%2C%22edgeMin%22)%2Ce(this%2C%22edgeMax%22)%2Ce(this%2C%22nodes%22)%2Ce(this%2C%22edges%22)%2Ce(this%2C%22points%22)%2Cthis.anatomicalStructurePrimary%3Du%2Cthis.name%3Ds%2Cthis.colorbarVisible%3Dm%2Cthis.id%3DK()%3Bconst%20A%3Dae.getExtents(t)%3Bthis.furthestVertexFromOrigin%3DA.mxDx%2Cthis.extentsMin%3DA.extentsMin%2Cthis.extentsMax%3DA.extentsMax%2Cthis.opacity%3Dn%3E1%3F1%3An%2Cthis.visible%3Da%2Cthis.meshShaderIndex%3D0%2Cthis.indexBuffer%3Do.createBuffer()%2Cthis.vertexBuffer%3Do.createBuffer()%2Cthis.vao%3Do.createVertexArray()%2Co.bindVertexArray(this.vao)%2Co.bindBuffer(o.ELEMENT_ARRAY_BUFFER%2Cthis.indexBuffer)%2Co.bindBuffer(o.ARRAY_BUFFER%2Cthis.vertexBuffer)%2Co.enableVertexAttribArray(0)%2Co.enableVertexAttribArray(1)%3Bif(7!%3D%3Dthis.f32PerVertex%3F(o.vertexAttribPointer(0%2C3%2Co.FLOAT%2C!1%2C20%2C0)%2Co.vertexAttribPointer(1%2C4%2Co.BYTE%2C!0%2C20%2C12)%2Co.enableVertexAttribArray(2)%2Co.vertexAttribPointer(2%2C4%2Co.UNSIGNED_BYTE%2C!0%2C20%2C16))%3A(o.vertexAttribPointer(0%2C3%2Co.FLOAT%2C!1%2C28%2C0)%2Co.vertexAttribPointer(1%2C3%2Co.FLOAT%2C!1%2C28%2C12)%2Co.enableVertexAttribArray(2)%2Co.vertexAttribPointer(2%2C4%2Co.UNSIGNED_BYTE%2C!0%2C28%2C24))%2Co.bindVertexArray(null)%2Cthis.vaoFiber%3Do.createVertexArray()%2Cthis.offsetPt0%3Dnull%2Cthis.hasConnectome%3D!1%2Cthis.colormapInvert%3D!1%2Cthis.fiberGroupColormap%3Dnull%2Cthis.pts%3Dt%2Cthis.layers%3D%5B%5D%2Cthis.type%3D%22mesh%22%2Cthis.tris%3Di%2Cr%5B3%5D%3C1)return%20this.rgba255%3Dr%2Cthis.fiberLength%3D2%2Cthis.fiberDither%3D.1%2Cthis.fiberColor%3D%22Global%22%2Cthis.fiberDecimationStride%3D1%2Cthis.fiberMask%3D%5B%5D%2Cthis.colormap%3Dl%2Cthis.dpg%3Dh%2Cthis.dps%3Dc%2Cthis.dpv%3Dd%2Ch%26%26this.initValuesArray(h)%2Cc%26%26this.initValuesArray(c)%2Cd%26%26this.initValuesArray(d)%2Cthis.offsetPt0%3Dnew%20Uint32Array(i)%2Cthis.tris%3Dnew%20Uint32Array(0)%2Cthis.updateFibers(o)%2Co.bindVertexArray(this.vaoFiber)%2Co.bindBuffer(o.ELEMENT_ARRAY_BUFFER%2Cthis.indexBuffer)%2Co.bindBuffer(o.ARRAY_BUFFER%2Cthis.vertexBuffer)%2Co.enableVertexAttribArray(0)%2Co.vertexAttribPointer(0%2C3%2Co.FLOAT%2C!1%2C16%2C0)%2Co.enableVertexAttribArray(1)%2Co.vertexAttribPointer(1%2C4%2Co.UNSIGNED_BYTE%2C!0%2C16%2C12)%2Cvoid%20o.bindVertexArray(null)%3Bif(l)%7Bthis.connectome%3Dl%2Cthis.hasConnectome%3D!0%3Bconst%20t%3DObject.keys(l)%3Bfor(let%20e%3D0%2Ci%3Dt.length%3Be%3Ci%3Be%2B%2B)this%5Bt%5Be%5D%5D%3Dl%5Bt%5Be%5D%5D%7Dthis.rgba255%3Dr%2Cthis.updateMesh(o)%7DinitValuesArray(t)%7Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)%7Bconst%20i%3Dt%5Be%5D.vals.reduce(((t%2Ce)%3D%3EMath.min(t%2Ce)))%2Cs%3Dt%5Be%5D.vals.reduce(((t%2Ce)%3D%3EMath.max(t%2Ce)))%3Bt%5Be%5D.global_min%3Di%2Ct%5Be%5D.global_max%3Ds%2Ct%5Be%5D.cal_min%3Di%2Ct%5Be%5D.cal_max%3Ds%7Dreturn%20t%7DlinesToCylinders(t%2Ce%2Ci)%7Bfunction%20s(t)%7Breturn%20O.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D)%7Dconst%20r%3DMath.pow(2%2C32)-1%2Cn%3Di.length%3Blet%20a%3D0%2Co%3D0%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)i%5Bt%5D!%3D%3Dr%3Fa%2B%2B%3Ao%2B%2B%3Bconst%20l%3Dthis.fiberSides%2Ch%3Dl*a%2Cc%3Dthis.f32PerVertex%3Bif(5!%3D%3Dc)throw%20Error(%22fiberSides%20%3E%201%20requires%20f32PerVertex%20%3D%3D%205%22)%3Bconst%20d%3Dnew%20Float32Array(h*c)%2Cm%3Dnew%20Uint8Array(d.buffer)%3Blet%20u%3D0%2CA%3DY.create()%2Cf%3DY.create()%2Cg%3DY.create()%3Bconst%20p%3DO.create()%3Blet%20v%3DO.create()%2Cx%3D0%3Bconst%20w%3Dthis.fiberRadius%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)%7Bconst%20a%3Di%5Bt%5D%3D%3D%3Dr%3Bif(a%26%26x%3C1)continue%3Blet%20o%3D4*i%5Bt%5D%3Bif(x%2B%2B%2Cx%3C%3D1)%7BA%3DY.fromValues(e%5Bo%2B0%5D%2Ce%5Bo%2B1%5D%2Ce%5Bo%2B2%5D%2Ce%5Bo%2B3%5D)%2Cf%3DY.clone(A)%2Ct%2B1%3Cn%26%26i%5Bt%2B1%5D!%3D%3Dr%26%26(o%3D4*i%5Bt%2B1%5D%2Cg%3DY.fromValues(e%5Bo%2B0%5D%2Ce%5Bo%2B1%5D%2Ce%5Bo%2B2%5D%2Ce%5Bo%2B3%5D)%2CO.subtract(p%2Cs(A)%2Cs(g))%2CO.normalize(p%2Cp)%2Cv%3Dk.getFirstPerpVector(p))%3Bcontinue%7Dg%3Da%3FY.clone(f)%3AY.fromValues(e%5Bo%2B0%5D%2Ce%5Bo%2B1%5D%2Ce%5Bo%2B2%5D%2Ce%5Bo%2B3%5D)%2CO.subtract(p%2Cs(A)%2Cs(g))%2CO.normalize(p%2Cp)%3Bconst%20h%3DO.create()%3BO.cross(h%2Cv%2Cp)%3Bconst%20C%3DO.create()%3BO.cross(C%2Cp%2Ch)%2Cv%3DO.clone(v)%3Bconst%20b%3DO.create()%3BO.cross(b%2Cp%2CC)%2CO.normalize(b%2Cb)%3Bconst%20y%3DO.create()%3Bfor(let%20t%3D0%3Bt%3Cl%3Bt%2B%2B)%7Bconst%20e%3DMath.cos(t%2Fl*2*Math.PI)%2Ci%3DMath.sin(t%2Fl*2*Math.PI)%3By%5B0%5D%3Dw*(e*C%5B0%5D%2Bi*b%5B0%5D)%2Cy%5B1%5D%3Dw*(e*C%5B1%5D%2Bi*b%5B1%5D)%2Cy%5B2%5D%3Dw*(e*C%5B2%5D%2Bi*b%5B2%5D)%2CO.add(y%2Cs(f)%2Cy)%3Bconst%20r%3Du*c%3Bd%5Br%2B0%5D%3Dy%5B0%5D%2Cd%5Br%2B1%5D%3Dy%5B1%5D%2Cd%5Br%2B2%5D%3Dy%5B2%5D%3Bconst%20n%3DO.create()%3BO.subtract(n%2Cy%2Cs(f))%2CO.normalize(n%2Cn)%3Bconst%20a%3D4*(r%2B3)%3Bm%5Ba%2B0%5D%3D127*n%5B0%5D%2Cm%5Ba%2B1%5D%3D127*n%5B1%5D%2Cm%5Ba%2B2%5D%3D127*n%5B2%5D%2Cd%5Br%2B4%5D%3Df%5B3%5D%2Cu%2B%2B%7DA%3DY.clone(f)%2Cf%3DY.clone(g)%2Ca%26%26(x%3D0)%7Dconst%20C%3D(a-o)*l*2*3%2Cb%3Dnew%20Uint32Array(C)%3Blet%20y%3D0%3Bu%3D0%3Bfor(let%20t%3D1%3Bt%3Cn%3Bt%2B%2B)%7Bif(i%5Bt%5D%3D%3D%3Dr)%7Bu%2B%3Dl%3Bcontinue%7Dif(i%5Bt-1%5D%3D%3D%3Dr)continue%3Blet%20e%3Du%2Cs%3Du%2Bl%3Bconst%20n%3Ds%2Ca%3Ds%2Bl%3Bfor(let%20t%3D0%3Bt%3Cl%3Bt%2B%2B)b%5By%2B%2B%5D%3De%2Cb%5By%2B%2B%5D%3Ds%2B%2B%2Cs%3D%3D%3Da%26%26(s%3Da-l)%2Cb%5By%2B%2B%5D%3Ds%2Cb%5By%2B%2B%5D%3De%2B%2B%2Ce%3D%3D%3Dn%26%26(e%3Dn-l)%2Cb%5By%2B%2B%5D%3Ds%2Cb%5By%2B%2B%5D%3De%3Bu%2B%3Dl%7Dt.bindBuffer(t.ELEMENT_ARRAY_BUFFER%2Cthis.indexBuffer)%2Ct.bufferData(t.ELEMENT_ARRAY_BUFFER%2CUint32Array.from(b)%2Ct.STATIC_DRAW)%2Ct.bindBuffer(t.ARRAY_BUFFER%2Cthis.vertexBuffer)%2Ct.bufferData(t.ARRAY_BUFFER%2CFloat32Array.from(d)%2Ct.STATIC_DRAW)%2Cthis.indexCount%3DC%7DcreateFiberDensityMap()%7Bif(this.fiberDensity)return%3Bconst%20t%3Dthis.pts%2Ce%3Dt.length%2F3%3Blet%20i%3D0%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)%7Bconst%20e%3Dthis.extentsMax%5Bt%5D-this.extentsMin%5Bt%5D%3Bi%3DMath.max(i%2Ce)%7Dif(this.fiberDensity%3Dnew%20Float32Array(e)%2C0%3D%3D%3Di)return%3Bconst%20s%3D64%2Cr%3Di%2F63%2F2%2Cn%3D63%2Fi%3Blet%20a%3Dnew%20Float32Array(262144)%3Bconst%20o%3D%5Bthis.extentsMin%5B0%5D-r%2Cthis.extentsMin%5B1%5D-r%2Cthis.extentsMin%5B2%5D-r%5D%2Cl%3D%5B0%2C0%2C0%5D%3Blet%20h%3D0%3Bfor(let%20i%3D0%3Bi%3Ce%3Bi%2B%2B)%7Bl%5B0%5D%3DMath.round((t%5Bh%2B%2B%5D-o%5B0%5D)*n)%2Cl%5B1%5D%3DMath.round((t%5Bh%2B%2B%5D-o%5B1%5D)*n)%2Cl%5B2%5D%3DMath.round((t%5Bh%2B%2B%5D-o%5B2%5D)*n)%3Bconst%20e%3Dl%5B0%5D%2Bl%5B1%5D*s%2B4096*l%5B2%5D%3B-1!%3D%3De%26%26a%5Be%5D%2B%2B%7Dfunction%20c(t%2Ce)%7Blet%20i%3Dt.slice()%2Cs%3D-1%3Bconst%20r%3De-1%3Bfor(let%20n%3D0%3Bn%3Ce%3Bn%2B%2B)for(let%20n%3D0%3Bn%3Ce%3Bn%2B%2B)for(let%20n%3D0%3Bn%3Ce%3Bn%2B%2B)s%2B%2B%2Cn%3C1%7C%7Cn%3E%3Dr%7C%7C(t%5Bs%5D%3Di%5Bs-1%5D%2Bi%5Bs%5D%2Bi%5Bs%5D%2Bi%5Bs%2B1%5D)%3Bs%3D-1%2Ci%3Dt.slice()%3Bfor(let%20n%3D0%3Bn%3Ce%3Bn%2B%2B)for(let%20n%3D0%3Bn%3Ce%3Bn%2B%2B)for(let%20a%3D0%3Ba%3Ce%3Ba%2B%2B)s%2B%2B%2Cn%3C1%7C%7Cn%3E%3Dr%7C%7C(t%5Bs%5D%3Di%5Bs-e%5D%2Bi%5Bs%5D%2Bi%5Bs%5D%2Bi%5Bs%2Be%5D)%3Bconst%20n%3De*e%3Bs%3D-1%2Ci%3Dt.slice()%3Bfor(let%20a%3D0%3Ba%3Ce%3Ba%2B%2B)for(let%20o%3D0%3Bo%3Ce%3Bo%2B%2B)for(let%20o%3D0%3Bo%3Ce%3Bo%2B%2B)s%2B%2B%2Ca%3C1%7C%7Ca%3E%3Dr%7C%7C(t%5Bs%5D%3Di%5Bs-n%5D%2Bi%5Bs%5D%2Bi%5Bs%5D%2Bi%5Bn%5D)%3Breturn%20t%7Da%3Dc(a%2Cs)%2Ca%3Dc(a%2Cs)%3Blet%20d%3D0%2Cm%3D1%2F0%3Bconst%20u%3D262144%3Bfor(let%20t%3D0%3Bt%3Cu%3Bt%2B%2B)a%5Bt%5D%3C%3D0%7C%7C(d%3DMath.max(d%2Ca%5Bt%5D)%2Cm%3DMath.min(m%2Ca%5Bt%5D))%3Bif(!(d%3C%3D1%7C%7Cd%3C%3Dm))%7Bh%3D0%3Bfor(let%20t%3D0%3Bt%3Cu%3Bt%2B%2B)a%5Bt%5D%3DMath.max(0%2Ca%5Bt%5D-m)%3Bd-%3Dm%3Bfor(let%20i%3D0%3Bi%3Ce%3Bi%2B%2B)%7Bl%5B0%5D%3DMath.round((t%5Bh%2B%2B%5D-o%5B0%5D)*n)%2Cl%5B1%5D%3DMath.round((t%5Bh%2B%2B%5D-o%5B1%5D)*n)%2Cl%5B2%5D%3DMath.round((t%5Bh%2B%2B%5D-o%5B2%5D)*n)%3Bconst%20e%3Dl%5B0%5D%2Bl%5B1%5D*s%2B4096*l%5B2%5D%3Bthis.fiberDensity%5Bi%5D%3Da%5Be%5D%2Fd%7D%7D%7DupdateFibers(t)%7Bif(!this.offsetPt0%7C%7C!this.fiberLength)return%3Bconst%20e%3Dthis.pts%2Ci%3Dthis.offsetPt0%2Cs%3Di.length-1%2Cr%3De.length%2F3%3Bif(!this.fiberLengths)%7Bthis.fiberLengths%3Dnew%20Uint32Array(s)%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)%7Bconst%20s%3D3*i%5Bt%5D%2Cr%3D3*(i%5Bt%2B1%5D-1)%3Blet%20n%3D0%3Bfor(let%20t%3Ds%3Bt%3Cr%3Bt%2B%3D3)%7Bconst%20i%3DO.fromValues(e%5Bt%2B0%5D-e%5Bt%2B3%5D%2Ce%5Bt%2B1%5D-e%5Bt%2B4%5D%2Ce%5Bt%2B2%5D-e%5Bt%2B5%5D)%3Bn%2B%3DO.len(i)%7Dthis.fiberLengths%5Bt%5D%3Dn%7D%7Dconst%20n%3Dnew%20Float32Array(4*r)%2Ca%3Dnew%20Uint32Array(n.buffer)%3Blet%20o%3D0%2Cl%3D0%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)n%5Bl%2B0%5D%3De%5Bo%2B0%5D%2Cn%5Bl%2B1%5D%3De%5Bo%2B1%5D%2Cn%5Bl%2B2%5D%3De%5Bo%2B2%5D%2Co%2B%3D3%2Cl%2B%3D4%3Bconst%20h%3Dthis.fiberDither%2Cc%3D.5*h%3Bfunction%20d(t%2Ce%2Ci)%7Bconst%20s%3D255*(h*Math.random()-c)%3Breturn(t%3DMath.max(Math.min(t%2Bs%2C255)%2C0))%2B((e%3DMath.max(Math.min(e%2Bs%2C255)%2C0))%3C%3C8)%2B((i%3DMath.max(Math.min(i%2Bs%2C255)%2C0))%3C%3C16)%7Dfunction%20m(t%2Ce%2Ci%2Cs%2Cr%2Cn%2Ca)%7Bconst%20o%3DO.fromValues(Math.abs(t-s)%2CMath.abs(e-r)%2CMath.abs(i-n))%3BO.normalize(o%2Co)%3Bconst%20l%3Da-c%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)o%5Bt%5D%3D255*Math.max(Math.min(Math.abs(o%5Bt%5D)%2Bl%2C1)%2C0)%3Breturn%20o%5B0%5D%2B(o%5B1%5D%3C%3C8)%2B(o%5B2%5D%3C%3C16)%7Dconst%20u%3Dthis.fiberColor.toLowerCase()%3Blet%20A%3Dnull%2Cf%3Dnull%3Bif(u.startsWith(%22dps%22)%26%26this.dps%26%26this.dps.length%3E0)%7Bconst%20t%3DparseInt(u.substring(3))%3Bt%3Cthis.dps.length%26%26this.dps%5Bt%5D.vals.length%3D%3D%3Ds%26%26(A%3Dthis.dps%5Bt%5D.vals)%7Dif(u.startsWith(%22dpv%22)%26%26this.dpv%26%26this.dpv.length%3E0)%7Bconst%20t%3DparseInt(u.substring(3))%3Bt%3Cthis.dpv.length%26%26this.dpv%5Bt%5D.vals.length%3D%3D%3Dr%26%26(f%3Dthis.dpv%5Bt%5D)%7Dconst%20g%3Dnew%20Int16Array(s)%3Bif(this.dpg%26%26null!%3D%3Dthis.fiberGroupColormap)%7Bconst%20t%3Dnew%20Uint8ClampedArray(4*this.dpg.length)%2Ce%3Dnew%20Array(this.dpg.length).fill(!1)%2Cr%3Dthis.fiberGroupColormap%3Bvoid%200%3D%3D%3Dr.A%26%26(r.A%3DArray.from(new%20Uint8ClampedArray(r.I.length).fill(255)))%3Bfor(let%20i%3D0%3Bi%3Cr.I.length%3Bi%2B%2B)%7Blet%20s%3Dr.I%5Bi%5D%3Bs%3C0%7C%7Cs%3E%3Dthis.dpg.length%7C%7C(r.A%5Bi%5D%3C1%7C%7C(e%5Bs%5D%3D!0%2Cs*%3D4%2Ct%5Bs%5D%3Dr.R%5Bi%5D%2Ct%5Bs%2B1%5D%3Dr.G%5Bi%5D%2Ct%5Bs%2B2%5D%3Dr.B%5Bi%5D%2Ct%5Bs%2B3%5D%3D255))%7Dg.fill(-1)%3Bfor(let%20t%3D0%3Bt%3Cthis.dpg.length%3Bt%2B%2B)if(e%5Bt%5D)for(let%20e%3D0%3Be%3Cthis.dpg%5Bt%5D.vals.length%3Be%2B%2B)g%5Bthis.dpg%5Bt%5D.vals%5Be%5D%5D%3Dt%3Bfor(let%20e%3D0%3Be%3Cs%3Be%2B%2B)%7Bif(g%5Be%5D%3C0)continue%3Bconst%20s%3Dg%5Be%5D%25256*4%2Cr%3Dd(t%5Bs%5D%2Ct%5Bs%2B1%5D%2Ct%5Bs%2B2%5D)%2Cn%3Di%5Be%5D%2Co%3D4*(i%5Be%2B1%5D-1)%2B3%3Bfor(let%20t%3D4*n%2B3%3Bt%3C%3Do%3Bt%2B%3D4)a%5Bt%5D%3Dr%7D%7Delse%20if(f)%7Bconst%20t%3Dse.colormap(this.colormap%2Cthis.colormapInvert)%2Ce%3Df.cal_min%2Ci%3Df.cal_max%3Blet%20s%3D3%3Bfor(let%20n%3D0%3Bn%3Cr%3Bn%2B%2B)%7Blet%20r%3DMath.min(Math.max((f.vals%5Bn%5D-e)%2F(i-e)%2C0)%2C1)%3Br%3D4*Math.round(Math.max(Math.min(255%2C255*r)))%3Bconst%20o%3Dt%5Br%5D%2B(t%5Br%2B1%5D%3C%3C8)%2B(t%5Br%2B2%5D%3C%3C16)%3Ba%5Bs%5D%3Do%2Cs%2B%3D4%7D%7Delse%20if(A)%7Bconst%20t%3Dse.colormap(this.colormap%2Cthis.colormapInvert)%3Blet%20e%3DA%5B0%5D%2Cr%3DA%5B0%5D%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)e%3DMath.min(e%2CA%5Bt%5D)%2Cr%3DMath.max(r%2CA%5Bt%5D)%3Br%3D%3D%3De%26%26(e-%3D1)%3Bfor(let%20n%3D0%3Bn%3Cs%3Bn%2B%2B)%7Blet%20s%3D(A%5Bn%5D-e)%2F(r-e)%3Bs%3D4*Math.round(Math.max(Math.min(255%2C255*s)))%3Bconst%20o%3Dt%5Bs%5D%2B(t%5Bs%2B1%5D%3C%3C8)%2B(t%5Bs%2B2%5D%3C%3C16)%2Cl%3Di%5Bn%5D%2Ch%3D4*(i%5Bn%2B1%5D-1)%2B3%3Bfor(let%20t%3D4*l%2B3%3Bt%3C%3Dh%3Bt%2B%3D4)a%5Bt%5D%3Do%7D%7Delse%20if(u.includes(%22fixed%22))if(0%3D%3D%3Dh)%7Bconst%20t%3Dthis.rgba255%5B0%5D%2B(this.rgba255%5B1%5D%3C%3C8)%2B(this.rgba255%5B2%5D%3C%3C16)%3Blet%20e%3D3%3Bfor(let%20i%3D0%3Bi%3Cr%3Bi%2B%2B)a%5Be%5D%3Dt%2Ce%2B%3D4%7Delse%20for(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)%7Bconst%20e%3Dd(this.rgba255%5B0%5D%2Cthis.rgba255%5B1%5D%2Cthis.rgba255%5B2%5D)%2Cs%3Di%5Bt%5D%2Cr%3D4*(i%5Bt%2B1%5D-1)%2B3%3Bfor(let%20t%3D4*s%2B3%3Bt%3C%3Dr%3Bt%2B%3D4)a%5Bt%5D%3De%7Delse%20if(u.includes(%22local%22))for(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)%7Bconst%20s%3Di%5Bt%5D%3Blet%20r%3D3*s%3Bconst%20n%3D3*(i%5Bt%2B1%5D-1)%2Co%3Dh*Math.random()%3Blet%20l%3Dm(e%5Br%5D%2Ce%5Br%2B1%5D%2Ce%5Br%2B2%5D%2Ce%5Br%2B4%5D%2Ce%5Br%2B5%5D%2Ce%5Br%2B6%5D%2Co)%2Cc%3D4*s%2B3%3Bfor(%3Br%3Cn%3B)a%5Bc%5D%3Dl%2Cc%2B%3D4%2Cr%2B%3D3%2Cl%3Dm(e%5Br-3%5D%2Ce%5Br-2%5D%2Ce%5Br-1%5D%2Ce%5Br%2B3%5D%2Ce%5Br%2B4%5D%2Ce%5Br%2B5%5D%2Co)%3Ba%5Bc%5D%3Da%5Bc-4%5D%7Delse%20for(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)%7Bconst%20s%3Di%5Bt%5D%2Cr%3Di%5Bt%2B1%5D-1%2Cn%3D3*s%2Co%3D3*r%2Cl%3Dm(e%5Bn%5D%2Ce%5Bn%2B1%5D%2Ce%5Bn%2B2%5D%2Ce%5Bo%5D%2Ce%5Bo%2B1%5D%2Ce%5Bo%2B2%5D%2Ch*Math.random())%2Cc%3D4*r%2B3%3Bfor(let%20t%3D4*s%2B3%3Bt%3C%3Dc%3Bt%2B%3D4)a%5Bt%5D%3Dl%7Dif(this.fiberOcclusion%3E0)%7Blet%20t%3Dfunction(t%2Ce)%7Breturn%20e*(255%26t)%2B(e*(t%3E%3E8%26255)%3C%3C8)%2B(e*(t%3E%3E16%26255)%3C%3C16)%7D%3Bthis.createFiberDensityMap()%3Bfor(let%20e%3D0%3Be%3Cs%3Be%2B%2B)%7Bconst%20s%3Di%5Be%5D%2Cr%3D4*s%2B3%2Cn%3D4*(i%5Be%2B1%5D-1)%2B3%3Blet%20o%3Ds%3Bconst%20l%3DMath.min(this.fiberOcclusion%2C.99)%3Bfor(let%20e%3Dr%3Be%3C%3Dn%3Be%2B%3D4)%7Blet%20i%3Dthis.fiberDensity%5Bo%2B%2B%5D%3Bif(i%3C%3D0)continue%3Bi%2F%3D(1%2Fl-2)*(1-i)%2B1%3Bconst%20s%3D1-Math.min(i%2C.9)%3Blet%20r%3Da%5Be%5D%3Br%3Dt(r%2Cs)%2Ca%5Be%5D%3Dr%7D%7D%7Dconst%20p%3Dthis.fiberLength%2Cv%3DMath.pow(2%2C32)-1%2Cx%3D%5B%5D%3Blet%20w%3D-1%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)if(!(g%5Bt%5D%3C0%7C%7Cthis.fiberLengths%5Bt%5D%3Cp%7C%7C(w%2B%2B%2Cw%25this.fiberDecimationStride!%3D0)))%7Bfor(let%20e%3Di%5Bt%5D%3Be%3Ci%5Bt%2B1%5D%3Be%2B%2B)x.push(e)%3Bx.push(v)%7Dthis.fiberSides%3E2%26%26this.fiberRadius%3E0%3Fthis.linesToCylinders(t%2Cn%2Cx)%3A(this.indexCount%3Dx.length%2Ct.bindBuffer(t.ARRAY_BUFFER%2Cthis.vertexBuffer)%2Ct.bufferData(t.ARRAY_BUFFER%2CUint32Array.from(a)%2Ct.STATIC_DRAW)%2Ct.bindBuffer(t.ELEMENT_ARRAY_BUFFER%2Cthis.indexBuffer)%2Ct.bufferData(t.ELEMENT_ARRAY_BUFFER%2CUint32Array.from(x)%2Ct.STATIC_DRAW))%7DindexNearestXYZmm(t%2Ce%2Ci)%7Bconst%20s%3Dthis.pts%2Cr%3Dthis.pts.length%2F3%3Blet%20n%3D0%2Ca%3D1%2F0%2Co%3D0%3Bfor(let%20l%3D0%3Bl%3Cr%3Bl%2B%2B)%7Bconst%20r%3DMath.pow(s%5Bn%5D-t%2C2)%2BMath.pow(s%5Bn%2B1%5D-e%2C2)%2BMath.pow(s%5Bn%2B2%5D-i%2C2)%3Br%3Ca%26%26(a%3Dr%2Co%3Dl)%2Cn%2B%3D3%7Dreturn%20a%3DMath.sqrt(a)%2C%5Bo%2Ca%5D%7DunloadMesh(t)%7Bif(t.bindBuffer(t.ARRAY_BUFFER%2Cnull)%2Ct.bindBuffer(t.ELEMENT_ARRAY_BUFFER%2Cnull)%2Ct.bindVertexArray(null)%2Ct.deleteBuffer(this.vertexBuffer)%2Ct.deleteBuffer(this.indexBuffer)%2Ct.deleteVertexArray(this.vao)%2Ct.deleteVertexArray(this.vaoFiber)%2Cthis.offsetPt0%3Dnull%2Cthis.tris%3Dnull%2Cthis.pts%3Dnull%2Cthis.layers%26%26this.layers.length%3E0)for(let%20t%3D0%3Bt%3Cthis.layers.length%3Bt%2B%2B)this.layers%5Bt%5D.values%3Dnull%3Bif(this.dpg%26%26this.dpg.length%3E0)for(let%20t%3D0%3Bt%3Cthis.dpg.length%3Bt%2B%2B)this.dpg%5Bt%5D.vals%3Dnull%3Bif(this.dps%26%26this.dps.length%3E0)for(let%20t%3D0%3Bt%3Cthis.dps.length%3Bt%2B%2B)this.dps%5Bt%5D.vals%3Dnull%7DupdateMesh(t)%7Bif(this.offsetPt0)return%20void%20this.updateFibers(t)%3Bif(this.hasConnectome)return%3Bif(!this.pts%7C%7C!this.tris%7C%7C!this.rgba255)return%20void%20l.warn(%22underspecified%20mesh%22)%3Bfunction%20e(t%2Ce%2Ci)%7Breturn%20t*(1-i)%2Be*i%7Dfunction%20i(t%2Ce)%7Breturn%20Math.min(t%2Be%2C255)%7Dconst%20s%3Dthis.generatePosNormClr(this.pts%2Cthis.tris%2Cthis.rgba255)%2Cr%3Dthis.pts.length%2F3%2Cn%3Dnew%20Uint8Array(s.buffer)%3Blet%20a%3D0%3Bconst%20o%3Dnew%20Uint8Array(4*r)%3Bif(this.layers%26%26this.layers.length%3E0)for(let%20t%3D0%3Bt%3Cthis.layers.length%3Bt%2B%2B)%7Bconst%20s%3Dthis.layers%5Bt%5D%2Cl%3Ds.opacity%3Bif(l%3C%3D0%7C%7Cs.cal_min%3Es.cal_max)continue%3Bif(void%200%3D%3D%3Ds.outlineBorder%26%26(s.outlineBorder%3D0)%2Cvoid%200%3D%3D%3Ds.isAdditiveBlend%26%26(s.isAdditiveBlend%3D!1)%2Cs.colormapLabel%26%26s.colormapLabel.R%26%26!s.colormapLabel.lut%26%26(s.colormapLabel%3Dse.makeLabelLut(s.colormapLabel))%2Cs.colormapLabel%26%26s.colormapLabel.lut)%7Bconst%20t%3Ds.colormapLabel.lut%2Ci%3DMath.floor(t.length%2F4)%2Ca%3Dr*Math.min(Math.max(s.frame4D%2C0)%2Cs.nFrame4D-1)%2Co%3Dnew%20Uint8Array(4*r)%3Blet%20h%3D0%3Bfor(let%20e%3D0%3Be%3Cs.values.length%3Be%2B%2B)%7Blet%20r%3D4*Math.min(Math.max(s.values%5Be%2Ba%5D%2C0)%2Ci-1)%3Bo%5Bh%2B0%5D%3Dt%5Br%2B0%5D%2Co%5Bh%2B1%5D%3Dt%5Br%2B1%5D%2Co%5Bh%2B2%5D%3Dt%5Br%2B2%5D%2Ch%2B%3D4%7Dlet%20c%3Dnew%20Array(r).fill(!1)%3Bs.outlineBorder%3E0%26%26(c%3Dae.getClusterBoundary(o%2Cthis.tris))%2Ch%3D0%3Bfor(let%20t%3D0%3Bt%3Cs.values.length%3Bt%2B%2B)%7Blet%20i%3Dl%3Bc%5Bt%5D%26%26(i%3Ds.outlineBorder)%3Blet%20r%3D28*t%2B24%3B7!%3D%3Dthis.f32PerVertex%26%26(r%3D20*t%2B16)%2Cn%5Br%2B0%5D%3De(n%5Br%2B0%5D%2Co%5Bh%2B0%5D%2Ci)%2Cn%5Br%2B1%5D%3De(n%5Br%2B1%5D%2Co%5Bh%2B1%5D%2Ci)%2Cn%5Br%2B2%5D%3De(n%5Br%2B2%5D%2Co%5Bh%2B2%5D%2Ci)%2Ch%2B%3D4%7Dcontinue%7Dif(s.values%20instanceof%20Uint8Array)%7Bconst%20t%3Dnew%20Uint8Array(s.values.buffer)%3Blet%20i%3Dnew%20Array(r).fill(!0)%3Bs.outlineBorder%3E0%26%26(i%3Dae.getClusterBoundary(t%2Cthis.tris))%3Blet%20a%3D0%3Bfor(let%20r%3D0%3Br%3Cs.values.length%3Br%2B%2B)%7Blet%20o%3D28*r%2B24%3B7!%3D%3Dthis.f32PerVertex%26%26(o%3D20*r%2B16)%3Blet%20h%3Dl%3Bi%5Br%5D%26%26(h%3Ds.outlineBorder)%2Cn%5Bo%2B0%5D%3De(n%5Bo%2B0%5D%2Ct%5Ba%2B0%5D%2Ch)%2Cn%5Bo%2B1%5D%3De(n%5Bo%2B1%5D%2Ct%5Ba%2B1%5D%2Ch)%2Cn%5Bo%2B2%5D%3De(n%5Bo%2B2%5D%2Ct%5Ba%2B2%5D%2Ch)%2Ca%2B%3D4%7Dcontinue%7Dconst%20h%3Dse.colormap(s.colormap%2Cs.colormapInvert)%2Cc%3Dr*Math.min(Math.max(s.frame4D%2C0)%2Cs.nFrame4D-1)%3Bs.isAdditiveBlend%26%26(a%3DMath.max(a%2Cl))%2Cs.useNegativeCmap%26%26(s.cal_min%3DMath.max(0%2Cs.cal_min)%2Cs.cal_max%3DMath.max(s.cal_min%2B1e-6%2Cs.cal_max))%2Cvoid%200%3D%3D%3Ds.isTransparentBelowCalMin%26%26(s.isTransparentBelowCalMin%3D!0)%3Blet%20d%3Ds.cal_min%3Bs.alphaThreshold%26%26(d%3DMath.min(d%2C0))%3Bconst%20m%3D255%2F(s.cal_max-d)%3Blet%20u%3Ds.cal_min%3Bif(s.isTransparentBelowCalMin%7C%7C(u%3DNumber.NEGATIVE_INFINITY)%2Cs.outlineBorder%3C%3D0)for(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)%7Bconst%20r%3Ds.values%5Bt%2Bc%5D%3Bif(r%3Cu)continue%3Blet%20a%3DMath.round((r-d)*m)%3Bif(a%3C0%26%26s.isTransparentBelowCalMin)continue%3Ba%3DMath.max(0%2Ca)%2Ca%3D4*Math.min(255%2Ca)%3Blet%20A%3D28*t%2B24%3Bif(7!%3D%3Dthis.f32PerVertex%26%26(A%3D20*t%2B16)%2Cs.isAdditiveBlend)%7Bconst%20e%3D4*t%3Bo%5Be%2B0%5D%3Di(o%5Be%2B0%5D%2Ch%5Ba%2B0%5D)%2Co%5Be%2B1%5D%3Di(o%5Be%2B1%5D%2Ch%5Ba%2B1%5D)%2Co%5Be%2B2%5D%3Di(o%5Be%2B2%5D%2Ch%5Ba%2B2%5D)%2Co%5Be%2B3%5D%3Di(o%5Be%2B3%5D%2C255)%7Delse%7Bconst%20t%3Dl%3Bn%5BA%2B0%5D%3De(n%5BA%2B0%5D%2Ch%5Ba%2B0%5D%2Ct)%2Cn%5BA%2B1%5D%3De(n%5BA%2B1%5D%2Ch%5Ba%2B1%5D%2Ct)%2Cn%5BA%2B2%5D%3De(n%5BA%2B2%5D%2Ch%5Ba%2B2%5D%2Ct)%7D%7Delse%7Bconst%20t%3Dnew%20Uint8Array(r)%3Bfor(let%20e%3D0%3Be%3Cr%3Be%2B%2B)%7Blet%20i%3DMath.round((s.values%5Be%2Bc%5D-s.cal_min)*m)%3Bi%3C0%7C%7C(i%3DMath.min(255%2Ci)%2Ct%5Be%5D%3Di)%7Dconst%20i%3Dae.getClusterBoundaryU8(t%2Cthis.tris)%3Bfor(let%20a%3D0%3Ba%3Cr%3Ba%2B%2B)%7Bif(t%5Ba%5D%3C1)continue%3Blet%20r%3Dl%3Bi%5Ba%5D%26%26(r%3Ds.outlineBorder)%3Bconst%20o%3D4*t%5Ba%5D%3Blet%20c%3D28*a%2B24%3B7!%3D%3Dthis.f32PerVertex%26%26(c%3D20*a%2B16)%2Cn%5Bc%2B0%5D%3De(n%5Bc%2B0%5D%2Ch%5Bo%2B0%5D%2Cr)%2Cn%5Bc%2B1%5D%3De(n%5Bc%2B1%5D%2Ch%5Bo%2B1%5D%2Cr)%2Cn%5Bc%2B2%5D%3De(n%5Bc%2B2%5D%2Ch%5Bo%2B2%5D%2Cr)%7D%7Dif(s.useNegativeCmap)%7Bconst%20t%3Dse.colormap(s.colormapNegative%2Cs.colormapInvert)%3Bif(s.outlineBorder%3C%3D0)%7Blet%20a%3Ds.cal_min%2Ch%3Ds.cal_max%3BisFinite(s.cal_minNeg)%26%26isFinite(s.cal_minNeg)%26%26(a%3D-s.cal_minNeg%2Ch%3D-s.cal_maxNeg)%2Ch%3Ca%26%26(%5Ba%2Ch%5D%3D%5Bh%2Ca%5D)%3Blet%20d%3Da%3B0%3D%3D%3Dd%26%26(d%3DNumber.EPSILON)%2Cs.alphaThreshold%26%26(a%3D0)%3Bconst%20m%3D255%2F(h-a)%3Bfor(let%20h%3D0%3Bh%3Cr%3Bh%2B%2B)%7Bconst%20r%3D-s.values%5Bh%2Bc%5D%3Bif(r%3Cd)continue%3Blet%20u%3DMath.round((r-a)*m)%3Bif(u%3C0)continue%3Bu%3D4*Math.min(255%2Cu)%3Blet%20A%3D28*h%2B24%3Bif(7!%3D%3Dthis.f32PerVertex%26%26(A%3D20*h%2B16)%2Cs.isAdditiveBlend)%7Bconst%20e%3D4*h%3Bo%5Be%2B0%5D%3Di(o%5Be%2B0%5D%2Ct%5Bu%2B0%5D)%2Co%5Be%2B1%5D%3Di(o%5Be%2B1%5D%2Ct%5Bu%2B1%5D)%2Co%5Be%2B2%5D%3Di(o%5Be%2B2%5D%2Ct%5Bu%2B2%5D)%2Co%5Be%2B3%5D%3Di(o%5Be%2B3%5D%2C255)%7Delse%20n%5BA%2B0%5D%3De(n%5BA%2B0%5D%2Ct%5Bu%2B0%5D%2Cl)%2Cn%5BA%2B1%5D%3De(n%5BA%2B1%5D%2Ct%5Bu%2B1%5D%2Cl)%2Cn%5BA%2B2%5D%3De(n%5BA%2B2%5D%2Ct%5Bu%2B2%5D%2Cl)%7D%7Delse%7Bconst%20i%3Dnew%20Uint8Array(r)%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)%7Bconst%20e%3DMath.round((-s.values%5Bt%2Bc%5D-s.cal_min)*m)%3Be%3C0%7C%7C(i%5Bt%5D%3DMath.min(255%2Ce))%7Dconst%20a%3Dae.getClusterBoundaryU8(i%2Cthis.tris)%3Bfor(let%20i%3D0%3Bi%3Cr%3Bi%2B%2B)%7Blet%20r%3D255%2Co%3Dl%3Ba%5Bi%5D%26%26(o%3Ds.outlineBorder)%2Cr%3D4*Math.min(255%2Cr)%3Blet%20h%3D28*i%2B24%3B7!%3D%3Dthis.f32PerVertex%26%26(h%3D20*i%2B16)%2Cn%5Bh%2B0%5D%3De(n%5Bh%2B0%5D%2Ct%5Br%2B0%5D%2Co)%2Cn%5Bh%2B1%5D%3De(n%5Bh%2B1%5D%2Ct%5Br%2B1%5D%2Co)%2Cn%5Bh%2B2%5D%3De(n%5Bh%2B2%5D%2Ct%5Br%2B2%5D%2Co)%7D%7D%7D%7Dif(a%3E0)for(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)%7Blet%20i%3Dfunction(t%2Ce)%7Breturn%20Math.min(t*e*(1%2F255)%2C255)%7D%2Cs%3D28*t%2B24%3B7!%3D%3Dthis.f32PerVertex%26%26(s%3D20*t%2B16)%3Bconst%20r%3D4*t%2Cl%3DMath.min(a%2Co%5Br%2B3%5D%2F255)%3Bl%3C%3D0%7C%7C(n%5Bs%2B0%5D%3Di(n%5Bs%2B0%5D%2Co%5Br%2B0%5D)%2Cn%5Bs%2B1%5D%3Di(n%5Bs%2B1%5D%2Co%5Br%2B1%5D)%2Cn%5Bs%2B2%5D%3Di(n%5Bs%2B2%5D%2Co%5Br%2B2%5D)%2Cn%5Bs%2B0%5D%3De(n%5Bs%2B0%5D%2Co%5Br%2B0%5D%2Cl)%2Cn%5Bs%2B1%5D%3De(n%5Bs%2B1%5D%2Co%5Br%2B1%5D%2Cl)%2Cn%5Bs%2B2%5D%3De(n%5Bs%2B2%5D%2Co%5Br%2B2%5D%2Cl))%7Dt.bindBuffer(t.ELEMENT_ARRAY_BUFFER%2Cthis.indexBuffer)%2Ct.bufferData(t.ELEMENT_ARRAY_BUFFER%2CUint32Array.from(this.tris)%2Ct.STATIC_DRAW)%2Ct.bindBuffer(t.ARRAY_BUFFER%2Cthis.vertexBuffer)%2Ct.bufferData(t.ARRAY_BUFFER%2CFloat32Array.from(s)%2Ct.STATIC_DRAW)%2Cthis.indexCount%3Dthis.tris.length%2Cthis.vertexCount%3Dthis.pts.length%7DreverseFaces(t)%7Bif(this.offsetPt0)return%3Bif(this.hasConnectome)return%3Bconst%20e%3Dthis.tris%7C%7C%5B%5D%3Bfor(let%20t%3D0%3Bt%3Ce.length%3Bt%2B%3D3)%7Bconst%20i%3De%5Bt%5D%3Be%5Bt%5D%3De%5Bt%2B1%5D%2Ce%5Bt%2B1%5D%3Di%7Dthis.updateMesh(t)%7DhierarchicalOrder()%7Bconst%20t%3Dthis.tris.length%2F3%2Ce%3DMath.log(t%2F20)%2FMath.log(4)%3Bif(t!%3D%3D20*Math.pow(4%2Ce))return%20NaN%3Bif(this.pts.length%2F3!%3D%3D10*Math.pow(4%2Ce)%2B2)return%20NaN%3Bfor(let%20t%3D0%3Bt%3C15%3Bt%2B%3D3)if(0!%3D%3Dthis.tris%5Bt%5D)return%20NaN%3Bfor(let%20t%3D15%3Bt%3C24%3Bt%2B%3D3)if(3!%3D%3Dthis.tris%5Bt%5D)return%20NaN%3Bfor(let%20t%3D24%3Bt%3C30%3Bt%2B%3D3)if(4!%3D%3Dthis.tris%5Bt%5D)return%20NaN%3Breturn%20e%7DdecimateFaces(t%2Ce)%7Blet%20i%3Dthis.tris%3Bfor(let%20s%3Dt-1%3Bs%3E%3De%3Bs--)%7Bconst%20t%3D10*Math.pow(4%2Cs%2B1)%2B2%2Ce%3D10*Math.pow(4%2Cs)%2B2%2Cr%3Di.length%2F3%2Cn%3D20*Math.pow(4%2Cs)%3Bconsole.log(%60order%20%24%7Bs%2B1%7D%20-%3E%20%24%7Bs%7D%20vertices%20%24%7Bt%7D%20-%3E%20%24%7Be%7D%20faces%20%24%7Br%7D%20-%3E%20%24%7Bn%7D%60)%3Bconst%20a%3DArray.from(%7Blength%3At%7D%2C((t%2Ce)%3D%3Ee%2B1))%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)%7Bconst%20e%3Di%5B3*t%5D%2Cs%3Di%5B3*t%2B1%5D%2Cr%3Di%5B3*t%2B2%5D%3Ba%5Be-1%5D%3DMath.min(a%5Be-1%5D%2Cs%2Cr)%7Dconst%20o%3Dnew%20Uint32Array(3*n)%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)o%5B3*t%5D%3Da%5Bi%5B3*t%5D-1%5D%2Co%5B3*t%2B1%5D%3Da%5Bi%5B3*t%2B1%5D-1%5D%2Co%5B3*t%2B2%5D%3Da%5Bi%5B3*t%2B2%5D-1%5D%3Bi%3Do%7Dthis.tris%3Dnew%20Uint32Array(i)%7DdecimateHierarchicalMesh(t%2Ce%3D4)%7Bconst%20i%3Dthis.hierarchicalOrder()%3Bif(isNaN(i))return%20l.warn(%22Unable%20to%20decimate%20mesh%3A%20it%20does%20not%20have%20a%20hierarchical%20structure%22)%2C!1%3Bif(e%3E%3Di)return%20l.warn(%60Unable%20to%20decimate%20mesh%3A%20input%20order%20(%24%7Bi%7D)%20must%20be%20larger%20than%20downsampled%20order%20(%24%7Be%7D)%60)%2C!1%3Bconst%20s%3Dthis.pts.length%2F3%2Cr%3D10*Math.pow(4%2Ce)%2B2%3Bif(this.pts%3Dnew%20Float32Array(this.pts.slice(0%2C3*r))%2Cthis.decimateFaces(i%2Ce)%2Cthis.layers%26%26this.layers.length%3E0)for(let%20t%3D0%3Bt%3Cthis.layers.length%3Bt%2B%2B)%7Bconst%20e%3Dthis.layers%5Bt%5D%3Be.values%20instanceof%20Float32Array%7C%7Ce.values.length!%3D%3Ds%3Fe.values%3Dnew%20Float32Array(e.values.slice(0%2Cr))%3Al.warn(%22decimation%20logic%20needs%20to%20be%20updated%22)%7Dreturn%20this.updateMesh(t)%2C!0%7DsetLayerProperty(t%2Ce%2Ci%2Cs)%7Bconst%20r%3Dthis.layers%5Bt%5D%3Br%26%26e%20in%20r%3F(r%5Be%5D%3Di%2Cthis.updateMesh(s))%3Al.warn(%22mesh%20does%20not%20have%20property%20%22%2Ce%2C%22%20for%20layer%20%22%2Cr)%7DsetProperty(t%2Ce%2Ci)%7Bt%20in%20this%3F(this%5Bt%5D%3De%2Cthis.updateMesh(i))%3Al.warn(%22mesh%20does%20not%20have%20property%20%22%2Ct%2Cthis)%7DgeneratePosNormClr(t%2Ce%2Ci)%7B(t.length%3C3%7C%7Ci.length%3C4)%26%26(l.error(%22Catastrophic%20failure%20generatePosNormClr()%22)%2Cl.debug(%22this%22%2Cthis)%2Cl.debug(%22pts%22%2Ct)%2Cl.debug(%22rgba%22%2Ci))%3Bconst%20s%3Dae.generateNormals(t%2Ce)%2Cr%3Dt.length%2F3%2Cn%3Dr%3D%3D%3Di.length%2F4%2Ca%3Dthis.f32PerVertex%2Co%3Dnew%20Float32Array(r*a)%2Ch%3Dnew%20Uint8Array(o.buffer)%3Blet%20c%3D0%2Cd%3D0%2Cm%3D0%2Cu%3D4*(a-1)%3Bfor(let%20e%3D0%3Be%3Cr%3Be%2B%2B)o%5Bm%2B0%5D%3Dt%5Bc%2B0%5D%2Co%5Bm%2B1%5D%3Dt%5Bc%2B1%5D%2Co%5Bm%2B2%5D%3Dt%5Bc%2B2%5D%2C7!%3D%3Da%3F(h%5Bu-4%5D%3D127*s%5Bc%2B0%5D%2Ch%5Bu-3%5D%3D127*s%5Bc%2B1%5D%2Ch%5Bu-2%5D%3D127*s%5Bc%2B2%5D)%3A(o%5Bm%2B3%5D%3Ds%5Bc%2B0%5D%2Co%5Bm%2B4%5D%3Ds%5Bc%2B1%5D%2Co%5Bm%2B5%5D%3Ds%5Bc%2B2%5D)%2Ch%5Bu%5D%3Di%5Bd%2B0%5D%2Ch%5Bu%2B1%5D%3Di%5Bd%2B1%5D%2Ch%5Bu%2B2%5D%3Di%5Bd%2B2%5D%2Ch%5Bu%2B3%5D%3Di%5Bd%2B3%5D%2Cn%26%26(d%2B%3D4)%2Cc%2B%3D3%2Cm%2B%3Da%2Cu%2B%3D4*a%3Breturn%20o%7Dstatic%20readMesh(e%2Ci%2Cs%2Cr%3D1%2Cn%3Dnew%20Uint8Array(%5B255%2C255%2C255%2C255%5D)%2Ca%3D!0)%7Blet%20o%2Ch%3Dnew%20Uint32Array(%5B%5D)%2Cc%3Dnew%20Float32Array(%5B%5D)%2Cd%3D%22%22%3Bconst%20m%3D%2F(%3F%3A%5C.(%5B%5E.%5D%2B))%3F%24%2F%3Blet%20u%3Dm.exec(i)%5B1%5D%3Bif(u%3Du.toUpperCase()%2C%22GZ%22%3D%3D%3Du%26%26(u%3Dm.exec(i.slice(0%2C-3))%5B1%5D%2Cu%3Du.toUpperCase())%2C%22JCON%22%3D%3D%3Du%26%26l.error(%22you%20should%20never%20see%20this%20message%3A%20load%20using%20nvconnectome%20not%20nvmesh%22)%2C%22JSON%22%3D%3D%3Du%26%26l.error(%22you%20should%20never%20see%20this%20message%3A%20load%20using%20nvconnectome%20not%20nvmesh%22)%2Cn%5B3%5D%3DMath.max(1%2Cn%5B3%5D)%2C%22TCK%22%3D%3D%3Du%7C%7C%22TRK%22%3D%3D%3Du%7C%7C%22TT%22%3D%3D%3Du%7C%7C%22TRX%22%3D%3D%3Du%7C%7C%22TRACT%22%3D%3D%3Du)%7Bif(o%3D%22TCK%22%3D%3D%3Du%3Fye.readTCK(e)%3A%22TRACT%22%3D%3D%3Du%3Fye.readTRACT(e)%3A%22TT%22%3D%3D%3Du%3Fye.readTT(e)%3A%22TRX%22%3D%3D%3Du%3Fye.readTRX(e)%3Aye.readTRK(e)%2Cvoid%200%3D%3D%3Do)%7Bo%3D%7Bpts%3Anew%20Float32Array(%5B0%2C0%2C0%2C0%2C0%2C0%5D)%2CoffsetPt0%3Anew%20Uint32Array(%5B0%5D)%7D%2Cl.error(%22Creating%20empty%20tracts%22)%7Dreturn%20n%5B3%5D%3D0%2Cnew%20t(o.pts%2Co.offsetPt0%2Ci%2Cn%2Cr%2Ca%2Cs%2C%22inferno%22%2Co.dpg%7C%7Cnull%2Co.dps%7C%7Cnull%2Co.dpv%7C%7Cnull)%7Dif(%22GII%22%3D%3D%3Du)o%3Dye.readGII(e)%3Belse%20if(%22MZ3%22%3D%3D%3Du)o%3Dye.readMZ3(e)%2C(o%20instanceof%20Float32Array%7C%7Cnull%3D%3D%3Do.positions)%26%26l.warn(%22MZ3%20does%20not%20have%20positions%20(statistical%20overlay%3F)%22)%3Belse%20if(%22ASC%22%3D%3D%3Du)o%3Dye.readASC(e)%3Belse%20if(%22DFS%22%3D%3D%3Du)o%3Dye.readDFS(e)%3Belse%20if(%22BYU%22%3D%3D%3Du%7C%7C%22G%22%3D%3D%3Du)o%3Dye.readGEO(e)%3Belse%20if(%22GEO%22%3D%3D%3Du)o%3Dye.readGEO(e%2C!0)%3Belse%20if(%22ICO%22%3D%3D%3Du%7C%7C%22TRI%22%3D%3D%3Du)o%3Dye.readICO(e)%3Belse%20if(%22OFF%22%3D%3D%3Du)o%3Dye.readOFF(e)%3Belse%20if(%22NV%22%3D%3D%3Du)o%3Dye.readNV(e)%3Belse%20if(%22OBJ%22%3D%3D%3Du)o%3Dye.readOBJ(e)%3Belse%20if(%22PLY%22%3D%3D%3Du)o%3Dye.readPLY(e)%3Belse%20if(%22X3D%22%3D%3D%3Du)o%3Dye.readX3D(e)%3Belse%20if(%22FIB%22%3D%3D%3Du%7C%7C%22VTK%22%3D%3D%3Du)%7Bif(o%3Dye.readVTK(e)%2C%22offsetPt0%22in%20o)return%20n%5B3%5D%3D0%2Cnew%20t(o.pts%2Co.offsetPt0%2Ci%2Cn%2Cr%2Ca%2Cs%2C%22inferno%22)%7Delse%20o%3D%22SRF%22%3D%3D%3Du%3Fye.readSRF(e)%3A%22STL%22%3D%3D%3Du%3Fye.readSTL(e)%3Aye.readFreeSurfer(e)%3Bif(o.anatomicalStructurePrimary%26%26(d%3Do.anatomicalStructurePrimary)%2Co%20instanceof%20Float32Array)throw%20new%20Error(%22fatal%3A%20unknown%20mesh%20type%20loaded%22)%3Bif(!o.positions)throw%20new%20Error(%22positions%20not%20loaded%22)%3Bif(!o.indices)throw%20new%20Error(%22indices%20not%20loaded%22)%3Bif(c%3Do.positions%2Ch%3Do.indices%2C%22rgba255%22in%20o%26%26o.rgba255.length%3E0%26%26(n%3Do.rgba255)%2C%22colors%22in%20o%26%26o.colors%26%26o.colors.length%3D%3D%3Dc.length)%7Bconst%20t%3Dc.length%2F3%3Bn%3Dnew%20Uint8Array(4*t)%3Blet%20e%3D0%2Ci%3D0%3Bfor(let%20s%3D0%3Bs%3Ct%3Bs%2B%2B)n%5Bi%2B%2B%5D%3D255*o.colors%5Be%5D%2Cn%5Bi%2B%2B%5D%3D255*o.colors%5Be%2B1%5D%2Cn%5Bi%2B%2B%5D%3D255*o.colors%5Be%2B2%5D%2Cn%5Bi%2B%2B%5D%3D255%2Ce%2B%3D3%7Dconst%20A%3Dc.length%2F3%3Bif(h.length%2F3%3C1%7C%7CA%3C3)throw%20new%20Error(%22Mesh%20should%20have%20at%20least%20one%20triangle%20and%20three%20vertices%22)%3Bn%5B3%5D%3DMath.max(1%2Cn%5B3%5D)%3Bconst%20f%3Dnew%20t(c%2Ch%2Ci%2Cn%2Cr%2Ca%2Cs%2Cnull%2Cnull%2Cnull%2Cnull%2C!0%2Cd)%3Breturn%22scalars%22in%20o%26%26o.scalars.length%3E0%26%26(ye.readLayer(i%2Ce%2Cf%2Cr%2C%22gray%22)%2Cf.updateMesh(s))%2Cf%7Dstatic%20async%20loadLayer(t%2Ce)%7Blet%20i%2Cs%3Bif(void%200!%3D%3Dt.base64)i%3Dfunction(t)%7Bconst%20e%3Dwindow.atob(t)%2Ci%3De.length%2Cs%3Dnew%20Uint8Array(i)%3Bfor(let%20t%3D0%3Bt%3Ci%3Bt%2B%2B)s%5Bt%5D%3De.charCodeAt(t)%3Breturn%20s.buffer%7D(t.base64)%3Belse%7Bif(!t.url)throw%20new%20Error(%22layer%3A%20missing%20url%22)%3Bconst%20e%3Dawait%20fetch(t.url%2C%7Bheaders%3At.headers%7D)%3Bif(!e.ok)throw%20Error(e.statusText)%3Bi%3Dawait%20e.arrayBuffer()%7Dlet%20r%3D%5B%5D%3Bif(t.name%26%26%22%22!%3D%3Dt.name)s%3Dt.name%3Belse%7Bif(!t.url)throw%20new%20Error(%22layer%3A%20missing%20url%22)%3Btry%7Br%3Dnew%20URL(t.url).pathname.split(%22%2F%22)%7Dcatch(e)%7Br%3Dt.url.split(%22%2F%22)%7Dfinally%7Bs%3Dr.slice(-1)%5B0%5D%7D%7Ds.indexOf(%22%3F%22)%3E-1%26%26(s%3Ds.slice(0%2Cs.indexOf(%22%3F%22)))%3Blet%20n%3D.5%3B%22opacity%22in%20t%26%26(n%3Dt.opacity)%3Blet%20a%3D%22warm%22%3B%22colormap%22in%20t%26%26(a%3Dt.colormap)%3Blet%20o%3D%22winter%22%3B%22colormapNegative%22in%20t%26%26(o%3Dt.colormapNegative)%3Blet%20l%3D!1%3B%22useNegativeCmap%22in%20t%26%26(l%3Dt.useNegativeCmap)%3Blet%20h%3Dnull%3B%22cal_min%22in%20t%26%26(h%3Dt.cal_min)%3Blet%20c%3Dnull%3B%22cal_max%22in%20t%26%26(c%3Dt.cal_max)%3Bconst%20d%3Dye.readLayer(s%2Ci%2Ce%2Cn%2Ca%2Co%2Cl%2Ch%2Cc)%3Bd%26%26e.layers.push(d)%7Dstatic%20async%20loadFromUrl(%7Burl%3Ae%3D%22%22%2Cheaders%3Ai%3D%7B%7D%2Cgl%3As%2Cname%3Ar%3D%22%22%2Copacity%3An%3D1%2Crgba255%3Aa%3D%5B255%2C255%2C255%2C255%5D%2Cvisible%3Ao%3D!0%2Clayers%3Al%3D%5B%5D%2Cbuffer%3Ah%3Dnew%20ArrayBuffer(0)%7D%3D%7B%7D)%7Blet%20c%2Cd%3De.split(%22%2F%22)%3Bif(%22%22%3D%3D%3Dr)%7Btry%7Bd%3Dnew%20URL(e).pathname.split(%22%2F%22)%7Dcatch(t)%7Bd%3De.split(%22%2F%22)%7D(r%3Dd.slice(-1)%5B0%5D).indexOf(%22%3F%22)%3E-1%26%26(r%3Dr.slice(0%2Cr.indexOf(%22%3F%22)))%7Dif(%22%22%3D%3D%3De)throw%20Error(%22url%20must%20not%20be%20empty%22)%3Bif(!s)throw%20Error(%22gl%20context%20is%20null%22)%3Bif(h.byteLength%3E0)c%3Dh%3Belse%7Bconst%20t%3Dawait%20fetch(e%2C%7Bheaders%3Ai%7D)%3Bif(!t.ok)throw%20Error(t.statusText)%3Bc%3Dawait%20t.arrayBuffer()%7Dconst%20m%3Dawait%20this.readMesh(c%2Cr%2Cs%2Cn%2Cnew%20Uint8Array(a)%2Co)%3Bif(!l%7C%7Cl.length%3C1)return%20m%3Bfor(let%20e%3D0%3Be%3Cl.length%3Be%2B%2B)await%20t.loadLayer(l%5Be%5D%2Cm)%3Breturn%20m.updateMesh(s)%2Cm%7Dstatic%20async%20readFileAsync(t)%7Breturn%20new%20Promise(((e%2Ci)%3D%3E%7Bconst%20s%3Dnew%20FileReader%3Bs.onload%3D()%3D%3E%7Be(s.result)%7D%2Cs.onerror%3Di%2Cs.readAsArrayBuffer(t)%7D))%7Dstatic%20async%20loadFromFile(%7Bfile%3Ae%2Cgl%3Ai%2Cname%3As%3D%22%22%2Copacity%3Ar%3D1%2Crgba255%3An%3D%5B255%2C255%2C255%2C255%5D%2Cvisible%3Aa%3D!0%2Clayers%3Ao%3D%5B%5D%7D%3D%7B%7D)%7Bif(!e)throw%20new%20Error(%22file%20must%20be%20set%22)%3Bif(!i)throw%20new%20Error(%22rendering%20context%20must%20be%20set%22)%3Bconst%20l%3Dawait%20t.readFileAsync(e)%2Ch%3Dt.readMesh(l%2Cs%2Ci%2Cr%2Cnew%20Uint8Array(n)%2Ca)%3Bif(!o%7C%7Co.length%3C1)return%20h%3Bfor(let%20e%3D0%3Be%3Co.length%3Be%2B%2B)await%20t.loadLayer(o%5Be%5D%2Ch)%3Breturn%20h.updateMesh(i)%2Ch%7Dasync%20loadFromBase64(%7Bbase64%3Ae%2Cgl%3Ai%2Cname%3As%3D%22%22%2Copacity%3Ar%3D1%2Crgba255%3An%3D%5B255%2C255%2C255%2C255%5D%2Cvisible%3Aa%3D!0%2Clayers%3Ao%3D%5B%5D%7D%3D%7B%7D)%7Bif(!e)throw%20new%20Error(%22base64%20must%20bet%20set%22)%3Bif(!i)throw%20new%20Error(%22rendering%20context%20must%20be%20set%22)%3Bconst%20l%3Dfunction(t)%7Bconst%20e%3Dwindow.atob(t)%2Ci%3De.length%2Cs%3Dnew%20Uint8Array(i)%3Bfor(let%20t%3D0%3Bt%3Ci%3Bt%2B%2B)s%5Bt%5D%3De.charCodeAt(t)%3Breturn%20s.buffer%7D(e)%2Ch%3Dawait%20t.readMesh(l%2Cs%2Ci%2Cr%2Cnew%20Uint8Array(n)%2Ca)%3Bif(!o%7C%7Co.length%3C1)return%20h%3Bfor(let%20e%3D0%3Be%3Co.length%3Be%2B%2B)await%20t.loadLayer(o%5Be%5D%2Ch)%3Breturn%20h.updateMesh(i)%2Ch%7Dstatic%20readGII(t)%7Breturn%20ye.readGII(t)%7Dstatic%20readX3D(t)%7Breturn%20ye.readX3D(t)%7Dstatic%20readNII(t%2Ce%3D0)%7Breturn%20ye.readNII(t%2Ce)%7Dstatic%20readNII2(t%2Ce%3D0)%7Breturn%20ye.readNII2(t%2Ce)%7Dstatic%20readMGH(t)%7Breturn%20ye.readMGH(t)%7Dstatic%20readSTL(t)%7Breturn%20ye.readSTL(t)%7Dstatic%20readTxtSTL(t)%7Breturn%20ye.readTxtSTL(t)%7Dstatic%20readSRF(t)%7Breturn%20ye.readSRF(t)%7Dstatic%20readFreeSurfer(t)%7Breturn%20ye.readFreeSurfer(t)%7Dstatic%20readOBJ(t)%7Breturn%20ye.readOBJ(t)%7Dstatic%20readOFF(t)%7Breturn%20ye.readOFF(t)%7Dstatic%20readGEO(t%2Ce%3D!1)%7Breturn%20ye.readGEO(t%2Ce)%7Dstatic%20readICO(t)%7Breturn%20ye.readICO(t)%7Dstatic%20readPLY(t)%7Breturn%20ye.readPLY(t)%7Dstatic%20readMZ3(t%2Ce%3D0)%7Breturn%20ye.readMZ3(t%2Ce)%7Dstatic%20readVTK(t)%7Breturn%20ye.readVTK(t)%7Dstatic%20readASC(t)%7Breturn%20ye.readASC(t)%7Dstatic%20readNV(t)%7Breturn%20ye.readNV(t)%7Dstatic%20readANNOT(t%2Ce%2Ci%3D!1)%7Breturn%20ye.readANNOT(t%2Ce%2Ci)%7Dstatic%20readCURV(t%2Ce)%7Breturn%20ye.readCURV(t%2Ce)%7Dstatic%20readSTC(t%2Ce)%7Breturn%20ye.readSTC(t%2Ce)%7Dstatic%20readSMP(t%2Ce)%7Breturn%20ye.readSMP(t%2Ce)%7Dstatic%20readTxtVTK(t)%7Breturn%20ye.readTxtVTK(t)%7Dstatic%20readTRK(t)%7Breturn%20ye.readTRK(t)%7Dstatic%20readTCK(t)%7Breturn%20ye.readTCK(t)%7Dstatic%20readTSF(t)%7Breturn%20ye.readTSF(t)%7Dstatic%20readTT(t)%7Breturn%20ye.readTT(t)%7Dstatic%20readTRX(t)%7Breturn%20ye.readTRX(t)%7Dstatic%20readTRACT(t)%7Breturn%20ye.readTRACT(t)%7D%7D%2CFe%3D%22data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAgAAAAEACAIAAABK8lkwAAFEQElEQVR4AeS1B3RVV5ou%2BF3lhHJCCAlJCCWEJEACRAYTDMZE4%2BzuSj1V1VNrut5bb70w0%2F1YU7NmpldPT6%2F3prunl6tcXu1sjI0xGZMRIJCIkgzKEhLKEsoR6c63zzn33HOvbjj3Srh79Xxsrs7%2B97%2F%2Fnf7%2F%2BzxghAvtnxCSEAK8Avw18LfA7rDYMPw3uBYEyfyPFOADFycq04G%2FAqbsO0xJDm7F%2FiOQKq2gbBIbgMsOZ1yWfPRDG7AT%2BHPMOoz%2FWpvAa0CFqV8hdf9Fduw28oGvNXHel%2FJ4E3BWYyw1nctN%2FLmUGWq4G8DW2c8S97ATKNFsrQX4sxm%2F4ENgn4hRCBy3HDkvXa0LWAl8ZxnimGScKTyB32mCNgM%2FNw%2F%2BD0CraWQc%2BJ9n77bfAB5rln0sWZwiTaIx%2Bv8zkOXU28ulHW1atMlj0brzT9YCa6VrWZqXuRSZVy7ioitheEe1O9Nr29NrH%2BHREIZc2sPP1B8n%2BMClsAIBAekZGelxC6uPs6pTfsZVNkgF7hi1gtKtFjtoz5kBoy0Mhx1EPuxk5fXr16elpfn6%2BnZ1dZWWllZXV2NmiEVsPOL5G47wYAT7wc8LXkYYJzAxjOF%2B9Hejuw1tzWjmh6vB9yr%2FLXBU%2Ba8L%2Fv6Ii0NkJIKC4OMjLGNjGBhAVxeePsX4uN44m92%2BoM1LgCWmzlOS1wXURqIvB2UalpZ8ik9haMiNFS4c4M8Ba2s%2FcE7P7CNun%2ByAHifyv7%2BtJY8Y9Mjq3LmYPx8REQgMhIeHeK%2B%2BPrS3jzY2jvKqQip2bygHXtFMSAcygIvHrOIo%2Fd3W8XdjEUTT4gdc%2BuFYv6NdzcGcBCREISoQgR7wYKr3oa8d7fWoNyqH8vT3nH5uYlLWBg28pQvyxuTEpMkUJ3I2LhShrCZ2RzHagx5WUAc6HOzqf4LE9jEWxnbgCz7Cf3P8RnlArvQlPk6iwpHzSd0CQF54Ba9sW7Tt%2B0Ubz58PMZk3ZGYufSkzZxEWncAJnkpfsJ8Cw%2BnptT9Lr6lAxX3cv43bTWjSuZND4mce8AuHXr%2BHS4iPR0EBcnMzsrLSi1OPCwEIOCTLzLsONaBW2ZCVAJC6f7A35ddmDfgHez6Zzre8d%2B%2Fed955p6CgICAg4OnTp2fOnPnggw8qKyvhOpigS7AkHekpSGExzMXcCERQAPzhLwvAOMZlAehCVytan%2BBJLYR4P8RDWnSuIu6J6fa%2FmC3%2Fm%2FzHmQB4eWHpUmRlYeFC8VBRUZgzRxGA0VH096OzE83NqKlBeTnu3tWZQm5cUxxeXYKlC%2BXeAB7%2Bn3jID97APDz8hXhw%2Bdm80bMEw0tw86Ybi1wQm2Pd%2F8ps6te548WYAcjj5Xr8%2FqOFBvx3swg40oDly0V5ZWZiwQKh3xQAT08hAL29aG0deb9%2B5FI9%2Bn5%2FaE4F%2Fj35Kss0jVWeXoS4ErS0aKMdkrjN6k6Yq%2FlYtNNCAH7A%2F%2F0D8%2BOYnV2RtQpQkIWsJCTFICYIQRQApjoFgElegxqmdzGKO9EZEPE7%2F99YzW4E%2FsA%2FPxfcqEUA%2Fsb%2FL%2FsnfOBTiMJc5HIVkmc4wmUBGMFIN7ob0cjyKUUpm829KYf7lVkD2k3GQw4EIDwc6%2FKwSVwPkH0FeSX43pHS6BSAxVh8AAf2YE%2FOvJzGRYiORkfHPaA%2BPn5vRkbw7rjdiUiMRewRHCnXl0XJyQHp6dl7w7N3Ydcd3LmJm5dx%2BRzO8XaczjVd9zwp52zCqGcPCvz9sWULNmzAqlVYtizU2zu9VxAN2SR%2B2pI2UGt3JNPBVjLEj23iNOja9dy5czdu3Lhv3z65Gx4e7u3t%2FfjxY1cFIBnJTNPlWM5MzURmFKJsujF3qQd84kWmAmtBiyzeJSi5juvsOl1rifzHS7maH%2FTtcM0a0fLzsWSJeBd7mJpCVRUePkRJCYqKUFzsMCbcAnfAZpr812K1h%2FI3P5rx8A1Vt%2BuzhadbAmCiP9Z9pGLRFcbg3pm0WKyzckwE3arDNygIe%2FZg2zbxiGT%2F6TgnRHxU0Onvc6nfVRU4mKUZzuhGerqVACjItegxM1ORmqu9hyM%2F4AfbWUZ2fgWvvISXVmP1ElNiWmEIQ3dx9xqukZca%2FP8yIN6IP1UHn2r1hxoQq3b%2Byd8QELC4P2E7tq%2FH%2Bnzkx6gUbol61JP3LuLiCZxoF%2FRugdBpX6rHcgfXnZeH3FzVox95rGvu38EM5wLAEG%2FhrdfxegISxEXzphed7ug4Tg3MzOzJzNwLRNCHEheAgM%2FwGUnBWcij6elpGRnpgIcXvFZgBRs1hmR0FEcb0ACXcVp6j9uuUT%2FBlGR67tiBl16CQUmd9HRjevqjmpppTCqP%2F1ZaKljvCmo%2BGme1hKOjo%2BfPn6%2B1pKSkUBX0RwhF6GZs3oANJNhcq2JSwdp8%2FhweHvDxgZdFqsQhjm0LthSjmFl%2BARfO4ixmFVxg505s3Yr16xEV5cSZeyRRsK1di6VLxcfJk%2BjsnNUNyQIgoQxlJP1e9Mrdh5IY7MCOYDkzkpKEZ0ICnjyZ3Tuxg1lgfzWQcfZm%2B%2FvjnXfwxhviBe1hBCNsSBTfFRWgBuzaJSYq4ENmZODiRaenFbTEHxUTE4L9GXEawhBGNtuHfcxeB4cJROBarM1BzgIsOOIf7u8vL2t08gwBAav9Uw7i4C7sSkKSA2eOsnHPVIgv8EUd6jBzUADYTGBdsz8jAchAxht44228zWoX%2FeHhRZ1HFkV9W4TvgMnM%2Fp7MO31IfQPz5lEe6DaFqTGMPcIjh1H%2F9%2FSwtPSrWRhfiY0bZRPVmEuwfj7BJ7Wo1XPYMhtfFimY7Xh%2BSgrefhsHDyIrS7VdwqVbGbdC0stxorLM1lISEmUFyHblabRZa5xx2Y6NjY2wcDQYGhoaJV%2FrAzODbLUVW9fDsjSbm1FXJ37Jnb29ojZVAQgIQGgoIiP51kI4%2BSthJVYyyci9zObv8F0LWjAb4JscOIDdu7X5rAsUwTffRHKy%2BDhyBNXVs7IdYPFiwenh4XJPZnx1kGkvW6imionO2dkvXgBmjfqtIhpnI9Srr%2BK11%2BywP3PVYICvL9l%2FFErekrRlDcjPN7kxzagBcXFocZRXBhisBYDszzatInzhS%2FZ%2FD%2B%2BtwqrpcfrQx814wzsUoR7woIWM9Bbe8g3w9fafAE44kEj53vIDAt4KeItMGIIQ7ehzPPeyRbbLsTwIQUYY%2F4g%2FtqN9RtfNlMvNRVSUaghHuKwB93DP3iRHAkBGPoADVDOF%2FYeG8MknKV98sejyZfJfBJBZXBxNjjAa8Sd%2FwoXpRudBDH6AD1rRai9sEkrTPy2NYC2tXYuqKuzfL2iF0ZD5Jt7kA%2Fwev%2B9Bj%2BPD7td2moE%2F2PD52sH8sDCx7ltvIS1NNnDFIzhyGqevhl3tSe9BCg4pMvTfLWeS%2FQ%2FZWELOCn31aJhxgdXW1j548GDFihXJpDoJRUVFFaweHSDv78GeXdgVj3jFxMq7fRv37omaqalBUxPa24UAGDXbpAZQAKKjRU1y0YwMkXAFBfD3Z1HJ0SIR%2BRW%2BqkTlzA6HzEy88w7eeEMIjRUeP3785MmT7u5u6p%2FBYAgICIiMjExISEhNTdW6rVghXtjPDx9%2FLA40C%2BBh2SQwVcj15SjXjtsQALbTpzE1NRvL28Tss%2F%2BMU9Q8jwmyeTM2bbIcpyCXlKC%2BHgMDQgD8%2FUfDwkZiRxCrjJP9mcVmAZADUQNMAmCwtUWZ%2FQMQYJ4lC8A0MFH3YZ8V%2B5N5b%2BHWYzxuQxsFiQIQgYgkJOUgh40O%2B%2F33nw8YBAaAKw4OnwTs8fc%2FEHBAZv8neMKUqEc9E2YCE37wi0Y09ymTvjorHencUic6%2F2CTxfQjj1SfJ3%2BOjY36%2BvoJG%2FKoAe4IAAVwN3bvxV5ehGI6fBiff44rV6izbNF8GhofPBDUEBSEX%2FwCnp505pQudL2P96dgO%2FXT5Yk9PTh2DK2tGB%2FHz36GAPF4aUjjC%2FHiPsfnDk5qI%2FGpAbdduaytW7Frl8r%2BVJ3P8Nmn%2BLQYxcoW0%2FGNEIDL02b%2B1lGdGB3VJjOA6hwqNenBBJcEdGJ42PFejdPDTUxMHDt2zGg0ZmZm%2Bvr6dnR03Lhx48yZM07PzdehSO%2FHfma5Yiou5pvi5k3cuYPmZrsz%2BUwdHaKVS8QXFyeybdUqrFsnhFxKtWAEUww%2BxsdVqIK7oL689poN9qfC3bx5s6ysrL6%2BvrOzc3h4mAIQGBgYFRVFFczOzl65cmVhYaHqT0pgkJER%2FP736O7GjEAxIZtnZ8s9meutXJrQJFe7Ui%2FBwYoG3L%2BP2ccLpH6rNYzuasCyZSI7LHDtGo4cweXLlHGRTsLXMBIRMRrrqQpAVZXIL75XRIRpFtmfGnDxooMlZQEw91lRtgSAbL4d27dgi9Z4AzdO4MRVXC1DWT%2F6ZaMnPFORWoCCzdj8Kl4NDQhd6b8fYvSyvT3wzP%2BeAhCQFO0fbYTxOI5fwIVSlFajmnxIixe85mJuFrLWYA23sQzL1LmUhAY0UIGKUOTma82di9xcZGaK7%2F148B8fFBT8NfANGZWFeQ7nnuKpzXl2BWAndr6CVzhZ6ZOsv%2FlGMIXE%2FmxxgLQahKRHRood7N7N3lIs5cRmNPNabUaW2NWE27eFeLDo9%2B2TDauxugIVd3DHHonMQu6npGD9eqxZoxpO4%2FQxHFPYX93iSV2rGmwWidE8i7RIEabOJyIxBjFmAfivWNaD%2BHY0NIiKuHsXAwM2xcQ2Hj9%2BXFlZuWDBAh8fn2fPnlEDnJ6b7P8O3tkH5arR1YWTJ3HunKiutjadl6xsq6VFNIoHybC2Fq%2B%2BivDwFKS8gTeoph%2Fggza0ufc4O3eKPNKyP0939OjR06dPX716dfoxHz16RHtsbOy6deuqqqr27t0bEhIiD5EVuC9u86OPMCOQ%2BknlJpAppgsATMKgCAAx%2BwLwY%2FC%2BvSVdUQJDQICRpL14scZWU4Ovv8aHH1pkudE42tU10gWUm20VFUIDWKAKSA7UgLg4PqTBTu1ZC4DM%2FpOTVu5k3o3YqLWQ9z%2FBJ0dw5Bmeae2TmCQds9WilkPv%2Br0b7h8O%2FMbxsf%2BW%2FwMzpwKnPsbHh3H4FE5pR5%2FjeROa2B7gQStaxzG%2BCmaFXI%2F1JD1SEN3ceac8UnWecifJTDoKwAP5gkg%2BHHNNAChTL%2BPlHdih9O%2FdE0xxQiF0WQASgHB1wunTSEwUxCq9OSc2orEOdXyH6cFJrZHaPtmHBbZihXhpCRReqog9AXAGnnnKicvSpSgoUHtksmu4dh7nzQ4RWo2aQV0a8RJeWmdYR4XPRCYFQDsYuRs%2FkT6YFMx4SiHl9dIlFwrNaDTW19frdN6Gba%2FjdTP7V1UJRaeuF5tkTx%2FBWDBCdzcOHxYH4Mcbb%2FAFF2IhZaYTne%2FjfbgOlv22bUomyyD7f%2FTRR19%2B%2BeXNmzcdTGxrazt8%2BPDTp08HBwffe%2B%2B94OBg2b5qFerqRCnzet2HTOUSalBDlmfOTPeSBYDJ7w1v0c%2FMFLMiI4XQzgL%2BBdjfFtnqAks5IcHSxAe4fNkwMGAVZAQYtbRQANjMAkBQANhabNw5wbIi%2B4dr2EgRAEuQ00gsyWRHE6pR%2FS2%2B%2FQJfDGDA3kGu4%2FoUpuZgzk%2FxU51nl2OewRl7DmT%2Fz%2FCZP%2FyjEZ2CFNkYhSiyBJm6BCVwFV5eyM1Vy%2BZJ3ZMHDx48eVInP4GkDHnncI6SM32qhy2TB2lrK7Yq%2FdFRfP89zpjP4y0JQKbVNPqQyiUYYOD0LdhisJW1GdNNd%2B%2BK2jFhMRZnIMMHPngR8PAQySQJlYwylN3FXWs3rQC4VXoRiPgz%2FNlv8JvfGn%2F7svHlRGPiNBdFB%2BfPx8svG%2F%2FiL4y%2F%2FrXxvfcQEKBzhV8B7ZoueXy7PVdmwB7s2Y%2F9Sp%2Fl8dFH%2BOMfVfY3uH5Ksz%2BpmdE%2B%2F1xmumVYRhLk67t6Y0FBWLcOGzdaGL%2F55hun7K%2Fi%2BvXrlIFvv%2F1Wa2RAhvWwken6kJIieJyUJkFmeZuOQxiyHtUox79xbLboRUQYIpXsVmCorTVIpKzNtCmJ%2Fa1oqalJCAB%2FzcjIEDVrB2R%2FNnO%2Ft1fMp%2BZbIhvZOcjRWi7h0lmcdcD%2BMm7i5mmcvjqdImyhHOWkfgfsL%2BMZnjHmRVy02iFVyp3LFwyfh%2BBgufcADyQog0EIykUuPWxOtVEWG7BhEzap0kTdFsxu8SC2BKC2VnhevSr3FmIhg2zExunxbbxkVZWYboIXvBZgQQIS3LkLO4cyIzERSUnw9VUNNaipRKXdXW5wZwdhCHsX7%2F4UP30Vr%2FIBFKtRJB3Wax3%2FXrKyISQEBw7gJz%2FBW28JRdcNoxrBHihFO7FzF3bxYkW%2Fvh5ffolPP0V1texgcPeizcVM3vvqKxw9KvfI%2Fnz9WMS6FK2gAIWFCAszWy5cuHDy5Emd7C%2Fj2rVrp06dKioqUi1xcVi5UgR3ExoSH8WoAwGwIQ%2BzJgCG2QjygjdxzfwZEIDAQLO7oa8PPT2YmLDKHE%2Fgd7YilZcLDjeD6ksNmDvX5rLWAkCZkZRGCw94pCI1XcM9Vai6jdt01XPw8xg7D3Tq8LyC4cto1hOzAhWUlkd4pD0IadMPfnAVublCACQ8x3NVANT7JvtTA2xOtWaaEISsw7r1Kkvx2VhLJlrXCsCc6cGuXUN%2BPlaskOmVQe7h3h3c6UOf1itq%2BsT2drS0YHQUfsrhyR3RiCY1w038r3ZHoqMRayamcYy3orUNbdZukdLvZTeX34M9B3FwBVZYWAcGhNS1tWFoCEYj5sxBQgIWL9a6bNiAsTE8e4avvzYbbWu3Les9W46k4%2B3YPg%2FzRIdLf%2FstjhxBQ4M8aqeqjTpOaVD%2FCO%2Fbt0WJLliALVsCEMAsKkXp1%2Fha%2F6UtXYrly83d3t7eK1eunD9%2F3tXLp2wsWbIkPz%2Ff1yTzy5aJAikudjUSRCZrSFzmd8qAPXfSCh2YTor4xcSIuWlpqKyE%2B%2FhXwf4Wb%2B0Mnp6imd2fk5eem4flELeBQ8BpG9PJ%2FtSA7ds1pvR0oQGtrVaeZAnyZhzizCZbAjAf8xOR6Atf1ULmLUOZzlP3MqmATOANh243hACgWvdl3sd9ykAGMlRLAhK41WoXYkBUHJM7JUXukf2ZgYODgxQANrmgkpBEDeBvPeqtZlsLwCqsWo3VlAGlz6K5cQMjI1Zuc2xupasLN2%2Fi1i2sWwdJSxiqGMVncMb5Mch5vb0qNYcilA0vAiKwOXIvep%2Fh2eyuwFOTcHmTFtazZ4WUMrWfPhVKQAEICUFyspDMLVu0MrBtG548EYzBGpBxyOYyKwFthQD%2Fry2vLGRtwiZuSemfOoXjx9UKsUUtFgXu7Q0PD4yPi%2F1OwzlpazfMhf7996JKSXkxMYUovI7rV3G1E516Lo0kmZ2NyEizpbS0tLi4eIB35SK6urpu3bp1586dwsJC2cIaycrCvHni7l2DzP7%2B%2FnKPpeWUNWQfRQDUCDMSALswSA9o1MXJLsADHlOYcmem0UZKuSFf3d2iUHhnzAoFzCtqwMWLVp5kfzZzv7NT5HZdnZUbn2Mu5motpMJa1Orf0g0dAnBFavpBorfaA%2FcZgxjXBCA3VwiACRLtPxAfGgEQXsilBjgRgAAErMCKlYJaJIyOsgpRUuLCbuh8544sAARDMSBZYBjDTiZSY7icCf7w94MfXgRYzAEB5mXFwiOzuwKpfz3WW5g%2B%2BwyHD%2BPcOWsppVhSMhsb8dZbKChQzevXi4tXBeBVeyvxoaJNkey4rMVa82bKygRHX7ok96ZVpplHWGuUpMREhIcrAkB1bm1FbS0ePsTYmOw1KDWo0YzDw7h2TRxk715almEZc%2B6c0AnnYB2bq13Cw4cP79%2B%2F794TcG55ebkqAJAEJjXVXQGQ0IIWknsNapwKANsWbLGIQN0dGsJsIFWcIzUe8eEIZ5nQMorRHvQ0oakSlS6RmoooRGUiMwlJ%2FAhEIAWAMXvRyyPzvOUo1zobtInywsDkpwaYU4LqTQ2YO1dkoQbWAkD2Z5uGCEREIlLtDmGoFa3d6HZpS7935vCfgf%2FiSsBBDPKGuQ1uT90nn9WFEIGBgv2pARIYjbRfhSp%2BV1eD1dPcjPh4McRKpAawGAc1NQsrAWDFLsfyIAQp%2FXv3cPcuBgdd2FBbm5jFp8vKYo%2BhGJBhr%2BGak4mTk6KZ4AlPNrwIiMDmyFOY4sKzGD4DGTnIoYybTefP48gRHDtme0JDAz79FH5%2BiI1FQoJsY1LzWcm%2FlIaZgNxDNTJXyJUruHhR%2FrTH%2FvPn46WXsGaNSKqUFISEKMN9fSKZqqpERhQV4fJlWAmAgtu3cecONm9GcDBXz0a2TgFISkJysrnb1NRUWVnZ2dnp3sEbGhqqqqp6e3tDQ0PV%2BAsWuBglLk5w98KFck9mdqeTutBFN%2FIQKVX0vb2RnS3iUOndgfmhspC1DutYUMyxBCSQLPzgR%2FsYxrhoIxq56G3cvoIrMgXoQQhCNmMzk4SPtRALmbcUANonMEFRaUYzReUu7hah6BZu2Q%2Fz55uBdHtjNj8V1AGn5a9%2FsBwghVADdu0S96cgPd2YkWHQCEAwgpnbydDkjR0BmIM5bGqXR3OV%2FV%2BQ5nEb3IwqANykmX71gFVKpiB7SCD7s6mDovNAEQAf%2BMgawKfUBrAQAA7TydznCzx0nvHW4JSyMlkAYFIe5wKgEwbXfF%2FQszkA05GFZO6Pj4vKpwY4QFcXzp1DZibee0%2B1ZWQgNXWmApCP%2FBVYoXRKS3H9OmprYZ%2F98%2FOxZw9eflkklRWoBGx81Q0bsHQpixGnTg0%2BeTJNACYmRNIxcwoLIxGZjvQkJNWj3vE%2Bg4JEmkZFmS2NjY0k8Zmc%2FcmTJ1QRVQAYf948F0OQtdlM0CkAqqciAGocNwVAwU7sfAWvkKxTkWo15AvfeeJw8wp56SikThzH8Qu44DQmhWQ3dm%2FH9vVYbzXkDW%2BKAdsyLNuADaxiJvY36B%2BzHekQ%2F78ha4DROr0OKX%2F%2F67RZdebBaQIwMqJogDkVWRJMu4sXVR%2ByP5t5ztOngv2bmqbvj0rpD3%2B1O4hBNv2Xb3TF0xWKEjsZwpC9fToHb4caoCxttCkA27fD01N0ZXq3KwAs1GxkM42UfkeHuM36eleOI4Hvxomjo7IuMeBiLNbDAs7xP7o849fAP%2BJHBWsmDnHmPgn30SMMDDiZdu8e7tzB1q2IjZUNCxYgMXFGO5mP%2BXzvNKQp%2FZIS3Lply1FJ79Wr8dZbeO01MxEzpZ7gCROUdBBliApNDGUVh%2F0Ee%2FciJYWUM3js%2FxgsHTYHUhT38WNUVgouApVwIYnD6dMLpomxsLS1tbW2ts7k%2BJzOINnZ2XLX1xfR0QgPR0%2BP7hAaAShHOTn9GZ7pmScLwA7sCEaw6CcliTjz59vkJodQyCQYB97Em%2Fuwz%2BkEqg4vPAIRPvA5jdOODoclb%2BGt1%2FAa%2FR3HZD6%2FjbdjERuILz4CxtWHNiPS4s%2F0sYgI%2FD8QzQJ1jtcl%2B5NLzAJAjaMGzJ0LU2JYCwBph80WvODlpeG6MYyx6XwD%2Feyv9dcpAxOYYFO7LDTtPp2Ap%2BftMK8kyOzfi151vL9f0YClS0U3HvEyIVSi0oYAZCCD2WOOXl0tytgNPH8uJlZVqcXDsOlIn6kAdLk5rwOIxo%2BHEISwabbdhfZ2XTN5aVQLkwDwb%2FTM9k3dZZErnbo6oTGSnNtMzZwcHDyIt98Wu5dxHudv43YtagcMA2QTUnR6YHpBUEEOcji6ZPFUzNeD0cPD3OMpq1g8BRcaH4ePzwIsSIRzHQsLE9SsRVdXV2dn50yO393d3WNJ9lyFTa8ALF4sEti0LZnTdS49hSnZfw3WKCZZS1wWABnbDuKglv2b0dyJTlKYJzxDEcob5gOpo37wI7OPY5xccBM3bUbkFFI%2F3eZjvtVQIxq70MXpjBmOcHp6wIP2zdhshHEI%2BNzZdplgW4BDQKHmNSTD30vfehmVZE4N6Osz5yTS04UGSALA7dkQACqG7S0ZDJrE5wNNYlLPHoxuPdiPBLJ%2Fbq7akwXAykUrAEQucqkBtgWAV0lxME9lGdfUuLkzTmQzCQDDMvhpnP6XvrAfA9RwbTVidBRjY7pmtrTImS3D1xehoQgIwPCwmzuxUHRWUlmZLS%2BR4RERePVV7NunVNoQhr7AF9%2Fhu8u43G%2FoV10XBhUUBs5bjZzVQNbgYMzg4M%2BBKKkdA3rNIY2C6ZqbkZw8D%2FPYnG41OFg0LfolzOQhOH1gYMBqlTlzdM9n9mZny5%2FP8IxsXoYy%2FavbFoDTpzE15eI5lgF79mKv3OGLlKK0GtXtaB%2FFKAUgAhHJSF6KpRuxcQ6U45Gyd2N3C1rqUEfP6UF3YicdrNj%2FEi6VoKQKVR3ooLr4wjcSkSlIYfB1WBeIwJfwUh9K%2BSonrOMdFj8t4q%2BZZREvJOCgNEb%2Bv6DaDfp5lXzOzF292tSnALBdvAiJr9hYbspQQ4MQgPZ2m3FI91rG5%2F3IquYU8nFclQGDbk8veHlpSJgSa9S5WliYEAA2CXxlUv0jPBKzzcsbKyuFAJBX5s4VfU6gBpzDuR70WAhADGL40nxvZSLTlBdaXw%2F3wImcbkIUohg8GtFMLPxbxxSmtKkGH8qBj66Zvb3o69MayP7%2B%2Fm4KAGub5UF2UPpMhMePYSc1t2zB9u2Ij1e6h3H4Y3x8BVesvGuCgthuAWwfDA5icJA1tFejAdWqa1ubKMXkZNYnU4sJ0IlOB7vlMXlYLUZGRobdlj5TBMJqFTZdoPbKlC1BZnOXVm9CE6fUoz4JSaJP8ZED3r%2FvShjBBUloI0d0o%2FsIjpzBmeu4bnWZZOrVWE3ifg2vJSJRNvLpN2MzReuwzM4aUCq2Yms2slXLAAbodgInruEaF9I6ByFoFVZVoIIixCrej%2BW2ZPmQYP9DWku80j9oMl%2FTaoBekP2pAWYBYI5SAEhmra2yAJhdyf5sdkA9Y1O7fvBj078NFyTLFfYnAhDArNTucxzjumaS%2BnNzYVBWI%2Fuz2XRkxrHJAqBqwEVclLuKACzAAjbzpOZmNDXh%2BXO4h2fP8OQJuroQGamN%2F%2F8HARC8iEGWjdKPikJsrNbhn%2B3NHB%2FHxIR23NMTXl5uboO8k4xkpcOnrKkRAmMNkdVpadiwAYWFiukCLhzHccH%2B0xEYiKCgSqqJSQBk8xogWmrfqp58%2Bm6FR8hEbI4FwJtC4W3uTkxMjI%2FrKwP7mJDgYBVH0LA%2FQRp1VQBgkg1FANSYrgmAQCxihzH8GT77FJ%2FeEuJrDbIG67kd7UYYf4FfhCJUtpO46V%2BEohZBzwpIfFSLdVinjUD2%2F2f8M9l%2FenA%2B8%2Ff4nnrGPfwEP5mP%2BT%2BxscdH%2FGeJeM3Y9C%2B9aGgQGtDaauYvZGQIDXBRAHgKipzanYM5wQh2aSc6NcDg4gFDEMKmdocwxKZrJgWAzQQLATDK%2B1D2KwYeYPt2RSzI%2FpxpLQDxiOfTmqO3MGdaXDyLJSghjGASgAQkMP5t3Lbrz1rVlKtUqt4z2oA9%2BPhoaYB6y4VnMTyZjqXIolX6qanIykJ4OHp6ZMOfQKUESxhZv39tYTG4vw3eNu9c6TQ2imYHK1di9Wrl%2BxmeXcZlFrzt1YOChAbIWxscNJoEgGAh%2Fhz4D2q%2Frw%2F9%2FfKnVYrbhIeHaJqbEMDMMD0IC8Cg80o1AlCLWvL4Uzx1dQOyAOzADiWTMzNFTFYE1dFFnMTJozhqk%2F1VVKCCyp2IxIM4qBqXYmkOcrQCwOJfjuVhCFMtfO7v8J1N9lfxGI%2B%2FxtdRiPoVfoUfFxUVQgPMAkD2z8hYeKmJ7E8eV4zV1YL9TSU2HUxsNrUbichoRLu6k73AUYcO77l%2BOl4pN6N2e9HL5nhKKf9nZyM3F0%2Bi8US2lZPku9E93VHE7JU04A6pXyBa0oBsZJehDKoAxCGOzTy3owNtbZgJOJ3NVEXW8adjYECwhgnU51CE4kUgNFQwkgn9gqj6ZzE8ubYOdaw6pU%2BxWbdOZOdnn6k%2BDbandsziNnjb8zBP6Tx9KvTYFqXHx2PZMixerHSp0DdxcxCDtoNSANhkkP0HLdzCtJ2hIdHkSQgKROAsHu2FIyVF5O085fZkHncjDK%2BANca5y7BMMcm6cvGiS3FqUHMJl9icepLEWdursIryL1sykZmO9NM4rfpkIYubULsDGChC0UU43xIPch7ns5G%2FBsvt%2BVgnmFH5Mdhw1CvwZH9qwJYtpj5TNj09dW79otZFZifWF5t9dKCjHe1q1xe%2BvCK2JjTp3EYKsNGZz3rgHjesMyKQgATuwRveqoWb7ESn41mHxMw8fJGnsT14YiNFD5mHKQCHFAEgODMPCWYB8IFPDGKoRea5XV2izQSdPIj5JAzOJbjQOMblbLB%2B%2F%2FZ2tLaqPTrzaqjwTFDMIubMQUICYmNVA2WqYzrzGtxfgZnIm92GbQEIUExr16KnBx4eOHVKfNguidkE5ZMXSOZV%2BrxbO3JO6l9iZgMwT%2B7irt24gYEOBMACo6OiSfCDH9uLPO5sQ6ZpCWMYc1sAYBKPGQrALXTeRK1OZz4fV1QFIBKRyUhmMsj0x4JaiIVJSNLukFPsSr4lrmGM3M%2FD%2BNsaXWt%2F4kwSvqNDaEBtrdBlBRkZi9JrzQJgNAqJcCgAT%2FHUiutTkUpp1C8Am6TmGOvE%2FbsgAGlI4za0lmY0c6uOZ51ELE6SzLNMhm5RuBKbWzua8OgRHjwSGRAjdTmT888J9oMH%2BxGIYKJYzCVPSVTlPrq7rSJwCS6kdg2mpqC%2BHjU1Wv%2FFWLwcy2e0h%2BlYvhzZ2VpDLWob0GBnT%2B5gGMPFKC5CkYV192788pf4zW%2BwaRMChDAYp8%2FsmLVT8p7NVz05KbScz2ENsYW0NFaT0q9BzSM8eoZndiWQ7E8NkDE4aHAgAM%2BfiybBG95ss3a2Fw1fX60AkB8p5yMYcS9YJSoZQSZfgZgYEZmXrhtPhADgvisrVqNaa4lHfBzi1O8EJGhHq1DFR9cZvFNogGjTcWG6yeigB5fKjPRerqHVeenpizIWRSFK6ZP62QYGHESgwjG961GvWnKQQ2H2gY%2BeDawENgpGcgJy%2BXpglb5DecFrKZZmw0xHHeioQ12nuGbHIG93AROm7sfA%2B9IHa%2FNvpJtmmwL%2BSjvn70DdMDPcv5OiSNsAwhDGZvYlZfT3w0F560FvL%2Fr6tAZ5lVa0WjkqidDTY7x%2FH%2FfuIS9PNqzF2gpUsHj4vJgVZGZi2zasXasaylH%2BAA86DZ2zE9%2BES7iUgYxEJFLhzdbVq5GVhfx8lJSIYz58aGxosK6DX0tNhtH9DYQgJBShSocPwWYLUVFISUF0tNJl8lEO7Qb18xMC4OWldIeGHGWI0SiaBA94sDnesEYvBLwkYGbwlKC1MK%2FZnEBmf39%2FuUf6ZpvJNuQIW7DFIn5lpc7pt6WmH13oakZzP%2FqDESxbosULK28cg5hYwQNmNKGpEY3645P9lwFbnfoZbdssWX8F8LKma7AXggLAtmuXyCRiUXz8ovRFmAu0SMOyADgDdY71noQkuRuBiDVYcx%2F3z%2BCM44lUmi3I3YR5eu5nPRLLsKwKt7vR7dhzIzauxupIRJqPiQo9YvyG8t%2BM00DfF3iD%2FL%2FLwv6F8p%2Fp7F9QUBAbK56%2BpaWluLh4YkLRD1Fm5As28zwW9gzZH1K1UZOHhxEQIBusV5kGQ1ERcnOxcKFxzhzZ%2F3W87gvfq7jKe6EwTgjRozTph1QF3t6IjBTsv24d9uxBsFIYk4bJy7h8Azcw2xjF6DEco9q9iTdTkGIeCA3Fzp3YsAEPHqC8HI94rEdGpnZzs8HGdUi%2FMe5sYA54g3OUDl%2BBzRbmzxdNBYmDdGA3KNk%2FMDAb%2BE%2FAW3CWJILzFdKXpMCJmo2NiaaZ7eHn5%2Bft7a2mqRtgBF9fXwer2IZM0BJa0UrurkY1ZgAbApCdjVOnhILqwC2puQRWCmVAFQDmoVp3oQgNR7jWswMdFF%2F9wfnkv3PqZHQ0Ypnqp%2B1HMTsODBhlDeDNMcIvqQEZi5AujY2P6xSAe7h3B3c2YINaGluxtQENvKtSlNqbxWvcj%2F2v4JUYfaVItx3Y0Y72T%2FHpMIbtueUhjzHNWSGB26MgOV3iEP8nA%2B%2BZb1Bc4heSfZlZAz6T%2F3zBwg366U9%2F%2BvLLLy9YsMBoNNbW1p46derDDz8cHR2FLACBCAxCkHmFkRFB3DMHg2gEgEtwIUf%2BjY04fhzh4YbXXyfX0GDEgt%2FgNyuxsha1Peh5jkrgH%2F6dCzs4hLeBDC%2FGREoK8vPh6SnMUmp9ja9P4mQVqmbhpHJMTd5zw5%2FgEyrBbuzOR76FJ49WWChaZ6dI3LIy6oGxtBT379uQgXZ39uIP%2FwAo166%2B5vTgsbGYO9fcbUMbKc9uUG47KIjUmC13HQsARZdNAvnFKcWQDK2CMWvnzJnT09MDdxEYGMggVqs4Yd24OEHQCxfKPZm7MTOQXxiEFJWJTOVmZI25eVPP9L8B%2Fi8XV%2BxHPzXffA%2Ba6uaHttL70NeLXpeCG2fsYbSVis5gKC%2BXBUBEXwQkpCfgojQis79zYScZD9%2FAjQIUkKBlC3P0AA4wOSkJl3Bp%2BpQMZGzDNgoAZ%2Bnf6yqsGsOYH%2FzO4qxNelmP9a%2Fi1dfwGn1U4zVcu4mb1GOn8dPkP9QAqcJUCU0zGMCWZv0Ia9eu3b1796ZNm5RDZWT4%2BPjU1dWdPXsWsgCQL9jMM3ibOi7UOagwmjgWrGQPV6%2BKM%2FT1YcuW5MWL3wQ%2BhycFgE2UkiRyrgjAb8XP60C0ycAA19Du035m%2FMw3%2BOYMzszCMVXIeW26%2B0pU%2FgF%2FaEFLNao3YEMc4qz9o6KwnsmwHlVVKCnBjRtGHp%2BZrgnmHnzhy6Z07L9mZKTYggxyQTe66Wp37aCg0KCgbFkAxscFYfPXHnx8RJNAFVTC2gcfvNeSiMLCwsLDw2ciAIwQEhJitUp%2Fv8M5MjWbQOIuQxlmDFlIFAFQV9EnAHCdMXnhbGqXmcDHsJEYEiey6Y88c%2FZ3WwPI%2FqyMwUFDUJBRMEC8aUAWAH24jMuLsTgVqWyyJQYxP8fP52P%2BMixjoFa08up4XZGIXIiFS7GUlbtIKI54xCX4yLEc%2FxnwJ7i9GgWcxch88bu4W4e6LnSNY5x0H4tYigoVYiu2BiNYndiO9gu4cAVX9F6HzPX6kJiYmJmZqbVkZ2cnJSXJ30IApGL1MY8%2Fpyg%2Bx8wxMaHlCG0iOsKVK4lPn26oqFhRUFCQn4%2B8vFnYiQkDvx0oWl50bfm1ixcv3iq9NYuRzVDfxSje9UN8yMRiHvDVmWQLsMDGlEXMsUVYsQI5OaAsnzjBezPOQAY84cmmdOy%2FZmioaDIoAL3odRQ0KGhJYGC2%2FE32Z3OAwEDRZF%2FJ2%2FGGu1giXRaW6OjomJiYmpoauIsoCVardHc7nKMRgApUsOYpipgxZAHYgR1KzbP2uMr8%2BWhq0hnBJcacwhSb2tUmg0VisEBFiU78yOzvngZMTgoNYFux4ifAfwLShJWZ5YoA8LCncGoe5v0p%2FjQCEbKRmboP%2B9ZhXTWqO9AxhjFveIcjnKWaiETZ5zEeP8cXwJfA39o7J48TAviLdpfKQaJna0BDIxp70MOlSYBRiKKuRCNaO5H1%2BR2%2B48bcTzaD8mNzZwYJWouHh4dqEQLgBS8v6cP0OEbRZg4%2B2pQ5Ea1XsYNCFO6u2b21ZmvulVzkA5%2FNwkZUzAn5u5dfKcpZWpSyaCTiG5w6NZvBrSHfsBG3cOs2bheggGlBgslCVjrSmQrW%2FguZGwuxYAFiYvDll%2BjpcbGmtCvzeU1Pbv81g4IwZ47y7Zymyf7UAJ0CEBamagt1xYm0AK2taGkRbOTtrVji4%2BPnkyJnAEaIi4tTu6T%2BtjaMjNifsHgxsrMRHi73ZNbGbIB0LEdbgzWKSVYa3QLgEixe3xJSKhjtdZ2msyNX1zPVVQ0oL6cARK1Yka2wPyGzv4ZknKISlV%2FhKx%2F4HMCBuZir2iMRyWZ7XZRzym7B%2Fs2Og%2FcBhwEffD6JyXxBXqCKsDmYMoIRBj%2BCIyUogVsYNYxStKaHHcWo%2FN3U1PT48eMYsor5JssbGxvlb8HI1hnDC3XlTu3Ckno8KDz8cQiy%2F3t473W8HopQ1ADVYiMlJaitFQX83OUd%2FB3%2Ffwkv6jnJlU%2Figb%2BiJS7O8LOfwd8f4%2BM4f34WDmrCNuAQsMrCZlAq7ZbxFpUgEYmZyExDGn%2FJAZQEb3hb%2BG%2FdiuBgcVUffojhYff2Ib2f6QXFrdu4dtr8%2FMyEyxxSM8YmkoKCKADxcsepAMTGIjpa%2FuxARyc6ne75yRM0NCA1VekmJycvXLjQ09NzcnLSjRsIDAxMSkpKTEzUxnfCtzIpS6BizaIAwCQn1gJw%2BrTOQnOJKH3hS4JTu8%2Fx%2FLmpdCaEyE6oQ8w96%2FRzTwOMbl6LDQ0IkXjUFmpqyFyLOzsXR0WZTGT%2FigpXF2UZ8hKe4dl2bC9AgQNP0ugVXDmDM3X4djcaHR9VPksb8BEq%2BvGHZjRvwIYwhDmI%2FxiPz%2BHcMRy7iIvuXSCVZghDSuUKFleucxjDtMvf165dS01NHR0dZTkYjcb6%2BvpTp05duXJFHhUCYMEXloFmEZIaOMqUeZi3C7sO4mCoMVS2sGiPHsXVq%2BKhOztF8rqIQ59KWR6FqAxkrMO6vdhLCpZfcf9%2BQ0cH6upEm%2BWD2qxZqXoaQeVtPI3TyUjOQc5yLF%2BFVeux3kIaV67EyIg48OHD7u1gXEjbuNJhjfv4TPex0gWnr0P2XxIYqHScCkBCAuKFWDALW9DShS6ne2Z5V1ebBcDf3z8rKys7O%2Fv%2B%2Fftu3EBmZmZ6errWUlvr8KFDQ7UCMLvsTzShiQHrUZ%2BEJNGnxsvL6Tidq6UYSPmD6aVAbhhVpZ2MxqYOBSCAzaXgBvfZ3jZsaMDfAX9h%2B9iTFdnPy7OxUeo8eyZ4oarKjUXv4i7TshKVK7GSz5CClBjEqFo4gIGneFqN6gd4cAM3LuDCNrWadKADeB%2FvV6GqFKV5yFuERfGID0e46sByaEBDOcopRZdwidtw%2BQAmimZ9keunj2vtfX1977%2F%2F%2Fr1792JiYthtaWm5ffv22NiYPCoE4Dmes5lnW3GD2%2FD0FM0E61WmYa1x7WZsVjWTDPPll%2FjoI8q%2B2zvo75f%2BdKObYssnIS3%2BEr8MRjCNvr7GjRtx5w55YfbVTkrsTioQ8I9mm8EsEJLu1F3BlTVYQ2rYgR2pSDV7cmdkxLIyPHrkxtoseHOd%2B%2FuLNg2Tk6Kp8IWvH%2FzsBeRQTnBKdnCcaYFRwST2EBsriJy%2F0jHJenr2%2FPixKOcdO8yWvLy85cuXuycAS5cuzcnJUbvUQ15kpYNC07A%2FUYay2RUAmERFEQB1RWen%2BytB6KxnFxAq1CxU7ZLOKNfydz%2F6%2B9Cn9VTL7V8QRptsP81Kms4uz55bMVcRAKYLm7toQ9tn%2BOwqrmYicwEWRCEqCEEkvjGM8Yo4ytQlR%2FP23It%2FGZev43o2srntuZjLe2YdQqpN0lETmshIbDO8OrL8kK3soFFrHxoaunz5ss0IQgBIi%2BNaifOmFnrPcGdKHC8vtWe9igqJEEMQQrXMR75qvnYNZ8%2FOhP2tUYGKszibhayd2ClbSBFsp04Ze3pkw4tQgmkwKEcmetDzHb6rRCUT7k28SUowuxUWoqjIPQFgwas1jzlzRJsGoxHDw4LGZXVggkYgwl7AVViVH5wfFBxknmw0nWE6cnORnS1%2FyrqrZ8%2Fd3XjwQHCkysNpaWlr1qy5K8Gl45P9CwsLU1JSVAtplsEdaJZWAFj5ZOpmNGNWwZjUFSo9q0v0MzPFipGR6OpyMGuV1M7rXsULXrGIjUa0%2BWLRzTSTv7vQ1YlOdYisR26i9pP19N4t8Cnw9uxejT4NIJkublkMlRBmJgAy%2BMrqQ%2FMeKADkqElM2t%2BmC6eYwMRdMHeV7PXjP0kAZvHeLIjeYBBNgj1hmA4P%2Fh8RpaEpDl9f%2BPnNwu4Yh80E61WMpiYhGcmpSNXOLitDaeks3pVAKUpZhFrLwoVISrKzpxcHy2SnAHyCT77BN9riRFaW4Ahb3O0UvehlUzphYQgPt%2BlG2TMpH%2BIQtwALKMPT85wcsdF749r%2FvBYBJhNFIyDA9tpca9Uq5Ash70c%2FWY%2B6q3PbJSUoLrawbN68edu2bZFkSd0ICwvbunXrxo0btcZbtxzmEqWCXDxvntzjntkw22BBWkfWqI49FEoCEKh7lSQkJSLRoMmwVrS2oU39bkGLlf9CLNR%2FikKp%2FXgwpaInPLOQRQ3AP0n9jg7B%2FvX1s7gUVZAEZZ%2F9ZwpS%2F%2ByyP6SkItc7EQaH8JC9BzFotrG2WeEzhyVNcAllT7Y4NhaxJBq129mJpib09c3udQlKakJTO9pVy9y5iImZ7vjiZcBSA5rRfB7ni1BkYU1MRHy8G7G70d2FLqVDDY6KIi9PP09LC5qbzd1c5K4SbGMhhcHG4L3GvTvGd4SGhtZdqcNr0igD2ro1ga1bQfINCuJnMYpLUDKOcZ3brqzEtWsWTB0fH7979%2B4DBw7M0SeEAQEBdN61a9f8%2BfNV440bKCpCY6P9aRoi5m5fkABgurRkZzsVgBBJAFbpXoIsmYY0raURjcx5%2BZtpVo96bbFnIEOwqj7kS%2Byf9CKuxhmWYmmOMSfQaJJCsj%2FbjwrjrDnNHAZKvGAQsv%2BQ0QbR2xOG6fCCRItsZhurVyrgmYJFq4nTJ%2FjcLqMHIzhEZLuC3l48e%2FZCru4ZnnEbMVD4KyQEwcGzEPYv%2BH%2BbqCctyHz%2FqDvCXdxlUu%2FFXrMpMhIREW5spgc9FLkRjPhDEvJ580Tr6bFyq60VnLtihdLdiI21qOUs6tAkJiGxwzZs24%2F9y7CsvX1t5fn%2Fknw%2BWbgmJSErS4iTVkCInTuxZw%2FWruVnG9qu4Mp1XHdp5xcvIjMTKSkIC1MsK1asGB8f9%2FHxOXHiRF1dnYO5CxYs2LlzJwWgsLBQNXZ14fx5XLoEa8lVQYHUCAAJugxlOovHVVSikvH5NEr6xcaKdRctQlWVg1mrkVWKNQ9xvwMdjuNHInI5luchT7XUoKYa1VrG5x6YZgUokLt0XoEVlOoGNDgO7g3vNVi0GtEv4mYcwSgvvYb7NBvLy390AXBBKAw%2F1lokerbp2iOEATaEYTqEAJAT2cw2aovMi%2F0aVXAV05jVehVL8I194KN2JyYwPv5CrmxcBDaHZvn7%2BMxC2EP8PzWF16aQpVgm4XkIno7mUA3NkgcyLyuc3B2OcMUUECCaW2gW3NycilTRSUggO6KszNLF8Pix8f59bNokmJzg%2Fb%2BLd6MRvQ7ruA2unYY0Fh5%2F6XzmTFT3949e7n1Zmc1pXOH778Wvl5dYIj8f27Zh3z55%2FBROfY%2FvtdSjBy0tOHlSqNV775mNa9euDQ8PT0pKun79%2Bv3792tra41Gc7Z7eHgkJyfn5OSQ97ds2ZKdna0ekP%2BPH8fp0%2BjstL%2BkzP7%2BklJKAsCGFwY5%2FhZssVjdoQAEI3grtjai8UN8OIUpB55024ANvvDVLleOcqsN3Md9VQAgCf9jPP4D%2FiCrvj28glcYPwEJL%2B5ybMIAw17s3YZt5qUfP8a9eyLxfjwYf%2BRT6wRZnlyvaA5526BIj1YYHEMIQDe6u9BlYQ4LE20mAhBOHgvXGjrRab3KvyEIJh8hh4%2BonD6OoDmY41KQ53huUYQeHvKLGlxPQPJFPeoVAVi4EKmpNt2KipCXh3ffVbrc8AEc2I3dfejzg18QgmQ7Sfm77zp9bpUUo3ilYaXYDaeRNJcvF%2BRKAYiNBZk3LU32P4Ij3%2BLbEpS4cZPXryMiAoGB2L%2FfbMySQIqvqKhoaGjo6uoa4VULiQyIjIxMTEzMzMzMz8%2BnGEjuShl89RW%2B%2BQbFxQ7XkylYQhvayI9VqHJj2zphWwCoUUOOynUFVjzDM6bHd%2FiOHzZ99mAPiXI1VqsWVhyf4C7uat1qUXsLtwpRuBiLZUsOcjiRfHEUR22yhgc8yP6v4bXt2P7ibgZYCQyHYDgQw9yGEUYqXyISl2Ip2Z%2FN7HjzJm7ffpE7UWGc4TTDC9hTpYhrQLWIrSX6Ss0fRRh0QAjAOMbb0U52jkSkYo6MRFQUGhvd3yYjsI5NoMZwiTGMvYAL%2BVeDvj48MxenD3zmYm4MYnhwnQHIv4EINPdHRzGm3NhfAr9zZS81qKlG9VZsFR0%2BREYGZcBYU2OZkYaSEuPx42J8xw6z1Rve5kwAqR%2BHDwsmjcZFKkoUolKQIgbS00WzRA96TuLkN%2FjmOI67fZFc0dMTExPYuxe%2BvmZ7gYTJycnu7u5RXg6oQf7h4eGe9DbjBPDz0dFjR492ctsnTjhcKS5O8C8FUoLMzniRYJVxiR%2FwQyYypbv2VjSApGYDfK5flAz%2FIn8kn%2BRLPU5Awg3c4PRWtMoeNKYhbSVWkiJ3YZd28mVcLkIRZcMq6DVcy0UuN0Bmly2cK6crgz%2FCIz6ibA9HOIMXoICKtRM7MYHGiUaS8ou5m0MUAHLXfxC%2FwxQAlkMc4rKQZbFiaSkuX0Z5%2BQt9Jrep32aU2ZUBXhOq5D%2FEsCoAwnBLapZ2x%2FCS%2FzCfWtBiLvvoaMTEzGibnK6J8BRPGX9W7%2BFfH9rb0damNZAuM5ChUwDiEc%2FyDkCA2UQ56e1Ve5OAp%2B698LZZyc1oZljRz8lBXh5qaqY5Gr76yujhgZ4erF2LRMvSvn8fRUU4e1ah0Q50HMbhSUxSV%2FKRb7FVafQBHpBBvsf313F9hnd59CgGBtDRgW3bkJZmMUS6j2Z%2B2sUrNTXRJ09GHz9%2B7MKFiunDFpWdnS3I1wRScxnK8IIhy4wiAIQjASC%2Bax%2BJeTIcw9xYgzWctRZrKe1MqhGMeMIzDGHJSM5DnqLKEv4%2F9toDOqosTRP8Qgh5B%2FLeIWSQBEgI4REpTEICiclM0lRm1XZXVZ%2Fp0zO1s3vOnO3d2RmmZ3dqtvv0ntM1VZ2T25llsysRJkF4I4yEcDJICCGHDPIS8t4gFPvd9yJevAiFQhECMqf66NOV9O5%2F%2F%2Bv%2B%2B%2F%2FfRxSh6CquUgBmrsjpV3AlAhFqwdiGbeR6Ll6LWqrUJCYd4UhC4OJUC%2B5On6HRodOjtV8hvPx1EaQRdilf%2F%2FNsLq2tuHAB1669sceR8Zovp32tGnBM9ytjRFJNyT5gYrdFAJrRzMZM1JmDKL1Br3RMTg8MVHry%2Bq92cZ95zvN7tW2tB%2BmqoQE9PfD2lg0pSFmP9cUoHsLQnLPXYd1KrDQyMd3b2%2Bd9HLJMKUp1ArBmDdauJZ1r29tn5KImK0tbVycoKCYGvr5YvBijo2Lzigo8eIC6OsOMalR%2Fjs%2FLUZ6EpFCEesLTDnbjGCdlNKKxAhWFKBzAwGsJZ06OSJqaGqFMPHtk5GyO%2FwE4IIKtx%2BfL1l7c71ul9cXLbNy6pdjNlLVMvhJ4eEaMF3kth59TAPZgjwc8RJ8X4xlCQ8VtzaBzbOzst2Pen%2BJTb3gvxdId2ME2jWlZAJzgNHMOn%2Bk0Tp%2FH%2BdnOcAEXfOHrBjfyvmKUal5UPdn%2FBV44wGExFiujU5g6NXrq9Kh3%2BZsO0Gxoa0NWFs6ceZWimAtvQNdU674%2BGfgbqZmAdfdvpWYDdALA6m1Ag8EcQt4IEUzw4sV8jufoKBI6RKIeCVycW7zytX8J%2FMq2Gf%2F4ynvaBFImq3ubrqhYYzuxswUtf8QfX%2BKlhXlbsGU3dm%2FERoOJBEzy6%2Byc91ke4iG1JwMZrHNoNNi4EUVFLCGtmUTUFBVpObiUBLNUPPvYGDo6MD5uZtk%2B9J3FWTaShTvcZQGgsR%2F9rz2c1WSyahQUIDUViYlYtkykFSXKwwMODsJhYkIzOBj4%2FHlXa8uBXY278Az4Of4e%2BH%2FJqj%2F5Cfz8RMvOpp%2BZyuaKZF5eWILMy6%2F9CjNB7pb32oRNOpOsQ2YEQLzV2FjZsbFjWmjfxbtRiJIHGHZXuJpdvwQl3%2BLbLGR1oMPCMehA%2FeDbMfFMhkj9bGpLF7qykX1i9ETe6J%2B9MZp8CAQA%2FsAiM4P37%2BPqVZw%2BjdLSN7I53iD7Gz3nm97DRugEgLlSh7pudPvAR%2FTJFxERYBWRg%2BYBzg0PV3pcth71ltPRatgSwzf%2BoDNQXCzoasMGIYESyL8TmGCt3sCNGpgJZiACSQQswvfxvtFAYSFKSl7lLCMYuYd7d3GXIiT669fjyRPxoOaXFVHt7dX29lqxtPQCbfz5TiLMSLAFBSEqCsHB8PGBu7ssAJrJSQwOtnd3fznd0t3d2P1u67tu%2F9WNpxJZ4uqKjz%2BWNUBLDZhJrzLtShjAwHcmAMRjPDYjAJcuYXp6hq%2BWYtw4pvkSQ61o3YZta7HWF75ml6UDnzsHOedxXryORYxh7Df4TQ96GtG4GZtXYIVZtyEMFaEoF7mXcfnBaLt2dPSNReVvJAGQNOB0APz94eKC8XF0duLpUxQV4dYt8f2mUCwpkEXMMt4mNeu3SbXCrd%2FM1xuBvfJFeqpGtU4AiOho0eYnAPJcPbisWe5Tww52bEr35UvR3gSkhQ1Li13tXt%2FqXV0iTVeswN69im0XdoUgJAUp5ShvQlM%2F%2Bl%2FgxWIs9oBHEIJiEZuGtI3YaLQOw8517tx5xePkIz8VqWSXAFFXwO7dggc7O7VtbbOoqMa2DRT3N68EbaS0ttmOOgWc7BLR7zqAAxGIMJxo%2B3b4kjB9QQ14KCq4CFjDf15eagGQGVn73QgawDTgdg1oiESk6Ht46A5TWoq%2Fk11%2BoziTccfG%2FrYC%2F64WtQ%2FxkInEnAlF6FIsdYGLBhpSeTe6yeMVqKBWUvWtPMY0ps%2FgTCUqH%2BBBEpJYtP7wd4Mb1xzHeB%2F6qCis3FKUck12%2F3bU5%2B%2B6R%2FUnVGGv%2BfUrbYtKtvgzqMH%2F44%2BAAKHczs6YmEB3N%2Brr0dv7Jh9kH3B0DpdZxtvmnmlms3OwbrfP3%2BSlJRgEgHnABDIwUUwMYmNx6dJ8Vl2%2BXExXrVw5VzIwlZ3hrHTHxoT2vwmwWkZFTenAHHNxea0bXL6M0FAsXYoNGxTbCqEJK57jOStqAANTmLKHPQWA9RaMYNMVOjpw5oyIvPZV%2BWgEIznIIV98hs9EPzgYBw9icBBff61lXdnI9%2FJpmPH%2FBfiVyZjmO5IBC0KVi1zyoKwB1FTDwMqVgk3YsrPvXL6cBYjMkgk3X%2BdCOmb7zk4v70jVaZUFgAjRC4Ao%2Fd%2BoPcfYKHBwmcToTdxkC0MY02YJlrBkZAHoRW8LWprRPI%2BTVKOazRveFE5KpStcZQFgorajvQ51si6ySo6OjvLXzBJFZmz%2FML%2B4MOeZ%2F2zfKc7Ne%2FzcmzmQiN6x7%2BLmBgFoQIOUka06SmLBxMcjMhINDbYtGREhJvr6yr02tHHZetRbnsRs9oKX0u3vF%2B1NQFrYsLSXF5Ysed17nDiBxYsxMYFt29RmiYT85phbW4vTp5GVhZoam%2FZklWrNEXABCiIRyTfNRKbor1qFyUnY2eHUKTQ2aq3WAGXpICAWCKBOid5qIAPgNfeL3nckA7Me%2BQmeUABkGdiDPYaBwED85Cc3%2FPyy2LKzKwYGsDgZf5%2BsH2aGl82PPecNCsAvhOTsBhZLhgSKEnx8IITZQLIvJQGYNJ7bhCa213ueHvSwWXAQZxodU5%2FNgOOmhmvzPcYA8G%2Bl9j8Uzlki%2Bi%2Bk9iZw7DsQAXt1pxSlD%2FFQJwBEUhKSk20WAM5KTFR6JSjhskYOw4CbkcEf%2FkEIcoKTYunowPPnr3Ct%2FwD8jfmR53jeIXOXBAcHQQ4BAWJHY3RLf8lut2zenRLz29%2Bir48Mi61bhYjqSes%2FAkf1XlnSd5VCmGSlu3dx%2FTouXEBV1dy7ODnB0VHpvcCLKUyZdcxGtje8PeCRhjTRX7sWLi7w9salS8jPV%2BjaghKYUDoFIC4srKNpm579wyUXjelCb1wJzIDv%2ByW%2BlGXgAA7w1rL94pVFWdmHjh%2F3HR%2F3vY4zuE721%2Be5IOKy7%2FicIxi5rts3VW9LEhqAG78CfvU9RM4aaKWcPWqF57VXUIEFfHcwEoBiFBehKAMZ7nAX%2FVWrsHo1cnIwMmLteiTUlSuFbEgYxnAhCrmskU8lZCJSEIvYaEQr3RcvhOiQPOeJaUsp2ojGBjSMY1zRm2XLEBs7UwAUCr4l0ZyNGB3FN98IHi8q0jCG8fGIiBA6Y2dn6tnTo2lqwtOnKCvTFhQgLw8TE3Ov7%2BUlhMvTUzEMYYjNrC8vewInHCHUQqcBVOigIERHiw%2BqTpmgP2vpOigoLi0tNmDLrS8YlhTVwN8DOcAlg0FWgtcsA5o5xrV8%2F%2BnTOE0BoAxQA5hap08jK0s0YDPgJx31p1L7fnFCagtYwPcGIwEYxegDPLiP%2BzuwQ%2FSdnbFmDdLScOuWtevRPzUVbm5yj0txwREY68cMAUhBSjKSle7jx6isFDLwJkB2qERlOcrXYI1sSUpCSgpyc00cq1Tf2rl5ZwbEhJIS0agwy5cjLAx%2BfoKy%2FxcG56f4LTk7CwNP0dWFlhbU1aGiQiPd2RxhRkDTCK1%2BZPFibN8utFmFTnSS72Y7DIe%2BxteTmKRIvIW3hGnpUhw5IhbZuBGlpdxdnIEnoXTNhKMjgoMRHo6YGKxYEZaSElu43sdnUXc3x3ol3me7BjyzwNhl8r8p5WsemJv9FdzGbd66W9u9MuvdrKx1Z84oI7FYwAIWIMHepH8P9%2B7gThrSvOAl%2BunpWL8e9%2B5hYsKq9eifpmP3AQzkI%2F8u7pr6UAAGAQ9dLxOZW7AlGMHKeEEBiovneyGteQZV4yEeFqBAEYCgIGzeLFQnJ0dx6TEWAOtpR8CUpWprRZPxH3ltSQCOUgAYh3%2FGlOlGGjNr%2Fnv8H43oeo7xcdjZiRNv2CA0QA9KbD3qG9Fo4ZBkw1%2Fj193obkHLTuwMQICwUpnY3n4b1dVoaEBrK0jqAwNio6kpsZezMzw84O0tNqWGRUcLGSCJDiI2lr539dSfP2eUeGPB%2Fkfn967zQdV41ZdZX6ZldV26RKXa%2B91tvIAF%2FInAVAAGMZiHvNVY%2FS7eFX0fH2zahKIiXLumdnsOOAPuJpPpuXEjgnVUfgu3uBQXNN2zUmrp4nMd1h3EwbfxtjJ4%2BzZu3TIQ5kxoZzKsjSBX5iI3EYkUHtmye7egvuFh3L8vG6pmCMCs26qZ2oqDDUoNFrl6pgz8OfACR3t0AuDrK3hZhSIUPcKjaUxbXnMMY1nIakBDFaq2Yut6rPeQdZivzMa3IxiFwUGDADg5CQHw0Mu1HrGxz%2BLibty5c00SgG5rwn5a9ztvzBVdEx3uB46jO6v70o2vpBN2AQeAJVjAAhagh%2F1M003cTEJSAhJiECP6W7fi0SOUl6O9XfEhgTvpOFwPT09kZGCLjlKf4ukN3KAGmNlTEgDvdO%2FN2LwHew7jsDN0dFZRgbNncfnyHIdmpR82tYVITY1vv519hSu4EoYw0h6vyS5Z7uOP4eCAgADk5aG3VwjAIQ5kAEstneSU%2FsM6TdKa%2BbQ4UzW4GL4BWGTGpxnN13H9Du5YdQSgAAXlKC9G8VqsTUEKhVD30DLc3ESbBZSQalQ%2FxuPC6MLi2NvwKhU8awNOSM1GZrcSlpbJltqfvZ6NFrCAfymwN2u9hmvLsTwa0Xawg6srtm9HdTV%2B9zvFgRzuaCIAO3ciMxO%2BvvycxvRVXOUiWjXl6ZFWg9jKHyT2J6Z7pWcIitXh8WMcP46TJzEwMPe5ybyPDT1S%2F1Hj8ZOWBWAAAydx0glOH%2BADqh0tS5fipz9FTAzS0%2FvKy6uq%2F7lOt%2BK%2FmVUDkqwNstaqQUv8NQa9RpqgEpVncfYMzvSi19rjAKMY5QPlInclVspKH4GIIAT5wtcLXq5wdYQjn%2F4lXk5gYghDXLwTnS1oaUADpf0JnrAhFqI9wAIWsIA%2FUZgXANLKJVwKR%2Fhe7BX9tDTs2YOWFly%2Fzl4nUAUshqAcHTeuXy8cMnRsfhEXOZ2LmF38fydvVA7EV24RsyRMTyMnBxcu4PRpNDdbe%2FSkmZ9a5d%2FJOac%2Fw7Pf4XeDGHwH72zHdiF1wLZtyHCsrLxTVa1eP2ne4a3Qy6VRcC35Jpgd%2BzkHShHjD38XuFBWScod6KhCVQEKKLS1qJ3H4UjunM7mDGe%2BdSACfeDjCU8TARjGcB%2F6KACtaG1Eo2H%2BggAsYAF%2F4rCfbeACLoQghKSQilTR37cPz5%2BjtxclJZUSidlLlLWJQwkJOHgQ%2B%2FfLE4tRfB7nOX22lQ%2Fwt5LqUEkBePECxcW4exe3buHqVUxMzOsSu6VmO5rR%2FAW%2BaEBDOco3YANvuhiLNVVVCWxm3LU2Lv8BcNTUVmnGZjrp%2BEzrz88i4TEifeFLsqYAjGCEjFyHumpUzytkRhjDGLWEzbZpZP84wA0YfvUjLGABC%2FgeYG9hLBvZPvDxglc0ouHsjMOHMTKCqanKx49lAeDfTfHx%2BPBDvPceli7llHrUn8ZpTrS861htbV1lZc23vRUVS0tK8OABWlutPXGL%2FK%2F19dx%2FAhPncK4EJXdwZzVWJ%2FQnxFRVRdfWuigbqfa0EcettFmBqTKUsVnlq3k9kVnAAhbwLx6WBKADHSdx0hWun%2BLTEIQgMBAff9xhZ1d16lQzORuoSE9%2FfvCg3wcfIDKS3Va0HsfxUzjFiRaW%2FQ1QB9RWVtberKyq2khNsQlHZfY%2F%2Bjqj0IIWtsu4HF8Zv6wqKBqIAu7pBv%2FwGjf6T1KbD%2F4vqS1gAQtYwOuDveXhalQfwzE72B3BkQhEIDS0cs3%2FVHnNE1gCOFZ47q9I3%2B8X6UPPRjRmIYvOVaiyvOb%2FLQkALlQCbBttPfFXut%2FXj1GMFlcVs%2FGbgtYgbLektoAFLGAB%2FwKhgXZupwQkvIf3DuDAaqz%2Bx3%2FEz3%2F%2BsqXlNOASErLnr%2F8af%2FmXKEXpGZw5iZNP8MSaPRewgAUsYAHfOxbh6NxOXeh6iqdDGHrR%2FqLoTFBOjrMQBcQMDiIqavDFqstZ7llZyKpDnVV7%2Fqfv%2B9ILWMACFrAAwN5Kvza0fYEvaiprFlWWAVuArZI5r6KCLfdG0I3v%2ByILWMACFrAA22Bvk%2FfNyptelSWA3Ii8koq8voo%2BbP%2B%2B77GABSxgAQuwEXbQAP8rMKSy3QIyIOwz21%2Bhv7UfyJbmsGX3dfThZ7M4z9asw78HpgCt1NqBv9DbqTX5ejtbD%2FCvbb611lx704gHfqXfaxD4L0Cg5QO9ufbm8AbP%2FIrzR4F%2F9yd36Fnbn85Jv%2B%2F23eO7u9dW4Kax9XPA36bD2gM%2F%2B5kZeymQO%2Bfkf5jt%2FhZZPhKR4Qj3gY8LXOxgN47xfvS3o70OdcMYllz8HBzg4oVFplOf4yNIErDCyDwN%2FDcr7%2FsPNkUnMTExMjLSx8fH0dFxampqYGCgpaWloqKCH7AZ26Um4zqQI%2Bma1QgLQ0QEfH3h7g57e7x8iaEhdHaivh6trXitCA0NDQsL8%2FX1dXd358VpmZiYGBoa6urqampqam5unv%2FSQUEID4efHzw8IK2MyUlxke5ucQve5fVBA40%2F%2FJdgiRvcnOBkL1JdlIs53LSwTjCCwxDmBz8PeDhCigYmBjH4HM%2Bb0NSKVwq%2Bv78uGEz46WmMjaG3V0SCH%2FOHjw9CQuDtDTc3LF4sUoXL9fejvR2Nja8YVVe4RiAiAAFLsZTfjKoWWgZkCEPd6G5DWwMa8JrAmIcghH894UmuWIRF8l5kiR70kDGe4dkUpl7XdhERESEhISx2k7Tv7u5ua2urf63JyRgyr7zh7Q53Jidz9SVejmKUTNiJTuZVL3otr%2FBv%2BLtFi1UmEjf9Daa7%2BP8XokPu2rp1Ky%2FFb1Zubm5u44wEYFUcJc%2F%2Bn0bGUqnNgSVmrRYldz3Wr8XaJCRRA%2FiuTCBZAPrQ14KWGtSUoOQO7vBpXVz%2B0fmvIZWbgkfAF5IAEO8bNIDsf9TKsC%2Bx%2FoVSU1MzMjL4d9myZX5%2Bfk5OThSAvr6%2BZ8%2BelZWV5efnX7lyZZolOwOrzMeO1J8JLJe%2BqyT2v2H9UbBuHZKSEB0tCINsQQGYmsLgoCjp2lqUlODuXVRU4JWxadMmXjk%2BPp7F4O%2Fv7%2BHhoVTC4OBgZ2cnr19ZWfnw4UNGQKvVWruuRoMNG7B6NeLjmZXiFp6ecHISQxMTQgC6ukBdqanBo0d48ECw4HxB0o9DXDSiQxHKb%2FKUXGOkqgs2CsBGbExBSjzima5cijQkCwAzlgLQgQ4SUAUqilF8D%2FdsOiR1nK%2B6YoUIRkCATg2ZTaOj6OkRkaiuRmkpyspsvHx6ughybCzCwsQe7u4GAWBI29rw9KlY9P599PXZGthkJK%2FCKsY2ClGBCCR5UVllAWBAKABd6GIV16HuCZ4wJvye3wvyvdZgTSISYxBD6WXkveDlDOeZYlOP%2BkpUlqKU1IH5IiAggDmfmJgYExMTGhrKYjdJ%2B66urpaWltra2vLycmY%2Bv%2Be9F3OSGbUCK5ifFABf%2BHrAg0lFGqSSUQDIhHJeVaO6DGWFKKQwmF1KcB4zZv80UgzGfxYmiZR%2BASrZp59%2B%2Bv7778fFxdFQUVHB233%2B%2Bee9xsVFAfDiP2qAuy030cw0WWQD0v0%2B7NuJnSwq3tysD6%2FKC6ci9SIu1jr%2FpYuLFj9VBjskAVDDS%2Fe%2Fd%2F5Hng179%2B49ePDgrl27goONjsouE2XHjh0rV66krh47dmyI5GWMfy2xO1uXap4kANv1XXncCjg74%2BBBvP02Nm9GRIQZB6rCzp2oqhJ0cvEizp3DfBEdHb1nz55t27atW7cuMDDQgmd7e%2FuDBw9Wr1598eJFVsXcSyckiENu2YK0NISEWPIcGMDDh8jPx7VruH3b1iuQm9Zi7WqsTkCCzB2LRF7rMAZcsHqp5Vj%2BNt7eiq3pSJ8tXWWQ5h7gwS3cuozLtbAiGsCuXcjIEFydnAxvb%2FM%2BlZUoLEReHq5eFXpgxYmXi3UZ5DVrzKeKOsKM7ZUruHvXymhQAjOQsQEbSF6MrWXnYQyTuQpQcBu3r%2BEayRq24C28tQVbGPaVWEmZsew8iclylFNs7uDOdVy3VXJcXV0zMzM3b968du1aVrSnp6elew0Pl5WVFRQU5OfnX79%2Bvb%2B%2F36a9lmBJJjI3Y3Ma0pKQRO207N%2BAhhKU3Mf9POQxwcwtSMqlIGqlLx2mFQEAWKEsZ%2FKV3E1OTu7p6WHl5uQYkY%2B9TdfAbDxqkf1Zih%2Fho8M4zMtbcGO5rsM6ZlsQgrJc3J2dNXMvjdfP%2FuT9Tz755MMPP1QsHR0dJHpHR0eSvp2dHT%2FeeecdDw8PrVb75Zdfmkz%2FM8FEojHMeg6T2d9V%2Br4uteq5z%2BHoiE8%2FxZEjeOutOTyp8GxkbVdXHDs2j%2BgwOXjfAwcOxMfHz%2BlMeZA9g4KCKIGlpaWWvLdtExq2Zw8VZu5zsALpv2oVoqLg64tvv7Xy%2FD7w2YEdMkklInEeEVCDSfge3tuHfZSBOZ1DhKaFrMCKUISexMlCFFpwXroUhw9j3z7s2AEnJ0vL8h3YqBCRkTh1CiUlFg%2Bxfr1Yd%2B9exMZaFeGVKxEWBi8vXLw45wX3Yu9u7CZ5xSLWmuiR2vgKbGTwaERnI7sGNdZMJN3vx37qLjXAAx7WTHGAAzWJLRWpPN45nLuHe7AOTOC9e%2Ffu3LmTLLlo0aK57%2BXmtkFCSkpKXFzc%2BfPnHz16ZOVezEn5ahQAK6dEipePXI%2F1yUhehmUMI5XV1Emw%2FbTaIAmCjjC9vb1ZqupRFqyPj4%2FJGrYJgBkenYufveF9BEc%2BxacskpmjfeijjPMhl%2BiFzBOen%2BEzjbPGxWUUuCXt%2BYoaYAP7x8TEkNwPs5wkVFdXU%2B2fPHlCwXdycoqKitq8efOWLVs4xI%2B%2Bvr6mpqarV6%2BaLLJBrwFCBiLXNjSQ%2FVOlkTZJF3KsOsq77%2BL9943YvwyMVROaRjHKw%2FB13d3djfyZDQMDuHTJpujwUkeOHPnss8%2BCg4PV9omJifb29uFhkXbMfmaPg4ODMhobG%2Fvpp59SAulQW1trfunt2%2FHJJ%2FjgA7i4qM0jGOlEJ2%2FBZHWBC%2Bmbj24YXrJEzOKUly%2BRnT3n%2BVkhrC6SFEkHrwxSySf45CN8xLxV21%2B8eNHW1jY0NMRvan9ISIidnZ0ySgWmvyMcpzBVAvNsTe79wQ%2Fw0UdYt87M6PT0tFa%2FoMJGlEJ%2Ff13wZtWAtWt16y7RVdDcoBD96EdYvBjj47hxYzYvXudDfHgIhxheM8Okmv5%2BTE6Cx%2BYRXV1NxrdhG6VxKZZ%2Bg2%2FKmLsWEYUo7nUYh8nmZoaZCYODFvbirAhE%2BMLXFa45VtRXenr6%2B%2B%2B%2Ff%2BDAgejoaNgIlj9LJiAg4MSJE3l5eXP6r8EaphOvFo5wM8MjIxgdFZVrbw%2BWs6rEIIniD%2FCDUISSHv%2BIP%2Fai1%2FQJtEbcKAmCThJYmGQt9Si7cjmrYa0AmCdRK5h5H%2FYxh0zYvx71RSh6iqdd6JrABFONLBCNaD4klZwOh1wO5bnwtt1AOV4JGpu8qfDbtm1bzNoAnj59%2Btvf%2Fvbbb7%2BtqamRR5csWVJVVUVm3LFjB7uZmZmlpaV37twZ4SsaYynwARDv4RH30facku05OWQQSNR%2FHTOVfCYSEsAtSKAqXD96%2FQ7u1KJ2GMPOzs5hYWFr1qzZtWsX2Vkf63149gzl5Whutv7Ke%2FbsYSWo2b%2Bzs%2FP27dtlZWXNzc0K5YWGhiYlJTH7%2Ffz8ZDdKAidSJH75y1%2BSv0zXTU3Fe%2B%2Fh44%2FVOV2Fqgd4wL9taKMM0EIB8IPfMixjnbAZph88KPilrQ2FhRYOvw7rjuAIq4tFYjrGIDAa7e3o7RVlJj2AZfjDn2T3Ht5Ts39vby%2Fr%2FNGjR42NjYOkIcDLyysiIiIlJSUjI8NFr21kn%2Ffxfh%2F6WtDCrJ65OC9EKTRh%2F8ePH5eXlzPOrEztokVgbOPi6PSfnZ1lh8BAHDkijt%2FTg6amGYtyeP9%2BvP%2B%2BCfvLxfUcz8cxbg97sjAjnIY0JzgZHaizE%2FX1IkozoIHmY3xMLcxEptHA2BgePkRVFVpa0NeHiQlBymRkHx9ERCAxUaSuHjGIIX%2BRkij2zNvZwh6MYFIkPamjRgO886NHrEORBorYyHuFh2PFCrGdHrzjZ%2FjMDna8cj7yLbwyq%2BaTTz75%2BOOPvb2NNL67u%2FvJkyd8ZX6MkpQBVpmPjw8LLSEhwZ9SrAfl%2F0c%2F%2BpGjoyPTPj%2Ff0l68EfOTV2OSGw2UlaGiQrxod7d4XZYPOYcCEBCAqCgkJyPUkM9bsZUM%2BRIvv8SXL6BKY8H2RnWnFgDe5d69e0xU%2BeSsUx6VyWZywrkFYFYGtYL912P9LuxilaqNl3H5Ei7xkSpQwdeSjbwhg5WO9J3YeQAHXF1c453fBX6G%2BUNj6wTyOzkuUZ9VOTk5Z86cUdif6OvrO378OBmQCUHGdHV1XblyJb8LZyGppMzMuO3b4zcFxMfj2rXCx48pAIVWHYVkuH692pCtyf4j%2Fsi4DWFIdz2NZuvWrW1tbT%2F84Q9J0MJkby9m5eVZLwBcgTKWoCpa5s2JEyeuXLnCS718%2BVKx29vbp6WlcfS9995bsUIn53FxvN92stjNmzeN1qUmvf224CYV%2B1%2FABbZc5PLdTY4RichN2LQP%2B8ihBuuuXaisFHSjOoYaqUiVSYrFbzRw7x6Ki3kTwW6trYJHhoetEYAMZDD9AhCgWKj3p06dYjQKCgoo%2FIqdT79%2B%2FXqOMhokCNkYhCBO5%2B1O4MSMOOOdd7Bxo8FCZc3OzmaOFRcXNzQ0jJAFNBpB6CtXIiPjP1PLmTQ6oRWBJN9%2B8YWZ98OOHfD1VQz1qD%2BP87dx%2BwmedKBjDGMUALJPPOK3YAsrazmW61wpXdu2oaTErAAcxEG%2BhSn7372LGzfw4IGIbWOjEfvwxaOjsXo1tmzB7t2CyCSEIOQQDnWj%2B3N8rhS7GjweT8W9TNn%2FyhXk5gr5l8XGJLvIkgzUpk3YuVMIjwQHOBzG4R70tKK1AQ1mnzgqKurw4cNHjhxRsz%2BDf%2B3atbt371Lm6%2BvrOzs7ZQGgurPYIyMjk5OT161bx0pZulSXaW5ublyEE3t7eysqTPNZOc87eIeRNGJ%2FRvvyZVA2qAHMT767GnzK5cuRmqrLGEdH2UwKHcQgH%2FQ0ThucZwiAFlqtnpeZVN988w15P1TSkqamphs3bjyb8daWBMASg1rB%2FhpoWNUsKrWR2fk1vj6FU1OYUtsnMPFIyP2jRjSS437o%2FsMIj4i593h97A9J2MPDw%2BXvxsbGkpISVriJz%2BTkJJmRlEcBYJfJwfpXC4BGiQ0LePv2xdu27RZEOewTl9Odk9NOCeid6xzMb87VkyxRhrJzOHccx41eQKu9devW9PR0YGAgaUhnJZXHxFgbI42Gab2JVaQH5YQK97vf%2FY7XN3Gempq6d%2B8eHbjjT3%2F6U%2Fn6xMaNG2nPy8tTqwU2bBBEQDrT4yIu%2Fh6%2FN7mCApYrG1PcBS6sGZ2VzJeeLoqhoGDmlDCEySRlxP7V1bh6VRAHScqENeYCq3Qt1rLSFEtra%2BuxY8f%2B8Ic%2FkBRMnFn55O6Ojg7e%2Bsc%2F%2FvGSJUt098aGe7h3C7e60KU4u7qKcs5UcenY2NjXX3%2FNxRk39YvyAUTjLfr68NlnigYkJzOVUF6OO3dUhyBZpKVh7VrF0IzmP%2BAPWciqRKX6tMMYpjBUo5p68Bf4C4PCka%2FZyEfd3Wr%2FNKRRjHdjt9Gdv%2F0Wp0%2FPdNbvMSyV7yM8foz2dnzyCfSlRGZ%2FG2%2FXoIbyP3PeLuzii6%2FESnV0cOwYzpwRTzk%2Bbn4vsidbaSmJDR9%2BiMREecQTntzrKZ7%2BE%2F5p5jwm%2FJ49e%2Fbv309aV4zkRGr8xYsX5WpS%2Bw9JqKur41uzTJ4%2BfXro0KG4OJ1QeXh4cCkmCamWDzpzu83Y%2FBbeika0wVRTg6%2B%2FFmHkW5pFFxOnSzxzZSWeP8cPfiDYQMJO7KxFLXWdkTQkjNaIiCVBMFyhQIKPjw%2B%2Fu82%2BGmBn%2FhwWGFRrFfsTqUhlJhmyDShBSTaymaAm7K%2FGFVw5gRN0w%2Fyhmd80Ly8vReGpnC2zMAi1lKPyt7e3t1L8pmDFs2olPIrMyflJTvtfteOvBEnMAXJrWJjaUIzifOSb9b19%2B3ZpaenExISu7%2BEBf38laSwjOTl51apVcn7IuHHjBithJvsr4NCFCxeuX7%2BuWBgxLsKljPxWrRLcpAcLkgLAZ7V8nvM4fxM3O9BhMCUlQV9vJtiDPSQpdXYhPx9ffIFf%2FhKnTtnK%2FpB4KhGJagujcf78%2BZnsr6C8vPzs2bNkB7WRi8QjXm1hJChk6jQ5d%2B7cyZMnjdhfjfp6TVaWYMD%2BfsW2ebNQVSNQ6Y2Dcw3XTuO0CfsrIH3wFShORtblyxGtYijAGc6ZyCTdGLmR%2Ff%2FwB0Fes%2FCIAcXF%2BOMfhb%2BKuzOQQTb0ha%2BJbyhCSZGme%2FHu3OvsWfPsrwbFhp7Hj6ufOwlJm7ApGckz3d96660dO3YkJCQolubmZirxr3%2F9a761CfubID8%2F%2F6uvvqJzTY2ef4GoqCguyGXNTklBSjrSDf3JSXEpatts7K%2FGtWv45huRAyowhuux3tAXbG90ZhMBkNEtYbZ97OY%2BihpaG3xXYIWRsAO5yL2Kq3NOZJrSrRrVmA%2Fmx%2F49%2FF0sQe6Pj4%2BPjo6adeWQQriOEsw4kfrZWF1AFapykHMDN%2FiAQgDY%2FgwIm%2F0spAq9DhEv8fIZns0WDa1W29PT069iCjizhJ2tCVBcXNyKFSsUO4vh%2Fv37RUVFliNVXFxMt2fPnikWLhKnZqLwcMFNKsIrQhEFTDtX9vCmJSipQIXBFBWFiIiZnluwZQd2GBU5yfT3v8dXX2lqajTSHTU2pkIYwiIRqXQ7OjoYCl7W8izyQkFBAZ9AsXCRMOPXpYqtXm3oVlVVUTPIOJbWbWjA5ctQCS1lPTXVaB0EBSE01HBgdDB6j%2FDIwqoFKChF6RCGDKbgYAQGqn02YiPDG4Qgg%2BnOHZw%2BbUJGlvDkiTi86oIOcFiLtalINXEknZGsF2GRwXTlitjo5k1r92pqwvnzgi5V4F4kXxNHd3f3zZs3Z2RkKJYXL16cPn36%2BPHjFRUV1mxVX1%2BflZV15syZgYEBxcgFN23a5OPjY%2BIcgYhYxHrD22AqLMTt23j61NqrMaV5r0eGB6W2rcIqP%2Fjp%2BlqWlFFNGQsAC%2Be3Ksrmxz%2BQXEw2MS8A5ivHFvYnCS0X%2FLdcsZShrBCFTWiyZnouWm5jBG8Em2ZYhoGs17kDi0oWAAnXcZ0CoBvyBT7Sy8DOWcLv5KRm8GEMD2LQUvApWvb2hu6LF5iaMutowonR0dHLli1TuiyDx48fW3M%2FulVWVqrXiSJTKyBXBanoA6hDXSUqrVmZUteMZkOf9%2FLzg6%2BvUXjgtBmbt2KrwVRejlOnNN98oxkctHxlC%2FCFr6G0gMbGxrq6Omsm1tTUkBoMt4c%2Fl1K6AQGIjTXiWOoKFXTudVn%2FZN72dsWQmIiEBN13L5unZ6%2BXV28v5NbR29HS2yINmGt6MLxtaDP0qdNeXoZ4w57sSV42OJDscnJw6RJsApmOdxweVgwrsTIRiWqXpVhKSeB2BlNHh5ANiodNKCmhDlNXFUMc4rgX11d7rV27dt26dR4eHorl2rVrly5dsjLnZdTW1l68eJH6rVgcHBzS09PT0tJMPAMQEIxgk8lCGm1CQQFKS9UGisoy6GtWsP20elQShJlMobXA3fYzTa%2FO%2FkQoQsMQprZUoeoJrL0%2FFTkPQsRTbNt2TqQDHxpbJiX2f20CIOJE6s%2FMhKsr9OxfjWojp9VAvNTiIKShwtKCrMnFWDzrMKWChOvtreu%2BfCnIoL9%2FpqPJswYFBYWGhjqrlIYsxvy25o50U1Oek5MTlwoODm5tbR1lnzXm6YlR3egE%2BrrRPSniPAtcDJ996OuH8eHd3eHmhq4uxUDKWId13tBfeWKClKE5e1ZNN1altDFc4eoGN8NJ%2Bvq6u7uticbz5897enqULhfhUko3LAzh4QbnsbExauecpKOrNlJbWZmiHhQS6jU1kfp%2BFJLw%2F52DatLkBIM9G36h%2Bz%2BAgSEMGexOTnB0VHrJSF6FVV4wSILgcdKr6oJWYWwMjx4JYV63TjaQjmMQQ1pQBJ4cze2MZj14IDRvYvZbzIaHD0Wg4uIUA1kyClG9KulbtWpVSoqBTrq6uvLy8m5Qb2xEbm4ul6KcMOdlC5el5fLly1qtgSXd4e4BD6OZjKEqja1CTQ0aGgTL29nJhhCEBCFINzpDAKS%2BsLzF3wggynS9ElFigOrS9tYfxhOezOxFWPQCL5hDIxix4OwP%2F0AEqi2NaKxHvfXbUQBSbRYAy5WeIrG%2FiQCQ%2Bo9Ju%2BGFBNm6ePFiarvZVRwkyN9TEoyG164VArBmDT%2Fb0CYLgJlVnIC9kgDESxpwSjU0NISBAaXHmAcj2E%2Fj9xzPzayTmoqEBEO3rg6NjdCayvXMuPj7%2BwcEBCjdyclJ0ndbW5s1Ue7o6KDnxMSEo547uBQX5AqCmEhR2WyK%2BwtL7E%2F8reGTnswuo1HS3GIj%2FVuN1akiNfTIy9OwjJ89w6uBic1mOLQqGSyDoVN7mqxDdVaFGS0tLU1NTXOuqZE1oLJSUMCuXbKRcaWWkHbICf%2BN%2Ff%2BusU7aJPxiFrsxicQjfgVWGDlQhAoL5xPQ6mrU1ioCQIQjPAxhigAsx%2FI4GCibEReaQSqfPXW1s%2B1VVSUCpQI3otgUoUjuxsTEJCYm%2Bvr6Kg7FxcUFBQV8u3ncrLCw8OHDh4oAeHp6JiQkxMfHV1RUKD4maaAL9cuXtu3EKZSNvj54e8uGJVhCHtaHQ2tS6YoAHJX7nxlpQInUBGwSgCQkJWgTIhHpBz83uPFWrNJBDHagow51ZSh7BjO1R8FnU7oDGKA%2FZcP6uzcCP8P8ccj0GkmIkdnfW2XNmkDWBZmgvyXrDvQx1hL8%2FPyCgoLMrkw7R%2BXv%2Fv7%2BwcFBw5i7u2D%2FzEy5R%2BpnG8bwrKdcJrU4YwEgC7e0qL1Ykyux8hqumU6PjcWePdiyxWBhuZaXm3iZJQlvb28fHx%2Bl293d3dXVZX146cwpwcHBcpdLeUs5%2Bnf8vSw1K2Fc0w5wIN8bmcgLKollHiYiMRCByqimoAB37%2BKVMYGJcYw7CWXWybwib5ZBNzorXS7CpZSul5eoBAU9PT2MmzXLilfr7NQ2N2NoSOSVhMBAIScUAAl2UrMNpA93uBv6XHxYl592sItGdAxiDKMkVpLawMB8AtrYCGOpC0CAP%2Fzlb8aZTxmBCMMwGZzbjY1ZSF12vzK71%2Fg4GKhftwK6hKTykq%2BUcQrA8uXL1TOePHlSVlY2n3sBnMjp7777rmLh4tHR0WoBYBqwGU1jHpA39I%2Bn4L9a3owS9U9qlWKq6ZPNWLwJrb6cNismw5ee%2FY1hKgDqiMcj%2Fi28tU67LhnJzAxXuKo9%2B9BXjepiFN%2FCrQu4MAajl2OSecBD6fajn%2F54szDKlqPqTlwcPvwQ%2B8j%2BAYqtDmd%2BL9j%2Fgq7%2FLVpbW5v0KcuMWbVqVW5u7rNnpvK2evVqqr383djY2KIiay3Zn41lChSikOzPv3MfPMO4294uKqG1FXp6TUPaBmzgUgyjwW3NGhw8iA8%2BgMS8Apx1%2BzaKiy1TvwwvCUp3QIL1sZb9FQHgUp6enja8lda8mUXrAx8jE%2Bmyt1fpLcfyWMQaLvj4MUpL52ComXuZi0svervRHYIQuUtJU2TeMvz9%2FdVS2oWuHvQoXRcX0RSMjo6OjIxYHyfN8%2BdaRkAvAHxq5bWla2hsjXY4wpU7CrS1UWbkz1CEhiHMSICZ%2FHV1Zpe8NOemJECufImhUE7svRSSGO4mTwcbHQOSYBiT44y7bQdy%2Flx31JkH6hDNIADc1CC84eHhkZGRSre5ubmmpoZijHlheHi4tra2vr4%2BKipKtkRERHALtQ9zgJlgNC02FitXzhSA%2F03I4ez43exDWhK%2B4WklNZi29S72sw3swI792L9LuysGMWYdlmDJOqxji0OcL3y%2FxtdDGFJGqfBOqnuNYGQYwzadTGvrVYyRpHxFRwv2Z4sypM1FXMxC1mmcVk9hQlDYq6qq4igYQGZmJtn%2F5MmTFAbZwc7Obv%2F%2B%2FTt37qTay5bHjx%2FTXzefs8j%2B27bxk5cl%2B1%2FH9bkPqjHKdd2tHz5EQYHgdwme8MxAxhM8OYmTou%2FoiD17sHs39u1DgF7SmM3nz%2BPq1VkpjjJzy9BzdXV1c3MzPNDICNPa%2BvDSn1w222qWYPFd4xG%2FDMsMfYprfT36DbIXBdZclOGONTXQx5%2FcyFwls5BlyLp2sJvUTlIy29Feh7pGNFo%2BAx0a0KCwEms7NtagNLO%2BnkZDNyUfiHrUq%2FeytxdNwUsJ1seZ2qYZHFTOS5H18FDG7KRmA1KRmoxkV7gaTLW1CiUFICAQgUYTmPl8AnM4as1%2B93twv1clAO5SEwJApfeHv5EzpUhfaJhV2fKBjRxsnjnSTBnrUPUdpX253ZCDg0NwcHBgYKBaAJqamvAK4AotLS2KAPj5%2BQUFBTk7O4%2BNjcmWJjQxE4zmbNyI0lJwX1a3McYtKPnE7IcQhD%2F9OgVAOcReuH%2BMjw%2FjsAMc5lwiE5l0I8X%2FHr9XjIuwiE3pTmKSzfpjvSL7GxAWpmf%2FKMVGXib7H8Oxme7379%2FPy8uTBSApKemHP%2FwhU4cs39fX5%2BjoyPfesmXL3r17ZecbN27cvXu3q0un81qyP5sEsj9bG9owV0abQOd15w7WrNEmJ0PPLBQAmcUKlw%2Fo2H%2FnTnnov7P19mqPHcPJk3j61Pw%2Bt0xL1lmC0p2QYH1cTfy5lJOTQe9h67UlkNk3YiNJymAqLsajR4Zd4ByKUFK8weHZM%2FJXGMI4MQUpcYjjtw98hABctpvABAWgBS01qClByR3cKUf5bLtXoKIMZZuxWe4uWbIkPT1969atubm5Fs6ckZFBNy8vL8XyCI%2B4lNI1LlIslmB9TDA%2BHjM%2B%2FiXwY6nnwou5KGPWCYC%2BlpzgtBVb12O9Yai5GY8fKwJABWXojOYyt%2FXprYa1j1pA9u9V9fUCAFCk2Yycu7vN7jXLlWYegezfaWxZKmnAkJ8EI9eOjvb2drwCOjs7nz9%2FrrZwCx8fHwqD3B3AANOpFKWrsMrgdOgQKwdubsjLs%2BZKc%2BC1C4CMbcARHPkIH%2BlSZ3CQtMIbg%2BJGVvf0FKyqJyYZLJtmNFeishCF5o9qy%2BHmxf7mokfNl9k%2FNlax3cZtUj8FwOwqT548uXDhAt%2FywIED7K5evXrVqlW1tbWDg4MODg4hISHkBdmztLT03LlzV69e1c2U2X%2F5cn5Wo5rsfwM3bOdAFXJyNDz2v%2FpXSkD2Ym%2F7jvauPW7PyP6qG6GpCadOaU6cwIMHswZ0BomZMNFLCdafzsTfQcIcjxJvKkJqhCP8MA7vwR57JSfr60HyvXdP8QlAQCACDUv39KC9%2Fa2R9N3YvQ3bjJSDa5wB2cw31TcGMRx9iqdUiEu4dEYMzDimFkzgu7i7BmvSka5%2F0u3Pnj3j05eUlJg9c2pq6v79%2B3fs2KFYuAIbJUe5%2Ffi4qBsFbm5u7u7u1seZdZPCZogzVI%2BmmTu3VLW0H%2FsZKMbZYLp%2FH4WGgvWAhyc8DaM8%2BsCA0eltBtm%2FR9WlXLkBrsAI92Iz3Yt%2Fra2YmYTZKWmAGt6SBjyjPC9daiQ2vb29PT3qg9l%2Bsd7evr4%2BtYXMwI0UASDu4V4uchORaEhpMtKPf4yQEKxYIRK7tPSVNECrFc0wXfRtvYipACQDBylU%2FOFSFKtr18RBKyrQ1obRUSEAZMCoKKxdC9IQlUCPTdjECysC8AIv2JTRRWLmIivPpJm%2FDKjg46Nj%2F8RExVaAAlI%2F2wQmZpt39uxZMuPo6OjOnTsp6RqNJiYmxsQnNzc3Ozv7%2BPHjIyMjoh8crM3MFAIggezP9krsTzx5gosXERqKvXvlcPj%2FxP%2FgnoO9u6O%2FcnIaVNxYwOfO4cwZPH5susIp8ZCzYZEEpauVYP3pTPxNVrPp5t7wJndnIGMf9iUgQWdlsl28qKG%2BqmTGF75%2B8DPM7O090NPzAX78Lt51gYvRolNAtpggmpSklAG2YAS7w%2F1rfG1aKtJhr%2BP6cu3yEITQjV0PD4%2BPPvrI0dExJyenqKiopaVFcQ8JCVmzZg0z5NChQ%2BR02diIRgpMjiZHvTBprb8f4XrW9fX19fPzsz7OPpQZQBEAOzvRVHxqZ%2Bx%2BaTb2P4ADH%2BCD7dhuMFVW4tYtoQF6MIZGYeQTyOk9f%2FRIGqCGu9RGnOH8ynuZEOa4pAE9Eu8T3cBV4KHY0t1deSMZQxJe5WIzV3CToLbUo%2F4yLjOdDuOwwUrh%2B%2BADpKSgoAAPH4qyJbvqU8ucBvx%2FUoMZUpyeFk3pSX1bL2I%2FM2GaEe1yywXt7Th5EufPiyyZnDSaRAt5p7sbf%2F7nCAiQbWEIo9aFIrSZCwBjGGNTZjjBiU9u08k0NmiAadC0np469l%2B9WjGWovQYjpH9hzDH2586daqjo6OioiI1NZXs7%2B%2Fv7%2BzsPDU1Rc1vbGwsKyvLz8%2B%2FfPmyIQNI%2FWyurvy8gRtk%2F2pUz5%2F6FTD4QUGM8IY1a%2B4C%2Fz977QFeVXalC%2F5XCQkhJJSFAkIRSSiQRQ4iF1DkcmG76tnuZ0%2BP3cndM%2B3vven3%2BOZ989kd7A522%2B5yV9lV5aIIRY4FEkkkiSAJBRQB5ZwllHXn3%2Bfce%2B65VzcKUe35pn8WV%2Bess%2Ffae6%2B91v%2FjN0hCEuWZjfIhMDY6KgbI1txsOjfZVsokvPYWLSGd%2F982dSYAcao707Ak%2FOEfichkJC%2FH8hnQ9Y%2BGiT1xgtcgVFAFX%2FjSlNdtPT3v9uwir6nH1KGuAx0jGPFo9Ag%2BE%2Bwb4Is%2FglJ6b%2BEtUuggBk%2FgxMRNN6P5jObMTMx8F%2B8GI5j1FxIS8v3vfz8lJaWwsLC2tla%2BcRJKeHg4natWrVIOw7I%2FjuOncbpdcJABLS1Gl8OJc%2BfOZTkNDBi6wwoWQbPQWtlrLMqtqnmorDyREQ2RcK9cwbVr6hlucKMZ3tn1Jo1vgXoto8OCADSZrjU0JMxhmGzkn80Ocnd3Z8LVnsHBQTvzbwmDEkxWIUyGUQC84e0Cl7dNuiEmRtimTSgqEkpcXo6qKlRW8kErcbqF9MruP9afXitMjykQABlV68JndHb6HjmCzz5DXh7MEjGFizmNisK77yq%2BKESxmWUBIMn2oEf5xKZiIvDVYPp0HfsvXar4SlBC6qe1oc2eGHfv3n306BGbnO0aEBDAqx0bG%2Bvq6qqrq3v27Fl9fb1h6NKl2owMLF7MxwY0kP1pU8D%2BEmacPftWQMB2P7%2B2uXP9Jc9qNi%2FQVV19XKZ%2BtvEfHMSW8sx%2FOqRoAAXAHe5%2B8KMGGHFYSYk41NmzuH3bZDKriCY%2Fk3r39%2Ffv79svv77Cqzu4Q42vQlUrWikA0zE9rDAs%2BUzyGv81Ue9GKUG2YRs5mjpxH%2Fcn7o8RqBADGKBUpGpSxWrdWC2BDd%2FX1ycuZcYMQ6u7AqN4jMe8jJM4WYxik4C1taipMbw6OTklJiayrnJycmzmkWpHXVxC3TcPJ8msUT%2BxHdvJ%2FiYyiTNncP48KirUPt6IRh1N8InDhGIMWQDGpX3KIPsLmXeGM83sWg62jtbmCFcJas%2BIhNc5GKePjo5aX0UGOWcQgyy5rdg6G7ONvgUEYP16Ya2tOgEoKxN6UFysLS21nIpfmb0gSQ20jh7Exax3D5nl1CmZ%2FdX7MAqfm4v8fGzfDm8ds4cgJAhB8nMHOnhmZWwgAmksL%2Fu3GCsd9I8dPZCrq1Zm%2F5UrFR9JQWZ%2FErT9kYaGhh5KsDbIy0u7cSNoEmT279P0Obprs4hD3M7mnTtObVw3ay6%2BA%2Fjo%2FFvuoevCg64L564WXp2ShaYcVu84zaz3b4FvFRWVP3lSeO9eT1aWaIYJ8ITnDIk%2BCBL%2F%2Fv40p37BLEUouoRL13E9F7md6FRPSb6eXBRQtC9g3%2FKNyxXnFmwpQ1khCvtg5qae4Ekb2l6Evli7dO3yhcujL0dTNAh3CUZDT6L8%2Fyy%2F%2F%2Fj%2BrdxbX3Z%2Baba6qqsFzXZ2YtYsnWfx4sXLly9nXY3boleKEGtL0TyYtjz7crr11JN0DuEQBcDIe%2B4cTp7EjRv4KiBrgE7jJQHwMjNKcJf2De1AI%2BFNn9Owisb0Is7ibD3qK1G5DutWYdX0ibdGJaClp2NgACUlKCoS1Pr4sTYnB8PDFnXRuBqkF4cF25wAFBSAHXjvnplDmhTYy5eoq1MEYJYocl2ZN6O5CU3KQKp9BCIiEfkCL%2Bzc2QpgpX2ZN3qT2X%2FdOsVRi1qZ%2Fe1f2n7o2D8khM8P8TALWQ81D6ck8gqs2I3db%2BPtuGdxOC11%2BrcxOk26sA%2Bw9%2Fzero6uLnSR8qb8UG%2BS%2FS3ir%2F8RlXnuZXl%2B%2BUXh9xF%2FAw2v8MpkjAc83KGj4D%2Fj%2F20z8X%2Fw%2FLlHcfQ0Tr%2FEy4lhyfJ1Z%2BqG%2FYenB0xPTU2Vnew29uF93Od9mdmKi0vN1pR%2FXzfv8Yro5YvC093wTUub3oefZgTefxxWeG8ubsTjRoPZUYWFoqWUkoyIiNi4cWNlZeWFCxes5G4%2F9u%2FF3pVyE%2BTrdHN0VJgef2s946ux%2BiAOmmH%2FI0dw6hS%2BIrQbC8AM8wKgwl9Z%2BrBRlwR7MQD8K%2F7hqzqnKYxl4BEelaAkD3k5yFmCJQuxMBCBZmZ5eGDRImGbN%2BPhQ9y%2Fj%2Bxs3L2rvmQD3xmr5tQJwP1O3H1p5VyGNTs7QRbSg8rGFpWfSbs1qOGGnOAke%2BIRn4hEO1l4nsT%2BKY6eRmb%2FTZsURwtajmmOkSDKtGWYamjnzRPsv349n%2FvQl4nMTE3mlETegi3s%2F33YpxNUFoAHXvi8uPju3B%2Fw9Xdw1biSHSgAtHKUq6bqOC4Z%2BrwbocDoz5tBnX2fNRpMmwZvb7i6Su9%2FgRhNTAxiqKjZyE5AwlmcrUCFeqorXN3gZnjPRnlQ%2BYniE5%2Fi0za0WVqwc6jzzLkzIaEhMTExnp6espNNloY0MwIQGIh9%2B7BzJzswz9k5T3CIXOmdLS0tr14JTZoxY0ZwcLCXlyCyD3x8kJGBJUuQkIDwcJw8if5%2Bk5CPHyMnBytWwE2%2F97e2v9Ve2z5eN34p%2F5JhnL6vIhDBAqD2v4W3%2BPry5c3INJ16DA0Js0dp4xC3G7tZQk7qQjh7VrD%2F8eNv4NotwVUyBS7mOUeFw1a%2B7bZbAwZ0gf7DBECGwtZavMKrK7hyD%2FcWY%2FECLEhGchKS5mHeDCGKExASgl27kJ6OBQtEaV28iMZG02sXhD8%2B1QJQCDwAKu2bPTyMkRFVLBcXfcBhDLN7yU08oexhv%2FHk7O0e9NgMvApBK%2BHuSIIh8vW1r2m3b1e%2BkBxJ%2FcdwrJCn0pibrXU0XcZTyf40CWT%2FLE1WAxqUAREREQkJCeHh4d7e3i4uLoODg21tbS9evHj69GlfX5%2BVyGz7d%2FHuO3jHRXU72ZnZF30uXvRZ%2ByfbtomltQjQBMga8BE%2Bos7pBx5W6PV%2FakwO%2Fc%2FK0x68QZAxWy19uyqZSgDIn7NnIzYWaWkIkK5jGqYxrRGaCB%2F4kNnLYFBuZzjT1PGu4dp5nLfC%2FjJqa2tv3bq1ePHiTZs2yR5%2F%2BFNjIhH5Ei8N4%2Fz88PWv4913tSR0PfLz83Nzc8vKyhobG%2Fslcif1h4aG8nLT09O186TynjkT%2B%2FdrAgLg4YGPP8bgoHr1lhbcvo3UVGzdqndp8M0d3%2FSu846pi8lry6tBTb%2B2n9oWhKB4xC%2FF0vVYz37huM7OTQ0nD0d%2BBBSLeQMDwmBH6W7F1h3YMRMzDa4zZwT7nzjxJi9%2FIvyZVtVrt2QTwGrQ6KrV03o8T%2FuWHTA8aiW86XPaWEXfij3anuu4TiMxJiKR1x2L2BjEULB5%2B6azAgNx8CCio0WTfPEFSkpMloRqRenF4WNOEIAHkk0FSlBC5lUEgEK3BmvoOYVT1ieuxdoMZDA7Diy2ejX27MHbb4vnHOADFsAAqZ%2F2CI8sztLY1UsTIWZkZAj2j4vjI0kqU5OZhSz5q4%2BPz5YtW1atWpWamhoZGTlr1iwKwMDAQEtLS0VFxePHj2%2FcuEE%2BMht5AzaQ%2Br%2BOr6udJ3HyDM6cP3W%2B26ed0TXLl8sawNJRNGBYMyyN3SPvztVV2A4lxGgWRkfxVYEaYEa9n0k2ASEhSEjA0qUinUyqjDht3NfwtX70%2Fxq%2F7kSnfFMSSRhE7Sme3sM9tUJYwaNHjwoKChQBIMj%2BczBHFgBdCezeLfpNxf4nTpy4dOlSdnZ2VVWVScDExMS1a9e%2BJUH2aNeuxdgYenrw%2Beeqlhe4dk3XxSkpOo8mTPP2jrcX1i8s%2Fm1xIxpf4RUFgLIUjegU6AYNDeHkSdfUU67QN35fnzCbWIVV67COnGJwZWXh6FHr7D%2BOcZrh3clJ2GvBXRIAlQjpBWBMZGrM4BbK7jzJReREfwM4DESb%2BT4qQe1xlTA8PDzpg7lIsLzKX0m7mWGFc0pRSuMjb5yNzMtKQMJ8zOftG8k2sWgR%2FPzg7o6PP0aZqtrFdY1bvL7JC0DZpNNihCd4QvIl6SvKRnarRS0JiwJoaVY60vdh3w4Vd9mBZOwlE%2B7VvS3DWMPY0Yajx64cI0HYnq1xYCUdU4SGCrqiSchEJk1%2BDg8Pf%2Bedd95%2B%2B20KgHqiu7s7lSA%2BPn716tXz5s0LCgo6fvy4SXAWwS7s2o%2F9aufv8fujOHoRF8XlnjpFAcCsWZink9UlWMJ80jhGdR7tjBnw9FRFGRwUpj6IBEwRJkbT2p3XRvJfIx48wPPngjyp4zLYGNuwrQIVX%2BALsyJdhO6naLJzh%2B3t7ZWVlXV1dWFhYbInGMFyZepir1mDbduQnq5MOXr06KeffkoBMBuwREJra%2BvY2NiuXbt03g0bxGF4kpwcdQZGRnDmDGbOFCyXlKT3piM8PTwc4Wbjd3ZqTp7ElaMe6fc8FGd3t0iRTaQhbSmWGt7b2oQAXLhgfdaI2OaI4d3VVdhrgezvZ%2BzRCcCQULchg5vs5qE7ZoGNmMbfVUU2w8D%2FqeohgxLUHjajh4fH6wgApzOI9VWUygIqgVjTbes%2FVqGKdgVXIhCRjGTeHZt6OZYHItAwPjISBw6I6%2F%2FlL9Hbq3O%2BEQH4EPgIUwIttHdxdzEWH8ABxfkO3tFA4w%2F%2FO7jTgAb1%2BFCE8thbsIVcPgMzeBgn%2FA74tq11wjBrj2D%2FmTOVfGt3HnvVcKy94QaeTs1ZTO4TGRmC%2FSWKpZhlajLLJNmcOXPmwYMH33vvveTkZHlgV1dXbW0tS42fYmJiNBqNt7c3FUKuvzNkBRXWYd1mbPaAoeHJfZ%2Fj80vQc1BHh9AACsC3v43gYNm3CZtkDWAN6edp%2FPy0vr6q0KQNpW4kjElQXp0k2J8KjQTldVSC2XTZKQOvXoGC6OaGkBADCa%2FG6lzk3sbtFrSYjOdhioBiR66voaGhublZEYBZmOUDH903Mt3KlVi3Thl87969c%2BfOWWJ%2FwwV98YWXl1doaOiiRYt0LmpAQQFyc2GsiLW1%2BOwzocI7dqjXMY%2F8fM2XX%2BLcOcTd82IvKP72dlEC1uEHvxjEsJsMrrw8sZ%2F%2BfhtXIC7hleF9%2BnRh5mDnnUoC4G%2Fs0QlAH%2FpoBreXlzAJh60F%2FAcr7K%2BaeFo9qq%2Bvr9e4%2BL0kdJNPJ4sZEkxWISzP%2BDrwmZnNq2qkBjW0a7i2DMtWYRX7ej3WGz7HxGDLFpSW4uxZnYcFpqox6UXr6EFczPi0DtywdVAAEpEYjeiFWCh73OH%2BHt5jga7EygpUtKFtGMN0BiCAwxZh0QqskEfm44uFJEAbAkAKpl7sRUSE%2BuguLkd37vyygQrTgLa2KTiIUV6XLhXsv3gxH7lCJjJp8pfNmzfv3LlTYX%2FSx%2B3bt6uqqgYHB2fNmkU%2FB6SmpvLTrl27SEaVlZVFRUXy4DjE8eITkKCsk4OcczhnYH8Zz5%2Fj5En4%2BAgNcHeXfUxBl7arS9P1AA9kz%2BzZmpAQ1a5JG52d6jDDElQZE7A%2FISbjTaJZwDPgHeCglRFZWUhLMwgAkYxk5kQWgFEKDXQyI9hfo9FqHKjUbgnKK%2BnNoLW8soUL4eenfL1%2F%2F%2F6NGzfsCZuVlZWWlmYQACoYn3nL%2BfkmI1%2B%2BxAcfiN%2BnT0X5JCQIKVdjaAhlZXj8GNnZIhXkg%2BXw84WvUn8tLWhttbGfIASFIMTIVVGBZ89sHqQHPd1QcaKHhyizadPEtiYJP0sC0IWuTqgK0tkZvr4iHZ2dpy3ST6aVlb5heDQlwa6urk7j4veTUFdXN9lzcbO%2Bs4wvj0tMRlE0pvslH2YjOw95z%2FGcWdqDPYZva9YgJwe3b%2Bt6eXxcmB7Sy7ij61vo%2BanTgIu4GIxgb3iT3xUnWZ7Gru5AxwhGpmGan2g%2BQ%2FtdxuUgnBR%2FJ2bICHuFpabqRzzEiSU4wIdzERGanTuFAPzud5PZtsUlvbwE%2B9MkZCErU5PZB6H8wcHBK1asWLt2rfzp9OnTn3zyyYULF0ZHdZwVFhbW2Nj4ne98Jykpia9r1qzJzc1VBGAe5iUhSb3UbdzONFv0T56IVmFzHjokO5zhLDSApY6uUpSylSIjERioTx2pualJkIcKAwMDr169Ul7dJdifH5PxAxLMjuQBDgN37Avb2IjiYqFxUVE6z1zMjUCE%2FDyIQZr8vJwC4OYGmt0YGhoy0jyqmFL%2F0dGIi1M%2BUbN5L01Mmh2oqal5%2BvTpixcv5s6dq3PNm4eYmIkCQPT2Cvl%2B%2BFAIBBcMDdVxLHu3p0ccv7ISBQUama5nYiZ7h7%2FyXF4XB7S12djPLFEcKm4aGRHT2Am2wGZsR7uRy9%2BfZYTaWpORrKq59qQm0l%2FSAAX9VJmXkoS3olUWdQMonLNnw5ippwStEtSeoKCgkJCQgoKCScdkhEBmxuoq9sIcw5FSjuGYK1yp5elI13kpk8nJSEjAvXviVasVpseUCoBCga8tAw1oOIETPMl%2B7E9AgvpToCiuwIlTLuESD%2F9n%2BMKO8J%2FAF%2F%2Biew4%2Bffq7Sz4PCTsYJm1em56uYdnTrl61HUhr53lI%2FRkZoliF2jwkQfNX%2FpKQkJCSkiI%2Fl5eXX7ly5cyZM%2BqpdXV1Z8%2BejYyMlAUgPj4%2BMTHRz8%2BvvV10XRjC5mCOMrgYxfnIb0Sj%2BW1kZQnmoG3fLjson7IGfISPYhKbSEEGVFeTpUwC9EpQXmdIsP9aOdjT01Mdra%2Bvz76pGuspr68XaqUIgD%2F8fXnH8iro7UEPOVF%2BraIYz5xp%2F541EpTXMYzRdC%2B8UJKxHg0NDbws%2ByNTA%2Brr6w0CwFBShegPa3pS3oZ8Id7e4g6pYuxd3oak0YYdUvxESehnm7tGM5iO6Z4wXI0Qlq4ue07RjOYmGGseD0KbIACQRN023vLHEn%2FVe%2Fc9dH8gPbGw2ZpGg%2BfMQWQkiovtTbrd1DQwMMDbaWlpUSg7PDx8zhxDr00CYWFhoaqCaWtra2xsfEWJhpR6TzNT%2Bq2EY%2BeZ654buLEESwwCQLDGwsP5N5f%2FBeGPS08yplYAZGinQANKUfo7%2FK4TnVuwZQ3WeMDD0sgqVPHMl3F5BKf1bWODmX3RIVXjz8%2Bdw%2Befn286HfI9fM9J4yRrwI4dkDWgqEg9STPJc5JWKQAbNkCS6CxkZWoylY8siIiICPn52bNneXl5EwM8f%2F68oKDgxYsXMllwPGfJAuANb4XpIAknWcLaZk6d0mnAihWyIxrRsgY4pX2UkjJoGFlejspKEyrq6urq7OxUhvj4%2BMyaNcv%2BO%2FWRAFW0LvtYxqYSUEf6Vb1COlMKph3tbWiLQ5xump8fAgLsL08PCcrrIAZpuhdqCclYD%2BpZd3e3%2FSfh4B7yrAKGMlImkz0azstFVOuYHmUe5sVqY5XXqirWj%2F7lvMXNuMGtHW6q70MYGrLnFHWoq0UtScQJTjoXGTk6Gg8eTBz8vs1wrq4ICsL7gYrjKdrO8w4lUGxe4AU5YRb0VRcbi%2Fh4XLz4eqxjni6qq6vZdGoBiI2N9fPzk1vPUbi7u0dHR0dFRanjE%2FKzkMY%2FBoKMpuQDnzm%2BUD3qK1HJmveHXkcDAsCyl1fRanGNpj671tElXCaZZwfxHM9%2FhV9RCXKRm4IUUlUgAmdghgYaNmEHOlh85SjPQ95d3H2KpzsdjH%2FpEo4exYkT%2BX04Pxuz38bbst%2FNDYoGdHRYq5JS0W%2B2QPbPyJAfM5FJY2Dlo7e3t8Khzc3N9fX1ZmM0Nja2tLTIAsDx3nrecYGLi%2Bo6hjFsoKcJYHtoef2KBiQmysdapFnUtbCrcVlXePgR5Zia4mIqkgnHtElQAgYEBLA9nJ2dx8bGbKZBo9FwvL%2B%2FviilaLpe%2Bhv%2B%2FxG732jCDeCOlXj%2FA%2Fi%2FLX3TijLXHaQJTY1oNHxjP4eFab28NL29sANseLXIkXt7oGdtZ2dhyqISYDfGx8eNxvMmVdEsK581%2BMI3FanJSFY8paVCynU4bHFiI5wOKwzuCEYwUoUqMo4isYKRExKEOtqXYSPMmYOICOONNfIGldcKVJShLB3punfyWmoqkpLAcrUJB%2FWhsrKyvLx82bJlimf%2B%2FPmpqanXr1%2BfRKKSk5MTExOdnAxJrqioqKI%2BS%2Fgr%2Fh8exneGMctT9tRiWincMSl0oYuFahAADw9hwGX%2B7x3H5XHV2HHJHMMbEQC5Fci3%2Fw58CMhFSzq7jMvZyE5EYiQieSRPeMoCwEOSSVl8L%2FBCjkDidnU1MDXZkGZpuatXBft%2F%2Frl45hIUgBCELMVS%2BWtkpE4DPv7Y2p5%2FQXqXbIalEaR%2BCgBbAmDhkv2zkGWUSgm6DQ8PDw0NmQ3DTyMjI%2FKzqwT1Gd31hcIHXrWVDYsW6OzUaQB5LSREJEuLjD%2FNeLGyS1SOPObRIzx5IkYagzrU0GBQLyIsLCwiIuLFixc27zc8PJyDnVUcx2hNTVJvH8YoRkfxf03Tb97tLqbdsx7PiK2mT5crXIdXeDWAAfm5GtUv8dJoalwc5s3TPnxoDydwz7Nnz1ZeW9DSilblVsD7ctcl38PDYzr3YTc42EO9aYaycPv2YxVWpWvTqUvya0kJiorQ0aH%2F%2FMTixCcin06TW7QUpSUoMQgArzgtDYsW4eZNh2PxamJi1A7eXQ1qlFcuVIQigwAQS5Zg%2BXJZALQTLzRTMhvwFso%2BAc%2BePSsuLu7s7JzFTpGwaNGiJUuW3Llzh%2F3o6MkWL168YMEC5bW%2Fv7%2BkpIRLGEZ0dYmr0q9FrgtEICYLjToTWq0wHUwYfzIC4DTpbdmEL7AH2E1p1zm%2Bzv996MtF7nEc%2FyV%2B%2Bff4%2B7%2FD3%2F0L%2FuUTfEI%2BVdifIKfRFPSgpxe9Zle53oHPL%2BjYX8Z5nKfVUnf1WLFCaMCmTdZ2%2B6%2BSBtAemf1M4iD70yTo2F8zlemiznfCQNOsGMqY7Wnka2oAbWBAt51%2Fwdy5e4GLugH37iEnZ%2BK8tra2mpqaLlaqHtHR0bGxsfZsNSYmJioqSnnt7e2tra1taWkRL07odertduqGk5Ns%2Fv5OgYEyJVkyIwQFISDA8NqBDiUtXeii9KrrBCkpWLgQdrB%2FZGRkfHy8n5%2B%2BGEEqqqlDnT773VClIjAwMDg42P67CwkJ4RTDO0N1m6EhHf4Mqns2jyRt0ibtpnVYp3hkHbcPzpLZkxVTFKIwH%2Fn96De40tOxciW8vBwL5OIiriYpSXG0oa0c5equrETlEzx5jueGWQkJWLtWrChBK5kjmAa8Y%2Blbfn7%2BE1UG%2Ff3916xZs379ekdTtHTp0pUrV6rrPy8vj8FHR0cNgxoaUKcvLcADHtTUBCTAcfjC11uomh59fRQc%2FQvT89fSLctGuf29o%2FHfiAD8DBiUHmL1GgDsAvbZeaFubggPJ%2BUaBregpRWtE0feBsj8RwF18jlY1oAxjCnOnTuFBiQmWls3C%2Fi5pAHMYpPJN5n9PT35eB3XKQClKJ3apDWisR71ymsMYlgxnvC0PTMvDydPUgNWGFyi838KJF6%2Fjps38fKl2XlVVVXl5eXKa1JSUmpqqkZjmzVSUlISVamsqKhgKOW1CU0NaFBe2Snx8XLmbGP6dMTFQdVcZOg6dbQiFBWgwPA5OlrQ05IlNiMvW7ZsoSQVMoYwVIGKKui33dgomlalhfPmzXN3d7dvz9M5mKJocNXXo6nJxjStBYbTIlobvQ%2F7dmCHRs%2FgpaVCxwsL7cohcIpXpGd%2F%2FoYCv7Fz5gAGHuJhDnIMLkpmRga2bIFDWLVK8LiPj%2BKgrlBdTEY9wIO7uGvk2rwZ27djzhyTPNkBjcT%2BRgLwQPWcm5t7%2F%2F79fgN7sqE3btu2bf78%2BfYfi0q%2FdevWDCZEj%2FHx8ZycnEfUZzUqKsSdqbAES1ZhlWM5BCIRSeXwg5%2FBxbpqadG%2FDDoacCLeiAB8CVzRP1PN96xfv2fPPkkLYM9tpqWRjLTOzgZPNapJBBNHyuw%2FMQ3kCFkDFM%2B0aUIDaKqaNANywMeSDNBuKt6lSwX7L14MiabJ%2FllCLEwxPDw8NDSkX26aJfqgn1%2Fl55GRkVG9dpGMymGgYw94LMfy9VhvV8Zv3Nhw6tR7Fy92qXx7K1%2FsvXxj9tUcS5NKSkqKi4uVV39%2F%2F%2FT09DVr1lhfavny5RzGTlDHKVWV%2B3M8r0SlOvOkgnXr7DoHeYNpdnU1eMpQpo72GI9zkduGNsMIXs22bQgNtRKW1M%2BmXcp71IN89BRPhzGs3%2FRzqLTQw8ODgrF27Vp79rxu3TomxOi62f8qRbQBrZEtxdJv4VuHcIjNrwzJysKtW%2FhqQEa%2Bjdsd6DC41q%2FHrl3YsMHeEFRlCobqyqkrvDXencnAPOTdwi3ehcEVGIi9e3HwIMLDLSXJAkj9XwMM1EwFvqz63NnZefv27Rs3bigeNze33bt3HzhwgPptz7ECAwMPHjzIKcHBwYrz1q1b2dnZjY2NRkOrq%2FH4McrKFEcSkrZj%2B9t426G72IAN6YJBVWBpvXihdri6uoZLcHFxgeOwY45WElfVm01cBaJYBkAyXxYtemvfvu5Z%2BwcHcfmy7bleXli7VrtsmcHTic5SlJIfJw7%2BFfBrC3Gu4MpszA5ByDLoYs2dKwSgoQGffmpjD7lAqWTPSC9eXrEUfLKMBLI%2FrRe9E2exwtrb24OCgvhMfuSV1NfXTxw2e%2FZseYw8patLR9pFKGI%2FkPG5Z9mzBVsoe33ou6kSo4nwgQ9H7jy1c59PhjvlbaXOP%2Ffi3L0X9nb1d32ID9mBEy%2B0vLz8yZMnGzZsmDNnjvxl48aNVVVVbW1tamFQIzo6evv27RtUXMDSz8vLU4%2FnQdjSGcgIQIDs2bwZNTXo7cXt29bSTurfsQMZhhZGBSqYE8q%2F4iFl38GdhVi4H%2Ft1LkrR3r3a%2Fn7NF1%2BIxpuAlJSU%2Ffv372BoQwK093H%2FIR4aBhUVoaBA3LK%2Fv5KKly9fdnd3P3jwwMqeV65cuXPnzk2bNhlcra3IzxcBHUQCEtjt67BuK7YGIlDxnz%2BPK1egUli7EBMTExAQMDo6WlNT09zcbP%2FEbnRnISse8e%2FiXYP3wAGMjlIYRQ%2BPj1ubn5KC3buxZw%2B8vRXfDdzIRraRqOhxDddiEBOBCF%2F46lxJSfjmNzF9Oi5dwsOHE6cYExKEVLDCuGL0NrX7srEAENevXyfXs4YTEhJkDyv%2FG9%2F4BvX%2B4sWLt6xqbFpa2rZt2%2Fbu3btgwQLFWVtbe%2B3aNbWoGHD3LhYuRHy84tiN3aMY9YIXj9wMGzfCpt6BHXuxl6Vu8La1mZQWyy8jIyMiIoLPLNfMzEzr5ToRkxENe3BF0oCouDjP%2FWzV%2Fe8GTndyEuTOO%2B3rM71BBV5eWlYaW1Ut%2F2xUssAk9nAe50mmNJaXPl8gJ1MDsrJszO0BTskyQCZYvnGjT4gH8AiPyP5GxKECq4F3kJiYyOf58%2BcvWbIkJydHqzVSTLZlamqqfGGQ7qyurk75ehd3ed%2FqxuPzNEwLQxgJa6IE%2BsM%2FDWkrsIJsuwZrxI4pALMAsQXgz7Dgzxewhqign%2BEz4Zmg3iyXO3fuKAIwc%2BbMgwcP8uHSpUv3798fGhpSRjo5OS1btow9cODAATKLqs7vmtQc6ZUHWYRFB3BA9mg0ePdduLkhNBT37plh6eBgUPK3bMG%2BfZg2zeC%2FhVv3cM9kMKmEXBmN6AXQt2JqKpydBXffvCl4vKmJPldXV2ow23X9%2BvW7du2iJCsR2IGkpFrUGoKS1LgzShB3IMHNze1rX%2Fsag4SFhTEVE7WcwdPT07du3bpv3z5nrq6Ae2DzS%2FduobuE2xnOHvCYiZmUyXCEkwSTkLQYi%2BdjvnooueXUKVy4AIfw9a9%2FnSLNnY%2BMjJSVlZ0%2Ff%2F4md2U3KLFzMIeNQzXSudzd8a1vgfceF4fcXDx7hg5jNp85E1FR4iLYY7xIfYUTRSi6gitsHLNr1aDmHM4xCe%2FjfRclYcnJ4jYZkJnMy0N5Obq71bNEcgMCNFxl3jwsWoS1awXbqnANeZfQbNKoY2NjJPrZs2f7%2BfkFBuokNioq6rvf%2FS5%2FFy5cmJ%2BfX1VVRb2UK5%2B37%2B%2FvP3fuXLbz8uXLmdII1bkGBgbOnTvHTunp6TFzsJISIZZhYYLO9CAVspd5xeSQEpRUo%2FoVXqknsSo4IBGJS7GUTb0aq41iXr%2BOO3eEEksgmbzzzjsUsFmz2PNob2%2FnbltaWp4%2Ff27%2FXdsnAHrG1tod9yU1ICQkav%2F%2BfRSAoCDO%2FtrX%2BJebFndaUKDt6jIaz7Zn8fAema41awz%2BJjTdxm3Sn62tTYAGrdpWWQO%2Bh%2B8ptbVzpxAAGmvYJkowr%2FRsRmn%2FhtJSbNzYl7kg01IdSzde8vTp002bNrFuIiMjSQ2tra0suN7eXnkAK2n37t0sI%2Fm1qKiosLCwQ9VIPCaJYDZmr8Va2TMd07%2BBb7AgyO8VqGA2etE7jnFyRyAC52Iui2kJlvgI4geY0tNCAK54158IDf1Qys56zfoudHVpuy7i4sQ9P3r0KCsrKz4%2BfjG5TwLF4Hvf%2B15cXNzatWupT93d3dQwCgNLn9K1bt06NfvzvJx%2B754pR5NBYhEbilCKk%2ByZMQPvv4%2BEBKxejYoKNDejv1%2F4PTwEq0RHIy1N3L4aZA1aIQonbvsCLvBaZ2FWJCJ1rvnzfzR3LpYsAa%2BquVkzOjp9%2BnS2OvWYNK2em498Tv8SX5oGvX1bsFt4OJYulR2%2Bvr7%2F9b%2F%2B16SkJKaisrKSrfXqlWhXRg4KCmL7kTLIC0ZBmAq2PbtUwmHzlfJ9shdb3R3uFACqOBMVhSgex2Tcl1%2FixAkcOwaHwDuiSL%2F99tvyK%2FWP%2BkReq62ttT%2FIGZxhUbHMlmGZwcvmXLBAx8iNjWBhj42RJuHlJW5xzhwkJSExUR3nOZ6fxElS%2FChGLa3FsveClxvc3sE7%2FNV5KdjvvYcVK1BYCDIaRV1ejlpLNaLeBARoSa%2BxsZr5OsmM1gdk%2BcmLTlyL5Hjy5Ene4KFDh0iXstPb25sqvmLFiuLiYtY825YXzbL38PCgVFDpExISqBDqOMPDw8eOHTt16lRBQYHFJJ47Bx8fuLlh82bFl450yjyLsBzltahtQ1sf%2BpgcJzgx277wZfuzdxZgAWvDKBol%2FOJFZGcrDu6KtS2zP8GtshrZj29AACaBGbi%2Bv3HO%2FsagmKZViJF969ezT7FyJYqLUV1NyWIe4eIissSrJDuwVfmggEwn9ypzZGUptSyZiMFTPKUGMKd7sEf2kHEUDejutnmMjePjG69eFaxSWppZvTGzYWMDAsyLT2dn5927dxcsWLBlyxa%2Bbt%2B%2B3d3dnZfE%2BxgYGPDx8SGVZGRk0MOvo6OjN27cmEidp3GazcBqUIv%2FQiykkfqb0dyPfqaF3EHiCDBsRYfhF8PnTp77wrvxxLe%2F%2FZGnp8iMliff04lOysBd3J14wkuXLpEo2QOxsbGyh3RP%2Bti2bVtdXV1PT49E3zM4hm2jnlhdXX327FlON5s45SCseMVJaqV1dqK1FRKXil5mG%2Bo70YAsZJ3ACdKQ2eC8PX6dhmmkDFKn7Pyxp%2BdQRgZo4%2BMUADc3PZUY18MxHCM7DGHITNwzZ0gGoiKZbz1WSGhvb29ra%2BM9SiXkQRWkPJhOz8nB8eMiiB7%2F3WJdUQN8rJQd2ZVVd%2BECTp8WpOcQZGVSXnlrKSkp0dHRDgkAy%2BwojvJhEINroVLmUKpVqHjoY1P26QSA8m5cGzKKUMRUM041qq0vdxVXWdVcdBd2sVvVhxGmXk4WAEoOHyRojUNdxmXWHm95GMNm13r06JGTkxMZfM%2BePUyL4g%2BRID%2BPjY1RAFxczNNjS0vLmTNnTpw4cf36dRt5PHKErS6I5q23lBS5wIUaQBPHQh9PrQiAj6WqyMoSpXXypNrHm%2FViHlRg5043dxFW8MYEYL%2BwkwtOTsd0Xu0arJHdAQFkRmEtLYIIZAGgnDPzTk5GAZgUuVcf4ZH9y2onaAD1gyUVghCFiXjpsgZ89pn1YBkUACCeTzU1ZR99lIVnWSiVfKvNT%2Fjyyy%2FDw8NJplRmvm7YsGH16tWk0cHBQV5VmErcvvjii4sXL1ZUVJhEYEF8ik8HMNCGts3Y7AlP5RP5lGZlu%2By3TGRezr98lfzm7a197z3l017spQDQilFsMqu5ufn48eNsCfYD1Uvxk0CjoqIsrVVcXHz69Oljx47V1NSYHcC1fo%2Ff8yCtaOVBSNbKp1mzhFlCD3qu4Mo5nPsCX4zBIvmVoOQTfMJ07cCO5VguO3VrsJLMsT%2BTcwEXWFHUD%2FNB29pETQwOCoHatEldkX4SLG56ZEQQ9vnzvFdR1q8Brpybizt3QG7hwyRA2nIlKavAV0tcZgXtaP8dfsd7ZLo2YmMAAow%2Bk%2FRpFkDZuIEbvMezOGuT%2FWXwdjrQUY96rkW60Jj0sdXlZLC2b%2BEWtYS3bKVyiNzc3J6eHvL4li1b1q1b56zXEgUTPQpycnKuXr164cKFXHuuh%2BxPDWhuxosXWLcOS5eafJdOZfVc5Cmy%2F6VLOHNGVKYKbW1t9fX18%2BbNUzykGjrhCN6MAOyTBGCNaOaP8TF%2Fea8bsCEIQcqQwEBhllCDmku4RCXndb7%2Bds7jPAWANgdzZM%2Fq1SKxtBs3LE2aLTF9hv41U9h9CAF4JtkmYK7pnJGREXKiVqvt6Ogg%2B7u7u7P35s41Gsc7o06QPflrduFe9P4Wv2UGyHErsCINaSRMK6cbwQip%2Fwme3Mf9m7hZhSrcgtbHB7Rdu%2BQxfFE0gHdhEoE69OGHHzY1NWVkZFC65syZY2W5hoaGBw8eXL9%2BnQL28uVLKyPZz7%2FBb%2BSDkKMXYIF1AePeeIq7uHsd13kQm9daitIP8MFLvCxE4VIsnY%2F5LubqmfnkgFzkkh2%2BxJfUJGtBm5rwwQcUfJSUgCqelgYPD2vj%2B%2FuRn4%2F79wVhX7kCrRaTQkuLoIiyMhQW4vFjEc%2B42R0AWaC8vDw4OFjxVFZWsuomEaof%2FZ%2FhM2aY3MobXIiFbCLrU6j3BSh4iIfZyCanszjtX463%2FxzPudYjPFqMxclI9oWvzVkUqjKUPcVTLsri4bM9a5WWltbW1paVleXl5S1dujQ1NdXb29vK%2BMHBwcLCwocPH965c4fF30xOtx9k8NJS5OVh2TIsWICkJPj7255VWYmCAgoObt2CObF5%2FPhxZmamp6dnTEwMpC6mMnGHDmzsTQkA2f8t3WMf%2Bj7Fp5WoZFkswzKyQCQirUwlLfP65erJR%2F4kFmcLaow9bWiTNeB7%2BJ4rXGXnjh06DSgzXzAbJZPF%2BTrvUOJ%2BoBM4IT2WSt8ngNT%2Fm9%2F8prq6moWVkpISGRnp6%2Bvr4uLCAmptbeUlPXny5ObNm48ePbJ%2Biixk8fh3cIdtEIe4cIQHIGAmZrrDXQMN%2B4qyynORzcn4pEIOVkr%2FA%2BA3Z8%2BCBd3Mml6rDxkZjr170fURPmJjT6R1brugoGDx4sVJSUkUraCgILbEtGnTNBrN0NBQT08Pi56MX1JSwsq7e%2FeunddBzlUOEotY%2BSBUgmmYxq9DGCJBt6CFOlGOcrZxDnI6RZbtAjNwBEdYMOSmeZhHgfeH%2FwzMcILTMIYZuRnN1ah%2BhmeP8bgOdXYFHRnB%2BfOiXRcvRnIy2F1hYaJjvbzg5iYGDA2htxdtbeRatp3gbHZdY%2BPESLctLfEUY2MiDOWDmtzaKuqQYspgpVKVvQ7IUHFxca9evQoNDR0dHSXTXb58%2BdmzZ5MOSFYlNVNiU5Eaj3gmOQhB3vD2gAdLcRSj1FSKNy%2BxFrXsdDI4s035n8RajHMap%2B%2FjPokiCUkxiGHBBCKQy7Hyea3jGGfNsIA5kmLDDqY%2BVaCiCEV8cGit%2Fv7%2Bc%2BfO5ebmLlq0aP78%2BaTRiIiIgICAmTNnymU%2FPDzc29vLtqV8VlVVFRcXs3lfUKgnAQrw0aO4fRspKUhIQHS0KKqgIPj4YPp0ODtDqxUF0deHzk40NaG6WldaJIrxcfO56ur67W9%2FS7GfPXu2VqvlJtmV7FN%2BOiyPeKE8WQSpsvOHP8Thv4GX3nUT%2BYdx%2BBZuGQ2cJX5M%2B3LtWhw%2BjLR1%2Bvfe%2F4XDP8PP4Ak9zRpA5qWqpyCFNUQNIB37wIeXCokFSGfsVbKAzGUP8IAcZ7ZANmIjt5eElTrPeIfYw89%2FPmGzptvdjM0UgL3YoHgqWvHBB%2Fi3fxPtrEySsAT4E%2BCb0jMbm8F%2FwdOZnEcIwGWLmSV7JiQkhIWF%2Bfj4UADIoe3t7ayeQl6qg2DLhSKU1EYBIG%2FKAkB2a0e73AAmuZot%2F5kxAzO%2FBXwbSFN9vAl81NDwqZXlWE%2FsBAoAO8HNzU3uBBYWO6Gmpqa2ttbaXrXWPkYhSj4IBcANgkxlmmYnU8leYFKtpSqwMIT5wc8TnmQKOUUyR1ifqNVY%2FsbOjIpiRuDnJ%2FIpC8DwsKiY9nbR1c%2Bfi9a1gA1mvev%2FjH05NuYjC0B3t5CSgQFHj2tl0%2FD09Fy4cCG5bGxsjFeWRzGzCa1dq7Jt1YzMUhzD2Cu8Yv8y1ZTYJjRh6sALZcEEIICVrxYArkgBoPw3opG%2FZma2Sdz3rw6sFRkZScn09%2FeXBYAeln1fXx%2FbltzKzmUy7YljVyKDgxEaioAA0oRBAFhXsgC0tIBd1mtMOMbQ2HEgKQXvqzz%2FInmMaNFFuMZsC4UMM6POSGaCfzIzlw1JYaexRSMQEYQgCgDpDJIAyL1ai1reqM0dnJDMCthh%2Fzxhu1dxdTZmh%2BD2cr0nFtgBNOzEkSPqgV4StW%2FUv2ZKNuEyRqyxP9Hd3f3gwQNMBapRTbN%2FvI7wWEx9pwAfySL1H6nWXYA1AWiQMCU7N8FzwZfP30RkSAVGCXlNFTEFe76iQtikcMMB71Siv78%2FOzv7TURme9ro0CkFFYX21az1UsJXdLAmCuVUKqXZAwH%2FRTJrEELyQ4kqvfSum9LrLbvWWCuNXad%2F7ZVef2afCE4KYr8bpVVW6l0d0uvP7ZntB3xXskiV83PgA%2BnU%2F4n%2FxH%2FiP%2FH%2FKzghHD%2F7W8zsh0ars%2FVa3DoPbLFnOmVivcTKss0U7A%2F5bTs0lw1BhXGNv4UmPEyDX2igVVmvBv9NA41GFcmSCWQCq1QuP2P2dwH%2BBngFoUKK%2FQII47d2%2FODHaJtrWPmZBu8cmiT7fxuoUS3RBvxA%2FvCXkhJq35j1SktIOAjcM%2F5YBXx%2FCurij4AS48D3pNUEfgj0vMnz0aKAj4w9XwBpjh%2Fjz4FWfYSfSaXiCBYDZ4138ZG0NeJ94MWEXU812IL330x%2BD6uX%2BS7QoP%2FQLHWP72tt26QxGqQV9NgJPJ6wnX8AAqY6ecHAP05Y6LG0AYE%2FBTpUH6qBb03Fqv8FeKkK2%2Fpa3ZgqFW278RGuAO%2FqB%2BwFnpq7XovYO8HjgtpDG68hMB54W%2BXeCJTS7qK62mygI%2FKfQ%2BaXiUJUugix0dh9DS3XkFl75BAKcYhx5%2Bg%2FzAASaPkoKbGekSNWFpWRgsT5SAQ8VD4uVYQjdUf%2Bp2BoUw7gMY9N6nZY5uFGjnZJZ1Bha4tThSM4FHwdGxYBNDe9l%2Fy0shw5j%2FDIehatbDIlBfNXSleiYBjIBm5fP3KoyaGzjY9jZAT9%2FejqQksL6usxNGR71iGXGhwkh4wDTnpfeA%2FCLiDffB7MRgkOxoZowF%2FJTAWiHopbMpsQMzF2h2F6mPowErHVHAdGzYz%2FgY1DjWFsEIM96GlHewMa2tBmKwuQJMBB0bIfR1TrKAgENrOGx3H0qI2ph2xs3dw1HRH06zXxW2oLUjORaeee7arArWnwTZvo7gXOW93ka%2BHQEUfCWs1ibCyWHAAOGqvxHeDEcZwYtbFVasD%2Fpn5nKyQnIzmK4kRJOoV%2FM3xyAQ5nZuL78fhBPJzn6d3uZO9%2BlHrgww%2BtFc9h8%2BtvxMYfYKO7CK7HWCl%2BcQ1HxB0fOUw%2Bri7Ej%2BYgXvme2IvEH9snAIetjUhE4l8jUU3%2FKCvETwrldYk%2FUbdUqY1oNvAdgwa0K5GEAIQA38MbhXSFh5uOoPs2%2Fnwh5qi1duW%2F2iUAFk%2B%2BciX%2BYqWx63Y1bv8TmpqYw2CT4rIKCsDwsE4AmptRW4uKChQX4%2FFja7MOj47CvQY%2FIt1G6n3h%2F2iit6rjmD9JdDS%2BEY0Y3dsgov4fIQAPLSTETIywMPypWgCqyf4%2FAfcm4Ar8d8OnNtupoAAMYIAC0IrWetRXoaoEJU%2FwpBOdFrIg%2F%2FmTN6IBKvqYAfyV%2BtMq1vAdcU%2BWL%2BmIjTYkffzIyPEP8oGkVf9yogakfYA0%2BwXAdstqNEhNxXdSTdy9RnP9TUX7x6%2Bd1cPcnxvw34yc%2F%2Bx4FkNDcfAg3if7h6o2%2F%2BRjnPidYP9RO7Tq10CTu7vE%2B3oLTGo9LC9oLACx%2FHPtGuIlDWDqdKB8btyI0lLcvWtxlVgzvtVYnYEMrmjk%2FQXvV3%2FBsRSAItoO7FC%2BJw4iMRGurhgZsZXlWItfPOBBAUhAgqvae7IIhYW2gk4ddNsLkTrrzaBPtdTt21i4EH%2BxCLNm6T9HrMTKHOQ8wINJ5JHBKACx6o%2Bdnbj9qVhIPyl4YgvbB60W5eUoKEBOjoj36JHlndXUoKEaaxUBCAlHOO%2BXHGrvSSgANP23fkRFIcr%2BbMyYgfBwxAaqXDW3xK4McFXpk8NoQlMhCnORm41s9gblwfKOYie9ip2YIdWrAZunCwGg9fRYnBPH67QSkhqgF%2BxGmwfyT0MaGYMJsWe3ttNB9k9LQ%2BwsE%2FcT03HUAP2YmqnIo25n1IA5Ok%2Bb42fx9RXsf%2BCAugnLUHYCJ2g96LFnI3FxZPxghfrlSIWFrSasTDjJf9iW1ACaESgANG7IGBozT0pG%2FaU5G428cuiyMsXRjW5etvq%2BKVYJZO6E18q%2FFIDsr%2BJ%2FsUihtTr%2BD4NG6iFjHf%2BUtGUmq9bQ24vsbB0760EBoGlsBDL%2FVcxcaexicC7BhcziOfCevXvWaBAfL8r7L%2F4CP%2FiBKHJnZwtDSbVGbEs6ISGH25sWNzedAOjhCU8KQKTdlB0WJsz6ll4HwQjehE0%2FxA%2F%2FFH%2F6x%2FhjrjZVkY2hkWztBD9Z%2BX8AAeYnhYZi82Zs2vRmtmQGqYKzU6csHNmf9gcNCw1DHmRXsENSDdmoRa3M%2Fo2KllpAUJAgXzbXj36ks717VTqSbGaKi%2FKUmSmakzZHr17w9xfxnj3D8eN2Hktmf1%2BoNIM9Y0ZbUIQiWrJqU4mJwp4%2BnXxSpQCJRi5ZAL5KSDyp1f21BMP1e0n%2Fe9WT5e9au1ckQS9cKCxcx4%2BzMZs0noOcO7hjZ%2BHJWLZMsH%2BkmiRra0V8Y4Ex3muvUWTjbTvBaTqmT5Qicuv77yM4GJ6e%2BPRTjI1NiG5BAMpRbjabptmKihLsbywvFADaS7w0lxDTGFzMHgEwTYJluMLVHe4mTg94bMf2UIT6wOcIjjwXcup4aPNQch4BbAN6vDBTqjYZlyVrszh73TqUl6OiwlpDOlSlVjEf88nZX%2BLLVrQ6ypmmCAkR7Dlv3tTs7I3A8klI%2FbT0dMXRgQ5S%2F3Ecr0KVpUlUjeRkIwsMtHcrBgEYGNBpwB%2F9ker7qlUoLRWmrwON5SKghpP9V2CF0QCZ%2FRndGBIxF76Ft2ayLiXIAuDhMXGs8coWys4LXqYC0NMjqUwRvkocFrs7bPGzUf4WAYf456fK%2BDNAvsPdNT6O7GwsWoRDhxQfb4ECQBvBiP17J%2FvTjMDINC5h5qAy2LH%2FaokUnOFMAfCDH7l7nmhKo7bcsgVaLfr68MUXE6IPDgq2ratTaDgMYQxibyuR%2FWkSOjsx638B%2FygJgDbqOq7bkwouG65ejULI%2FXBXKvyl4XEI%2BLH1gBQAlnoIQmIQQ7LzUpExG2capvGmPsSHbQopS%2Fk9IZmDMEnKtvewLVXusp%2BKnxu4UYwrwCMbYTZvFgJAs9CQr4%2Fe471eh71QIracpk1jWkgW9hzPWmekpmoYSRqTyiy2tu4JCHhD%2B39NmJ5i%2F34cOIANGxTHIAZJ%2FRQAUqXZCHFxRrwfG2ucpu9IVRRmbQ8u6pf8fJ0GrF6t8m7ciGfPhAYMD1sJxAom%2B9OMvHfuCPbP15Oa0eG1EjcXKYLh4qLTgMePJ5NNU%2FYnhMQUCo75KvEz%2FrMEo86MlQRA4KfqKdSA5w5rwMOHuH0bCxcKjpUQhCCSOQXgJm5apkujBWT2D1OXCy%2BdYRncHH5qiEcN%2BNRKg%2FrDPxKRLFHe9WZsjkCE8mnrVjQ0CJIpKJiwAAmXpt8Q2T%2FMci2brkn2j4qSHxsazs5qeJsP3EOUJsoTnv3ot5lYLmuUCnkz1qRnyEgIzYE9EopQquASLFmP9WuxVvlE527sbkTjJ%2FhE5%2FoZvoQwR2C6KWb7fxfsTybUJegFXlzGZZqlEC0SafxK5CtSpwFnz06WjK1jR77LX692WS3vOlWTyn3qBGBSMUUYDZWEOpImvy4kq5B8Nv0tkIk%2FFGjMu7dvx8GD2LFD7SP10x7gwcTh5NnkvUjeoaP%2BadPMLPIKrwrRUYSw71jejZPJO%2BmaGtDSonKxDjZtEtxuFTL7z8Ecg6utTcTKtJh6WQDUnoQEYbazZi6HZgRAhC%2Byvu2vEJo3O4lMnZ2tdpBtSeke8LBnNtVXFgAjMCDDvva229D2CI9%2Bi9%2F%2BHD%2F%2Fd%2Fx7KUrVX9etm7CuDBJudbXy5gY3Uw2wlJzAQCEA%2FBWY3UCFadB9iRKyEKWbqzGJYHgJ50rhcHW1uJlJ3SUlYug5nl%2FCpX%2FCP%2F0avz6Jk%2Bqv6UjfgA06sp5Mxk03FYe4bdi2FVvVm5bZvw995sP8MzA6anhl41MDLPTka%2BVCIL%2FTJR8uuhd%2F%2BJO5yWZGt6OxQQCmA0n91BEfH%2FmNsV1G87kQ%2FiCgsZis9esF%2Bx84oPaxPMj%2B13Hd7IwfSfatxVi82Az7l6DkGI79GD%2F%2BCfATq3syFYCODp0GGEFw%2B0bROxbAppIFwMjLQLT2dkuzXuBFIQrrUa94BIUnwsvL4dT6wpdTYxFrcNXVobAQL1%2Fi%2FwvQWvlmZ4M9eybI%2BvFjxeEHP1kD7Jm9apVg4aAglYuhGJBhJwdz236Kp5%2Fhs1M41YUuxcmyWrDAXHGRc2kqSLQcbntpsj9Nt4lGCsBww7CpAFhFGHUmzOJmJs94enSj%2ByiOfo7Pr%2BCK2s%2F7WoIlU0IrrnAl%2B9OmwUAPpH6uWIQii8Gu0jqMPBQAmovLax964rbrXVzyy1zKFBcFgGYnbZp3k%2F3TDBFcCgq4BNA%2BFZf2%2Buc1gqHlly0T1G%2FM%2Frwmsv95nLcULgMInOBkjV7Cpb%2FD30nU%2F5OfoPEMUGl1W04TXffvC95WMQkT6YJNmwTDWwCpPwMZLlBVyZMnIsq9e9azwlo0KUdZAxyFNMl4mghc5HCgrx7aqQtFvqapQPYnp3jBhqJ6eAj2X2miFBOiObx3c033HM%2Bv4Vo2stXO%2BHjExk4Y2tcnOLepSXE4LgACjUICGnRfED0ZAWhsFDvp78eU4hzOXcXVWtQqnljEzsf8AATYF0BjhddI%2FVuxNR7xiucZnlEAaNZCCgEAKioMnpgYnQZMciPW4OKSly8IWockJKUiNdAMs9mHkBDB%2FvPmKQ7n%2FHxn5%2FxJRvtqkJyMgweFTZ%2Bu%2BNh4x3GcAmBnjA50cMov8UtB%2BpqfkP1%2Fj9%2FnI3%2FUjrlOZr2kbhob0ID584UArFkzcfBqrKYAJCPZ4GKryCFsoRCFNLUnIUGYozAjACJwocOB3hRs94f2tWZLIEllZ6tZ2xveErGvtD5PZn8%2FP5WLQRiKAV9Tv8ztPBe5BSjQqqZGRCA01MKJVHsgLdsWABcXtQC0tkLQ%2F4BOAHzhSwEIRrD1GEJnwo23UV2NqcYIRh7gwRM8UTu5vUhE2jHbWk2kIEUWAMUziMEruHJZc3kUVmlhVNaAq0ZOWQDMSPTrQNy%2Bi0s%2BBaALXYo3DWnUgEmGJPunquY2NYnwLiX21OkbhoXLoriS%2Bg8cUPfeIzwi9dPGMW496DBYOiOf4BPB%2B5L9SvOrbGSr82kT5gWgvt4cgW%2FaJDQg0EifAxBA9qcZjZQn19XZXL4d7UUoKkWp4omLE1w%2Ba5YD2Q1CENnfqG2ePUNRETo68AcOrSNkag9I3DSVdJPbV2DFLFhM6MyZOgEwgNPlOJM5xARMKP5XePUSL2tRq3j8%2FY3lR4GxAPjAhxrgBz9ry8ns7%2BoqvzU0SAKABuU7GZZmJQBrLywMPj4WtzGFeIZnlahUeyhOrGdb86yxvxe8SP0UALXzMi7TTNaytCdcLTbSAGqqrAFTDRcXLQUgD3mKhwJAm0wsjUawf5pqLtm%2FmAIw5bueAoiWmT1bUD8FIDxc8bMeZPbvQ5%2F1CKeAnwgTvP%2F3%2BHterrqh7G9PJ0sfrl8XHF5SonKxJwTVG3G9zP5G%2FELyzcxEVpaduShEIU3toQDQ7Ic03HiCCFnoQIj%2FEGgdJ1ObaG8XxJ2drTg84SlrgKUZMvtTBgzgdAZhqNc6igoT%2BKoDHV3oMmySu%2FQ0N5G0W12tdoSLdgm3thbpnQKgR20t6usb6lCneKgP1gWAC1AAjMA9vBkBYBKa0UxFVDze8CaDT5r9CVI%2FbQ7mKB4yLAniGq7Zuy2SPwXgxQuDJyFBCMCmTVN7fLLzmEt%2BPvIVD9U9FakpSHE4lhCONINuj48LAXD5AxUAsU9SPy0uTvFVo1pmf5aEzQAS%2B1%2FmYGqGlWE2%2BcTJyjcKAG1sTOVavlwQ%2FsKF8htTnoEMI3LRagX7X7O71IAiFNEGMKB4SOesN%2FthKgCvXkkhi%2FCHAnMda%2FlmtJPpehVk%2Bm421JDE8CsDEDBxrK%2BvTgAM4ERjCbETDknXMIZpao%2BzszBTdHUJ5m1rUxxk%2FzCEWQtN9lcJQGUlra0KVUpTkf1pXM1SALJ%2FuFpiWlvFHrq78WbAylcXvxvcaJaH26iDJVhC9l%2BHdYYUousKrlAAHNjToCQANDUoALTIyMluzQzIzi4uTRSAEpQoTrIKNcDhWGT%2FVNUsISv5zs5dzhbv%2BSuDaV6006YJ6j9wQOz5%2F2WvTcDqus5z%2F%2FcwSCCEBgYxCCSQAAESIAmh2ZpByDHy37HlpEqbsU7TNk%2Bnf%2Fq097ntLW363NveNG2ce5u2zk3qxqks27FjS7EmsCQLNFoyEiCJwWIwEiBAICYBQnDuu%2FbeZ%2B99DmfY%2B5yN7CfXrz%2BLs7691rfWXnut9%2BdQD3ro5q%2Fj9WY0Gyn6gXRyvPcxciW9AYCXR2aAkwgAxqxZMzFT%2BrXL6ak8oKHB%2BPbQCGQGqJnUVOHosbGGhtMOspC1EAu1VE2NiPFxfCpkzv0tYMDoqHBwhkP8UjR5J047JLv%2FrFm6lDyWRSx4T4%2FvM9XmHj3CxIS7sTRfhkMEAMPjRDExwv3j4uRWR4c4w8RHE5rIADkZilCZAZ5qEABJesQ4L8ByBSEoSHcNJzFp93g%2BfJwAMp7uz9Anaf2M27htblm8QQTAyZNaJixMYYB1kgAAYdX8x6HlWE4GLMACE4USEoT7Z2ZqGQkAcv3HIpsJANL6CYCN2n18gAe0fgLgOq4%2FnuWqCvL%2BWPbzZj2TeAElBsjuvxiLtUetre6I4VuSYdfoMwQAw4jo%2FuzrlBI0qX3M%2B2hCdgt7edC5c6ioQFOTmpB8flM84vW96JMyADRxCAdyuEnZTPanVUUhSm3292Nw0ENXZ%2F9NQAIBEI5w953p%2FgyH6P4Miu6vAkD0wlJPACCXeMCdAMBTPZ0AiERkBCLU5ghGGO46%2Bt5j2f3jEKdmLuAC3b8CFUZXoz92BADjto4cubkCANu3W%2FTqdtmgq1FNt%2B5Bj%2FogD3lkgIlKK9ld1%2F%2FOHQGA%2BnoHAOwWLditbOaO%2F7PPCvffuVOfo%2FUzLuGShcsy%2BM4%2BAPDwoTtL37VrCQGQIQDglJe7jo6aXWsjGunZXehSM8YBIHXUde3sFDSR7%2F0nryknw8xRtAditGfOiHAoGMEyA%2FRdZPcPDfU4yhr3n%2FIa0YhOQ1oSNJdtbxffzb2cAUARAAz3nb0CYBzjcp7u7wEANlq%2Fk%2Fu7W4CFIs8YMzBDzfSh7z7u%2B2ExT%2BAJuv96rFczneik%2BzP8XNzQkMIAvQgAxsKF7ofYzM3gMGhUoYoMUPO0czLAaJWgIOH%2Bebr%2BdH%2BGrv60yWauw5499n37UFKi%2F7Bv2N5gnLadVr6zzzAwlXGbCfI5YU2NrazM9v77Nq20zbZLEm1FncpWUSH6Xbvm3%2FprhG3XqE1e8awscTm8KwUpdP84xGmpWqKkNvAPa4UCcv9AGXDtGioqxKY6tBEbafiq7fIKywDQxM4cwoHT6f7UZmxegzX6DG26qclDhZ4e4b%2F3NU%2FkK7gHAI1AB4DhYVGWxk89wiOZAfKjRCQSAPMwb2oNVwD09orZ793D9GgFVmQiU59pR3sHOnSJDUbqcEPo%2FsUo1idl9%2B9Bj%2F%2Frq6oSAOCpUBUZqTDACqkGLRm2BoBoRJMBucg1VIXWz5jn%2BJrj4yoAgulQwZas1K1M4m7rVjz%2FvAhZK8U%2FR3DkDbzxLt41N63NsncIMtKprExEZ6cyMy%2F1rqysFbtWyNdbZLu7UV4uwl9Jtu1k3Nm09mwfo6Quzp0ER2os2x7%2FFemasPtZyG6gtnudOSNCJ8nwFcuX3d9m89bfp%2Fxw%2Fw3Y8CSe3I7taubBA3FbvVG7tVW4sEM0OxVjTpLdf%2BZMuUX3Z6ii%2BzdBgwy7kgFTaySzuh4unFc3tbWKR%2FwTeKIABboNs3PVzWh2JI4bLEX3Z%2BiRdhqn6f4f4APTy3L5agQAo7NTy6xeLQCweXPgO6ACgJSiZ1ejWn1EU18pe6RPrWRHXU8eJnJrcFBffxrkfPb%2FwFeftWuF9e%2Fbp1y528BenI47%2FTpeJwCsXY4ppzEEgP5%2BhQGSNvD%2FXcr%2FeELOyY97e%2F1efyc66dw8%2FWrGHwA0Ngoj6erCJ6zvuybsAZWzG5jBjeh%2FNPQLF9TEWqyl7acgJSVFuP%2B6dbrO7MbOessMUFMqhSK0GMVfxpf3YZ8%2Bz2nPncPQkOdSzi4sWXSyG%2FjIANC9vf5t6P5kgNqk%2B7sFQBLZkvQ4ALAAC57Dc2ThHMxRk1Wo4i0YxrCpUoUo5Mbq7bIFLXT%2FYzhmwUL7%2BhQG6EUAMOLi3PS3maitN2gCgKE%2BWo7lZAB3yUeJxETh%2FsuWaRlR5urU%2BpbK%2BSV92t6KFcL6n3%2FeHhGhZJLwQcmlN0re%2BGTdHwYBQF26JBz%2B0qUofnygaz5TkeLFC4HYK1fEs%2FPnA3yLWmHetWozIQFZWeKue1I60un%2BUYjSUjW8PjUWbKi1sn9yNSoqhL8%2BfKgmCAAR0h9N7MBu7GxSwVoEu0al%2BJemPw%2FzMpBBh%2FoT%2FMnv4%2Fe%2FgW%2FMx3y1wo0bOHYMJ096ncbZhWdgBgFAo3btRkv3DIC7uEsAdKPbCwBoaHR%2F9ZJOEwAiELEFW76Fb5GF%2BcjXPzqLsxdx0VQ13oI92MPQJ%2Bn%2BjEEMWrNiXn4CQH%2FBo6IUBgSmkBC7atDXcZ3Ozc%2BkPiXS9FRzrzxiIk9rtrYK9791SwcAK66fk5zd33f5JbR%2BETEx%2BmxBwRvFe9%2FY8dQDa5djVib4SJNftqyQMXeugmVab%2BHQUH1Z2QE%2BC1gyAJ7CUyGOVWXT4LPR1ua%2Bv%2FQwW2vTxUSB2sBXYqWsO352P751R4dw9tWrsWuXnFiN1ZvSaP8X8%2FN17sg%2BDHY2o78FSpWfGdpPVaTJGgQtD5qFWTGIWYzFy7HcidZAUxPefBOHDukJ5U6dncKFh4Ywe7acIAAYt3Fb60NLovsnJMitlhbh%2FgMDTmUIAEYsYvk7EpFLsZRF2qAdL7o%2F62rieM57967LcjZ7XKjnJ%2BKmhXDSBViQitRc5G7ABm6LvsMRHClDWTOajX8C1pTdPwxhavIYjtH9a1ADvzX1qBEA6WRNuuZi69ahsRENDbh40e95JIPWmgQAYzd2y01aOwFwAic8jg8Kkhihg4QocFVfPzgYlsrsFUxA5PPYtw%2BLFmlOcBPI4p83Skq6eed4ui9f9nc5uU4tP8zGBAASOlfFlxXOXbYZz2nJDWWzG8oSGu4kXMYdBKZhDPPUMlZhlZyRAXD8uPv%2BrgAQQ2swMoJPj6xzf7cX08hhtFdUID9fxPz5cmbTJgEAwAGAvj6wT0WF2aP9F8rfJdpPvSqBAmD51AfKPLynb7%2BN115Dc7OB%2FaIRM7KVzy0D4DzOax3o%2FgyH6P4f6QAnSwbAeqx3rHsJwwUADNdJp6jU%2FRKfkcKj6HWzMVtm4dSnp3DqTbz5K%2FzKKfvn0mQzPX5pWn8xijORqWbqUEf3JwM8rsPsZ5bV3a0wYP9%2BLVlUJABADPT2%2BlXUPQCKUGSTVhmNaDKAsKxGtfvxsvvPnas0R0ddAED3DzHhcD41Ze98XHAubB%2Befx6ZmY6OLzQ0fDPj1QL8DX%2B3sODevQIAxMCdQO3TT7Mxuj2zMKsQhUXvF2EZ9ABAOQpPFtajnjGIwQDfoRa1DBUAsbHiyvOaNjW59pTdPxKRusHS6E%2BPrHZ%2FtwzwKdvAAM6cwerV9qeflpeU%2B2PeqU3Ay0oHPmWwm7WqByqANUC%2BPvvPQFpn50ckTnk53n3X5dx7frPWVj0AaNQEgFMHYwBoQtMkJoMQBAcA3sf7ageDANjpZn0x7tMGNIYx%2BvXbePs1vGY3c2hykEMAMPSl6P6McYzDcp07JwDAKChQMgsWCAYQAAcPOvW0GT38LgDoQ5%2FMANUBJINf6REAeQREntaU3f%2FBA0%2F1A5NZ96eeF7FqlaOjralpwauvxn%2F91fjk7yZLw%2B3x8SgpsZEBL72EiQmTK3rLArMJMtiPWCYAxK37N9GULhcJJm50IhL5iIGAdQM3alDTi141k5UlYqpkAGjtnh7U1KCuLvA1WKPpcX8%2Fa9PfKyoybt8%2BIDdp%2FtjI%2F9lkko9Eh%2BlQpcQAna5f33Lw4Jbvfx8vvihOvLP7e5WzF8%2FDPHp1NKK1PdEBoK9PuD%2FfzEUP8ZAMYMhNuj%2FHhCFMbkZEIDkZcXHOkxI80yb69Tmc%2ByF%2B%2BC%2F4l5fx8ghGjI%2BdjdnFKNa7P0XrJ0sa0ThdKz5xQsT9%2B1pm82bBgPx8%2F%2BpNNegqVNHF1SbvOAEQhzg3gxMTBR2WLdMyMgC81vdXfrg%2FtQ8xm%2F63owKP0quvdr118NChjw4JQjtKEhAlJSKkosbDGhnaHpow%2FX0XdsnzrgC%2BDaShHPhfwDUmt9u216O%2BAQ21qA1wQazA2IItclPYfDbefdepTyhCmeaqdMOkcZ8STaf7qzPYjPeenBQWv3o19u8XTcHN5coj5hnsYF7nlb9NwF33PVolBhRgg0DOBv7%2F98tzqi9vuVb%2BoctF9S3aOe14dBRhil8nI5kMuId7oiG7f3i4%2FIjuz3ArGQDpSJebZADjBm7wdxLLJem6PnggZmxvh6V6gAdcczvaW9BSh7pruHYBFzrQYbYOrZ%2BRghQ1Q%2FMjAOjQ1izU7Qnr6BAASE%2FH889rSQKgkdBpxMCA2Ukkg3aaiTbCF%2BH%2BJCJRzuQhj%2BHmvej%2BDFVNTeJQtbQ417dbAQCbvwMLYxwV7tyh%2B4u4Xld9GIfjEf8snlX78Vt2doq4cMGfaQLxG9%2FbE4zgQnshAaDfjPKKisyJsm3bqqWEnf8VoYgAqLfVC7gFoBrUMFQAzJ8vAJCRgYYGrQ%2BtnxGOcN0wadynQdPv%2Fv4w4IMPhNHn52PZMi1ZXy%2BSfOSXSrWf%2F%2BKRARXYvgar12DmTDaOv8J%2FtmzBh%2BYBQNGOGTwKkggABg1UNGQAOOQTAGpTDwCWcwIA52ptNbayf%2BwBfuar0wQmRjE6hKFe9NLx%2BTK8L2MY82Pn12AN3X87tquZfvTT%2FRmGa4xKH%2FDvTM%2FNA0MA8Cuo5rtwoWAA7%2Bebb2rdbIYuggQA1yQBUIUqFQCSza90BUBwsMSFPN2wq1MPFXsxApO7S2bijvNolNLZaf0HD%2BL6dZE6juMEQAISNmKj2q%2BkROCVYfTQWeQ3IT4L0Ppp7ulI11Ld3WXl5ZkT5ZmZiI9XcrxI7Flvrz%2BCI4Es6DZu16K2Fa2LsVjOCLPPcgJAtoBCttZubkZtLdrb8Zm8qKICW5wBcOaKSPqr406X44T7Tl0IrURBAXbudGRSUxUGVFaam88dAJRHtHEHACYnvQGAV6wJTbTgKESpAJAf0f2THfW06QxJoLDJFwMIANo9%2F0VgikEM3b8Yxfokrf8YjrWhzVgN3vkx%2F1dw4oT4CsRARISS2bZN3M%2FGRlRXm6pks4lwkWTkV3djN%2BnAJr8UAUCzV2Avi9ZPLsydqzSHh8Wgqioj9R%2Bj%2Bwv19Aj3Z1zTLf8QDpEBDPX4xcRg714QFS%2B9hDHDHydA96eCvD%2BWbZ3hlC0rGygjAnrLy53Scs80pAW4JgKAoTaF2evcPhzhrgCoqRHxmbxr%2FAYtH7iiNK9IrRvj0z0tEcPo7xe%2F7fKRJQAYs2aZK9TaqnfkBCQQADwMmDdPuP%2FChXJedn8vV%2BgWbjHk37GIXYql%2FBcSABiaTABgUI5Br%2FEADwJ3f4ruz%2BDrq5kLuEAAnBGf06fsJkzDU8e2NsGAE87ILyoSER4e%2BAsOYEBmgJqh%2BzOcOtH9GapE96t4%2BDDw2XWyBV6ir09Y%2F8GD%2BPBD5zz6yAAGT4WaXLECJSUiDCpw94dPAMiePgMztBRfhcZ%2F%2FvzFi%2BLv5cvaExKbp8CVFuYl2blm6JGRTgyQ3Z9zKe3JSYkXtVbsxq%2B9KqRw%2FTmtGhhQGKDKHhtrlxlgSrIjP3qkJujYZIBwf4ZDMgC8SA8AagmWMGj9ycmYoR5zWokzbz4l2ozNdP8N2KBm7uLuMRwjAAyMtsQxJL33ngCA%2FtKlpCgMUBWAf7oAgPedfh%2BHOKVN2JMIGRmuALBSHlZvZgsHgVcn8Go9Ll1y8%2FQmbh7GYTJAn6Tb7t2LzZt9F7fqW3oDwDZso5vnIEdLDQ%2BjrEyEJP4lA4aGtOf8VByyAzsCWVM%2F%2BiVH147XVABovQUsajA4aKTyOMYZWps3fuZMP1fJgZphTKn8KVUrcEb5eUZqBSaDp7CyUsTdu7rUli1kgH3BAhPnmKSXGeAQHSEGMcLAAwNAKlJjYxEXp%2BvkPNHjM1avIvDo%2FsUo1idp%2FYxudD%2FuRRIAjLExLUP3IgCysszXcl0bvyEdnd9AzRAADKVB91%2Fp%2BE01NqKqCm1t1r2yzZIdehU4CJz33OEkTpIB7%2BN9fbKkRITuRE%2BvPAIgEYkEOt3cKUu%2FZ9y%2BLbfa2xUG6MUhDB7WQJYlmXqN2uShYoSEYA7m0P3Z0roKUtQaLDuM4SHoeDV3LubN83OJHMtwaBCDTpU%2FvXrL5W%2BAMnLJHj5ERYW9okKXCg8nA0RIFdTwIWdfjkY0A8nJWLRIzpAxdP%2BuLm81RjBCADShSW4mi%2FHJMSRJjK5Ta6sZADwmBtD9GfMxX82cxmm6%2FyVcmq7leRnX1KQwQC8CgBFiwctWoYoMUJt5wvXzxK%2FgYIkFOgBcZcerFkypyBr3hwSACl99DuEQox71aoaGtHeviIgI697JszwCQPZxGq6Wqqub6vcnT4ocn6iajdny2ECWJZl6LV1VbtIusrOlkP9Rdf%2B%2BIIVhANzDvR70aG0aSGIiZs82vb4FC8TAsDA10YUup8r%2FL8mIu5w7h8pKtLToUps2CQAsWaLv9ifeqzgDIApRUdFRwv0dFKf7M3yK7k8GyL8jEZmEpBghjxN98gywYxd2FaN4FVapuVa0HsMxAmAa5%2FUuGQD6y5%2BWJjHAgtqSqV8dw5jc5Lem6wsG0PrJgjkOX%2BrvtxQAXt3f5Bc%2BZaDPEIZkBvSjX01mZqKkRMRjkHsAbMAGOvgarHHK0vqd3V9NkwF65SOfwzdio9%2FLmsSkzAA14x4Aokut8bLtaL%2BN206pjAxR0qyyspCerk%2FQMFwrfxplnybLMlKpokIwwEkEAMO4nH05mgBfFC0A4JBBAND9VQBQEgCSNQBMTvoFgGlkQBrS9mAPQ5%2Bk9TMGMfiJkcluVxgwMaElBQByIV8Om%2F%2B1H%2BABfb0KVWqGAGAI9%2BdfVbL76xfgv6x0f%2BPimT2Mw2SAPrl9O%2FbuxbZt0zWpKjcAIGxp364cl22%2Bvn5q%2F4YGNwxgBUYMYvxeWQ1qGGqTlpuVFZ0dls3LoOsk9TKsJjRxu51Sq1Zh3TpzK5s5UwzhQIdGMVqP%2BkY04tMru%2FsjbLfsZNt9PfzwQ8GAujpdmpeZAMjNlVs%2BnQxjY3prnoM5UclRM5KT5ebIiFEAENUEwH3cl5vJwXT%2FpOhox%2BPWVjHFo0fThkJzCkZwMYrp%2FuEIV5PHcZzuX41qfz66heLllxmgKiREYoAFmyFZ%2B1W1SQPIW5gXT%2FfPyHAFgAWaFvc3OK4CFWRAOcr1yZISEcuWWfFynuUGAPx69O5YxGqptjZh8OVO69OLTxjspYrWLzPA75U1o7kWte1ol5uhociW5LSq2lrVDoxoEIMkhv5UISUFO3Zgzx4TK3vySTEkLk5NXMGVa7j2EA%2FxuGU3HI%2BvjBdVVopwEgHAMC4dAKjoRdFRixbJv2X3txu7cwQAQ%2F6dFJNEAHiawt%2BPYplo%2FQzan5qpRz3dn%2FE41uCzkgwAPXizsgQACgOdmQ7Aq8p%2F1czKlSvz8vK0HnV1wv3b2wP27Glxf9%2BjddMewiEGHU%2FNzJ6NvXtFzJ2L6ZMrAFZhFV17MzY7ZenuBMCDB56q8InMAL02YRNLrcZqvxdHs2ao26gBQN5U8bDGbM1LuHQe551S3OPnnkNRkaHxhDI7796tJkYwchZnL%2BACPpMku%2BfEjRuoqBB3VtPSpQIAGzcara66M6tGImpRVPSCBfITGQAGRfdvQpP8OyEmISYmGQhXlhooAFygGpCWY7kMADUzhjHZ%2Fccx%2Fhjw41vj4woD9CqKhbH75N0nCQCG0gjGyjwiYKXu8VXnwzQNsmIv7QZOAz%2BrzIAe9KjJtDThN4zpkxMAIhBByy50Yfe5c8L9q6q8F%2FrwQwGA887WKldjWf8WRx7qkBifnZ21OHsxr73jsfTcpOgSJ3HyFE7p9iAIX%2F4yvvlN%2FM7vIDcXwcFuhs2YgdWr8e1v44UXsH%2B%2F%2FskxHCP7OtGJz%2BSQ80G36RuVlYIBTiIAGGFhhkrr3TkZ0cnRUY7p3AHA7smQ6f5kgNKIQUxMEpCkTdHaaulm%2BOkivDiy%2B9u4h44aPG90%2FwY0PFbr916YYCcAeP9V8Wt%2Bx4I5ZAAMY1g0VmL%2Byvl5c%2BYoBOjt9QwAi%2FZhGrbTS8lWtB7GYTJAn3ziCezdi127rF%2BJrBB9g2ZdhKJkXixV3GV%2BV%2F2n9Sz2yswUMX%2B%2BkklCEmvysP4Sv%2FRjcYRhDWrqUMeqQAdQhixgQHp2%2FTpqatDX50dZ3h8uLBrRuch1bEMInn0WK1YIJ6qvx507ovLoqHgUHo6oKCQliRdbswZLluhLncbpd%2FBOGRf2mTzK6cw3NQkGFBRg%2FXpHKi5ObPuHHwoT8anhYWHQ7e1ITMR1RJ2LOiOlmaP7379vdDlDGLplu9WClhR7Cpsx1XR%2FyVLb2kStsbFp2ASb2TGy%2B6ciVTT%2BCPhDXMO1UziahRNZVhjVi8r%2F%2FryB65T8dhkZSE%2FH4sXW7JI0wRjGhMfbrm7CJgIAefI%2FBAP%2Fv2rXub%2FN%2F92QdhaYI%2F%2Fxqwz7%2FhBGd9NpI21OE13AhXjEJyCB311NlpSgs1NEbS0slwaALGTRrHdip9PzMppbGbq7PR9kbfldXQoD9u3THrMgAVCP%2Bhu44cf6asVb10oAoArx%2F6kPav3ej2EM%2FwK%2FCEPYBCZWYZX2YNkyEePj6OgQXiK7QFiYABrtJijIpc5JnHwNr7GUdZ%2Fj10deDK%2BiQpCUEaKePhkAjJ4e36Vp0Ax%2BEWBVcoyco%2FszTOmW%2FdYt3EqBBICY7U7FpxGExjGQn4Y9m7BDaZViAAOLcbQURwO3furv5T8v%2BvNR3cw6MiIYQAC88IK1B6cKVXR6AQBJJN%2FLUhAAqKrysMmm9APgPt2%2FNAD3d4x9MfDbcQiHyACGak10IDKAnsS4dw%2FWSrmCwQguQhEB4PTw2jXh6JWVxsudOSMAwMjJ0ZIsSwAwaLhm1ycD4Ck8Rb%2FWskNDqKkR4a9u4%2FbP8LNBDLIyl8fX156FhmLRIhGe1YveEzjxK%2FzqLbw1ghF8JjPiOeaZIgC2O1wXEREKA956y%2Fd42aPXrxe%2Fk5PlnGcASHfN3X2m%2BzN2Yid%2Fx8Toire2Tufb2w0zYA9QrLXmYQ7%2FE%2B7%2FcYDWT41Nx5vRLmQGbNtmDSsltaHtKq7y86YhTctevy4A0NXlx7a607x5ARCkD1ZqEpOHcVhmQAIS5GRKCvbuRWcn%2Fv3fLZ0MCJL%2F0AQZ6UjXnoyOoqxMxBTZvYKSyGCMj2sZfjkWJ2D8WN8YxiSnd%2FZ6AYVaTEwE8ubtaH8JL%2F0z%2FvkH%2BME5nBvFqJFRPeg5juMv4sUf4Uf%2Fif%2F8zP29yMtVqqgQDCDHNT3xhGAAT7pPyQDQqb9fuL9zzkAZfNyEpkEM8veMGR6LP96N0eu7QOKU5PvScPs0r9BfEQCMO3esrUoAVKHKOcXcVSvnWAT89LHuq5ep7uAOGcCw63qtX4%2BSEhQXW7yMEDRiCZbQnTNQ2Kh%2FUi8ZeWur1%2BGNU1NNTWJcZib26IBdiIwGFNajnlfO7BIls6%2BdhwItJYhQE%2FjLj2P8V%2FgVz1YlKvOQtwzLFmMxwRuFqAhEhCJ0AhPsQ4%2Bg7xMYzWiuQ901XLuIi7JxGNsSkzs4raMbA982dEoRyJR9fYIBa9YgbY%2BuFwHw4YdoafGxRvo9PbqrEQuUxMBHAgB%2BvPUt3GJEYKUj0SEO%2FPCwsfcaD2A3G6R%2FM3wverphJM8yZPhVuPAMz30HBgQA0tPxtc1eP0KjqSMjmf3VldgNzJES3aiq8uAAUyp7Oxg9UlgnafKHpo5Fg%2FveV3DlEA7Ri%2FYiS03uXYHOvejsFNth4gJ67RqCUqxH4WURM5y3rQxlZb5ql7rNclzmPGQCqY4MSxeSKVj%2Fb%2BYB0ICGctSUowvKje8QUGgyXceTyFvGERxJQ9oiLIpD3DzM0wNgCEP3cK8TnS00J7T4tSXu9a4UAajUXPeA54N0nEqtWGRlJWLJ9DVArNROh0BqDH%2FtL8UBHyUJgI9LVQDAJwA8rJju%2Fz3%2BowHgY%2FQbdNxx09vgRvvh7U1LhfsHPokPlQr3t%2BSLyrpyRWJAOTZ7GvV9sxM8wiMCoJQgwBYpcRV3r7qMOOB25Ede1tpj%2FeaWCvcvtWgr38W78ZgbD6x1ZIKBEtpfNjo6UHrXWP2%2F9fE8BAe2HxDmvMI5T%2BsvByZ9lXd%2FfMfHUXZAAOAFXXKFwgCcNr%2BxB%2Bj4InZIrRopLNZDPLyBG4xACx0w2rHRPfunZzKL5jM5pbcRIyM4UCEB4BnzU3z8jjDHNY7mR1KYX3QVbjH0daWYnm0wrQOPYxK%2FZvEx4sRBgXNG3NRRh%2F2b4Ihwfx0A4AoA9yMPPN4v6Mdeeh1wGAcIAMYiRyYJ2At0Av9mpPhPfHexWfHeX5ZAlupoDkjNf5J%2Bf1P6neB41C41fxzAXL8rVVjgaHZIzZeMjydC%2FxIokH5fAL4rztZUfUXqtVT6fQL4G%2BCsc4dnpHlzrdg9qlqq9kv%2B%2BgvpV7BFdeukaq9Jv39f%2Bh2je%2Fo14GWLJtLpBWmeREdT%2B%2BJ%2FJv0Ks35GIT%2FOcQjw59KqZgP9wN9J4Y%2Fs0%2FNKVtzRKOm7f9txYUakT%2FA%2FfY2aCfwV8F8CWPIlaaKjWuL3pESspfvSLdX8UQAVXO7Eeal5wq9ST0tjV3raAP0ZuSo9e8fSvfCq%2FdKE6Y7mRal5TG6EiE8dmL6s835FRMA%2FoVGeeoq8U3m%2Fz3dxW%2FCAtw56xWO%2FiiPSo%2BMmUKWU0YaKLlqvC%2Bhoci5C%2Bw%2BHlRqR7Z9L2G9pXWpCIsD%2BA763RtbkJMbGMDiIe%2FfQ2YmODuNT7ff2gUy%2BmryM4WH09aGrC21tImPyYHhXLlbnIHO29HuuBPPcWlRXm67j5UQHISgTmYuxOB7x8zF%2FFmYFI3gSkyMYuY%2F7d3G3BS31qH%2BIh9a%2BmqpCfKEIwQuMrPevtGwkYiKFOQamS4oB7sdfW3%2Bqde%2Fi8jYFBQXx8fH80dHRcfnyZTX%2FB1PH8hWDnRJ1bu3%2Fh9rPnJwctXhtba3nZQU7lZ45E6mpiI1FeDgmJtDbixs3xPH2pVQxLJWHJxKRIQh5hEdDGOpBTxvaGtE4jnFPA7%2Bjb3DzE52e1sr2%2Fw%2Fid4iAQcD6ip4BAxJgIAFgtsta8D3vhQ74Wg5v6h87Jf7B5UzzR4PH0TbYEpCWgN%2BUm53l6Dipza1MHR2NtfF4cpbcehMdb6Nzaqk%2Fs44BI8qGSUtYIhHVKk04SpdyX%2BYDf6g%2BafU0hD47OioA0NMj3L%2BlBfX1qKlBU5PP2cRUEcCfOiW%2Fp75aMvANwyuXATA0JABADn38MRoahD3z5nic25xykJOLP1cvas4Ycv%2FeMgDwxm7ExnzkZyN7CZYkIpEAiEAEATCBCQKgD32d6GxC0w3cuIzLlagcEDfHmleTtQqrilC0GU84Zf%2BPh96legBERooL%2FRU%2FJ4bk%2FpfU5f815gF%2FBOv1A%2FGPuu6QkJCvfe1rxcXFKSkpdru9paXl2LFjL7%2F88qNHjyDZeO%2FUCn%2BpGXWd252O0n5%2B9atfLSoqWrx4sVz8%2BPHjr7zyinjwX%2FE0sMJpWMh1hLwtVhiBbduwZg0yMhAXh1mzwMV0d%2BNnV%2FDOeeCUpzfbgA0FKOARTRN%2BlTAXc2UADGKwG92taL2Jm1dw5SzO9qPfzcd0aX9TY0CtFEIKAKZN6fIfMiBBybQbH%2BVFZMAC5WeH2w4ZgN39ULKUuxksTTI%2BLvytU%2BftytQkfEKC3LiHex3oeIAHfi7VmKpdSi7RDmWgqnNZKxkQY65Cfz%2Fq6nDtGi5dwtmz4rdnKZNEaKet3eUhGRDm14s8fIibN1FVJdbw3ntobg7wY8QiNhe5mchUM7zAubmIikJvr18r1IlXl867FVvXYd0czHF5SgbMxmxGMpLZcxjDF3BhNVYfxVFeaavOGWHDNRSiUNp0h0YMjZUAEAmLpCyfDIi1qqSkbhwCvqdLbN269ZlnntmzZ4%2FczM%2FPnzVrVmtra1lZmZyJcmsM8z1PYdN%2Bbtu27fOf%2F3xJSYnc3LRpU2Rk5O3bt0%2BdOiXb7XMaAx7VIbgUwUszl9763WdQXGzfuBHh4Vqtq2KxgHsALMXS3di9Dds2YuNCLHR5SgdLRzof8dhcxEVPxyZiat0I9684jQD4RMTzLr62zT0D6P4JDhzR%2BjvcAkR0UfrQ%2FTvR6XPScQm5%2F90jdwLQVan0O9NR2pjmzsU6%2Btg6bN6MNWtQXo6jR%2FHggQWVr0uv9gtjrzZjBvLyROTnIz0db72FixcDmZzuz3BJ5uSI7OnTAb3WHux5Fs9%2BDp%2FjXTXSn069Ezuzkc3bTlqccmcKfkh2%2F2S9%2BxuWKwCqpS%2F1y0%2FuEEK60eTHd4A%2FVXx5ELgsharU1NQcfkKdVq1alZaW5gDAk8ARm%2FGXkGZZB8jnjHVWrlypf07AZGRkCAA4TFT9G2wLDl4cfOurv4nf%2BA37smXuqkcDT03Nrsf6Z%2FDMU3iK58H76nhsdmBHFrICPDa%2FbgCgzpLPcM8AWrt6Len%2BOgDYPAGA4WvCQUGAUa2KJddk0OWv9aUH3T8NDkZ4OGw213w2z2Q2MjKQnIxf%2FhKtrdP6aiEICUe4m8G84YmJmDULjx7hyhW%2F10D3z4FkFj8Cfs%2BRzA0UAE%2Fiyd%2FCb30BX7DBeQM7O3H7Nvr7MT6O0FBER9OuBFwd4pn7Cr7Ctx7D2DmcQ2BajuV0f3LFv%2BF6AEzy%2F%2F5JDEgNvw7hLeXvgBTmpW7kWilsS5dKrQ9QcxnNo7qOIZL0Q0NDQ50zl1jC5WTb3XmArKMS%2BNRSM2fO1D8NCwubMWOG29UGhwQHPx2Pffvg3v3daxM2fQlfeh7PRws8aGpHeze6xzE%2BEzMXYEEc4tRH8rEJRrDfx%2BZTBwCbFS5nlz%2FElPMqWbvD3DvErdR%2FeWVqdolXINGJTgMAkA7J3ykMsOoVHCeP1%2BcVK3fn%2F1d%2F9QI%2FdNOBAKC9zp8vfJZ3bcUK6E%2F5jh1YsABz5uDAAXz0UWCv9jHwU0%2BvRiuMQEQMYhZhEe0sFanaM7onr1ZvLz7%2BGN3dfixgGZbl2HKUi%2FS7aG5r%2Bx%2FJyS9BvDH5kpbm55utxdrP4%2FNfxBedstXVOHcOtbVitX19AgDcz9hYpKdj3Trs2iXMVhKBx%2BG86i1o4Z2HZ2PyrlCE0v2LUCQaW3Gv9N4PtkV%2F10wFFQD%2FTW4PHMXARb8PYani%2FqWmN1T%2F4rOBgjQUfAfSfbDDfhmXPyAFdLpz505jY2O84%2FJSN2%2FebGtrcy5qd9lQ5W2mbDKTx3TNjo6OW7duLeDhd4hzcUa3Cw7eFRy8ezeWL1f3qQtd93GfJs6DDUQAUcAs%2FdAVWLEP%2B%2FZj%2F1zMVZMXcZFxEzfv4u5DPAxDWDzis5G9ERtXYqXch8fmOTx3D%2FfawFdt87mpE5hgqM1PHQCslw4D3D49ADqmejuNjwdo9mylj9TLbSmd%2FtHlryVGrStGBrxjTWnXU04GvOy%2BZ1QUkpKQkYG8PGzYgO3bERSkPJKRMDmJn%2F4U7e2BvRoZ8AtPrxaEoFjELsESnvVt2LYXe3kBlGdxcdi5E9eu4a23%2FNiBHOTkIlfJ1NKca68nJ8uT5%2BYKBvgBgDmYQ899Ck85ZQ8fxqFDOHUKt25NWYkNW7eipQVf%2FCISlDMZhaid2FmN6oM4CH9F92csxVK5WYGaM9hmqoIKAAUbAwMYeB2o9%2B8Q%2Flz9x5RczuraHVi7HxG0TgEAuj%2BjBz36LmfPns3KypqcnExJSWGzubn53XffPXPmzJTSdp9Qnfpy58%2BfP3LkiM1mS01NZbOpqenw4cOVlZVuFpwiAWDXLhaha5%2FBmWu4Rqj3opdNAiBCACAGiFWHzsbsz%2BFzT%2BNp1f1JuNfx%2BmEcfh%2Fv38Zt%2FUpSkboDO57BMxwiZ%2BZj%2Fm7srkPdf%2BA%2F3LzMrFkID1dbgxgcwpDa%2FLUFwFTQx9nj6P6hCGWLEOzslAHgfBR4FR23sQ99dP9hDPs6Le4VIAO8HVL%2FSpt6i14e115UV6OsDFu24OZNPP00kpOVpwTDs8%2BKDv%2F6r4IE0%2FNqk5i8i7uM8zjfgAae2q%2Fj61rP9euRny%2BWNzho6t15%2Fej%2BGgCuCwDU7tkjt8SDXBw9itFRcy%2B1ERu3Ymsc4rQUq7zyCt54w8Mu2HH6NPr7ERqKb30LIcpNXIu1a7CmHOUu7mZQaUij%2BxNFcvNjfEz%2FqzB5ZFQAKF9KAGDA4vPtRVMPR3AwCgpEOOaUAeDSq7e398c%2F%2FnF1dXWCdIXb29svXrx4%2F%2F59%2Fk5W%2FvesZDe%2FFLWJ%2F%2B%2FevfuTn%2FyEJ0UtfuHCha6uLjeldgkAvDxjRhva3sSbJ3DiEi7dw70p%2Feaov7ZjO79aCtHh0EEcfAWvHMXRqeWb0fwT%2FGQEI%2BEIJwnk5Cqs4gk8h3ONaHQdEBOD6Gi11YnOLmjLDlG2e5q%2BpUHZ3LesXVSCLSHBrpi77P52u%2BtZs8XH2x0AoPt32Dqcn38VeHlKYY%2BGNn13xHRpm78T0aEOH0ZrK%2Fr68KUvYckSJb9yJZ58Es3Nwuam%2F9Xew3tzMTcDGZuxWUnRFDIzkZaGqipTb52DHJp8KELlZm1v7fXa2gESLiuLzbAwAYCcHHzwgblV8wbSorT2Rx%2FhyBG8%2BaaPYVw8N3DZMhQWqrlMZKYj3T8AyO4fAgUnZ3DmDJLMHkIVAIrcAsBle6066G4PKq1%2F7VoamTxJHero%2FvTBqR37%2BvqOHTs2NV%2FK%2F3OAZz3PWyr%2F%2BYJr%2FiUZAN%2Fg%2Fx0dHW%2B%2F%2FbbHCrodSG5L7vtG36s%2FffXn%2BHkNajzsj7KlsYjlqd6KreoDfrV38I5b91f1Nt5eiIU8KolIlDP5yM9DnisAEhORnIzwcLk1hrEmNLWiVX0eMv1e5Vk2o8%2F9W5qLMSeA1u4wd1p7h7sxooujj62DtNQ9a1GPyfQZtSGwPP5PVl2Nhw8xYwZ%2B%2B7cRHa0k6Vn0TT66c%2BcxvNpFXKxGtQYAKilJnO%2BpAPB6ruj%2BZIDarEUthevXZQCIDuyRaw4AJBOvIhGlpS5dQkUFJid9Dz53Dk88oQfAIizi3YZ57cROun82suUmt4tWcgX7TRUJRzjdX0WI%2FdEjG91%2FeNjHsMBPo5evtnatvUCDK92fYar21%2BU%2F%2FOwFXnpskEInDSXfMPs2J3DiMA4r7u91f1ZjdQEK1A0fxvBpnOZw7%2FUf4MFZnN2ETU%2FjaTmzHMuzkBWEoEnoTl12NpYtU1tczw3ceIRHaiZI%2BvePlSXazL5mALJNU1%2BPorXH2%2BLlenR%2FTwCwxUt9bPT%2BTvZyPPB%2Buu3eF2%2Fzd3ftPvclkOqmVFeHd97BkSNahjzYvBkbN%2FpXz27yk9%2FBnTa0jWJUS0VFYf58NxviWUlIor0vwRK5yct2Hddr6f5kwKhSOS1NACAhwcS7sOxiLNba%2F5e9LgGv6rrO%2FS9oRCOgEY0gBAIkxCQxiMHMMxhjKQkZmsQvSfvS17zmtd9LmzZVEmdqv%2FY1r03S2Hl2XCfEYBsBBplJDAbEIGYkEEIDEpKukIQGNAtJ9%2F37nHvPPXc%2B9%2BrKTtP%2BWrrn7H32Xnvttdf%2B%2F4EBozRqQUcHKitRW2veFiaFI9zdfCYggey%2FHkYhGcDASZw8iQpN2VaB7E8zt8n%2BNC0YTQU6mZuZacjORkKC3KpHfQlKqG2IHMVyIh%2B0fwUilC5y%2F3HTh1GCQRaj%2BAIuaBmcjnTWpNK8iZvcYDvaXU68jdusXqUZgAAWdjKSzSPGjcOCBUyg0kHhpH%2B1k3Gml07j8%2BPRAN3HMMMaMYihBsjvZP%2BmJpsRYWHi3oeGGseIUXrN7g0ad%2BHuRgxu5WhMleDSJRQV4dYtc8%2BSJcjKQkSEZ%2F7c1YAudHWj29wODERAgFuZ5U3LQIbSLBXEXzpMvhbPUvMwjpvrxkYiEBGpJqTGRtTXw6D56Fpb0damtHiTae4mU2b%2FIATJTYn9Tz5y18toBAAelZ%2FTKYKOyf6sMRNIYTR3N9VvNup8f79Osj%2Ft7281yT47L%2FX3bzR9koap5rmHmzDcUBeqYwqLR3wqUidjstJTjnLWopZVetBTi9oGNCg9cYibgimSEwnLl4sbarqe13GdslSFKrUTH8ts68yBjl4HHUHn%2BTyHQW1V3tYDfrbfo0Duj%2FWHv9iZYSvZP1OPTKtBVIeYGPm1c2sn2X8lOccyF0edBWjQuLcxF9mxW%2BDiRSxdinnzzD2ZmcjIwJkz3l%2FL5rANglMte3XubZXsT25XmmUoM142WQAWLTIOyxACcPy4VrfBCLYmzY4ON8KiAg0OKq0RjNDc2tcKrCD7z8d8ufkQD2UBEF%2FchJUA6NwSAHfLzyn1C8yYAQoAfyV0otNCAH4G%2FFzTOvnG5%2FuSqfEXFNwfS0NuAofgBfQBNyTTggQkJCJRaQ5g4BEe0RxdBauEtaClFa3kfbkZicgIRHD0L3TYFBW1ae1a3apV8qcudBWh6CzOWnn2cUhhYyQDLorD4HyQQw3IVzf%2BWtEAZT8xEr3L0Ovzt%2BixZdhm07HmQfp8%2FWegt1rkZ6MvfHX0tVLYv%2FbWbbJKzHetkuIdVFbi1i3U1SHRVLWzZyMtzTMBcFenwhBmwbPd3cI0Q2b%2FcITLzWY0k%2FUrUSkaDx6grAxPn2LyZLb4QwGYM0f0ucY%2F8Bb5vGNxlZ7j%2BXMnM%2F7Squ3vDz8%2FpUWaI%2BlaDPga8EuH3qIRTfbfgA1Kj8z%2Bioq4dYmtBAAOBcDKq7uH6Qxm12T%2FrCylJbP%2FIAbtMpYT%2FET8FEqmxtflx49NQ6gBJ0Yd%2FE3Jeu1%2Bs%2BKv%2BYhCVIwgJyNYk0%2FwBCYht82y1XZJ6zSlyQsSdiMMkixWZ2%2Bpidi4qWPStEni02EcLkThYzy2isjHXvJ1GhjXI2hifxenaj%2BiRQ7byuBi08uUKYum%2FAL4hb2Vy43PtEVpwF7JjKgdJZsZxiBh3tdnDSgvR0WFWQDi45GSgvBwdHSMSS2YkIKUqZgagABzV309mpq0r0j2pynNMkHvKoIvpRyUYtUquZWRIUZrEoB8%2FMbNFFoLQESELDwyGtHYBDf2JbP%2FREyUm0UoIvvfx314BLUAiDMi%2B3d2Kl8nTRKffX0NIyPo7UV7OwYG5C%2FqA9MmBvZGWRx7QoJg%2F8xMuUU9kwUAo4Q3pcoOlgE3nK9%2B0%2FSezzObqBwc0YGOdmyHMIfXW02OVHiDatSEHRMCEciXIaw5cmRLTc3imhps2oSOte%2B%2Fh%2FfO4ZytNx97S1QAM8ZKAxzCudSNBrKfP1qGvxU0IlAIfA%2B4olpUHvPnSPsOEM633wHfh7hDhtHXlGGMCvWTYH%2BCNVVrqYa8qHFxbgmAzv2d5SBnIRZadN27J6RIG3jNyP7pSFd6JL4vhQMBIPtTAwoL1eznAL38GwWCgzFtmllQgUpU1qBG4%2BxsZJP9F2Ox3KxHPdmf5nE4igAYz%2BjZs3HPns1bgFmzkJSE6GgDP%2Fv5QRaAp0%2Fx%2BLE4hFu30Nam%2BLC6Vvbgkv3F3ri5bKVVghKy%2F1M8hVdhcBTeKK5XnUby2oEJmBCEIKWjAxk0l9fbETn6iZPxk1630srKeFk7a2oKntcUHN50GPF2pvg4WGIPsNfLGuAsJQZ3tmkvHFXB91i0FA8xOYidYByrB5pUnuQxwRyD9eHrpRFNOKl3tNZ6d3Y9Viz9CbE%2F0dgIvd6iJzpaGMttzHa2Azu2Y%2FsCLDB3Xb2KK1fQ0KDpppHQMTfDdLWIR3hUhrJGNJpH1NeLLdTVyVys0wkNoJ0%2F7%2BX8We9v3jykm2WpGc0MrApVWlyFI5zsv15VkTL794hL4CEUAZCxrLNz%2Bc5nixZhzhzqlCEgwHo803b%2FPq5dE4ni2kNDtnu1OSKdhjOPiEBWlloAyP7UAIwSDsvFoJG0NcKZu%2FnATuOrL3x9VCS8Ajg1ivuvE2UrL0sBINtV9%2FYWvP%2F%2BQVRfQA2wSVrAEj5e3PMYcJnmU8k3PnvMr2pMykPsesj8j6toKoRCYWaFwB%2FHQqL37vxuPU524KL9tawFQPefiP2J58%2FR1obOToSFGXsmTcLEiWO0szmYsxzLN2PzTuXSEPX1ug8%2FRFGRdsdkf%2FK50ixFKc16kOgrlQWAIPtnZHhfACxAQs3JweLFSgdp7iZuapwts38MS1fCRVwk%2B9%2FADTdrxaKAFQGYCaymTXy26pvPqO%2BOPMXHC1u5UgjZtGk4cAB6vXsUbN8vqZ82bpzcuod7zEwtal255u3%2FjqrnLannkaMJBidsw9cPMRo4I69DFqyt%2BnBWCvjcqK95GrBbcvW%2FhN0sx818%2FHCf7TjNAqAbNe0st3pqrE9tGlBs9bSotTmIVS5JM5r10Bdj0NrDiljEGMc0FTc1ocnambsYXbpWqBO13CO%2FF%2By%2BegNdXcIUARCMEaJ9Nol8h7m1w%2B7OfOATitApmJKGtEVYNAuz5H5xonV12L9fMA1PSRtSkEL2j0Oc0lOGMocCsGWL3EpIEBowdSpqaryWOevDW78eq1dD4leiDW2XcOkKrtiZSVaNteiYh3lk%2F5VYKTdb0Ur2p7kZkfXlUgTgz8j%2BQ0Oz8p4BPS6rzt8fmzeLfQQF4d%2F%2F3fHJ6LRdEXrJyhJmAtmfhlEi2%2BXqlmyzGVg8qgVdkpcBBoMUyA%2Fl9vnxwszJ8pBE%2FgYS%2F88y9zwEBP2%2Faj3Sxw2vo9QAqhHwKU84UpsGOAbZP9Z0e8jsErnbDopBbKwcEBWCptn9NouH2%2Bx%2FxM6bMVsS%2Foen7K9i%2FXXwKvr7MTBgbgYECALQDPPW8NeOdkYBIA3x4AIQIPcYK6C4GB9%2BiEOHcPeu9hUzkEEBUJoy%2B3ei03pce7sQgPv3Mct4dSgAGRleEwDrw6N3subGjUrHOZw7j%2FO96HXpagImkP03YIPSQ%2Bo%2FhVOUAXcisr5WwQhm2nVS%2F38Xx0B%2B%2BL5kUnJ4dSj8w8Pw88OkSUhKwrhx6ukLFojfnh689hqeP7d0HeUqG2pkZwsLDpZbj%2FGY7G9HsN1CocbVLdnmyqjWVBZyxF%2BDGByAuErGS8HEXvDHKeW7h5wrvOl0%2BLQOaaL5UPE%2FKgEYJdZiCoR5wJEeaYB5PNmfVCK%2FOyR3sn%2BMcYxDkbAPkduXJHN%2FZ%2F%2BqbqgFYK38mOehqqjZ3%2FsgBdAUkCZ83Cik%2BcbnHO07e%2FX58y9ev1517VrZhQttRUVodYPm%2FOBH9qcGKD2yANgfXVYmNEAlALTCQgwNjTZn1luMjsaOHdi2TekoR3kRiqgBWrzJ7J%2BIRLl5AzcoABdx0Q2StbpQJ4AkhCSHhPiHWA%2B8eRNXr%2BLBA3F1nj0TuSBPRUYiJQXz52PVKgQFKWOpAc3NqK3FEXU1%2F1x7VBCikpUlzASyPw3eg8H7bOOhDHSjm8aXQflrWJgwC%2B3UOQhZ52RP4%2B282YebAuChICkg%2F78mmQfwfGGyPzVAfrdP7oGBgv0jIuSW3qBv0jVp3vRCX%2F57EmathjFUgIP4gwT5%2F12tY7%2F99z7VNyIfXp9%2Bu7bnMgZIlF3o0jhX4vC5EzBBbvail%2BxPDbAdKQ6a7E8jLwcGsofMJmvAjRuj2qt1UZBAd%2B3Czp1ISJA7BjBwDMdOCBp2jVmYRQFYh3Vyswc9ZH%2BaOxHZcNGrRgHwSQ4pSkayZOMxjIICweXnz6O62npKcDCWLMG9e2IvFAMT1q8XMsqMNTZ6dI1J%2FdnZQmAktKO9BCU0eAkGraO8rAF2nbah7SmeTsd0Yzs6GrGx9qbqXEXlITX7eH2TzsCCyAded58rlV3%2FieQhysnQk5KZQUkl%2B4cgRG7qobcjAGR%2FU9770McBrWh1el0sQQX4gWRexy1pv4fclZbfb3SInzJ0cGfvmfrsbG78eEExOpF73bd1KTpyTAqJ7yN8NAMzClDwEA%2B1rEYCz0CG0iT1k%2BOf47ndwbrBQQqAgQS2aJHck5HhgQBkqRt2trZ7N156SVmCOIIjhSjUsqPxGM8kbMAGpUdm%2F3rUaw7PXjmfF1aBkFeTQ2T2T05uSYotSC4oSD52LNmum%2B5unDqF%2Bnr09uJLX1LEjOdGXeDmDh%2BG%2B8wLwf5Z5gRewzXaEIbgDRhGRddeDkAn0VEDGszrTZyIadMwZYp98bSM51cSMXxgbKUB%2FwR81e6irHZHBf%2BxCQCDE%2Fz%2FjgeiZX0Kn6MCfNNm1BclqkyymREj2D1GfqfYktx70Ws9mewfYxzDAXqdXvWNIV6RfB%2BzG92w%2BH8uDfihJ2VmkyU1yP%2BnrfLweygDBoMw7ciXH6z7153Vgo%2BPEIDoaJD5MzNhiIZEf6uxOl4XH4zgt%2FBWFaqcL8WjJ%2FtTMJQesj81wNmc0lIdNcDEzmlpQgCiotDc7HJjOk2Ms2MHXn4Z69crHRdw4QN8QBLXwkgy%2B6ciVe67j%2FucWIQiRwEZXAb5NeCXSiPk0SMaXx74%2BBQkJRUkV10l%2ByvG%2B5VgNb28HO%2B%2Fj8hI%2FMmfKH08rvR0CwHQWh%2FMNQUgMVFukfdlAYA3YPBkhvc1QI1HeFSDGosIMzJ08%2Bc7EADrvURJdnjixJb2HcBOIBj4Z4DsmASdTpiEfvTT7PpxXwB0nnEQYwrlo9xdDbDD%2FkZ3GhEr2D1WfhfkDjW5mxATo4uNlQMh%2B3OY9o0JNhsBvueFHCnUqMZHag0YjW8vgtTso6qc4WFh2vFT5Y0a8J6znbGCeXozZghSIGOuWyd3pxpS85DXic5f4BdCzh1fUrL%2FXMxVmq1opQBUoMJZeBUVQgNaWxERIceTkSF46dQpJ3Nek8wC9k%2BJW8jNxUsvKR1UowIUHMRBLZmbhmlkf2qA3BzBCNnfuXK4qBe9VdGFSEb8v6GhgqqqSllg%2FVUCoIjBUmXSnTs4fRqkrSVL5A4Kd2qqEO6qKjerlQedlaW0ZPZvRztGDU8vzRagcPSrOwK3Rgl%2FiIeKomPxYsPy5bqbN51ogLKX7ZIARO%2FYcejazrKyFFP3CavxAxig2XXlM3Z7s0GXxUOBkwr1VH3Vwh1DduePBLK%2FfXIny8RIY3RWIuG6bF6VH9SAH46ep7s09X7iGhAQIEyBqK4BN6YbHJ6s9c4MBnENaJcvo7YW%2Ff3Ytk3%2BMhMzN2ETqfwDfGCcY88n2V8tAGR%2FEq7rCEs5sBQvvGB0MtelAGgjmpwc5FG58pSOOtS9j%2FcP4ADFTItzmf394Cc3ZfYnfTifpcqqzjpW69sgC8ArQAFUtMvTfSAZMcEkAEfV865eBTnLJABEfDzi4oQAuAGKBgVg5kylQxYA55Ni1fuMsTOAl9mgdycMM0ow9riJm9dx3SwAvFnr1xuqq%2FHmmxgasi1qqwJbvGtX9K5dUfOXHTqEM2fYce73VgAcwy6jucX%2BCcZ%2FW8QKdjcWiUzuNuN8BftHR8t%2BOKANTba%2BHntnV2OZsY8NoaEICTE3u7rQ3T22OyP179uH8HBMm4bZs%2BW%2BVVhVgpLzON%2BBDtG2kYFZmEXqjkCE0iPxeqmNdxtF4qiyMgqAHExUFDIykJaG8nJnkbs4kPnzkZsrzM9I381o3o%2F97%2BLdR3jkLB0mrMEasn860uUmZ8kC4E5qXWKvZM7QC9yTzAJ1daisREeHOCMJTFpEhObQZJD9s7KUFk%2BK50uNdD4pX934Y2sN%2BJH8%2BBpGj9jY2MWLF%2FPXYDA0NDQUFxc%2Fffp09G5v4MZFXFyIhWYNWLgQL7%2BMwUEcOGDg5XKEoCBs386KSt658yu9IuHR0fpDh0709UkCoNMJk9CP%2Ft8HATA4K0Gre69z86aJKlgLrLDqDpbqIRzGohyE%2FltUAet4YiWTBuQPBqIpH0%2Bs%2FLzriQD8gWpAYCAmT7YQgLY2tLe758SdWjDj%2FHksW6YIgC98ye%2BzMbsYxXaK42%2FArxnIUL7UorYJZV9Eg71SslKPBuhLUVuLpCS5PZe%2B5joTgO843y%2FVIy9PmIkfn%2BEZ2X8f9tkTJDtXIB7xZP8N2KD0yOzv6GK7jTjg74CvaFYKW%2Bj1ePJE2WBoqDA3EB8v2H%2FePKXjGq7RXM77quP2W8rbqAUgOjr6lVde2bZt29SpU0dGRiorKw8dOvSrX%2F2qg5o3ahShKA1pUzHVRyHkDRvg789VcfYsrl%2FH8LDFBB8fzJ%2BPF17Apk1Ys4YdEybgM5%2FBQPTxqqiTJYc6WetqsEioAXaX9kgAPKcebffeXfYnviw%2FqAFJ6pViFGoX6PiyYP8ulRtlVIw8wu%2FLTV%2BG3mqpK5IAeLSlP0QNiIvDlCkWPbz2zc1u%2B%2FFAA%2B7dQ0UFBgbE3ZAwDdOSkGQhACaEvBpC9idvY0ihuNJ8C7Y1OI2pVDKzAGRkoLAQ3d3ubygxEbm5wmKNxcgLSeqn2Sc4e15k9g82BMuNj%2FAR2T8Kd9bZuRyO0rrO4qHa%2FSn%2Bd59Cj8oNz%2FO7wM%2FhBrq6hJkQEKCckjZkZwszgWrN5NzDPfx%2BYNmyZVu3bl28eLHcjImJGR4evn%2F%2F%2FtGjR0fv%2FD7uf4APIhGZhzxz76pVSEnBwoW4exe1tWhrw9AQ%2FPwwaZKoqPR0LF2KhARl%2BIf48MiaIyVRJYgC%2FsbCP%2BuNZndpn489k67uPdxnf62Dw4F%2FlMzJqETgV5J5a0tjrwH4eGVg2jQkJ1v01NcL8wAG1yduDYpNSwvi4%2BVWFKImY7LdgaR%2B2niMV2rcB1shzJMS8%2FExasClS24GHBmJPN7rPHGZTZDZ%2FwIuWA92kI0c5JD9F2CBaFzEk%2Fwn43HyGzjpIGxHac3n%2Fw7J1HhbFoCeU1Br20TJ3MLz54KhTBg3TphWTJ6MrCy1AJD97avjJ4S4uLjp06ere2bOnJmg4t9R4jiOByGI5bobu829rHNWzo4d4n51dBgFIDyc0Vip6ymcehfvFqAA6XBPAFL5k2rnw8MxTKYH994Vy9VZPWFagtn828TETNH%2FUR2%2BBxTZhPAV6P6WUprIyUdQxyElzpdL9N6WvIWPUwZmzWLtm5t6Paqr0d7uoTfHibMvmz096O1VWhMwgWZ3egYyKADmdinwI2Cv5ixx%2BT8CvgWkGTuEnsx1UwCCgpCbKyw9Xenbj%2F20ImMhOuH9RomyX6OGpGPDC1hv7M5BNE7SgA7Hp26w5zcnUMy2QJPyRuruAfqBAKnpKwlACNClebMUSR%2BT2ALDw8K0gtRPGz9ebrWh7fdNAIaHh4dU8iYSNjQ07MYOXeMADpCm29G%2BGZvjEGf%2BEBAAS%2B1Roxvdx3DsIA5SAEYwIrqipA86nTAJ%2Fein2Z3uwxLDVgOy1GWkK4ROuwBIx%2B6jTpWGk3ebMF1cW7ENfNfmSk1AzHcQizek702X0XTM9srFx%2BA7sXyKQXoc18PVFX%2FDgy3pPg56%2FhgkiEQ2fz5iYsw99%2B6hvHzsNuRZ1hKRSLpOQhLf78hdpXdQpk0slTSWSpYmVIT%2FyclCABIS8PixtiDGjUNenjBSmwmHcGgf9h3FUadHJgenNzU3QLD%2FZNWAz0nmEjabpAL8RDI7%2BMIXuiUNCDB1UAAmnUNXrdakh4QgOFhpUab7%2BrRNpIhnZQkzoQQlZH%2FyCNwCE05T4TmeD8GCtT1GVVXV7du3Y1SVf%2BPGjcrKSq84V8DC0ENficoVWMGMRBm53D560HMd1y%2Fi4imcOo3T6k%2FDlm%2FUFZpdJz57RJ6eY8NzRBi7HsP%2FtLkKXCMMYaEIVcXVIw7fNdzQANcs8CZ%2BbdPnBz%2Byv0jiG%2FzOC8XcHgLa1GNiJPangglefxNNaGrC23BeNG94T9a8DatEDUvK%2BKoXF1i%2BHEuWWPTcvo27dz13qHPz3MkyQUFKqw99%2Fei3HUX2p8nvQvtZk2XvorTMtbao4xECMBfbZiAg4IDsVvKrVQByc4WtWqV0HMMxsv8BHHC6cduw%2FkX6beefu3ldJW3%2FBVI56bxdpCsf%2FX9vf5l8XRf%2B7plKaCLuIqIMtZoFIDISk80q1dEhTBMokDSerIRBDJL9qQFwF6GhagUSMaCjE50OxxsMwkywkQ8LnD17NikpqaOjIyEhwWAwPHr06Pjx42fOnBHfLomfPuNztLiBG2Uou4IrC7BgFmYlIzkGMeTYAATooCOPd6GrGc11qHuAB7dx%2BzIut6DFykm%2B%2FPit0uFYAMRPVxeePUOEUQEmY3IkIjWGOxET4xDH%2BMxdT5%2BirU3bbE2EafA0lbGIZe6MDWoSud0msNhYKKJO9qdEDJnYX%2BfR0o63pBvFVryfHE%2Bwbp2wmTPNPdeuoaQET5546NBd9vf3R1ycODMTSIq85FajeJFJ1BnIkJsF%2FC8rQ2kphg%2B6Fx6vTOk4MXHRIrkjI0MIQGGhmjccYMcO5OVh82al4yzO7sd%2BCoDTXdv1K13nH3ma1F1UAD5%2BamKFH8OeZHJAaytaWpA91dQR346kJFy%2FrmlVUj8HR5p5g7etuVlLuDpkZQkzgexPc0bcjsCbHB2ttNrQ1ohG0qXD8f396OtTWuHhav2yxuDg4Ouvv3716tXo6GgKgF6vL2VhyMgX7J%2FvdrgOQbJmtdDI%2FolIjEIUCdYf%2FhQAqiN3RMavR30lKocxbNfDq%2FzfZ7FVOBMAHhTv8LRpctcETJgmGtOqUe0yVl6zNKRZdDU0oLFR82blitd5ld2M3sj%2B1ADZi6GpSafX2w5lzUh8IgaR%2FakBGDU0yZo38LGyP6%2Foiy9i61Zzz%2FAwzp9HcbGHDnXub23BAsyZg3HjlA5eA15yq1Ey%2B4ci1NzFu0oNcKnItiFxokoAwsKEANBu33a6Ncpkbi5eeknpuIRL%2B3T7yP4jGHH%2FPP8vfulpUldJAiDwU7oxO7SDn9bXo64O2dmmjhkzMHs2jhwh%2BbleODNTHI0KtbV4%2FFhDxKwrLhkVpXTIAgAPQNKiCJlQgYoqVDkb396Op0%2BRmKhsd948XL2Khw%2FNQ8gPTXGASQRv2z34E%2FwbEzzCI5qns%2FdZiYBdSALAY6%2BpwdKlSu8CLFiKpS4FIBzhy7E8G9kWvcxfdbWbsVrLwCiozeyE7B9jiDE2yP5Ndsid7B8TY1ytydCk1%2Bk9X9neVda5oJz%2FIOy%2FfDlefhl5eQgIMHeePInTp0XxeAAP2D86GmvWICdH3fcQD20vOdmfLG1ut7QI9ldfa7sHYjekBw%2BEAJAmJk82Os9wJQCMkImimXBDd4PUT%2BtF75iep87NwVZLVlWhogIjIyaFDQ4W1LxiBYqKXPiaNElUiFk6xG1j5hobNcTBWdQAE%2B7iLtmfuu7J%2FqlAaWlK6w7ulKHM2XhZ8ebPNyZEhx074OuL8nL09iIwEJGRuDEFhVOAF12ufUgyN6HzZJfehSQAPCvekM5OhIXJvQuxcCM2NqLxDM44mhmEoN3YvQVbIhFp7r1%2FX1yO5maPgjHIKRnFVUhWN8j%2B1ABjo6nJoNfbJNxAhY81DdFDTw1Qn8roCdvg3kEbNI41eJha9xEfj1WrsHGjuBym8hDgKR89imPH4G3Y31pyMl58UViMSdGBGtTcwi3%2BqgdOxmSy%2F2zMNjssK9OVOSYCnavklJUZqAFMggSSDDWAckBRsAOySW6uMD8%2F2fk93NuP%2FWT%2FdrSPqZTrRl0D3d3iVK9fVxEyFZfCyet8967DaaTMnTtFhVAGTKCTW7c0BM1UUgCSkpQOsj%2FNk%2F0z6AULlBju434JSqpQ5WwKmZ77YuQBAXLHjBnCmprQ1yf66ifjhp8nsfwHgiQAw8Mi7ZcuYdMm5cPLeHkYw7xOF3GRzGg1LQMZa7F2J3bmIMfiw4ULuHLlE9rLr41P6UKNx3iyfwxMfKHXi4O1BBWe7O%2Fvb2w2oUns1OB9ZVbJgEtNcb28weMgNO5r3DhERYlrOXOmuFRLl4pbqgZJ4f33cfAghoY8iUSneWuk0cREpKcjJ0cUJ19UOIdzxSi2mkH2p1l0kf3J4B6Dc1UCIJaQ1jhzxmZkWhry8oSFh8t7JAGR%2BmksrbGjfrg%2BWIOjWVYX%2B%2FJlcYN55uPHS%2B2gICFmIyMoLBQfnj%2B3dkFh3rABu3dj2TKlr7ERFy9qowHWlVlthKKTtcndbu2dQjOPIrRihTqGj%2FARicvFzK4uFBfj9Gls2aLujjFxRj3%2B8OFjfH70kSjq1FSkpMgdgQj8Ir6YitTlWP4QD5vR3IMeHXQhCElAQjrSl2HZdEy3cFZUhJMnce%2FeJ7MVyyKX2V8nX42BAcH%2Bzc1WE8j%2BymG3oIXsP4ABW8K%2B7L0AtWnANyxayRYdnnDGT43%2FYvL%2FVH8Is14LEucGBwttjI8X9UBSs8Ldu3jvPbzzDuo9vSDmNePUDeut8VaTSePiRAyLFsHHR%2F3xFE4dw7GbuGk1ieScgQxzu66O9G1oaIATlnQuSNwmBaC2ViiiSQAyMmwEgEJFrqSxqoiFpI96Uv9R7JuMR5M95v3r%2FHMB7Xpq7jDNYaxfg0W2Tp3C9OnYvt3UlZCAr31NVALptaICT56gtxc6HcLCREIyM7FypfhV4dgx4WRAuknOwGUoAKoCu4ZrNLiJXwCbNmzYtHZtIEOVcBqnWR6ahOT4cVHngYFYvdrhmHb8AcN0qfr7ceQIoqLwuc8ZK1hCDnJoT%2FCkFa296CWfBiOY3BomuMMSly7hwAF88MEoAzJ4aRrZn3EaG2R%2FvV5FwcYJZH9lr2T%2FJjTZ8anDElaYl9KtTQP%2BWfrtED9k%2F%2FzRJecf5cdPzb4lxxL759sZT9oNCnLojQLPOjl4UFCFxzAuG6cOwOBOJGdwZj%2F2F6DAqj8VqWR%2F87kT5O6yMsvz1ASLeOiEZhIA1gw1gJT48KEyIhJ5ecJSUkTrCFrzW29h%2F1zsm4sHnlc3L9N1bHc6ROfZHVIpwS8tvxQWIjoawcEqSgwJwc6dWLcO1dVoaUFfnxAAdpI6p061clxQgEOHBJG7Btk%2FK0tpkWE8E4DXkFEzuKWmfNOmZMyejdu4fRiHC1GoafLICH77W3R14cEDcajcEXdOUOSePkVDC2qAavwBw8f8Wl6O3%2F0Ow8PisGfNUg%2BKFiUR7czNiRPi5PftE0Ly%2BwGyADXA2CD7N6nJ3aDc5BjTELI%2FNcCOI4mzj3kvMJUGPHI6MFz58VwXhx06NrvWiNu38dFHOH0ax46N9pQtA3Bra21oO4mTR3Dkfbw%2FiEGrr3PFJZ5r0UX2J3eroEUGrEOSBWDrVvNCc5GRoQgAVSoXE3IxJ934eVtXBPZtwz7gjufarZcEwD24v4q9dLzzjvjt6RE71imfKMbcs2OQMz%2F4AO%2B%2Bi8OHNawbFyfYf%2F58pUNmf4Mnlb715Mmt1dXjamqwadON85v3vzfuvV70ap3NuLnhq1eRlibogNskKHJtbYI3Hj2yywp%2FMPCxaN28iWfP0Ngo1H%2FJEkGQLsGLcf48Tp3CkSMYHPykt2MG2Z8aYGyQ%2FfV2jpHHrWyR7E8NsO%2FL4Iow3ITJXzLwRecj5wEHP86s2aK5Gffv484dlJSguBhVVd5yPAd4153xj%2FH4Du5cwZWzOHse520HBCIwAxkWAlBeLuqzvd12sKMjtU8%2FHR3CD7Vkzhy5Q%2BjMXBQWylKYJ1m2akII8HXJPk4YRl%2BRMsh%2Bb76JlhaQUleuRGamawfkz3PncOwYTp%2FWtmJ2tjATBjAgC4BH0W8BkliYP%2F%2F5qZqagus1B5o2NWG6mz6qq4X954OPdQcT%2BS%2F%2FIpRg0SKkpyMlRWj15MkIDoavrxhAlqdIkBdqa%2FHgAW7fxuXL4sUGD43PbvOrBrge2imZK5D9%2BxBj9Eb2b1KTu%2BieNEmw%2F4QGYxfZX%2B9E6yuAGdYhPhxF3k3%2Bfm27%2BzEpQ2Os7ZI5xfPnggA6O9HaioYGPHqEigrcvSveNS7SYzc1ouuxOyEPYagPfc%2FwrBnN9aivRGUZysgRvei1u7bM%2FnXwN3fKrO0A6iNVehyeKV3R5vgZm%2F5GDSDxAW%2FgE4JOW%2ByeVeqRI0L6ucH585GWhqQkREUhNBT%2B%2FjAYMDAgauTJE1EgHHbjBoqLUV%2BvbXHevawsRGYr356ghCfLs%2FYoDSuk330jIwVHjx5E9QBqgE3AeruJ%2Bi9YwMd%2B94ULwqZNQ3IypkwRBxYUBD8%2FcfIUgK4utLSI066sFErgAPnip9v41AwXozs1%2BYtBTCVi8o27GxL0rleTu3BB9o%2Fh7RUXGG3UCMA%2BsyjYA%2Bw1h%2FiTUade8acOrNrdfGmEcNqu9p3kaOTQkFEAnj4VSWtrc2%2BRHkcbyH%2Fs5tYoAP3oJym0orUBDe3OpSsf0zH3PWEKBoAyJwIAyyPY4zw8IQCHsf0wJph65mK6UQBS5Y7v4pOC09hf99xvVZWw48eRmoqEBERGIiTESAMUgGfPBA3U1aGiAh0dDp3YiSw7G6U0NflcK0GJp2Fa0vt9yf5p9Fn9TwEfZx%2Brq4V5ir3Kj9uzPP5sRBNi9yLW3IKa%2FY1eYsoQayIHvTRIe4gFGCPs3TtWjj05C68uMmZbM7qfspeUjBRVV5lk%2Fd4pPOpi6V6UkrxMPVyKC04BGkXre2O6O3vQaYn9nBcWIsvTPIZNcIE4lqXKI3GbAmDM43%2Fh48W4sXRuwGsGTDFAZ7I4A143iH7P7edAlCj%2Bb%2BrwTAfDFBheE90U%2FFD10jeBXaZVE%2ByuegpYaRo9B9gnnn8BdKuGFAErHGyNEpAp3UFhK%2BBXhB8q07olR0Zsk2pb%2BXYUyHKas1clUdY5Ne0YD3zfuPTPDIhUHQXt16M8CsUs8DoQp4o1TuqR8BNx911szaH9FXTdqugLocuxzAnp488s5ywE3sVs4DemOH8NzNCYuBekAlEf6V%2FhILAYSTq8ybqT7c9gaDQN%2Bh4M40z9Guy2DruUSGOlc2%2B3DOEYcNX4%2BktpiNMqIJ%2B%2BbXkqbTz7c4hhKb5nGhQoHcLPgHg7W3aS%2FUTg3ywHvyelV9vh7QEqVHFV9GHP96XrqoyZB%2FzW4VFYXUrPTLqTCcJd7LeAfm9UPZ18S1sx5QJlplmtwJ9qm%2FUScMcbcd6RXDmCj4soxo9HaioSEhARgZAQ%2BPpiZAS9vWhrQ2MjKivR2QmPEBeHpCTExCAsDIGB0Onw%2FDm6u9Haivp64Xhw0B13fpKpYPDxQWIiIiMRHCx2Qe%2FPnqG5GY8f2%2FewgX826APOW3ScMA22xArpcsFm6AnrTl%2FJLE5AipPpZZx8HxoSWWhpwaNHMBic7FgHXRKSIhEZghAf%2BAxjuBe9T%2FG0AQ096HH3OOhhBmbEIz4CEcEI9oXvCEb60d%2BBjiY0PcIjPfTwFPHx8cnJyTExMWFhYf7%2B%2FuwZGBjo7Oxsamqqra197OhETPgS%2F%2FOqEFQFzDX1TR1E8m9x0WLcm%2BbhCl6cgYkK6fNlRgsqjriahD9C0jgkqTqq0FOF%2FXhTDGP%2FGngFHUCB9NKE5ceROh34tOorFymlvS1Kwipgy2iDEJQnRq%2B19H4cD4%2FjQtPeL%2FmXYc92wN%2F0YRaQ9hj1p2wDetM2FcQ6zEzATFXHgCC0vWVvDshNFzS4RxIQS9QBe53P%2BrF3UmwEazsb2Vn4zTfwl9hzDdeuoaLCqytY4usWrWG8NCwUXIBnOTwC%2FMJqws9sXPy5oO0kL8VTCxzg4%2F%2FYfnEsAJMmYelSzJuHtDRB1VFRCA01C4DM00zirVu4fBk1NRojIdHT64IFmDUL06YhNhYTJxoFgIwvU19dHcrLcfMmLl4UQmOLb4ufb1pwri%2Fe8CVF%2FUC8JyQYsrMxZ45YgGFTtygA9E4B0OuFtjBmuuYu1MgX7GIhlWT%2FfOuljYxu0w%2F8b4t4DshDs7YBmepRfrjoh7Pi7QcivEWLRCKSk41xygLQ1YUnT1BVhTt3cOmSSLUl4hCXhax0pE%2FF1GhEUwDI1xQA8n4rWutQdx%2F3WeP81XIiEzExBznzMT8NaYqiyALQh752tJP6q1FdilLp3lyDO1iyZMnChQvnzJmTkpISGxs7ceJEWQD6%2B%2Fs7Ojr0en11dfW9e%2FeuXbt2iTt1AJFsntq3K7HILACvY6r1uDftnM2MGfi6hQD81M6kWouecRjHPLyivnzXKvGDSjHY6HulFzSgwyLSCxcwfTq%2BPh1Ri0xdQmjuorQBJ05YB2xZfmuwZg%2FWzjBRjEDzNfyM7H9BinmgFF2l%2BNZCRMof02j%2FgFOOBMCmtlkYf6kWgNYy%2FKiUGm7Mt%2BDqfud7%2FbKFBtTZvT9qBMBryEQmLwvZPxsVvInfILEm3sJqqZavXxe%2FXsVC4DokPm8xd%2FJuDuO%2FAfHifRBDdnb%2Fs3RJ7lWQBn3JGxpQq%2BRbuwAsX47167FiBbKyEBxsZwA5a5FUqjdu4Px5nDyJo0ddRpKRgXXrjF7j4%2B2P4Y3NyUFfH65excKF%2BPBDXLliPcaUQDPn%2FsYPfn6Ulx9i61bDmjVYtkxIl8Q11qCklJRg%2FnwcPix0RsFS8UOCCVJ6TjveyVKnvT2y3hJZ%2FN%2Bl0oCrvsImTAjr3bwbq1eTIEVSROg26OkRBXr2rEgsc2HCJsOmdVi3DMvmYV6gWnJUKENZMYpP4uRBHHyO505OZCmWbsTGVVjFSxKk2roCUiEX4ksNai7h0hmcKURhIxpdnnVqauqGDRtWrVq1ePHixMRE2wEJCQkZ3DtQX19%2F5cqVs2fPHj9%2B%2FOHDh7YjxWQKAM2sz%2F7JSKb%2BMSq7w2VQYVlOiWGm9mSpvBhMXZ2DGcYt03kifM1d70irW4xMdJkBF%2Biw7iDPyxoQHm7qWhOJUipvKRqNCdcp2mAwDklBylqspQaMM3vuwNvHzbKRSGYpZUksxBfkDgrFrFmIi0NDg73ALHcWi9iZmJmIKeauc3RWZnxfBwghCTAH5AD%2BmhOjs%2FDsIajiJH0T9WfPQJxKdebh8%2FPE7ZMFQLauLngDqZKKkkYQYe4cwhBN7hqqEw3bHc%2BwFoBQq%2BcYwZ4A7N6NXbuwZQsmTnTtYMECQbUpKYiOxr59grYcgILy4ovYvBlTp7r2GhiIVaswezamTBECVFTkKGjjq5%2Bfzs8vDK%2B8Ylxj3DiHridNwsaN5Cexu7festCAMUuvErCvr87Xd0rvV76CHTtAoXKCoCCsXIm0NERGwscHxcWhCM1F7k7sJGVT75xMnYM5NLJYCELewlvDGLY7bAu2vIyXt2N7hLpaHYBsS0tDGhlhP%2FY%2FwAMng3Nycnbt2rV169Y0xu8K8RLS09OTk5MPHDhQXFxsZ9CzZ6iqQm0tkpKUeLhBewJgBtmeZqfLSgB0FvRFt9QAc5uLkv0ZgIeQCY1S%2FVXga%2BRe1af3gdfI%2FPLyJHmSNgszL8%2F0ndeARUIB%2BM1vHHkn9Uvsryp4eqE1mkW6HOXUgHa0T4TxRvNYaPYFwBJkf5q5TXVhPPfvm3suAMttkji6ZAmf%2BR56CEKQwvt8STQKmg0vkbJolAFFA6gHWjLiGOMlAZhhU1S8gModJPsPW1xHseNO4Iejz51HsBGAT30Kn%2F0stm%2B36n6CJy1o6Uf%2FeIyfhEkWN4Rsu20bQkLEy5tvWu1PBin3858Xle3ra9Ffi9pmNPeilxUcjOApmBKNaOUrqe8LX4DBIG5fSYmjLYgM%2BvoG%2Bq7bw8gNOTma9j1tmoimvR2PHzsRLa9CxOnnF%2BE3W8QpVFMLoqLwmc8wwkC9fk%2FNxs%2Fis8ul26YF67GeZdeGtoM4aPcrve3BHusPvANtbRgYwPjxQiOTk9UfF2BBGMJYA2%2FgjTrU2V135cqVn%2F3sZ%2FPy8sLDw9X9XV1djY2N3d3dfA8JCYmLiwuiyJkwc%2BbM6Ojo4ODg8ePHnz9%2F3o5fsjA1wCQApGlqwBmccZIBhwJw6pSTWaxti%2FLmujQZFVZP59Cp3nmhts%2BQ2V8KqRvUuQ8k9jfjo48wfbqwBQtMXVlZRg24dUtnI1rLsGwt1mYgw9x%2F4waOHxeOLFGGMmrACqyQm7IAFBW53gMHWghAGT2VWQ8yyHsdrQboFG8XPZkegQg19Uci0vUcUszmzUYZoADISlBe7ln8qZL52%2BRDLQB8owaod2wwzZ0K1Jid6S0eYwZLAdiwAS%2B%2FbMX%2Bl3CpBCUVqKAG9KHPBz5MNKuUKWbxmcetWoW%2BPjx9ioICqzVYzS%2B9hE9%2FWlCKgou4eBmXy1Guh74HPRSAUIQmIGEu5r6AF%2BhfHubvjx07BEvfvw%2BJOuzDz2%2BXX24uTOzPY3yAB01oYsBkq3CEJyJxHubFIc48hxqwdi3u3MGxY2OcZJhq28%2FXd7cv45TZv7kZt2%2BjtlYkbXBQaCMJl%2BSTmYnYWPNU0ujGjS%2Fev59bk6uwPxnp7l3U1wtpJAIDhVKkpAi68FEd6SZsInvdwZ1qVKujYXq3Ydtu7LaIkaxx9apw3dIiBICOJk8WbESnTJTOeD1TkLILu5jbf8O%2F2e4zMzMzNzd3z549pHKls6am5uLFi6WlpY8fP3727JlOpwsNDU1MTMzIyMjJyeGLaaPhnDg4OMgxt5kZK8hETDaUQPanBvjBbxCDlmRrvHaxsTpSfXQ0XzcCf423V%2BLzQFycEAAmi8m3MwmsFmsBoOrQZOSLnxNWtO2C%2BokVW7D9c%2FJl2SslBDUf4INzQgCsQfaWNSA01NQlCwBNxRwElZgXcA3WmLtYDZxPs4E03ywAU6Zg1izx29hoE7OKxsmhZH%2FeHZWjUjsCADXnwQMZ0Kn9uI94xCu8z99gBNuOGQBuiScveyarw%2BJbQACW824tF2wga4CsByMj2tZnkT2BROIz7G1siCdnMJ4dz1A6RqsKMYqHSgBEqf0rxhwqtiB%2FbNki6NYEsue7eLcQhRdwoQEN6mkTMZEJ443MRe4kTDL2btqER48EVasklDRC9qBjhf2ZgXfwjnQBzj2REqfGbMym2OzBHvK13BMTI47m0iUUFTnaxQY%2Fvxf9Vq9m8VBReAMYMMudMfeil1eaEfJOLcGS7di%2BEivN85YuFax38qTQ5TGEcti7hQCwUIkTJ8R%2BSkoEqbW2CsL188OkSeLqL16MzZuxerU5zIyMLUtWr7mwBg%2BEUhw6hNOnRX3W1KCjQwyYMEFkafZsrFiBXbswdap5be56IRZaCUAOclZjtT%2F8zV179wrlPndOsL8aYWHCKRnwU58SUiSBIs3p13G9BCWWY8O2bt26c%2BdONfufO3fu8OHDp0%2BfvnXrllVeFi5cePPmTY7PMSl3SEjIiy%2B%2B2NTUVFtb2yHvTUFdnchVZ6cISeRURw2gUentJpw8P8N4HR%2F09T0IrDCdu%2FxBEgBbyOzvo9wLLsdFubSM36EWwjRTv9Dar2I7C0%2Fx0G%2FoZ%2FHT2tBmO7%2BhwagBublKTElGDThhoTsy%2B5OjzV0y%2BzdYXFVj8lBXhrJ61JMr5Z60NGEqAbADsj%2FN3NbrBfvzjtuFQdm9TiOd62w9uIlUpKqpn5fdbkpv3sRNCAN%2B0ofM32JuJjJpPmoCJOaytOeKq8fbpSgBa8AFvgXcpTbOCLyb2tdnnQxgWPCLkWHI%2FsPDdvROFoATSADSgQzg7w%2Fg44Bq%2F6tWiTojDZlAmn4bb5%2FBGdtp7WhnBbeghWz%2BCl4JQIDxw8qVuHpVLQALFgiajY83zy1AAd2egKqaVYVwD%2Fc6DB1BCEpEoiIt8%2BcjPd2RADCHP%2Fddu%2FMKcBVX92HfYRymMkGV%2FSY00W7jdg96whHOQzZ%2BCwnBrFlITVUH7BD%2Fn702gYoyTe%2FFf4UgqyAgAgKyWSAIKO57gwuYRnvz9Myke5LMZCbL5D%2FJyTmTfzLn5CZxss656Zzk5t7kdrpnMhm704vYxr0VcAFBsVtFFFRkEaEKEJBdAVnq%2Ft7v%2B%2Bqrr4qqogpReyb187H43ud93%2Bfdnuf3025TN4NkfZksO1cPcb%2BHDuHjjwUJkPdVjIyIcqQx58jCPj5C94Bo4FeorWt3keiYRx98gE8%2BQUmJVeiBAWF376KuTmTY7%2F0eVAbORGYa0lgYagpSvOmkWebzZgsLcfiwnV0z%2B48fR0%2BPEPDvfld1U1R4jTYCkJubu3Pnzri4ONVz%2Fvz5%2Ffv3FxYWDg0NTY199erVhoYGEr3JZNosHZbg9Ly8vNu3b%2F8XBckG1CEaU0pCAhIUAdDZ2TipyywAzXfv1sXV9YTpwsSryQJQXm7ndU2KAFicZP8GSy65mB0qAhCwR2L%2FEISoTpn9SceOAlGFmZLUAKa9AlkAaGbCJi%2BT%2FXOQY5lGkqNCcLIDSPNrtALA3D971t7mzelNjbASALJ%2FrcNtC5hsItlXAp2jue6A6afy%2FgqssDvm%2BnWJ%2BquUDykFz%2F8vnGcGyAKQJSkBqcZqWiLTKlHIgKoB1IPWVsd7%2BUOgPi6uRv%2Fdm2G845s3bfhECIBuQj4gv1ihtpg%2FPzojQ5%2BZufCzjM7OTEkD%2FqeddXQu347Ll2kWAGbc%2BvWCFswgQR%2FGYbvsr6ISlfMwjyn1Kl5VXOnpQkIXLkRnp%2BxgHjPVVBhhLEOZI%2FaX0aZrK0XpOtO6XdglexiPLxIWJojIHn5vx1zcyrn1SalQrG50272FQQyewqllWGYRAIL1TsJyTQBmCss%2BfGgVFUIADh50OPzxYxw5Ig5MpgsIYMVfARYsX8CeEyfEPBv21%2BL2bRQXi9TOz1c8vvAlo8UhrhnNsicGMbYZz%2FooK3N2gosXERMjXnbtWtmRjGRWyVzMfYInsicyMnLTpk1bt25VJ9XV1R0%2BfPjAgQOPHj1yFLi%2Fv58DgoODo6Ojk5OTZedLL71EbaisrGxvb7caLdOxWQC4AWqA3bChoYLk481MTgF4fLduAzZIW08WfdT%2BwcGpExnQKqarAmC%2FNGX2J42qnnKUk%2F1LUOI83OnTonBo3KaAv7%2BiAR9%2BKA8g%2B2%2FHdssEnoXsz2mOIZF3rVpTfE8WZnQ0bO7YcocIJfsnIcni4gacC4Cz%2BzG5S2IOAulU3qdZ6ZMZ3d1WvD%2B1uO8yI3D3c3yulQGaP%2Fwtg8LDRRXJMkABkJXg1i0H%2B9KnpOj1mwuwWxKAGvOv0ci%2BcZDzx%2BU7EF%2BqAHh5CcrNyJB%2F9bpM%2FY3FZuKcKfVrx7sgA2YB4PHNdUX0oY80PW2aEmdxNhvZW7AlDGEWLUlKkgTgLFtk7YXMMHOS8T6a%2BE%2FFdvthb%2BFWg65Be4CICCxY4EgA8OT8k5M4ScWysL%2B9W7iHe4zcjvZoRCsuagtDz6DEdW7IrAWjoygtdV6oAr29InNra3PXrGFrteR78ECw9LRTmfSUAVUAiEhERiBCFYAgBAUj2GpLDx86vFkVN26gvl4VACIc4Xz0DnTIzezs7NWrV3sxp804f%2F786dOnnbC%2FDGrAqVOnUlJSVAEQR169mgHtC4AZVDJqwDzMo7TbxCTD02SYTEKKHqkCoHazqq3hDW%2BKJc19AbCDrdhK9s9Fruph5pP9adPObW1VNGDvXrOLmSBrwPXrjEz21%2BqKwv6c5hgsjRrUkPh4eNlDAUhLcygA5FYrem1qEuzPLHxBCECAlvoXY%2FHUMcx8LfUzr51gCEMVqKAxi7RKkAxLHmLuXGzcKIw3L2uArAcWFldA2ktJmYvYlYJIubBGBiZuPpkYnJCHcd4EPxMTtdQvjFnZIIJwQwoOSfY0cEE2JAHQ6UQupKer3mpU86CP8Xja%2BROYqEUts2o91iuuRYsQFSV97eN%2Fr2phmvGwvTl76EJXD3q0JBsUhMBAh%2BMvouI8zpPfpxVDI4zkLIsAhIQgOPjprtkdXH2IL5vR3e18lNjs%2FfswGkXZm8Hkrq4WdOYcjN3WhqEhcWMySPdaxp%2FEJM0ywdcXfn7w9lZz%2Bkd24%2Fb1oWHQum%2BuD3zURkZGRlZWltq8c%2BdOZWUlf125ldra2osXL27atGnZsmWyJzMzk98nT560Gvf4MRobBRMlJcmOBCTQbuKmTUCtANTV4e7d%2BqHhOwMYUO7BgQDI7D8Hc5Q2qZ%2FLDQ9Pt307daaHnuxPUz3DGJbZvw99rtzJuXNCAGhkJgWSAITXtG4f374N2yxDmRZkf06Y9p5RSw3QCgDt7Fn7g9lpJQCkMwrAtDA54h1RzDpnGe8Q4QhXeZ8fC7HQZsDgoBXvV2sIxxWQN2incEoWAFUJtFWj0HRuriIAshL09kp93eHhC8jdsbHqjsORk2PKydExsBCAmxM1E3KSTkzkjusz8LqgfhMDzpunrsC3ZhCy3KNHovmGRKCZ7vG5neu8KcVxJCWSALCIqEj%2B%2Fqq3DnW3cdtq4BcOF2tDGylV0x8qWFXggvrjyna1xyNDUVpMzBiKk9Tt5SXMAZ4Al4ZwyZWrGcQgld%2FSJvfRnhuuUQNceznmVn%2B%2FtstgEKLg0hkHRQ6pAsAT%2BsJX7e1Hfy96rSaQBtatQ0WF3PoLu6n2QBZ0%2B4iNjV2yZElYWJjqIaffuHHD9Yupqqq6efOmKgChoaHJyckMa%2BCxtSAp08wCkCgSN9FGAJjIWgG4e1fYoBCCOtKHcMndPj4YG9NOlAXA0ib7c61pYOeqAhEos7%2BWQWT2ty0rpyCryxpAUpD2F08N2F5j2Fa0LZRVJoMvzXE0F0D2p3FjsnKTsPjyUVHo6LCl7XmYR%2FZXpUJ%2BUZcEYJYR87rE%2BzL1c1c23U1NFt6vqtK1tWk7Ta4uIh19BCNf4AtarClWlgFZCSiElpEiQcQrKAJAO3QF%2BFu9fklKiv4eljAbrXaQmKhLTBwvKBjnxUtJOj7%2Bw%2FEfZmDRoqmbG8e4Xl%2Bv1zdcv15vd5umZ3C%2FkgBERyMmRnWNYawVrS1osRrouPhJqe%2FhkcbhK5mrMGk%2BdDM8Bam%2FEuhxZSh1hWZpOxWWWcYtif1bXRs8znwY1zpY6WR2l84oHdJyROmQapMv24hGvrLMAgJ5eejqIuni8mXx4f5bxMXFLV68WOtpampqmJ49Lairq7MZz5gOBYAblpCABJpNKJnedeYDyAIwoBUAUr88yJrRbAVAXsshHN6QzP4kUNVzARfI%2Fmdwxq1oLS0oKqIAmN54A%2FKjZGzbtq3GsLlmM4zmaaR%2BDmqxrlYzbChjGMNkcWpANrJlDwUgLY0CYDuRm9fuX2H%2FgQHrUfk7gDlwA%2Fl2P%2B2B%2BVsi%2Fv5KMtb8PtYGykxlvqgnT7S8L8xayrVX6pQ27b2hQcecM5zCKbK%2FKgP8DUe4Eo%2BVsnMntuZi3xWppL%2FfkrLoHb1eDz31Wv31h7%2ByvJdXYRZjiNnjL%2BWds16uBz3Ms3rUi199va%2B%2BAdeZdb8JPvp8zA76gEP88%2B9Te6RrDQ%2FHggWqqxvdXeiyHfi5w%2BANeEzTOOZKNh0SEkyLFol1g4MRECBqUqebqQZUSvaVR7qULS8aZIGruFqO8lzkKq758%2FG7v4v0dFy7hlu3UF9P%2FjYZjdZv8QD4nmSYWlQRERGRkZFqs7e3t62tbcCWL5xhdHTUaDS2t7dHR0fLHgZkWNtxbW1obERPD8LCxLqISEQiK%2FMhHqpDZG6X0dws2L%2B3F%2F2SAPDscllOFQBveFvJSXe3YP%2F2dgf7dZinL%2BElsn8OclQPC5vsT7NMNbka7cwZCoBuyRKQQDhtm7%2F%2F9m3bUWOec%2BOGYP8zDnVlalyyP7lcKwC0czacRL%2FUo5lWYyOWEvbx%2F59N1QDHZbxP%2Bfv7zmRKYn%2FzyPXWPf9gNH7z%2BvXrVVU1Mu%2Ffu4fpIG9lyOL4sWTTYQITsrhEIUoIQMhyImt5VuZPM%2FEdeYi3tL318Pt%2Bm76NVorSeZhH6tfrNEoQo1%2F4uwvf%2FB2RrMR2%2Fv828B9oRjMTQ6F%2BkyIAY%2Fox6DVX9YezoQF96m06EoB58wQLmzGAgX7Wixt4LJkKpwLAEsvONqWlISkJsbFkDoSEqAIAZ8njBH8C%2FPCp7%2Bm54OYLXd1MPWdwJhnJYQhbjuVK15w5yKUi5Ap6ZVqSOFtaTK2tuH9fR4%2FRaK%2Bofqq250tQmxSAHnK0m3j48CFnqQJgE9MCUTUNWLtWblEAaKoAMIm0AkD2pxGTmKyTNGAFVoi2dpAEUn884r3gZbWKHdyXKtg%2BGJTsT1M9j%2FBIZn83a8qC06epASQV%2BPvjn9leswQf4Nf5MTws2J%2Fd7uAWblED%2BtA3X6KWuDjB9FFR6OiwjKFGpiKVprS5ENnfjgCst0vSAiZNmthO0Etmn%2FplVDja%2FX%2F8oLeqprfqet%2F16%2F2D1wdwHRrhd4ogzfcPJUb0c%2FHGQlI75i%2FvCF1RFLo8I2z5csSwZP5%2FqxEp0oGkxBnE4DXdtWu4Jp2Tj6ZfsnvJtwr02RHfN4%2B%2BeaigvsHQ0FCikL4BBkuoQCnUEqZfnOKJc3GbjtHnrFMSAD8%2FYWaMYITmzgrDLglAWBh27tywefPpNWuQkYHAQEfhTDM55YyE4%2FnjhW9T0oAhDH2KT00wvYJXcpBjNSCZ0pAsPpgFFIB790wUgLo6XU0Nrl8nSWuGfkf9CggICNQ86NDQ0ODgoLtbeyRBG5OwM85aAEjctCu4IjdlYlfnqQJAWAlAcLAYx5PydBLI%2FjSrVcxdLmIe5snszw%2FVKbP%2FHdyZ8YtRiyUN2Pjaax8Bb8nOXUDj6dMX2cFuN0EBIJ1vwia5SQGgaQVAZn%2BLFvLpyf5jY25v3W4lk%2BD%2BUzKX8A%2FAWsl8RetbyPg2uSMjH%2FnXRToqRlWbZg%2BPJM5%2FxwWNMiM0FGR71VasgJdXjbg8fGgeMgqRdVe0iqaNR35PKajfUYDs7Cjg%2ByjHe5vx28h8efe33zXUXzAM3LljVZWW%2B6E14PlAEgAvvrX5sYEJTNDcCTIqaQCnzJGatgIQyv9paXj9dbz8MjZtchSFi5rka5Av8c%2F5ZnOg03m7uo3nTq66GenVV0EDAKPJ%2BD7eN8BwG7c3YINCi1r4%2BUGvF0Z0dJjIAteuobISpaW6nh6bsd4S1OaoBHf3NTY2Nj4%2BrjZ9fHy0MS0gL5OdmaRzRL4lIpGmdsoCIIOkRvZvb1easgCMY9xbTnt5qF0B4DbkVdyBzP4MqnpKUUr2P4dz9jPHZdwsibyxJH%2FLkvzwDMWTX%2FOw4fSNxpKbD9y9ZYDsTw1QBYClSQE4f94yQFKEpZoJnFHr%2FjrKKd%2BSuFdlyHqp%2BZH07ULpvIO7a%2FFPa7FmjZD8%2BfPlORGI2ImdtGpUCw3QKUrQhz7LVJcK0zS1knkhpHuV%2BqOjbed0o%2FsKrtBuqwKQYudZObegQBggUrC0qLQ4Je23Fy7087uye7fOaITBgKGhKRogR%2Ft8QHYPzODe3YH3LMUhI%2FQCC8xHCQD8qQrKjbLMvvlNfOMbSErSzqFu38O9B3jQi97HePwET4QAWC5xjpQq%2BGs3tvEiyFU3Iw3Ai5eBIQwVorDKVLUWaykAy7CM5JWEJC942Q6OihKWm4uKCmRmmk6cwNWr2u2bJDhqurojCY6aFlBayM40iemDEZyAhEVY1IY2WAsA2Z9mmYdRWQN4UqhDP%2F%2Bcnz7wsRIAUj9tbMzO6rlSVm61fcEc5JD9X8JLqqce9WR%2F2tO%2FVT7y84vyw5eEwywA4afD6eEt7Md%2Bd6M1o5mMzuvipbEZFyf4PjISDyQx4VWkIpWmjH74ULA%2Fr80OKmz%2B2lC%2FBQtlBdgkjaQEdGIq79pHB44eRWmpYH%2FVmIpmyCydb8qXBUA2PrGbVyK2EB5uIX1ZAKaiCU1XcVVmf9qAzM8%2FlswaYWEK%2B3t5ieAduo7i9cXFKa26b36T7SVLTAUFOgrAJ584ujVBfT%2FDM4ckAOPjwsxg%2FduhgGkQBARqmqM05V39%2FfHKK3jzTS37X8TFcpTfwA1mMBORAvAIjyYxaX0Ffy7%2F%2BWv3dvILogEvaKfAduCMtt2gE2x3CqfSTGl66BORSB6MQUwc4vg9F3MtQ%2BfMwdat0OsFW%2Fj5mSgG5hOMS9AMnOPt7e3uznwlqE2bmFaQCdrM9NwnNYCJRAqnj7Ung%2BxvQ1ykhju4owjAwoVidEwMjEYemREsaS%2FHdxmkS7I%2FTfVQXGX2H8Sg06nUk3POg2%2FERgrAuqZ1%2BIHG%2BwOs%2B6N1LB9ulNXk7lXXoIYmCwBBAaDJAsDPVFOq5d3J%2FjT72Kf%2BaGGH%2FZUxxeaPf1U1wKXq6e9HcTHKyhQBWLNG%2FCYmqv1RiNqFXbwlrQzQFIKeDhkZFuqnMbunohrVMunLAmCys2Urz%2B7dgv0XL1ZOWMwDVBb3p7SKlOPmgZwcEwXAYNCVl5vs3d8%2FHsLzgFSlIyPCzPCFrx%2F83AniJbG%2Fv7k5BjwB2VzGli3YsUOwhhmHcOgzfFaCkk5NEthLnBnDowHOcQHYbLNwD3oqdGT0Ch%2BTz2IspgDwNwlJKUjJRGYWsixDo6Px9tsiYUgYDQ3yCR5LUIcESHB3W0ES1CYDDg8P2x9qTdAUABp5kMVlFgX09Qn2b262mkf2pwZY2vIEo5HsTw1wFN85ghEss3%2BgqAIFpP6jOHoXd51OLbVDn9aIRCR5jSZn117g9y9cyNnyv4ED9OTr8rlRysADPHDrqsn%2B5PU85MnNtDQhAKXcjiRm1ADLUGcCwCJ2YbG3rGZM%2FXIVo6O4cEHY6tWKEtC4dTN00GUjm9aGNq0M1KPebryICIXxV6wQv5mZdsaQGWXel80qeSz4HaBAYjwvub1tm2D%2FjRuV7su4TAH4Al%2BgqEVJufnzIYmEwSBkQJOlvcDPgaPAZyRKPHsRkARgcBADFqmch3k0d4IESQKgguw%2FamnxRdatU1uXcIns%2FxE%2Bso3hgAdNz%2FwGZgmUv78AfvSit%2BEG5KttlDjoQ9U7phtrNDWSU%2Fg9B3PIBayojdhIDqIeKINCQrBrF27fVlmyv7%2B%2Fj4xrRmhoaFhYmLsbCg8P50S1yYAMa39oZye4R%2F4uXMgW6ZsGM5%2FLuEv2nUK%2Fj%2FCINUwjzUGdcO4c2d8iAO3t4lzd3S5uW2Z%2FPfSq5zzOUwBKBb87v%2FwyS8tB%2FuebBPuHIxzSkODu7rQzZ9JSzkRGsmUKN4Wzl4%2B1X7ffrfrpQhc1gMwob3vxYiEAvMuuTh1vRrkcguRE9m9pwVcKMhuXlQkBWLNG%2FK5cqe1fhEU0yptWBqpRPYQheUBWlkL9slEJ7F6RlvopKo439G9AKy9LkoHFTCiyP01GH%2FrI%2FkUoEo2ODhQViZR78022qALUAKMR776L8XE6bgHHJKt4bncpCUBPDx4%2BVF0LsCACEe4ECZQ0QMWoRQBYVnq9LHfK2%2BEKy8M2gIPs%2F57ET8nP7TKeBqsl%2B8WDr2TW0CnEMYGJWkEAtddwjQXwm%2FjNRCQqY9LTsWIFoqMFXbJauro6ScdmREVFLVq0aO7cuU%2BePHFxHwEBAZwSoanFTgkOJ5CjaZIA%2BMGPG0uITEhJaWbpyyDNTxUA4dcKAJkvJWVuWFh8j0YAhPw1urjtXOSS%2FbdiqzY%2B2Z%2FmeJLJRZ%2Bsu%2BuwTvUMnDlzpqQkPaXnrbcUD3u53QZTw0VchDugAPBlVd1KSxMaEN65lDcTgABlkHj8WrfC6pyf2oHU6RxKlZMD8AQ1KC0VAiAbxcDHR%2B33hvdqrKa1opUCUIbr7%2BB6Hg6t%2BGOF95ctsx%2B4CU1a6h%2FEoAu7OSkJgMHfv6CgYCPZPzBQ6SD70x7ggdKmblEAaNwBkJEhpII6e%2FjwWeCoxP5NeI6QBIA13GbRN5ZTHOJiEGOE0TLwaw5DLEHgSpiPKyAJwAHpk%2FUZFaV2DGPYAIOtljpImSxg%2FfNl%2F3Ehw%2BOWNpNp7lxXJ6%2BS7KuN9cp%2FLYQAVE4dugG4ZGndwi0veCUhySIAkNgzJkYWAKPR2Nraqg2QlJSk1%2BtrXaaPJUuWcIrW09LSYmBlOIIsABs3yq0EJCSmJFIA5ObwsGB%2FJwJgaaekxNMq43VqIsqRXcBSLCX701TPAAZk9h%2FCkINJrhJdJCLJ%2FjSL6%2BZNnDlTWVGRnqrorwyO4Y4pAxaWcQGkdjIoNz8Hc8RZeJilCCtL5V%2FNoFpBsl9lyGpNViX7q0owb552CNksDHFl4iav%2FwkFwAthe6XEn4JqVGup382t3KAA7N7dWrDekBpbAIkSb%2BAG2b%2FMVGbFclSE1FShAf7%2BbG3cNWAwHKNduUIBGH7O9ycJQEsLmpsxMgI%2FP9lLhUpDmpUAfArcth8iFKG%2FhhANUz%2FC3z5WPgMCLFIIjGGMZjVZ53Bn66eS1TMG9ekxHocgRGmH8DPEpZnU8tXAoue7Xfexj%2F8DTPjjSY3Prxj%2BlXZHn4aWfEgWZFRekT%2F8LfdjrjSSdUNDQ39%2Ff4j5xpYtW7Z8%2BXLXBSArKyudrGZGX18fAzKswwly5T95Ios0lSkpJYE1JUNm%2F8lJO%2FP60EcBaEIT9Uy0zQKgdFM6XBMAJofM%2FgEIUJ0y%2B9ej3sEkk%2BuPRVrfhV3hCFfaExNkf2EQP2mszzT4SizGMRzJ69iP%2Fa7Hf4RHsgYsF%2BmL%2BHghAKERqaldqcqI%2BnohAN3dmAWYrD51sxFSCyO5yihkQNUA6sHChdaDmCdrt9mbzay%2Biqsq7zM9ZraLDegpKPxge7cBBgMKCkZS48n%2BNO2pxUXcv4%2BiIiEAr7zCtUTO7D52xVAGA9Ax2zczHSQBYKHU1eH2bWRny17mxCqsKkPZEzyxjE2zH4JqkYAES%2BeFdnR22h0ZhKBgBHvBaxLm0nSQDauxeiOSUuxnyqynjwJSAy0a0Uo7OhqxsWqvycnaG5ZhTewz2tUsQvD54CDGB1Gg%2BubdRBQlvBe9006nOo5gxCIA1rh169bNmzc3b94sN8n%2B69evv3z5ciNpejokJyevW7cuMzNT9TDUNOJBQpSZWpKNxJDElJTEpCQWuchYWQAcgVVHUwRAr6duJAQk8HgCrrE%2FIbP%2FEixRPWdxlsXMqnEwww3234RNFAAymcVVUiKsqQkSgVADeO6XX1Y6OZL7pgZUoML1Vcj%2BqgAQaWn6%2BUtTg7uClW7eP%2Fvdgc7Fg9urep1bF2QXPT04dUrIANlfVYLFi53M6ESnTPqyALShbcaLx0FUlSisc%2BeEABgMxQW5xduLm9FsZzR1ISWlNCXk6NKjzJn6qHrspowBP8Fzhpfy98YNVFWp3gVYsBVbd2DHtPPTkLYBGzKQYXGxuNSaHxoSjGNZzIsFYzUYdp6dY1haecizt2Cua%2BcyzaD0HuBBO9ot7YgILFtGgpgmUn4%2BduwQev7UMD19iGnR3o7WVq2Dz0G5nXaeH%2FzCER6CEIuLL8v3NaOqquoKS0mD3Nzc%2FPx8Hx8f55G9vb3z8vJycnK0Toaq0iSkfWjIWpeiI40DNJhMLgmAfOG%2BOl18Skp8SvzUmE6wHduZoluwRfXcwR1WMs3BDDfeNhKRZP98Sa8V8MlI%2BTQz5FazhlvkKZzr%2BkJk%2F1rUDmBAbi5dmrp06VKlj%2FpKAXCuwc5g0thM%2BmeOx49RWop33lHsww%2FFa08BxfJTfPr3%2BHvZjuLo07A%2FzOy%2FQG7U1999993id%2FcX%2F7wY3XaS4BHwSXHxe0XvvTf5Xj3qhWu1NH%2FXbN%2FGdPBW%2Ft65g8pKrF%2BP9HTZsQu7qGJMjnKUO5qcjOQ38MYu7a5ZPNeuWQSgowNGo3YK1WIndnagg9pr52J0WId1LK038Wb0j6K1yeFF9fAqfaZ3cR%2F37%2BGelWvTJlRXC9LUMJ28KR3%2F%2B%2FoiLw9795577bU5M17VJMd6XjAYcPu2%2BI2NlR1U%2Blu4xRe5iZtO5uUidyVW8hEsLrJSu0UvjUZjeXn5qlWrtmxRaDEjI%2BO1114bGBgoLCwcHR21G5by8LWvfY3DOFh1Ms7Fixfb2qYrSKaZnGm8w29SghMB2l2Z%2FckDjtCFLvJ1C1oWYzGJnwIAyneVdUzHSEMaU5SmevrRTwYh%2Bz%2FG1FXdZjiZyim3FpfM9yMjqmNsTDhYrN%2F5juLheM6ifO3HftfXkjWAVcnvhITU4LRUhcNk9n%2F0yMU4uqc4r1pRuhnOtxvThMuXhWVlYe1aYaAtZ8914Ao%2BuIIrtKu4Oiur7ZbYe4XGUzw8XHzw4KSBFWfbx%2FQ6Chy7e%2Fdc8V2ReLs0UeTxNbOyKZfgbfmkbGZmIjUVcwSbsdS%2FgW%2FMwZyFWEgNsOJrwB%2F%2B67E%2BD3mv4TXKgKXj7FlcuGBpkv0pLfyNiZEdHMywvvA9h3NknCEoxDoP81iFq0yrtmALw3JR4dVRuj%2BUrNnX10S%2BdQdmZnU5ocj%2BzPp2tEcjWnEtW4avf10QfXm50LaBASFEgYFYuNCUlITsbGzdil3iAUePj%2Fru%2Fhnw78CXM0vj2cl7V%2FDFF7h4EV%2F7mtwKQADlltVXhKJKVPahz2Y4b2MzNpPvXsbLFu%2F9%2B4IgKCQanDt3Lj09PSkpKcb83Dt37tTpdGFhYWfPnq2psc3rZcuW5ebm7tmzJ486akZHR0dJScn58%2BenP8jDh%2BJRqBOLFjFHUsYTJAGALACaG7UjsHWoo1EAmGFlFIBPJS8ljQH7%2BpysOR%2FzZfZnCYgV3hBOUn8ljmWhMctq7PRPypXOWXs2YRN5nIxlcZHFSPbXrtnMra5GSQnS0rBxo%2BLhLAoAFawCFXANTHhqgCQA3O37YUvDKI%2BKANS4ykO6WUlhjQyUY%2FZw44awsjJZA%2F5RsH%2FLFRxijsziIscls4NKyf6Hg0R0OO35QSMALJrPPxdM%2FYaU1EAwgr%2BD7%2BihZ1Lyvh7gwTCGveEdjnDyeDayX8JLHGOJcOKEiGCTN6Qbsidp1IzVWB2DGP6yArvQ9QRP%2FOBHxk9CUhayuJy8rb9obPyz5E%2BAj8n%2B9AQFCXvW%2BBJfXsTFvdhrcZHiFy%2FG5s1oacHQEHQ6IQALFiA%2BHhkZCA0VY5bj5L7PXsdnM2R%2Fk12OemaorERxMRITsWaN7IhD3PfwvWVYVoWqJjTxUfjQrMRABPJd%2BCJrsIY5YBWEBH3pkk3gnp6e48ePR0VF%2FcZv%2FEYgb0nCjh074uPjV65cSQFobW0dGBgwmUzBwcGxsbEZGRkbN25MTU1VI4yMjBw5cuTEiRPd3d0unYV8TaMAMGe8Y4H%2FSzMLwJT71TyLLAA7sVO8sL%2B%2FVTSnyMaeAuxhrorGDWAff85kCfYvd1fNyf77rD2RiCT70yyuwUHB%2FmR6e2BPerqw%2BfMVD%2BdSAHgMVqsre%2BBzUwA60BGFKOC38CuSl3lOAaC5gM2zwv7Wb8WYO2YnnBlKTpT%2BPdCOj2Y39i80vK1apG%2Bmkq8vCgpU31ZBgVuNMHajm7wwB3NCERqPeB%2F4WM0tKkJhIQ4ftl2BNMEKp65sNqcKEI3o1%2FE6PwYwMIYxX%2FiS3tVeUayNjX0ffzzwBx8HBzdKPhOZNjz8mV9HOcozkMHyprxZvAkJwhxBh2Ppx8bHDwEls1kJzxRHjyIsDHPnYvly2UENzkMezQDDQzxUBWABFkjUYA0q%2FfHjuHp1auCqqqoDBw74%2BPh8%2FetfJ8vLTr2Evr6%2Btra2QTKakPOgRYsWhcryaQa7CgsLOf3KlSuuHqSxUVA2M9SM%2B%2FdFpff0TDOvHe0UAP4yFS3e6QWAvLTHQnpZ%2FH%2BL7A9hMtx4%2FbIpHpn9w6FJdHI8raNDo2OWhbq6FA3Yu1fxci4j8Bj7sd%2FFbZDpqQFWr0zqr6nB5OS0c0tml%2F01GqAq3juSzRJa2%2FnzY8k8kOBt6%2Fj4Y0xMYGAAL7%2BMkBDVHSMoPMZ%2BjL4%2BnDolOIUCYBf%2F9V8IDBT5pClUGcFQOMIKZJbDh3sMhT09dRKHiPSKjsaiRc%2FjRo7gSAhCTDCtxMppBw%2FqBj%2FH55%2BNffbq2GeS4xeB%2FYnOTvznf2J0FHv2YPt2bU8sYmkOJz56hJMncegQDh50NKS0tHRiYmJoaKigoCAlJUX1z5fgaFZdXd3JkycPHz5cVlbmxkEoALTHjxEQIDvI%2FnV1Lk2lANAsAsCcJ%2FtTQJyheIonHfgnyZ4Wm7CJ3L0Way0uHoYEf%2Fask1mlpUIA0tLErwxGoADwXipQ4cq6ZH%2FaDqFtZlAAaK5iBBidftSoO3fBkH5PfaEeuABvO74DB%2FDggairLVuwerXgbkcYGsKXX%2BLCBZGmTuq2vx%2F794vflhahAYsXOxxpMOjKy0W0Eyc6lre3tZkSEpSeefOQnIz4%2BOkq9KnRjvb92N%2BHvu3Yvh7r4xBnd1gveq%2Fj%2BiVcKkHJvbF7L4%2BNYZzu8emv9ysCoxHvv4%2FWVty6hQ0bsGIFvJ3ultR%2F7Rr4OiUlzimJKC8v7%2BrqunfvXk5Ozrp162JiYpwMbm1tvXz5MmWjqKjoLilvClqcL0bWpmUp0kJStxfDTiBZAJKQo7QfSloyDVpc25PbiEIU2X8zdlkF5lXTNGDuxyt%2FW7SjhAAEWYbtwmbpMI0d6Jh26Qd4QL7nYB8kS44uwf68UpfwQ2Df9KP%2B3f0bYeAfz9LleuAYDmq%2BtFQkweXLyM5Gaqrg3YgIwcFz52JyEoOD6OxEc7PgDpLCpUvo7Z1mHU758EPcuYMvvkBWluDy6GiEhMDHB%2BPjGBhAe7vIuRs3xKI04F7wz%2Bvq9jdsNEfYD%2F%2BlyE4UAnBJcdW4dMRLLvosoAb8G%2F6tGtWrsCoFKbGIDUWoL3zZNYKRfvSzrprQVKur%2FRJfdqM7ZuxPx%2Br32SuEAvHzZLr1nG3pkpsPasZ9yZzj8WMcOiRecO1aZGZiyRLExWHBAuWhTSaMjoqn6eoSyk1ara4WT8OndwF1Eq5evbpq1aply5YlJSVFRUXNnz%2Ffz89PXOPISF9fX3t7e1NTU21tLYdduuTwpNMQjBCAf0KW9E26uytSyZVALWi5jLrL6AYWyIFcYD0pxH9g1kH2v4f8fQjT%2BM6j%2F4womelOUl%2BPM2eQXoXtZg%2Bj5AONyP85fu7K6jWo%2BRvUQhGAWhhrXN64CyT90exflwezBW%2BHPd3dOH4cp05Br0dsrMIL5GsKwNCQ6CUp1NUJ%2BnYdV64IS0wUFhmpBJyYEPLw4AHu3dM1NpqHJtbV7furSoACkCo5fp2yJHUo6V%2FjqgBM4Y%2B%2Fc22zlaikRSAiGtHzMV8WgFGMUgA60dmus9DMuPFvxv7GbowvBfvvm9k2iQOYGe67uqgAhZx27BiSkhATg%2FBwBAVZBIBPw7c2GgU58qXcxEUJcXFxCQkJkZGRISEhvr7SNY6O9vf3d3R0NDc3GwwG50F%2B5ry78ZowGXclcznQz1AHkGE3S60Gyabbyzk8A2z6uWDstRoPVfaMZC6d5MwRpENYtNnDWI3SeSpcWL4StZWimnYDXkIAhM0aPvJIwFcY3tP0k99v3xY2i7h3T9gU6KwHif8XgQ1mAbDpQ5Gry1kPLHVzs13oojnf6xjvydHaM9wmYZBsRihyf8rwMGprhT0DtEp4FpEF%2BoE%2FlmwmOCmZGzgn2WyjQrK3Zjx%2FCPg7yWaKQeBPJfPgvxd0pqec77BnM7AP2C59m6TvvwR%2BDfgWsE0zbAT4F8nu2Q%2BzR5q60oWtXJNGHpO%2B%2Fz%2Fpe8EsXVK3FO1fZimaBx544MFXA9723fHxSElBVBQCA2EyYXAQ7e2or4fBYDNQpzGrph90kou%2Fsg3p8N3xg3g7CKCtNQfwA%2FKBhp%2FgXTvb%2BMmv7pFGu4ghM%2F%2F%2F6jO4qY%2FVHw888MCDXwpMEYC4OGzfjnXrkJ6OmBgEBQkB6O%2BH0Yjbt3H1KsrLhRKYMQn8lV0BWA3dHosADOrwlzrs%2B8EwDhfi20H4VhBC0s0xMr5A3j3Un8EZ2838ZB9%2F%2Fsg1DSD77zN%2FhwF%2FMKvX9M%2FKX48AeOCBB788sBaAlSvxxht4%2BWVkZ1v5o6KQmopt21BTI7pOn8aJE2rnn9kN7OuLDXOxRXyO4smPMMaPmB8A3d0oLERgIL79bSxeLI%2FNR34DGmj3cd86SorVH6e4Zt2kBiyYpTvqnrXb9sADDzz4CkEjAFlZePttvPWWoHtHyMhAejoSEsSYQ4fQ2%2BtwZGQkIiLkz3700yxdzc04eBBBQfjWtxAeTkcAAvKQRwF4D%2B%2B96AvxwAMPPPjvArMAkIhffRVvvmnD%2FiMY8YLXXMy1uLy8sGcPFixASAgOHIDBYCcqu9LSkJwst9rQ9gAPrAbU1Fg0wNeXjuVYTg2oR%2F05nNOMu2vz1w30SOaBBx544IEDmAUgJwd5eYiLUztKUFKN6i50UQAWYREJegu2WOZt2ICAAAQG4sgR3LhhG3XHDmzcCB8fuUVab0KT7ZjKSiEAtLfflh35yG9AA60VreZB%2B8TPO%2B4fq0eZ6oEHHnjggSNIAhAejnXrsHmz6v0AHxSisAIVPYJKQQHYgA11qHsFryzEQmXQ8uUIDUV0NEpKBJu3tQnnwoXYuhV792LbNnlUH%2FooJDWosbM4J1JCqAGvvsoW1SAPeVSLn%2BKn5hEf49iMjvXxi75XDzzwwIOvPCQBSEtDZqbqKkXpYRw%2BpqHeNrR9hs9a0NKJzr3Ym4pUpWPxYnzve2JuVRU6OjA5ichIrFwpNMCMMpRdwqUxjNlf%2F8gRIQCUgR072MpGdj7yG9DAPcj9xyRzF%2F8imQceeOCBB04gCUB8PBITVddVXC1H%2BdShX%2BLLHvQMYIAasAZrLB2bNwsbGxMC4OurnVKN6tM4fRZntU6jTdyDB4UG0OLWs7UReRQAmnHKQA888MADD2YRkgBERCAyUm53o7sZzZ3otDu6EY0%2Fw8%2F60f8QD3dhl1Wfj4%2FN4Du4cxAHj%2BKo1vlbU4OOjqKwEBNBAC0DCAHy8lDPhV705XjggQce%2FDLD%2ByEwGRhoehI02QGTCcOTA32TfTDRC6tf2lIxgdrwPt5vRzt1Yhu2pSDFbtwLuHAcxykABhhUp87RLnp68JNCIFDSgARgFZAPNIgwHnjggQcePBt47yO3984x7ZszOSkEYHJyfNw0rjC%2BjQDw41MxZwITR3CkAQ3VqF6FVdSAaETPwzwddAMYaEFLDWou4mIRivrQ5%2FJOWoC%2FlMwDDzzwwIPnAe%2F%2Fw59%2FdXn4p5bPWtTSkpBEi0JUEILoHMRgG9ru4E472l%2F00TzwwAMPPHAG76ec34Qm2os%2BhQceeODBDPD%2FyoMDAQAAAAAg%2F9dCsAOTliDCA8QK4AAAAABJRU5ErkJggg%3D%3D%22%2CVe%3D%7Batlas%3A%7Btype%3A%22msdf%22%2CdistanceRange%3A2%2Csize%3A59.65625%2Cwidth%3A512%2Cheight%3A256%2CyOrigin%3A%22bottom%22%7D%2Cmetrics%3A%7BemSize%3A1%2ClineHeight%3A1.171875%2Cascender%3A.927734375%2Cdescender%3A-.244140625%2CunderlineY%3A-.09765625%2CunderlineThickness%3A.048828125%7D%2Cglyphs%3A%5B%7Bunicode%3A32%2Cadvance%3A.24755859375%7D%2C%7Bunicode%3A33%2Cadvance%3A.25732421875%2CplaneBounds%3A%7Bleft%3A.056159633438645884%2Cbottom%3A-.02437761405677056%2Cright%3A.20702396031135412%2Ctop%3A.7299440203067705%7D%2CatlasBounds%3A%7Bleft%3A488.5%2Cbottom%3A145.5%2Cright%3A497.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A34%2Cadvance%3A.31982421875%2CplaneBounds%3A%7Bleft%3A.049409125974004715%2Cbottom%3A.48691155587022%2Cright%3A.2840869677759953%2Ctop%3A.77187750662978%7D%2CatlasBounds%3A%7Bleft%3A486.5%2Cbottom%3A213.5%2Cright%3A500.5%2Ctop%3A230.5%7D%7D%2C%7Bunicode%3A35%2Cadvance%3A.61572265625%2CplaneBounds%3A%7Bleft%3A.037219103997511785%2Cbottom%3A-.02169206718177056%2Cright%3A.6239137085024882%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A66.5%2Cbottom%3A51.5%2Cright%3A101.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A36%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.02956531458715296%2Cbottom%3A-.12381369908983761%2Cright%3A.5324464041628472%2Ctop%3A.8484230740898377%7D%2CatlasBounds%3A%7Bleft%3A109.5%2Cbottom%3A197.5%2Cright%3A139.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A37%2Cadvance%3A.732421875%2CplaneBounds%3A%7Bleft%3A.026481776289942378%2Cbottom%3A-.030073418674698794%2Cright%3A.7137525987100576%2Ctop%3A.7410109186746989%7D%2CatlasBounds%3A%7Bleft%3A88.5%2Cbottom%3A144.5%2Cright%3A129.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A38%2Cadvance%3A.62158203125%2CplaneBounds%3A%7Bleft%3A.03225572125458355%2Cbottom%3A-.030073418674698794%2Cright%3A.6357130287454166%2Ctop%3A.7410109186746989%7D%2CatlasBounds%3A%7Bleft%3A130.5%2Cbottom%3A144.5%2Cright%3A166.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A39%2Cadvance%3A.17431640625%2CplaneBounds%3A%7Bleft%3A.028244602049502358%2Cbottom%3A.49895501673814824%2Cright%3A.14558352295049765%2Ctop%3A.7671582645118518%7D%2CatlasBounds%3A%7Bleft%3A498.5%2Cbottom%3A62.5%2Cright%3A505.5%2Ctop%3A78.5%7D%7D%2C%7Bunicode%3A40%2Cadvance%3A.341796875%2CplaneBounds%3A%7Bleft%3A.042983329377291775%2Cbottom%3A-.250029542422407%2Cright%3A.34471198312270823%2Ctop%3A.8227834486724072%7D%2CatlasBounds%3A%7Bleft%3A.5%2Cbottom%3A191.5%2Cright%3A18.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A41%2Cadvance%3A.34765625%2CplaneBounds%3A%7Bleft%3A-.003159248747708225%2Cbottom%3A-.250029542422407%2Cright%3A.29856940499770823%2Ctop%3A.8227834486724072%7D%2CatlasBounds%3A%7Bleft%3A19.5%2Cbottom%3A191.5%2Cright%3A37.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A42%2Cadvance%3A.4306640625%2CplaneBounds%3A%7Bleft%3A-.011208599684062338%2Cbottom%3A.27785390031593765%2Cright%3A.44138438093406235%2Ctop%3A.7304468809340623%7D%2CatlasBounds%3A%7Bleft%3A449.5%2Cbottom%3A23.5%2Cright%3A476.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A43%2Cadvance%3A.56689453125%2CplaneBounds%3A%7Bleft%3A.01353503347629649%2Cbottom%3A.053493525733368255%2Cright%3A.5499415290237036%2Ctop%3A.6066627242666317%7D%2CatlasBounds%3A%7Bleft%3A361.5%2Cbottom%3A17.5%2Cright%3A393.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A44%2Cadvance%3A.1962890625%2CplaneBounds%3A%7Bleft%3A-.009919475797210583%2Cbottom%3A-.15981695975478%2Cright%3A.1744702570472106%2Ctop%3A.12514899100478%7D%2CatlasBounds%3A%7Bleft%3A498.5%2Cbottom%3A79.5%2Cright%3A509.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A45%2Cadvance%3A.27587890625%2CplaneBounds%3A%7Bleft%3A-.00527594412977999%2Cbottom%3A.24333249267450235%2Cright%3A.27969000662978%2Ctop%3A.36067141357549765%7D%2CatlasBounds%3A%7Bleft%3A52.5%2Cbottom%3A7.5%2Cright%3A69.5%2Ctop%3A14.5%7D%7D%2C%7Bunicode%3A46%2Cadvance%3A.26318359375%2CplaneBounds%3A%7Bleft%3A.051032680313645884%2Cbottom%3A-.027092319686354116%2Cright%3A.20189700718635412%2Ctop%3A.12377200718635412%7D%2CatlasBounds%3A%7Bleft%3A501.5%2Cbottom%3A221.5%2Cright%3A510.5%2Ctop%3A230.5%7D%7D%2C%7Bunicode%3A47%2Cadvance%3A.412109375%2CplaneBounds%3A%7Bleft%3A-.013733006073205867%2Cbottom%3A-.08573505127848349%2Cright%3A.4053345685732059%2Ctop%3A.7356373950284835%7D%2CatlasBounds%3A%7Bleft%3A252.5%2Cbottom%3A206.5%2Cright%3A277.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A48%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.037458384830081196%2Cbottom%3A-.030073418674698794%2Cright%3A.5235767714199189%2Ctop%3A.7410109186746989%7D%2CatlasBounds%3A%7Bleft%3A167.5%2Cbottom%3A144.5%2Cright%3A196.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A49%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.06023674350936354%2Cbottom%3A-.01998308280677056%2Cright%3A.37872810024063647%2Ctop%3A.7343385515567705%7D%2CatlasBounds%3A%7Bleft%3A488.5%2Cbottom%3A97.5%2Cright%3A507.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A50%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.025334353719224725%2Cbottom%3A-.01680925468177056%2Cright%3A.5449781462807752%2Ctop%3A.7375123796817705%7D%2CatlasBounds%3A%7Bleft%3A278.5%2Cbottom%3A51.5%2Cright%3A309.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A51%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.028181041080081196%2Cbottom%3A-.030073418674698794%2Cright%3A.5142994276699189%2Ctop%3A.7410109186746989%7D%2CatlasBounds%3A%7Bleft%3A197.5%2Cbottom%3A144.5%2Cright%3A226.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A52%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.005886103858368255%2Cbottom%3A-.02169206718177056%2Cright%3A.5590553023916317%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A310.5%2Cbottom%3A51.5%2Cright%3A343.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A53%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.055524791080081196%2Cbottom%3A-.02657487968177056%2Cright%3A.5416431776699189%2Ctop%3A.7277467546817705%7D%2CatlasBounds%3A%7Bleft%3A344.5%2Cbottom%3A51.5%2Cright%3A373.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A54%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.046003306705081196%2Cbottom%3A-.034712090549698794%2Cright%3A.5321216932949189%2Ctop%3A.7363722467996989%7D%2CatlasBounds%3A%7Bleft%3A227.5%2Cbottom%3A144.5%2Cright%3A256.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A55%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.018010134969224725%2Cbottom%3A-.02169206718177056%2Cright%3A.5376539275307752%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A374.5%2Cbottom%3A51.5%2Cright%3A405.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A56%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.037702525455081196%2Cbottom%3A-.030073418674698794%2Cright%3A.5238209120449189%2Ctop%3A.7410109186746989%7D%2CatlasBounds%3A%7Bleft%3A257.5%2Cbottom%3A144.5%2Cright%3A286.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A57%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.029401744205081196%2Cbottom%3A-.025434746799698794%2Cright%3A.5155201307949189%2Ctop%3A.7456495905496989%7D%2CatlasBounds%3A%7Bleft%3A287.5%2Cbottom%3A144.5%2Cright%3A316.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A58%2Cadvance%3A.2421875%2CplaneBounds%3A%7Bleft%3A.046394008438645884%2Cbottom%3A-.029431286627488215%2Cright%3A.19725833531135412%2Ctop%3A.5572633178774882%7D%2CatlasBounds%3A%7Bleft%3A439.5%2Cbottom%3A61.5%2Cright%3A448.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A59%2Cadvance%3A.21142578125%2CplaneBounds%3A%7Bleft%3A.001066852327789419%2Cbottom%3A-.16459733294591408%2Cright%3A.1854565851722106%2Ctop%3A.556198895445914%7D%2CatlasBounds%3A%7Bleft%3A406.5%2Cbottom%3A53.5%2Cright%3A417.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A60%2Cadvance%3A.50830078125%2CplaneBounds%3A%7Bleft%3A.016948142433865897%2Cbottom%3A.0726146348300812%2Cright%3A.4527784200661341%2Ctop%3A.5587330214199189%7D%2CatlasBounds%3A%7Bleft%3A394.5%2Cbottom%3A21.5%2Cright%3A420.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A61%2Cadvance%3A.548828125%2CplaneBounds%3A%7Bleft%3A.051535540940937666%2Cbottom%3A.17620354038436353%2Cright%3A.5041285215590624%2Ctop%3A.49469489711563647%7D%2CatlasBounds%3A%7Bleft%3A477.5%2Cbottom%3A31.5%2Cright%3A504.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A62%2Cadvance%3A.5224609375%2CplaneBounds%3A%7Bleft%3A.047629290940937666%2Cbottom%3A.0731029160800812%2Cright%3A.5002222715590624%2Ctop%3A.5592213026699189%7D%2CatlasBounds%3A%7Bleft%3A421.5%2Cbottom%3A21.5%2Cright%3A448.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A63%2Cadvance%3A.47216796875%2CplaneBounds%3A%7Bleft%3A.016704001808865897%2Cbottom%3A-.027876153049698794%2Cright%3A.4525342794411341%2Ctop%3A.7432081842996989%7D%2CatlasBounds%3A%7Bleft%3A317.5%2Cbottom%3A144.5%2Cright%3A343.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A64%2Cadvance%3A.89794921875%2CplaneBounds%3A%7Bleft%3A.034064457306783605%2Cbottom%3A-.23896750384690937%2Cright%3A.8721996065996072%2Ctop%3A.7165065663469093%7D%2CatlasBounds%3A%7Bleft%3A155.5%2Cbottom%3A198.5%2Cright%3A205.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A65%2Cadvance%3A.65234375%2CplaneBounds%3A%7Bleft%3A-.008838044092129387%2Cbottom%3A-.02169206718177056%2Cright%3A.6616700753421295%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A237.5%2Cbottom%3A51.5%2Cright%3A277.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A66%2Cadvance%3A.62255859375%2CplaneBounds%3A%7Bleft%3A.06464099434422473%2Cbottom%3A-.02169206718177056%2Cright%3A.5842847869057752%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A205.5%2Cbottom%3A51.5%2Cright%3A236.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A67%2Cadvance%3A.65087890625%2CplaneBounds%3A%7Bleft%3A.038439807122511785%2Cbottom%3A-.030073418674698794%2Cright%3A.6251344116274882%2Ctop%3A.7410109186746989%7D%2CatlasBounds%3A%7Bleft%3A344.5%2Cbottom%3A144.5%2Cright%3A379.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A68%2Cadvance%3A.65576171875%2CplaneBounds%3A%7Bleft%3A.06301501010836826%2Cbottom%3A-.02169206718177056%2Cright%3A.6161842086416317%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A162.5%2Cbottom%3A51.5%2Cright%3A195.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A69%2Cadvance%3A.568359375%2CplaneBounds%3A%7Bleft%3A.0652904160800812%2Cbottom%3A-.02169206718177056%2Cright%3A.5514088026699189%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A132.5%2Cbottom%3A51.5%2Cright%3A161.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A70%2Cadvance%3A.552734375%2CplaneBounds%3A%7Bleft%3A.059675181705081196%2Cbottom%3A-.02169206718177056%2Cright%3A.5457935682949189%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A102.5%2Cbottom%3A51.5%2Cright%3A131.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A71%2Cadvance%3A.68115234375%2CplaneBounds%3A%7Bleft%3A.040148791497511785%2Cbottom%3A-.030073418674698794%2Cright%3A.6268433960024882%2Ctop%3A.7410109186746989%7D%2CatlasBounds%3A%7Bleft%3A380.5%2Cbottom%3A144.5%2Cright%3A415.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A72%2Cadvance%3A.712890625%2CplaneBounds%3A%7Bleft%3A.062365588372511785%2Cbottom%3A-.02169206718177056%2Cright%3A.6490601928774882%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A30.5%2Cbottom%3A51.5%2Cright%3A65.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A73%2Cadvance%3A.27197265625%2CplaneBounds%3A%7Bleft%3A.06917965680657412%2Cbottom%3A-.02169206718177056%2Cright%3A.20328128069342588%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A196.5%2Cbottom%3A51.5%2Cright%3A204.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A74%2Cadvance%3A.5517578125%2CplaneBounds%3A%7Bleft%3A.007184947330081194%2Cbottom%3A-.02657487968177056%2Cright%3A.4933033339199188%2Ctop%3A.7277467546817705%7D%2CatlasBounds%3A%7Bleft%3A.5%2Cbottom%3A51.5%2Cright%3A29.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A75%2Cadvance%3A.626953125%2CplaneBounds%3A%7Bleft%3A.061633166497511785%2Cbottom%3A-.02169206718177056%2Cright%3A.6483277710024882%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A452.5%2Cbottom%3A97.5%2Cright%3A487.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A76%2Cadvance%3A.5380859375%2CplaneBounds%3A%7Bleft%3A.06341786132300943%2Cbottom%3A-.02169206718177056%2Cright%3A.5327735449269906%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A423.5%2Cbottom%3A97.5%2Cright%3A451.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A77%2Cadvance%3A.873046875%2CplaneBounds%3A%7Bleft%3A.05911847969322944%2Cbottom%3A-.02169206718177056%2Cright%3A.8134401140567705%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A377.5%2Cbottom%3A97.5%2Cright%3A422.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A78%2Cadvance%3A.712890625%2CplaneBounds%3A%7Bleft%3A.062365588372511785%2Cbottom%3A-.02169206718177056%2Cright%3A.6490601928774882%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A341.5%2Cbottom%3A97.5%2Cright%3A376.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A79%2Cadvance%3A.6875%2CplaneBounds%3A%7Bleft%3A.033395854136655315%2Cbottom%3A-.030073418674698794%2Cright%3A.6536158646133446%2Ctop%3A.7410109186746989%7D%2CatlasBounds%3A%7Bleft%3A416.5%2Cbottom%3A144.5%2Cright%3A453.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A80%2Cadvance%3A.630859375%2CplaneBounds%3A%7Bleft%3A.061550166358368255%2Cbottom%3A-.02169206718177056%2Cright%3A.6147193648916317%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A273.5%2Cbottom%3A97.5%2Cright%3A306.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A81%2Cadvance%3A.6875%2CplaneBounds%3A%7Bleft%3A.030466166636655315%2Cbottom%3A-.14391866037519643%2Cright%3A.6506861771133446%2Ctop%3A.7445045978751964%7D%2CatlasBounds%3A%7Bleft%3A214.5%2Cbottom%3A202.5%2Cright%3A251.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A82%2Cadvance%3A.61572265625%2CplaneBounds%3A%7Bleft%3A.06350329135836826%2Cbottom%3A-.02169206718177056%2Cright%3A.6166724898916317%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A186.5%2Cbottom%3A97.5%2Cright%3A219.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A83%2Cadvance%3A.59326171875%2CplaneBounds%3A%7Bleft%3A.020778681983368255%2Cbottom%3A-.030073418674698794%2Cright%3A.5739478805166317%2Ctop%3A.7410109186746989%7D%2CatlasBounds%3A%7Bleft%3A454.5%2Cbottom%3A144.5%2Cright%3A487.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A84%2Cadvance%3A.5966796875%2CplaneBounds%3A%7Bleft%3A.005480822747511787%2Cbottom%3A-.02169206718177056%2Cright%3A.5921754272524882%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A112.5%2Cbottom%3A97.5%2Cright%3A147.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A85%2Cadvance%3A.6484375%2CplaneBounds%3A%7Bleft%3A.049098994483368255%2Cbottom%3A-.02657487968177056%2Cright%3A.6022681930166317%2Ctop%3A.7277467546817705%7D%2CatlasBounds%3A%7Bleft%3A78.5%2Cbottom%3A97.5%2Cright%3A111.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A86%2Cadvance%3A.63623046875%2CplaneBounds%3A%7Bleft%3A-.008269192599201152%2Cbottom%3A-.02169206718177056%2Cright%3A.6454762238492011%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A38.5%2Cbottom%3A97.5%2Cright%3A77.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A87%2Cadvance%3A.88720703125%2CplaneBounds%3A%7Bleft%3A.011923628617731797%2Cbottom%3A-.02169206718177056%2Cright%3A.8835841838822683%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A220.5%2Cbottom%3A97.5%2Cright%3A272.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A88%2Cadvance%3A.626953125%2CplaneBounds%3A%7Bleft%3A.004098979136655316%2Cbottom%3A-.02169206718177056%2Cright%3A.6243189896133446%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A.5%2Cbottom%3A97.5%2Cright%3A37.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A89%2Cadvance%3A.6005859375%2CplaneBounds%3A%7Bleft%3A-.010793598988344685%2Cbottom%3A-.02169206718177056%2Cright%3A.6094264114883446%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A148.5%2Cbottom%3A97.5%2Cright%3A185.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A90%2Cadvance%3A.5986328125%2CplaneBounds%3A%7Bleft%3A.024196650733368255%2Cbottom%3A-.02169206718177056%2Cright%3A.5773658492666317%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A307.5%2Cbottom%3A97.5%2Cright%3A340.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A91%2Cadvance%3A.26513671875%2CplaneBounds%3A%7Bleft%3A.05437250871693295%2Cbottom%3A-.17280296457569408%2Cright%3A.27228764753306706%2Ctop%3A.8329592145756942%7D%2CatlasBounds%3A%7Bleft%3A59.5%2Cbottom%3A195.5%2Cright%3A72.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A92%2Cadvance%3A.41015625%2CplaneBounds%3A%7Bleft%3A.0014037126767941326%2Cbottom%3A-.08573505127848349%2Cright%3A.4204712873232059%2Ctop%3A.7356373950284835%7D%2CatlasBounds%3A%7Bleft%3A278.5%2Cbottom%3A206.5%2Cright%3A303.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A93%2Cadvance%3A.26513671875%2CplaneBounds%3A%7Bleft%3A-.020659233400995285%2Cbottom%3A-.17280296457569408%2Cright%3A.2140186084009953%2Ctop%3A.8329592145756942%7D%2CatlasBounds%3A%7Bleft%3A94.5%2Cbottom%3A195.5%2Cright%3A108.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A94%2Cadvance%3A.41796875%2CplaneBounds%3A%7Bleft%3A.006855376669722368%2Cbottom%3A.33229482979472236%2Cright%3A.40916024833027764%2Ctop%3A.7345997014552776%7D%2CatlasBounds%3A%7Bleft%3A486.5%2Cbottom%3A231.5%2Cright%3A510.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A95%2Cadvance%3A.451171875%2CplaneBounds%3A%7Bleft%3A-.017473255794918804%2Cbottom%3A-.09553469482549765%2Cright%3A.4686451307949188%2Ctop%3A.021804226075497646%7D%2CatlasBounds%3A%7Bleft%3A70.5%2Cbottom%3A7.5%2Cright%3A99.5%2Ctop%3A14.5%7D%7D%2C%7Bunicode%3A96%2Cadvance%3A.30908203125%2CplaneBounds%3A%7Bleft%3A.00391839948107648%2Cbottom%3A.5860277898277895%2Cright%3A.2553589442689235%2Ctop%3A.7704175226722105%7D%2CatlasBounds%3A%7Bleft%3A36.5%2Cbottom%3A3.5%2Cright%3A51.5%2Ctop%3A14.5%7D%7D%2C%7Bunicode%3A97%2Cadvance%3A.5439453125%2CplaneBounds%3A%7Bleft%3A.028181041080081196%2Cbottom%3A-.029187146002488215%2Cright%3A.5142994276699189%2Ctop%3A.5575074585024882%7D%2CatlasBounds%3A%7Bleft%3A30.5%2Cbottom%3A15.5%2Cright%3A59.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A98%2Cadvance%3A.56103515625%2CplaneBounds%3A%7Bleft%3A.048932994205081196%2Cbottom%3A-.032187684160555265%2Cright%3A.5350513807949189%2Ctop%3A.7724220591605554%7D%2CatlasBounds%3A%7Bleft%3A304.5%2Cbottom%3A207.5%2Cright%3A333.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A99%2Cadvance%3A.5234375%2CplaneBounds%3A%7Bleft%3A.024518931705081196%2Cbottom%3A-.029187146002488215%2Cright%3A.5106373182949189%2Ctop%3A.5575074585024882%7D%2CatlasBounds%3A%7Bleft%3A.5%2Cbottom%3A15.5%2Cright%3A29.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A100%2Cadvance%3A.56396484375%2CplaneBounds%3A%7Bleft%3A.026227916080081196%2Cbottom%3A-.032187684160555265%2Cright%3A.5123463026699189%2Ctop%3A.7724220591605554%7D%2CatlasBounds%3A%7Bleft%3A334.5%2Cbottom%3A207.5%2Cright%3A363.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A101%2Cadvance%3A.52978515625%2CplaneBounds%3A%7Bleft%3A.026472056705081196%2Cbottom%3A-.029187146002488215%2Cright%3A.5125904432949189%2Ctop%3A.5575074585024882%7D%2CatlasBounds%3A%7Bleft%3A468.5%2Cbottom%3A61.5%2Cright%3A497.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A102%2Cadvance%3A.34716796875%2CplaneBounds%3A%7Bleft%3A.004575110905578838%2Cbottom%3A-.022177918535555265%2Cright%3A.3733545765944212%2Ctop%3A.7824318247855554%7D%2CatlasBounds%3A%7Bleft%3A364.5%2Cbottom%3A207.5%2Cright%3A386.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A103%2Cadvance%3A.56103515625%2CplaneBounds%3A%7Bleft%3A.026960337955081196%2Cbottom%3A-.22888445766762702%2Cright%3A.5130787245449189%2Ctop%3A.558962582667627%7D%2CatlasBounds%3A%7Bleft%3A28.5%2Cbottom%3A143.5%2Cright%3A57.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A104%2Cadvance%3A.55078125%2CplaneBounds%3A%7Bleft%3A.049826556565937666%2Cbottom%3A-.01892352016762703%2Cright%3A.5024195371840624%2Ctop%3A.768923520167627%7D%2CatlasBounds%3A%7Bleft%3A.5%2Cbottom%3A143.5%2Cright%3A27.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A105%2Cadvance%3A.24267578125%2CplaneBounds%3A%7Bleft%3A.046882289688645884%2Cbottom%3A-.01680925468177056%2Cright%3A.19774661656135412%2Ctop%3A.7375123796817705%7D%2CatlasBounds%3A%7Bleft%3A498.5%2Cbottom%3A145.5%2Cright%3A507.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A106%2Cadvance%3A.23876953125%2CplaneBounds%3A%7Bleft%3A-.048979545900995285%2Cbottom%3A-.2324562772148376%2Cright%3A.1856982959009953%2Ctop%3A.7397804959648377%7D%2CatlasBounds%3A%7Bleft%3A140.5%2Cbottom%3A197.5%2Cright%3A154.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A107%2Cadvance%3A.5068359375%2CplaneBounds%3A%7Bleft%3A.044294322330081196%2Cbottom%3A-.01892352016762703%2Cright%3A.5304127089199189%2Ctop%3A.768923520167627%7D%2CatlasBounds%3A%7Bleft%3A58.5%2Cbottom%3A143.5%2Cright%3A87.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A108%2Cadvance%3A.24267578125%2CplaneBounds%3A%7Bleft%3A.05428707868157412%2Cbottom%3A-.01892352016762703%2Cright%3A.18838870256842588%2Ctop%3A.768923520167627%7D%2CatlasBounds%3A%7Bleft%3A477.5%2Cbottom%3A208.5%2Cright%3A485.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A109%2Cadvance%3A.87646484375%2CplaneBounds%3A%7Bleft%3A.04430890170737297%2Cbottom%3A-.024304333502488215%2Cright%3A.832155942042627%2Ctop%3A.5623902710024882%7D%2CatlasBounds%3A%7Bleft%3A116.5%2Cbottom%3A15.5%2Cright%3A163.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A110%2Cadvance%3A.5517578125%2CplaneBounds%3A%7Bleft%3A.049826556565937666%2Cbottom%3A-.024304333502488215%2Cright%3A.5024195371840624%2Ctop%3A.5623902710024882%7D%2CatlasBounds%3A%7Bleft%3A60.5%2Cbottom%3A15.5%2Cright%3A87.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A111%2Cadvance%3A.5703125%2CplaneBounds%3A%7Bleft%3A.025090213094224725%2Cbottom%3A-.029187146002488215%2Cright%3A.5447340056557752%2Ctop%3A.5575074585024882%7D%2CatlasBounds%3A%7Bleft%3A193.5%2Cbottom%3A15.5%2Cright%3A224.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A112%2Cadvance%3A.56103515625%2CplaneBounds%3A%7Bleft%3A.048444712955081196%2Cbottom%3A-.22644305141762702%2Cright%3A.5345630995449189%2Ctop%3A.561403988917627%7D%2CatlasBounds%3A%7Bleft%3A447.5%2Cbottom%3A208.5%2Cright%3A476.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A113%2Cadvance%3A.568359375%2CplaneBounds%3A%7Bleft%3A.025983775455081196%2Cbottom%3A-.22644305141762702%2Cright%3A.5121021620449189%2Ctop%3A.561403988917627%7D%2CatlasBounds%3A%7Bleft%3A417.5%2Cbottom%3A208.5%2Cright%3A446.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A114%2Cadvance%3A.33837890625%2CplaneBounds%3A%7Bleft%3A.045180595002291775%2Cbottom%3A-.024304333502488215%2Cright%3A.34690924874770823%2Ctop%3A.5623902710024882%7D%2CatlasBounds%3A%7Bleft%3A449.5%2Cbottom%3A61.5%2Cright%3A467.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A115%2Cadvance%3A.515625%2CplaneBounds%3A%7Bleft%3A.021669814448009427%2Cbottom%3A-.029187146002488215%2Cright%3A.4910254980519906%2Ctop%3A.5575074585024882%7D%2CatlasBounds%3A%7Bleft%3A164.5%2Cbottom%3A15.5%2Cright%3A192.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A116%2Cadvance%3A.32666015625%2CplaneBounds%3A%7Bleft%3A-.019433670483564695%2Cbottom%3A-.02877457520298586%2Cright%3A.3158203892335647%2Ctop%3A.675258950202986%7D%2CatlasBounds%3A%7Bleft%3A418.5%2Cbottom%3A54.5%2Cright%3A438.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A117%2Cadvance%3A.55126953125%2CplaneBounds%3A%7Bleft%3A.048117572190937666%2Cbottom%3A-.034069958502488215%2Cright%3A.5007105528090624%2Ctop%3A.5526246460024882%7D%2CatlasBounds%3A%7Bleft%3A88.5%2Cbottom%3A15.5%2Cright%3A115.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A118%2Cadvance%3A.484375%2CplaneBounds%3A%7Bleft%3A-.002092396419918806%2Cbottom%3A-.02080579450955998%2Cright%3A.4840259901699188%2Ctop%3A.5491261070095601%7D%2CatlasBounds%3A%7Bleft%3A331.5%2Cbottom%3A16.5%2Cright%3A360.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A119%2Cadvance%3A.75146484375%2CplaneBounds%3A%7Bleft%3A-.002649098431770561%2Cbottom%3A-.02080579450955998%2Cright%3A.7516725359317705%2Ctop%3A.5491261070095601%7D%2CatlasBounds%3A%7Bleft%3A225.5%2Cbottom%3A16.5%2Cright%3A270.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A120%2Cadvance%3A.49560546875%2CplaneBounds%3A%7Bleft%3A-.0046143729128470395%2Cbottom%3A-.02080579450955998%2Cright%3A.4982667166628471%2Ctop%3A.5491261070095601%7D%2CatlasBounds%3A%7Bleft%3A300.5%2Cbottom%3A16.5%2Cright%3A330.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A121%2Cadvance%3A.47314453125%2CplaneBounds%3A%7Bleft%3A-.007219349544918806%2Cbottom%3A-.23645281704262702%2Cright%3A.4788990370449188%2Ctop%3A.551394223292627%7D%2CatlasBounds%3A%7Bleft%3A387.5%2Cbottom%3A208.5%2Cright%3A416.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A122%2Cadvance%3A.49560546875%2CplaneBounds%3A%7Bleft%3A.018007705073009427%2Cbottom%3A-.02080579450955998%2Cright%3A.4873633886769906%2Ctop%3A.5491261070095601%7D%2CatlasBounds%3A%7Bleft%3A271.5%2Cbottom%3A16.5%2Cright%3A299.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A123%2Cadvance%3A.33837890625%2CplaneBounds%3A%7Bleft%3A.011572188891435306%2Cbottom%3A-.20234398020069408%2Cright%3A.3468262486085647%2Ctop%3A.8034181989506942%7D%2CatlasBounds%3A%7Bleft%3A73.5%2Cbottom%3A195.5%2Cright%3A93.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A124%2Cadvance%3A.24365234375%2CplaneBounds%3A%7Bleft%3A.06315671142450235%2Cbottom%3A-.15466084787519643%2Cright%3A.18049563232549765%2Ctop%3A.7337624103751964%7D%2CatlasBounds%3A%7Bleft%3A206.5%2Cbottom%3A202.5%2Cright%3A213.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A125%2Cadvance%3A.33837890625%2CplaneBounds%3A%7Bleft%3A-.010156326733564695%2Cbottom%3A-.20234398020069408%2Cright%3A.3250977329835647%2Ctop%3A.8034181989506942%7D%2CatlasBounds%3A%7Bleft%3A38.5%2Cbottom%3A195.5%2Cright%3A58.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A126%2Cadvance%3A.68017578125%2CplaneBounds%3A%7Bleft%3A.046984728997511785%2Cbottom%3A.1766063915990047%2Cright%3A.6336793335024882%2Ctop%3A.4112842334009953%7D%2CatlasBounds%3A%7Bleft%3A.5%2Cbottom%3A.5%2Cright%3A35.5%2Ctop%3A14.5%7D%7D%5D%2Ckerning%3A%5B%5D%7D%3Bimport%7Bserialize%20as%20Te%2Cdeserialize%20as%20Ee%7Dfrom%22%40ungap%2Fstructured-clone%22%3Bimport%7Bvec3%20as%20Se%2Cvec4%20as%20Be%7Dfrom%22gl-matrix%22%3Bimport*as%20Ue%20from%22nifti-reader-js%22%3Bimport%20Re%20from%22daikon%22%3Bimport%7Bmat3%20as%20Ne%2Cmat4%20as%20Pe%2Cvec3%20as%20Le%2Cvec4%20as%20ke%7Dfrom%22gl-matrix%22%3Bimport%7BDecompress%20as%20Oe%2CdecompressSync%20as%20Ye%2CgzipSync%20as%20Ke%7Dfrom%22fflate%2Fbrowser%22%3Bimport%7Bv4%20as%20Ge%7Dfrom%22%40lukeed%2Fuuid%22%3Bimport%7Bvec3%20as%20We%7Dfrom%22gl-matrix%22%3Bvar%20He%3D(t%3D%3E(t%5Bt.UNKNOWN%3D0%5D%3D%22UNKNOWN%22%2Ct%5Bt.NII%3D1%5D%3D%22NII%22%2Ct%5Bt.DCM%3D2%5D%3D%22DCM%22%2Ct%5Bt.DCM_MANIFEST%3D3%5D%3D%22DCM_MANIFEST%22%2Ct%5Bt.MIH%3D4%5D%3D%22MIH%22%2Ct%5Bt.MIF%3D5%5D%3D%22MIF%22%2Ct%5Bt.NHDR%3D6%5D%3D%22NHDR%22%2Ct%5Bt.NRRD%3D7%5D%3D%22NRRD%22%2Ct%5Bt.MHD%3D8%5D%3D%22MHD%22%2Ct%5Bt.MHA%3D9%5D%3D%22MHA%22%2Ct%5Bt.MGH%3D10%5D%3D%22MGH%22%2Ct%5Bt.MGZ%3D11%5D%3D%22MGZ%22%2Ct%5Bt.V%3D12%5D%3D%22V%22%2Ct%5Bt.V16%3D13%5D%3D%22V16%22%2Ct%5Bt.VMR%3D14%5D%3D%22VMR%22%2Ct%5Bt.HEAD%3D15%5D%3D%22HEAD%22%2Ct%5Bt.DCM_FOLDER%3D16%5D%3D%22DCM_FOLDER%22%2Ct%5Bt.SRC%3D17%5D%3D%22SRC%22%2Ct%5Bt.FIB%3D18%5D%3D%22FIB%22%2Ct))(He%7C%7C%7B%7D)%2CQe%3DObject.freeze(%7B...He%2Cparse%3At%3D%3E%7Blet%20e%3D0%3Bswitch(t.toUpperCase())%7Bcase%22%22%3Acase%22DCM%22%3Ae%3D2%3Bbreak%3Bcase%22TXT%22%3Ae%3D3%3Bbreak%3Bcase%22FIB%22%3Ae%3D18%3Bbreak%3Bcase%22NII%22%3Ae%3D1%3Bbreak%3Bcase%22MIH%22%3Ae%3D4%3Bbreak%3Bcase%22MIF%22%3Ae%3D5%3Bbreak%3Bcase%22NHDR%22%3Ae%3D6%3Bbreak%3Bcase%22NRRD%22%3Ae%3D7%3Bbreak%3Bcase%22MHD%22%3Ae%3D8%3Bbreak%3Bcase%22MHA%22%3Ae%3D9%3Bbreak%3Bcase%22MGH%22%3Ae%3D10%3Bbreak%3Bcase%22MGZ%22%3Ae%3D11%3Bbreak%3Bcase%22SRC%22%3Ae%3D17%3Bbreak%3Bcase%22V%22%3Ae%3D12%3Bbreak%3Bcase%22V16%22%3Ae%3D13%3Bbreak%3Bcase%22VMR%22%3Ae%3D14%3Bbreak%3Bcase%22HEAD%22%3Ae%3D15%7Dreturn%20e%7D%7D)%2Cze%3D(t%2Ce%3D%22%22%2Ci%3D%22%22%2Cs%3D%22gray%22%2Cr%3D1%2Cn%3DNaN%2Ca%3DNaN%2Co%3D!0%2Cl%3D.02%2Ch%3D!1%2Cc%3D!1%2Cd%3D%22%22%2Cm%3D0%2Cu%3DQe.UNKNOWN%2CA%3DNaN%2Cf%3DNaN%2Cg%3D!0%2Cp%3D!1%2Cv%3Dnull)%3D%3E(%7Burl%3At%2CurlImageData%3Ae%2Cname%3Ai%2Ccolormap%3As%2CcolorMap%3As%2Copacity%3Ar%2Ccal_min%3An%2Ccal_max%3Aa%2CtrustCalMinMax%3Ao%2CpercentileFrac%3Al%2CignoreZeroVoxels%3Ah%2CuseQFormNotSForm%3Ac%2CcolormapNegative%3Ad%2CimageType%3Au%2Ccal_minNeg%3AA%2Ccal_maxNeg%3Af%2CcolorbarVisible%3Ag%2Cframe4D%3Am%2CalphaThreshold%3Ap%2CcolormapLabel%3Av%7D)%3Bfunction%20qe(t%2Ce%3D80)%7Bt%3Dt.replace(%2F%5B%60%24%5D%2Fg%2C%22%22)%3Bconst%20i%3D%5B%5D%2Cs%3DMath.min(e%2Ct.length)%3Bfor(let%20e%3D0%3Be%3Cs%3Be%2B%2B)%7Bconst%20s%3Dt.charCodeAt(e)%3Bi.push(255%26s)%7Dreturn%20i%7Dfunction%20Xe(t%2Ce%3D!1%2Ci%3D!1)%7Blet%20s%3D!0%3Bi%26%26(s%3Dt.littleEndian)%3Bconst%20r%3Dnew%20Uint8Array(348)%2Cn%3Dnew%20DataView(r.buffer)%3Bn.setInt32(0%2C348%2Cs)%2Cn.setUint8(38%2C114)%2Cn.setUint8(39%2Ct.dim_info)%3Bfor(let%20e%3D0%3Be%3C8%3Be%2B%2B)n.setUint16(40%2B2*e%2Ct.dims%5Be%5D%2Cs)%3Bn.setFloat32(56%2Ct.intent_p1%2Cs)%2Cn.setFloat32(60%2Ct.intent_p2%2Cs)%2Cn.setFloat32(64%2Ct.intent_p3%2Cs)%2Cn.setInt16(68%2Ct.intent_code%2Cs)%2Ce%3F(n.setInt16(70%2C2%2Cs)%2Cn.setInt16(72%2C8%2Cs))%3A(n.setInt16(70%2Ct.datatypeCode%2Cs)%2Cn.setInt16(72%2Ct.numBitsPerVoxel%2Cs))%2Cn.setInt16(74%2Ct.slice_start%2Cs)%3Bfor(let%20e%3D0%3Be%3C8%3Be%2B%2B)n.setFloat32(76%2B4*e%2Ct.pixDims%5Be%5D%2Cs)%3Be%3F(n.setFloat32(108%2C352%2Cs)%2Cn.setFloat32(112%2C1%2Cs)%2Cn.setFloat32(116%2C0%2Cs))%3A(n.setFloat32(108%2C352%2Cs)%2Cn.setFloat32(112%2Ct.scl_slope%2Cs)%2Cn.setFloat32(116%2Ct.scl_inter%2Cs))%2Cn.setInt16(120%2Ct.slice_end%2Cs)%2Cn.setUint8(122%2Ct.slice_code)%2C0%3D%3D%3Dt.xyzt_units%3Fn.setUint8(123%2C10)%3An.setUint8(123%2Ct.xyzt_units)%2Ce%3F(n.setFloat32(124%2C0%2Cs)%2Cn.setFloat32(128%2C0%2Cs))%3A(n.setFloat32(124%2Ct.cal_max%2Cs)%2Cn.setFloat32(128%2Ct.cal_min%2Cs))%2Cn.setFloat32(132%2Ct.slice_duration%2Cs)%2Cn.setFloat32(136%2Ct.toffset%2Cs)%2Cr.set(qe(t.description)%2C148)%2Cr.set(qe(t.aux_file)%2C228)%2Cn.setInt16(252%2Ct.qform_code%2Cs)%2Ct.sform_code%3C1%7C%7Ct.sform_code%3C1%3Fn.setInt16(254%2C1%2Cs)%3An.setInt16(254%2Ct.sform_code%2Cs)%2Cn.setFloat32(256%2Ct.quatern_b%2Cs)%2Cn.setFloat32(260%2Ct.quatern_c%2Cs)%2Cn.setFloat32(264%2Ct.quatern_d%2Cs)%2Cn.setFloat32(268%2Ct.qoffset_x%2Cs)%2Cn.setFloat32(272%2Ct.qoffset_y%2Cs)%2Cn.setFloat32(276%2Ct.qoffset_z%2Cs)%3Bconst%20a%3Dt.affine.flat()%3Bfor(let%20t%3D0%3Bt%3C12%3Bt%2B%2B)n.setFloat32(280%2B4*t%2Ca%5Bt%5D%2Cs)%3Breturn%20n.setInt32(344%2C3222382%2C!0)%2Cr%7Dfunction%20je(t)%7Bconst%20e%3D%5B!1%2C!1%2C!1%2C!1%5D%2Ci%3D%5B!1%2C!1%2C!1%2C!1%5D%3Bfor(let%20e%3D0%3Be%3C4%3Be%2B%2B)for(let%20i%3D0%3Bi%3C4%3Bi%2B%2B)if(isNaN(t%5Be%5D%5Bi%5D))return!1%3Bfor(let%20s%3D0%3Bs%3C3%3Bs%2B%2B)for(let%20r%3D0%3Br%3C3%3Br%2B%2B)0!%3D%3Dt%5Bs%5D%5Br%5D%26%26(e%5Bs%5D%3D!0%2Ci%5Br%5D%3D!0)%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)%7Bif(!e%5Bt%5D)return!1%3Bif(!i%5Bt%5D)return!1%7Dreturn!0%7Dvar%20Ze%3Dclass%20t%7Bconstructor(t%3Dnull%2Ci%3D%22%22%2Cs%3D%22gray%22%2Cr%3D1%2Cn%3Dnull%2Ca%3DNaN%2Co%3DNaN%2Ch%3D!0%2Cc%3D.02%2Cd%3D!1%2Cm%3D!1%2Cu%3D%22%22%2CA%3D0%2Cf%3DQe.UNKNOWN%2Cg%3DNaN%2Cp%3DNaN%2Cv%3D!0%2Cx%3Dnull)%7Bif(e(this%2C%22name%22)%2Ce(this%2C%22id%22)%2Ce(this%2C%22url%22)%2Ce(this%2C%22headers%22)%2Ce(this%2C%22_colormap%22)%2Ce(this%2C%22_opacity%22)%2Ce(this%2C%22percentileFrac%22)%2Ce(this%2C%22ignoreZeroVoxels%22)%2Ce(this%2C%22trustCalMinMax%22)%2Ce(this%2C%22colormapNegative%22)%2Ce(this%2C%22colormapLabel%22)%2Ce(this%2C%22colormapInvert%22)%2Ce(this%2C%22nFrame4D%22)%2Ce(this%2C%22frame4D%22)%2Ce(this%2C%22nTotalFrame4D%22)%2Ce(this%2C%22cal_minNeg%22)%2Ce(this%2C%22cal_maxNeg%22)%2Ce(this%2C%22colorbarVisible%22%2C!0)%2Ce(this%2C%22modulationImage%22%2Cnull)%2Ce(this%2C%22modulateAlpha%22%2C0)%2Ce(this%2C%22series%22%2C%5B%5D)%2Ce(this%2C%22nVox3D%22)%2Ce(this%2C%22oblique_angle%22)%2Ce(this%2C%22maxShearDeg%22)%2Ce(this%2C%22useQFormNotSForm%22)%2Ce(this%2C%22alphaThreshold%22)%2Ce(this%2C%22pixDims%22)%2Ce(this%2C%22matRAS%22)%2Ce(this%2C%22pixDimsRAS%22)%2Ce(this%2C%22obliqueRAS%22)%2Ce(this%2C%22dimsRAS%22)%2Ce(this%2C%22permRAS%22)%2Ce(this%2C%22img2RASstep%22)%2Ce(this%2C%22img2RASstart%22)%2Ce(this%2C%22toRAS%22)%2Ce(this%2C%22toRASvox%22)%2Ce(this%2C%22frac2mm%22)%2Ce(this%2C%22frac2mmOrtho%22)%2Ce(this%2C%22extentsMinOrtho%22)%2Ce(this%2C%22extentsMaxOrtho%22)%2Ce(this%2C%22mm2ortho%22)%2Ce(this%2C%22hdr%22%2Cnull)%2Ce(this%2C%22imageType%22)%2Ce(this%2C%22img%22)%2Ce(this%2C%22imaginary%22)%2Ce(this%2C%22v1%22)%2Ce(this%2C%22fileObject%22)%2Ce(this%2C%22dims%22)%2Ce(this%2C%22onColormapChange%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onOpacityChange%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22mm000%22)%2Ce(this%2C%22mm100%22)%2Ce(this%2C%22mm010%22)%2Ce(this%2C%22mm001%22)%2Ce(this%2C%22cal_min%22)%2Ce(this%2C%22cal_max%22)%2Ce(this%2C%22robust_min%22)%2Ce(this%2C%22robust_max%22)%2Ce(this%2C%22global_min%22)%2Ce(this%2C%22global_max%22)%2Ce(this%2C%22urlImgData%22)%2Ce(this%2C%22isManifest%22)%2Ce(this%2C%22limitFrames4D%22)%2Cthis.name%3Di%2Cthis.id%3DGe()%2Cthis._colormap%3Ds%2Cthis._opacity%3Dr%3E1%3F1%3Ar%2Cthis.percentileFrac%3Dc%2Cthis.ignoreZeroVoxels%3Dd%2Cthis.trustCalMinMax%3Dh%2Cthis.colormapNegative%3Du%2Cthis.colormapLabel%3Dx%2Cthis.frame4D%3DA%2Cthis.cal_minNeg%3Dg%2Cthis.cal_maxNeg%3Dp%2Cthis.colorbarVisible%3Dv%2Cthis.useQFormNotSForm%3Dm%2C!t)return%3Bconst%20w%3D%2F(%3F%3A%5C.(%5B%5E.%5D%2B))%3F%24%2F%3Blet%20C%3Dw.exec(i)%5B1%5D%7C%7C%22%22%3BC%3DC.toUpperCase()%2C%22GZ%22%3D%3D%3DC%26%26(C%3Dw.exec(i.slice(0%2C-3))%5B1%5D%2CC%3DC.toUpperCase())%3Blet%20b%3Dnull%3Bswitch(f%3D%3D%3DQe.UNKNOWN%26%26(f%3DQe.parse(C))%2Cthis.imageType%3Df%2Cf)%7Bcase%20Qe.DCM_FOLDER%3Acase%20Qe.DCM_MANIFEST%3Acase%20Qe.DCM%3Ab%3Dthis.readDICOM(t)%3Bbreak%3Bcase%20Qe.FIB%3A%5Bb%2Cthis.v1%5D%3Dthis.readFIB(t)%3Bbreak%3Bcase%20Qe.MIH%3Acase%20Qe.MIF%3Ab%3Dthis.readMIF(t%2Cn)%3Bbreak%3Bcase%20Qe.NHDR%3Acase%20Qe.NRRD%3Ab%3Dthis.readNRRD(t%2Cn)%3Bbreak%3Bcase%20Qe.MHD%3Acase%20Qe.MHA%3Ab%3Dthis.readMHA(t%2Cn)%3Bbreak%3Bcase%20Qe.MGH%3Acase%20Qe.MGZ%3Ab%3Dthis.readMGH(t)%3Bbreak%3Bcase%20Qe.SRC%3Ab%3Dthis.readSRC(t)%3Bbreak%3Bcase%20Qe.V%3Ab%3Dthis.readECAT(t)%3Bbreak%3Bcase%20Qe.V16%3Ab%3Dthis.readV16(t)%3Bbreak%3Bcase%20Qe.VMR%3Ab%3Dthis.readVMR(t)%3Bbreak%3Bcase%20Qe.HEAD%3Ab%3Dthis.readHEAD(t%2Cn)%3Bbreak%3Bcase%20Qe.NII%3Athis.hdr%3DUe.readHeader(t)%2Cnull!%3D%3Dthis.hdr%26%26(0%3D%3D%3Dthis.hdr.cal_min%26%26255%3D%3D%3Dthis.hdr.cal_max%26%26(this.hdr.cal_max%3D0)%2Cb%3DUe.isCompressed(t)%3FUe.readImage(this.hdr%2CUe.decompress(t))%3AUe.readImage(this.hdr%2Ct))%3Bbreak%3Bdefault%3Athrow%20new%20Error(%22Image%20type%20not%20supported%22)%7Dif(this.hdr%26%26%22number%22%3D%3Dtypeof%20this.hdr.magic%26%26(this.hdr.magic%3D%22n%2B1%22)%2Cthis.nFrame4D%3D1%2Cthis.hdr)for(let%20t%3D4%3Bt%3C7%3Bt%2B%2B)this.hdr.dims%5Bt%5D%3E1%26%26(this.nFrame4D*%3Dthis.hdr.dims%5Bt%5D)%3Bif(this.frame4D%3DMath.min(this.frame4D%2Cthis.nFrame4D-1)%2Cthis.nTotalFrame4D%3Dthis.nFrame4D%2C!this.hdr%7C%7C!b)return%3Bthis.nVox3D%3Dthis.hdr.dims%5B1%5D*this.hdr.dims%5B2%5D*this.hdr.dims%5B3%5D%3Bconst%20y%3Dthis.nVox3D*(this.hdr.numBitsPerVoxel%2F8)%2CI%3Db.byteLength%2Fy%3BI!%3D%3Dthis.nFrame4D%26%26(I%3E0%26%26I*y%3D%3D%3Db.byteLength%3Fl.debug(%22Loading%20the%20first%20%22%2BI%2B%22%20of%20%22%2Bthis.nFrame4D%2B%22%20volumes%22)%3Al.warn(%22This%20header%20does%20not%20match%20voxel%20data%22%2Cthis.hdr%2Cb.byteLength)%2Cthis.nFrame4D%3DI)%2C1007!%3D%3Dthis.hdr.intent_code%26%262003!%3D%3Dthis.hdr.intent_code%7C%7C3!%3D%3Dthis.nFrame4D%7C%7C16!%3D%3Dthis.hdr.datatypeCode%7C%7C(b%3Dthis.float32V1asRGBA(new%20Float32Array(b)))%2C0!%3D%3Dthis.hdr.pixDims%5B1%5D%26%260!%3D%3Dthis.hdr.pixDims%5B2%5D%26%260!%3D%3Dthis.hdr.pixDims%5B3%5D%7C%7Cl.error(%22pixDims%20not%20plausible%22%2Cthis.hdr)%2C(isNaN(this.hdr.scl_slope)%7C%7C0%3D%3D%3Dthis.hdr.scl_slope)%26%26(this.hdr.scl_slope%3D1)%2CisNaN(this.hdr.scl_inter)%26%26(this.hdr.scl_inter%3D0)%3Blet%20M%3Dje(this.hdr.affine)%3Bif(m%7C%7C!M%7C%7Cthis.hdr.qform_code%3Ethis.hdr.sform_code)%7Bl.debug(%22spatial%20transform%20based%20on%20QForm%22)%3Bconst%20t%3Dthis.hdr.quatern_b%2Ce%3Dthis.hdr.quatern_c%2Ci%3Dthis.hdr.quatern_d%2Cs%3DMath.sqrt(1-(Math.pow(t%2C2)%2BMath.pow(e%2C2)%2BMath.pow(i%2C2)))%2Cr%3D0%3D%3D%3Dthis.hdr.pixDims%5B0%5D%3F1%3Athis.hdr.pixDims%5B0%5D%2Cn%3D%5B%5Bs*s%2Bt*t-e*e-i*i%2C2*t*e-2*s*i%2C2*t*i%2B2*s*e%5D%2C%5B2*t*e%2B2*s*i%2Cs*s%2Be*e-t*t-i*i%2C2*e*i-2*s*t%5D%2C%5B2*t*i-2*s*e%2C2*e*i%2B2*s*t%2Cs*s%2Bi*i-e*e-t*t%5D%5D%2Ca%3Dthis.hdr.affine%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%3D1)for(let%20e%3D0%3Be%3C3%3Be%2B%3D1)a%5Bt%5D%5Be%5D%3Dn%5Bt%5D%5Be%5D*this.hdr.pixDims%5Be%2B1%5D%2C2%3D%3D%3De%26%26(a%5Bt%5D%5Be%5D*%3Dr)%3Ba%5B0%5D%5B3%5D%3Dthis.hdr.qoffset_x%2Ca%5B1%5D%5B3%5D%3Dthis.hdr.qoffset_y%2Ca%5B2%5D%5B3%5D%3Dthis.hdr.qoffset_z%2Cthis.hdr.affine%3Da%7Dif(M%3Dje(this.hdr.affine)%2C!M)%7Bl.debug(%22Defective%20NIfTI%3A%20spatial%20transform%20does%20not%20make%20sense%22)%3Blet%20t%3Dthis.hdr.pixDims%5B1%5D%2Ce%3Dthis.hdr.pixDims%5B2%5D%2Ci%3Dthis.hdr.pixDims%5B3%5D%3B(isNaN(t)%7C%7C0%3D%3D%3Dt)%26%26(t%3D1)%2C(isNaN(e)%7C%7C0%3D%3D%3De)%26%26(e%3D1)%2C(isNaN(i)%7C%7C0%3D%3D%3Di)%26%26(i%3D1)%2Cthis.hdr.pixDims%5B1%5D%3Dt%2Cthis.hdr.pixDims%5B2%5D%3De%2Cthis.hdr.pixDims%5B3%5D%3Di%3Bconst%20s%3D%5B%5Bt%2C0%2C0%2C0%5D%2C%5B0%2Ce%2C0%2C0%5D%2C%5B0%2C0%2Ci%2C0%5D%2C%5B0%2C0%2C0%2C1%5D%5D%3Bthis.hdr.affine%3Ds%7Dif(128!%3D%3Dthis.hdr.datatypeCode%26%262304!%3D%3Dthis.hdr.datatypeCode%26%26this.hdr.littleEndian!%3D%3D(()%3D%3E%7Bconst%20t%3Dnew%20ArrayBuffer(2)%3Breturn%20new%20DataView(t).setInt16(0%2C256%2C!0)%2C256%3D%3D%3Dnew%20Int16Array(t)%5B0%5D%7D)()%26%26this.hdr.numBitsPerVoxel%3E8)if(16%3D%3D%3Dthis.hdr.numBitsPerVoxel)%7Bconst%20t%3Dnew%20Uint16Array(b)%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)%7Bconst%20i%3Dt%5Be%5D%3Bt%5Be%5D%3D((255%26i)%3C%3C8%7Ci%3E%3E8%26255)%3C%3C16%3E%3E16%7D%7Delse%20if(32%3D%3D%3Dthis.hdr.numBitsPerVoxel)%7Bconst%20t%3Dnew%20Uint32Array(b)%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)%7Bconst%20i%3Dt%5Be%5D%3Bt%5Be%5D%3D(255%26i)%3C%3C24%7C(65280%26i)%3C%3C8%7Ci%3E%3E8%2665280%7Ci%3E%3E24%26255%7D%7Delse%20if(64%3D%3D%3Dthis.hdr.numBitsPerVoxel)%7Bconst%20t%3Dthis.hdr.numBitsPerVoxel%2F8%2Ce%3Dnew%20Uint8Array(b)%3Bfor(let%20i%3D0%3Bi%3Ce.length%3Bi%2B%3Dt)%7Blet%20s%3Dt-1%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)%7Bconst%20r%3De%5Bi%2Bt%5D%3Be%5Bi%2Bt%5D%3De%5Bi%2Bs%5D%2Ce%5Bi%2Bs%5D%3Dr%2Cs--%7D%7D%7Dswitch(this.hdr.datatypeCode)%7Bcase%202%3Acase%20128%3Acase%202304%3Athis.img%3Dnew%20Uint8Array(b)%3Bbreak%3Bcase%204%3Athis.img%3Dnew%20Int16Array(b)%3Bbreak%3Bcase%2016%3Athis.img%3Dnew%20Float32Array(b)%3Bbreak%3Bcase%2064%3Athis.img%3Dnew%20Float64Array(b)%3Bbreak%3Bcase%20512%3Athis.img%3Dnew%20Uint16Array(b)%3Bbreak%3Bcase%20256%3A%7Bconst%20t%3Dnew%20Int8Array(b)%2Ce%3Dt.length%3Bthis.img%3Dnew%20Int16Array(e)%3Bfor(let%20i%3D0%3Bi%3Ce%3Bi%2B%2B)this.img%5Bi%5D%3Dt%5Bi%5D%3Bthis.hdr.datatypeCode%3D4%2Cthis.hdr.numBitsPerVoxel%3D16%3Bbreak%7Dcase%201%3A%7Bconst%20t%3Dthis.hdr.dims%5B1%5D*this.hdr.dims%5B2%5D*Math.max(1%2Cthis.hdr.dims%5B3%5D)*Math.max(1%2Cthis.hdr.dims%5B4%5D)%2Ce%3Dnew%20Uint8Array(b)%3Bthis.img%3Dnew%20Uint8Array(t)%3Bconst%20i%3Dnew%20Uint8Array(8)%3Bfor(let%20t%3D0%3Bt%3C8%3Bt%2B%2B)i%5Bt%5D%3DMath.pow(2%2Ct)%3Blet%20s%3D-1%3Bfor(let%20r%3D0%3Br%3Ct%3Br%2B%2B)%7Bconst%20t%3Dr%258%3B0%3D%3D%3Dt%26%26s%2B%2B%2Ce%5Bs%5D%26i%5Bt%5D%26%26(this.img%5Br%5D%3D1)%7Dthis.hdr.datatypeCode%3D2%2Cthis.hdr.numBitsPerVoxel%3D8%3Bbreak%7Dcase%20768%3A%7Bconst%20t%3Dnew%20Uint32Array(b)%2Ce%3Dt.length%3Bthis.img%3Dnew%20Float64Array(e)%3Bfor(let%20i%3D0%3Bi%3Ce-1%3Bi%2B%2B)this.img%5Bi%5D%3Dt%5Bi%5D%3Bthis.hdr.datatypeCode%3D64%3Bbreak%7Dcase%208%3A%7Bconst%20t%3Dnew%20Int32Array(b)%2Ce%3Dt.length%3Bthis.img%3Dnew%20Float64Array(e)%3Bfor(let%20i%3D0%3Bi%3Ce-1%3Bi%2B%2B)this.img%5Bi%5D%3Dt%5Bi%5D%3Bthis.hdr.datatypeCode%3D64%3Bbreak%7Dcase%201024%3A%7Bconst%20t%3Dnew%20BigInt64Array(b)%2Ce%3Dt.length%3Bthis.img%3Dnew%20Float64Array(e)%3Bfor(let%20i%3D0%3Bi%3Ce-1%3Bi%2B%2B)this.img%5Bi%5D%3DNumber(t%5Bi%5D)%3Bthis.hdr.datatypeCode%3D64%3Bbreak%7Dcase%2032%3A%7Bconst%20t%3Dnew%20Float32Array(b)%2Ce%3DMath.floor(t.length%2F2)%3Bthis.imaginary%3Dnew%20Float32Array(e)%2Cthis.img%3Dnew%20Float32Array(e)%3Blet%20i%3D0%3Bfor(let%20s%3D0%3Bs%3Ce-1%3Bs%2B%2B)this.img%5Bs%5D%3Dt%5Bi%5D%2Cthis.imaginary%5Bs%5D%3Dt%5Bi%2B1%5D%2Ci%2B%3D2%3Bthis.hdr.datatypeCode%3D16%3Bbreak%7Ddefault%3Athrow%20new%20Error(%22datatype%20%22%2Bthis.hdr.datatypeCode%2B%22%20not%20supported%22)%7Dthis.calculateRAS()%2CisNaN(a)%7C%7C(this.hdr.cal_min%3Da)%2CisNaN(o)%7C%7C(this.hdr.cal_max%3Do)%2Cthis.calMinMax()%7DcomputeObliqueAngle(t)%7Bconst%20e%3DPe.clone(t)%3BPe.transpose(e%2Ct)%3Bconst%20i%3DMath.sqrt(e%5B0%5D*e%5B0%5D%2Be%5B1%5D*e%5B1%5D%2Be%5B2%5D*e%5B2%5D)%2Cs%3DMath.max(Math.max(Math.abs(e%5B0%5D)%2CMath.abs(e%5B1%5D))%2CMath.abs(e%5B2%5D))%2Fi%2Cr%3DMath.sqrt(e%5B4%5D*e%5B4%5D%2Be%5B5%5D*e%5B5%5D%2Be%5B6%5D*e%5B6%5D)%2Cn%3DMath.max(Math.max(Math.abs(e%5B4%5D)%2CMath.abs(e%5B5%5D))%2CMath.abs(e%5B6%5D))%2Fr%2Ca%3DMath.sqrt(e%5B8%5D*e%5B8%5D%2Be%5B9%5D*e%5B9%5D%2Be%5B10%5D*e%5B10%5D)%2Co%3DMath.max(Math.max(Math.abs(e%5B8%5D)%2CMath.abs(e%5B9%5D))%2CMath.abs(e%5B10%5D))%2Fa%2Ch%3DMath.min(Math.min(s%2Cn)%2Co)%3Blet%20c%3DMath.abs(180*Math.acos(h)%2F3.141592653)%3Breturn%20c%3E.01%3Fl.warn(%22Warning%20voxels%20not%20aligned%20with%20world%20space%3A%20%22%2Bc%2B%22%20degrees%20from%20plumb.%5Cn%22)%3Ac%3D0%2Cc%7Dfloat32V1asRGBA(t)%7Bt.length!%3D%3D3*this.nVox3D%26%26l.warn(%22float32V1asRGBA()%20expects%20%22%2B3*this.nVox3D%2B%22voxels%2C%20got%20%22%2C%2Bt.length)%3Bconst%20e%3Dt.slice()%3Bthis.hdr.datatypeCode%3D2304%2Cthis.nFrame4D%3D1%3Bfor(let%20t%3D4%3Bt%3C7%3Bt%2B%2B)this.hdr.dims%5Bt%5D%3D1%3Bthis.hdr.dims%5B0%5D%3D3%3Bconst%20i%3Dnew%20Uint8Array(4*this.nVox3D)%3Blet%20s%3D1%3Bfor(let%20t%3D0%3Bt%3C3*this.nVox3D%3Bt%2B%2B)isNaN(e%5Bt%5D)%7C%7C(s%3DMath.max(s%2CMath.abs(e%5Bt%5D)))%3Bconst%20r%3D255%2Fs%2Cn%3D2*this.nVox3D%3Blet%20a%3D0%3Bfor(let%20t%3D0%3Bt%3Cthis.nVox3D%3Bt%2B%2B)%7Bconst%20s%3De%5Bt%5D%2Co%3De%5Bt%2Bthis.nVox3D%5D%2Cl%3De%5Bt%2Bn%5D%3Bi%5Ba%5D%3DMath.abs(s*r)%2Ci%5Ba%2B1%5D%3DMath.abs(o*r)%2Ci%5Ba%2B2%5D%3DMath.abs(l*r)%3Blet%20h%3D248%2B1*Number(s%3E0)%2B2*Number(o%3E0)%2B4*Number(l%3E0)%3BMath.abs(s)%2BMath.abs(o)%2BMath.abs(l)%3C.1%26%26(h%3D0)%2Ci%5Ba%2B3%5D%3Dh%2Ca%2B%3D4%7Dreturn%20i%7DloadImgV1(t%3D!1%2Ce%3D!1%2Ci%3D!1)%7Blet%20s%3Dthis.v1%3Bif(s%7C%7C3!%3D%3Dthis.nFrame4D%7C%7Cthis.img.constructor!%3D%3DFloat32Array%7C%7C(s%3Dthis.img.slice())%2C!s)return%20l.warn(%22Image%20does%20not%20have%20V1%20data%22)%2C!1%3Bif(t)for(let%20t%3D0%3Bt%3Cthis.nVox3D%3Bt%2B%2B)s%5Bt%5D%3D-s%5Bt%5D%3Bif(e)for(let%20t%3Dthis.nVox3D%3Bt%3C2*this.nVox3D%3Bt%2B%2B)s%5Bt%5D%3D-s%5Bt%5D%3Bif(i)for(let%20t%3D2*this.nVox3D%3Bt%3C3*this.nVox3D%3Bt%2B%2B)s%5Bt%5D%3D-s%5Bt%5D%3Breturn%20this.img%3Dthis.float32V1asRGBA(s)%2C!0%7DcalculateOblique()%7Bif(!this.matRAS)throw%20new%20Error(%22matRAS%20not%20defined%22)%3Bif(void%200%3D%3D%3Dthis.pixDimsRAS)throw%20new%20Error(%22pixDimsRAS%20not%20defined%22)%3Bif(!this.dimsRAS)throw%20new%20Error(%22dimsRAS%20not%20defined%22)%3Bthis.oblique_angle%3Dthis.computeObliqueAngle(this.matRAS)%3Bconst%20t%3Dthis.vox2mm(%5B0%2C0%2C0%5D%2Cthis.matRAS)%2Ce%3Dthis.vox2mm(%5B1%2Fthis.pixDimsRAS%5B1%5D%2C0%2C0%5D%2Cthis.matRAS)%2Ci%3Dthis.vox2mm(%5B0%2C1%2Fthis.pixDimsRAS%5B2%5D%2C0%5D%2Cthis.matRAS)%2Cs%3Dthis.vox2mm(%5B0%2C0%2C1%2Fthis.pixDimsRAS%5B3%5D%5D%2Cthis.matRAS)%3BLe.subtract(e%2Ce%2Ct)%2CLe.subtract(i%2Ci%2Ct)%2CLe.subtract(s%2Cs%2Ct)%3Bconst%20r%3DPe.fromValues(e%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D%2C0%2Ci%5B0%5D%2Ci%5B1%5D%2Ci%5B2%5D%2C0%2Cs%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D%2C0%2C0%2C0%2C0%2C1)%3Bthis.obliqueRAS%3DPe.clone(r)%3Bconst%20n%3DMath.abs(90-Le.angle(e%2Ci)*(180%2FMath.PI))%2Ca%3DMath.abs(90-Le.angle(e%2Cs)*(180%2FMath.PI))%2Co%3DMath.abs(90-Le.angle(i%2Cs)*(180%2FMath.PI))%3Bthis.maxShearDeg%3DMath.max(Math.max(n%2Ca)%2Co)%2Cthis.maxShearDeg%3E.1%26%26l.warn(%22Warning%3A%20voxels%20are%20rhomboidal%2C%20maximum%20shear%20is%20%25f%20degrees.%22%2Cthis.maxShearDeg)%3Bconst%20h%3Dke.fromValues(this.dimsRAS%5B1%5D%2Cthis.dimsRAS%5B2%5D%2Cthis.dimsRAS%5B3%5D%2C1)%2Cc%3DPe.clone(this.matRAS)%3BPe.transpose(c%2Cc)%3Bconst%20d%3Dke.fromValues(-.5%2C-.5%2C-.5%2C0)%3BPe.translate(c%2Cc%2CLe.fromValues(d%5B0%5D%2Cd%5B1%5D%2Cd%5B2%5D))%2Cc%5B0%5D*%3Dh%5B0%5D%2Cc%5B1%5D*%3Dh%5B0%5D%2Cc%5B2%5D*%3Dh%5B0%5D%2Cc%5B4%5D*%3Dh%5B1%5D%2Cc%5B5%5D*%3Dh%5B1%5D%2Cc%5B6%5D*%3Dh%5B1%5D%2Cc%5B8%5D*%3Dh%5B2%5D%2Cc%5B9%5D*%3Dh%5B2%5D%2Cc%5B10%5D*%3Dh%5B2%5D%2Cthis.frac2mm%3DPe.clone(c)%3Bconst%20m%3Dthis.pixDimsRAS%5B1%5D%2Cu%3Dthis.pixDimsRAS%5B2%5D%2CA%3Dthis.pixDimsRAS%5B3%5D%2Cf%3DPe.clone(c)%3Bf%5B0%5D%3Dm*h%5B0%5D%2Cf%5B1%5D%3D0%2Cf%5B2%5D%3D0%2Cf%5B4%5D%3D0%2Cf%5B5%5D%3Du*h%5B1%5D%2Cf%5B6%5D%3D0%2Cf%5B8%5D%3D0%2Cf%5B9%5D%3D0%2Cf%5B10%5D%3DA*h%5B2%5D%3Bconst%20g%3Dthis.mm2vox(%5B0%2C0%2C0%5D%2C!0)%3Bf%5B12%5D%3D(-g%5B0%5D-.5)*m%2Cf%5B13%5D%3D(-g%5B1%5D-.5)*u%2Cf%5B14%5D%3D(-g%5B2%5D-.5)*A%2Cthis.frac2mmOrtho%3DPe.clone(f)%2Cthis.extentsMinOrtho%3D%5Bf%5B12%5D%2Cf%5B13%5D%2Cf%5B14%5D%5D%2Cthis.extentsMaxOrtho%3D%5Bf%5B0%5D%2Bf%5B12%5D%2Cf%5B5%5D%2Bf%5B13%5D%2Cf%5B10%5D%2Bf%5B14%5D%5D%2Cthis.mm2ortho%3DPe.create()%2CPe.invert(this.mm2ortho%2Cr)%7DTHD_daxes_to_NIFTI(t%2Ce%2Ci)%7Bconst%20s%3Dthis.hdr%3Bif(null%3D%3D%3Ds)throw%20new%20Error(%22HDR%20is%20not%20set%22)%3Bs.sform_code%3D2%3Bconst%20r%3D%22xxyyzzg%22%3Blet%20n%3D-1%2Ca%3D-1%2Co%3D-1%3Bconst%20l%3D%5B%22x%22%2C%22y%22%2C%22z%22%5D%3Bl%5B0%5D%3Dr%5Bi%5B0%5D%5D%2Cl%5B1%5D%3Dr%5Bi%5B1%5D%5D%2Cl%5B2%5D%3Dr%5Bi%5B2%5D%5D%3Bconst%20h%3Dt.slice(0%2C3)%2Cc%3De.slice(0%2C3)%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)%22x%22%3D%3D%3Dl%5Bt%5D%3Fn%3Dt%3A%22y%22%3D%3D%3Dl%5Bt%5D%3Fa%3Dt%3Ao%3Dt%3Bn%3C0%7C%7Ca%3C0%7C%7Co%3C0%7C%7Cn!%3D%3Da%26%26n!%3D%3Do%26%26a!%3D%3Do%26%26(s.pixDims%5B1%5D%3DMath.abs(h%5B0%5D)%2Cs.pixDims%5B2%5D%3DMath.abs(h%5B1%5D)%2Cs.pixDims%5B3%5D%3DMath.abs(h%5B2%5D)%2Cs.affine%3D%5B%5B1%2C0%2C0%2C0%5D%2C%5B0%2C1%2C0%2C0%5D%2C%5B0%2C0%2C1%2C0%5D%2C%5B0%2C0%2C0%2C1%5D%5D%2Cs.affine%5B0%5D%5Bn%5D%3D-h%5Bn%5D%2Cs.affine%5B1%5D%5Ba%5D%3D-h%5Ba%5D%2Cs.affine%5B2%5D%5Bo%5D%3Dh%5Bo%5D%2Cs.affine%5B0%5D%5B3%5D%3D-c%5Bn%5D%2Cs.affine%5B1%5D%5B3%5D%3D-c%5Ba%5D%2Cs.affine%5B2%5D%5B3%5D%3Dc%5Bo%5D)%7DSetPixDimFromSForm()%7Bif(!this.hdr)throw%20new%20Error(%22hdr%20not%20defined%22)%3Bconst%20t%3Dthis.hdr.affine%2Ce%3DPe.fromValues(t%5B0%5D%5B0%5D%2Ct%5B0%5D%5B1%5D%2Ct%5B0%5D%5B2%5D%2Ct%5B0%5D%5B3%5D%2Ct%5B1%5D%5B0%5D%2Ct%5B1%5D%5B1%5D%2Ct%5B1%5D%5B2%5D%2Ct%5B1%5D%5B3%5D%2Ct%5B2%5D%5B0%5D%2Ct%5B2%5D%5B1%5D%2Ct%5B2%5D%5B2%5D%2Ct%5B2%5D%5B3%5D%2Ct%5B3%5D%5B0%5D%2Ct%5B3%5D%5B1%5D%2Ct%5B3%5D%5B2%5D%2Ct%5B3%5D%5B3%5D)%2Ci%3Dthis.vox2mm(%5B0%2C0%2C0%5D%2Ce)%2Cs%3Dthis.vox2mm(%5B1%2C0%2C0%5D%2Ce)%3BLe.subtract(s%2Cs%2Ci)%3Bconst%20r%3Dthis.vox2mm(%5B0%2C1%2C0%5D%2Ce)%3BLe.subtract(r%2Cr%2Ci)%3Bconst%20n%3Dthis.vox2mm(%5B0%2C0%2C1%5D%2Ce)%3BLe.subtract(n%2Cn%2Ci)%2Cthis.hdr.pixDims%5B1%5D%3DLe.length(s)%2Cthis.hdr.pixDims%5B2%5D%3DLe.length(r)%2Cthis.hdr.pixDims%5B3%5D%3DLe.length(n)%7DreadDICOM(t)%7Bif(this.series%3Dnew%20Re.Series%2CArray.isArray(t))for(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)%7Bconst%20i%3Dnew%20DataView(t%5Be%5D)%2Cs%3DRe.Series.parseImage(i)%3Bnull%3D%3D%3Ds%3Fl.error(Re.Series.parserError)%3As.hasPixelData()%26%26(0!%3D%3Dthis.series.images.length%26%26s.getSeriesId()!%3D%3Dthis.series.images%5B0%5D.getSeriesId()%7C%7Cthis.series.addImage(s))%7Delse%7Bconst%20e%3DRe.Series.parseImage(new%20DataView(t))%3Bnull%3D%3D%3De%3Fl.error(Re.Series.parserError)%3Ae.hasPixelData()%26%26(0!%3D%3Dthis.series.images.length%26%26e.getSeriesId()!%3D%3Dthis.series.images%5B0%5D.getSeriesId()%7C%7Cthis.series.addImage(e))%7Dthis.series.buildSeries()%2Cthis.hdr%3Dnew%20Ue.NIFTI1%3Bconst%20e%3Dthis.hdr%3Be.scl_inter%3D0%2Ce.scl_slope%3D1%2Cthis.series.images%5B0%5D.getDataScaleIntercept()%26%26(e.scl_inter%3Dthis.series.images%5B0%5D.getDataScaleIntercept())%2Cthis.series.images%5B0%5D.getDataScaleSlope()%26%26(e.scl_slope%3Dthis.series.images%5B0%5D.getDataScaleSlope())%2Ce.dims%3D%5B3%2C1%2C1%2C1%2C0%2C0%2C0%2C0%5D%2Ce.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%2Ce.dims%5B1%5D%3Dthis.series.images%5B0%5D.getCols()%2Ce.dims%5B2%5D%3Dthis.series.images%5B0%5D.getRows()%2Ce.dims%5B3%5D%3Dthis.series.images%5B0%5D.getNumberOfFrames()%2Cthis.series.images.length%3E1%26%26(e.dims%5B3%5D%3E1%26%26l.debug(%22To%20Do%3A%20multiple%20slices%20per%20file%20and%20multiple%20files%20(XA30%20DWI)%22)%2Ce.dims%5B3%5D%3Dthis.series.images.length)%3Bconst%20i%3Dthis.series.images%5B0%5D.getPixelSpacing()%3Bif(e.pixDims%5B1%5D%3Di%5B0%5D%2Ce.pixDims%5B2%5D%3Di%5B1%5D%2Cthis.series.images.length%3E1)%7Bconst%20t%3DLe.fromValues(...this.series.images%5B0%5D.getImagePosition())%2Ci%3DLe.fromValues(...this.series.images%5B1%5D.getImagePosition())%2Cs%3DLe.fromValues(0%2C0%2C0)%3BLe.subtract(s%2Ct%2Ci)%2Ce.pixDims%5B3%5D%3DLe.length(s)%7Delse%20e.pixDims%5B3%5D%3Dthis.series.images%5B0%5D.getSliceThickness()%3Be.pixDims%5B4%5D%3Dthis.series.images%5B0%5D.getTR()%2F1e3%3Bconst%20s%3Dthis.series.images%5B0%5D.getDataType()%2Cr%3Dthis.series.images%5B0%5D.getBitsAllocated()%3Be.numBitsPerVoxel%3Dr%2Cthis.hdr.littleEndian%3Dthis.series.images%5B0%5D.littleEndian%2C8%3D%3D%3Dr%26%262%3D%3D%3Ds%3Fe.datatypeCode%3D256%3A8%3D%3D%3Dr%26%263%3D%3D%3Ds%3Fe.datatypeCode%3D2%3A16%3D%3D%3Dr%26%262%3D%3D%3Ds%3Fe.datatypeCode%3D4%3A16%3D%3D%3Dr%26%263%3D%3D%3Ds%3Fe.datatypeCode%3D512%3A32%3D%3D%3Dr%26%262%3D%3D%3Ds%3Fe.datatypeCode%3D8%3A32%3D%3D%3Dr%26%263%3D%3D%3Ds%3Fe.datatypeCode%3D768%3A32%3D%3D%3Dr%26%264%3D%3D%3Ds%3Fe.datatypeCode%3D16%3A64%3D%3D%3Dr%26%264%3D%3D%3Ds%3Fe.datatypeCode%3D64%3A1%3D%3D%3Dr%3Fe.datatypeCode%3D1%3Al.warn(%22Unsupported%20DICOM%20format%3A%20%22%2Bs%2B%22%20%22%2Br)%3Bconst%20n%3De.pixDims.slice(1%2C4)%2Ca%3Dfunction(t%2Ce%2Ci)%7Bconst%20s%3Dt%3Blet%20r%3Dnull%3Bif(s)%7Bconst%20t%3D%7BcolSize%3Ae%5B0%5D%2CrowSize%3Ae%5B1%5D%2CsliceSize%3Ae%5B2%5D%7D%2Cn%3Di%2Ca%3D%5Bs%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D%5D%2Co%3D%5Bs%5B3%5D%2Cs%5B4%5D%2Cs%5B5%5D%5D%2Cl%3D%5Ba%5B1%5D*o%5B2%5D-a%5B2%5D*o%5B1%5D%2Ca%5B2%5D*o%5B0%5D-a%5B0%5D*o%5B2%5D%2Ca%5B0%5D*o%5B1%5D-a%5B1%5D*o%5B0%5D%5D%3Br%3D%5B%5Ba%5B0%5D*t.colSize*-1%2Co%5B0%5D*t.rowSize*-1%2Cl%5B0%5D*t.sliceSize*-1%2C-1*n%5B0%5D%5D%2C%5Ba%5B1%5D*t.colSize*-1%2Co%5B1%5D*t.rowSize*-1%2Cl%5B1%5D*t.sliceSize*-1%2C-1*n%5B1%5D%5D%2C%5Ba%5B2%5D*t.colSize%2Co%5B2%5D*t.rowSize%2Cl%5B2%5D*t.sliceSize%2Cn%5B2%5D%5D%2C%5B0%2C0%2C0%2C1%5D%5D%7Dreturn%20r%7D(this.series.images%5B0%5D.getImageDirections()%2Cn%2Cthis.series.images%5B0%5D.getImagePosition())%3Blet%20o%3Ba%26%26(e.sform_code%3D1%2Ce.affine%3D%5B%5Ba%5B0%5D%5B0%5D%2Ca%5B0%5D%5B1%5D%2Ca%5B0%5D%5B2%5D%2Ca%5B0%5D%5B3%5D%5D%2C%5Ba%5B1%5D%5B0%5D%2Ca%5B1%5D%5B1%5D%2Ca%5B1%5D%5B2%5D%2Ca%5B1%5D%5B3%5D%5D%2C%5Ba%5B2%5D%5B0%5D%2Ca%5B2%5D%5B1%5D%2Ca%5B2%5D%5B2%5D%2Ca%5B2%5D%5B3%5D%5D%2C%5B0%2C0%2C0%2C1%5D%5D)%3Blet%20h%3Dthis.series.validatePixelDataLength(this.series.images%5B0%5D)%3Bconst%20c%3Dnew%20Uint8Array(new%20ArrayBuffer(h*this.series.images.length))%3Bfor(let%20t%3D0%3Bt%3Cthis.series.images.length%3Bt%2B%2B)o%3Dthis.series.isMosaic%3Fthis.series.getMosaicData(this.series.images%5Bt%5D%2Cthis.series.images%5Bt%5D.getPixelDataBytes())%3Athis.series.images%5Bt%5D.getPixelDataBytes()%2Ch%3Dthis.series.validatePixelDataLength(this.series.images%5Bt%5D)%2Cthis.series.images%5Bt%5D.clearPixelData()%2Cc.set(new%20Uint8Array(o%2C0%2Ch)%2Ch*t)%3Breturn%20c.buffer%7DreadECAT(t)%7Bthis.hdr%3Dnew%20Ue.NIFTI1%3Bconst%20e%3Dthis.hdr%3Be.dims%3D%5B3%2C1%2C1%2C1%2C0%2C0%2C0%2C0%5D%2Ce.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%3Bconst%20i%3Dnew%20DataView(t)%2Cs%3Di.getInt32(0%2C!1)%2Cr%3Di.getInt16(50%2C!1)%3Bif(1296127058!%3D%3Ds%7C%7Cr%3C1%7C%7Cr%3E14)throw%20new%20Error(%22Not%20a%20valid%20ECAT%20file%22)%3Blet%20n%3D512%2Ca%3D0%3Bconst%20o%3D%5B%5D%3Blet%20h%3Dnew%20Float32Array%3Bfor(%3B%3B)%7Bif(i.getInt32(n%2C!1)%2Bi.getInt32(n%2B12%2C!1)!%3D%3D31)break%3Blet%20t%3Dn%2B20%2Cs%3D0%2Cr%3D0%3Bfor(%3Bs%3C31%26%26(r%3Di.getInt32(t%2C!1)%2Ct%2B%3D16%2C0!%3D%3Dr)%3B)%7Bs%2B%2B%3Blet%20t%3D512*r%3Bconst%20n%3Dt-512%2Cc%3Di.getUint16(n%2C!1)%3Be.dims%5B1%5D%3Di.getUint16(n%2B4%2C!1)%2Ce.dims%5B2%5D%3Di.getUint16(n%2B6%2C!1)%2Ce.dims%5B3%5D%3Di.getUint16(n%2B8%2C!1)%3Bconst%20d%3Di.getFloat32(n%2B26%2C!1)%3Be.pixDims%5B1%5D%3D10*i.getFloat32(n%2B34%2C!1)%2Ce.pixDims%5B2%5D%3D10*i.getFloat32(n%2B38%2C!1)%2Ce.pixDims%5B3%5D%3D10*i.getFloat32(n%2B42%2C!1)%2Ce.pixDims%5B4%5D%3Di.getUint32(n%2B46%2C!1)%2F1e3%2Co.push(e.pixDims%5B4%5D)%3Bconst%20m%3De.dims%5B1%5D*e.dims%5B2%5D*e.dims%5B3%5D%2Cu%3Dnew%20Float32Array(m)%3Bif(1%3D%3D%3Dc)for(let%20e%3D0%3Be%3Cm%3Be%2B%2B)u%5Be%5D%3Di.getUint8(t)*d%2Ct%2B%2B%3Belse%20if(6%3D%3D%3Dc)for(let%20e%3D0%3Be%3Cm%3Be%2B%2B)u%5Be%5D%3Di.getUint16(t%2C!1)*d%2Ct%2B%3D2%3Belse%20if(7%3D%3D%3Dc)for(let%20e%3D0%3Be%3Cm%3Be%2B%2B)u%5Be%5D%3Di.getUint32(t%2C!1)*d%2Ct%2B%3D4%3Belse%20l.warn(%22Unknown%20ECAT%20data%20type%20%22%2Bc)%3Bconst%20A%3Dh.slice(0)%3Bh%3Dnew%20Float32Array(A.length%2Bu.length)%2Ch.set(A)%2Ch.set(u%2CA.length)%2Ca%2B%2B%7Dif(0%3D%3D%3Dr)break%3Bn%2B%3D512%7Dif(e.dims%5B4%5D%3Da%2Ce.pixDims%5B4%5D%3Do%5B0%5D%2Ca%3E1)%7Be.dims%5B0%5D%3D4%3Blet%20t%3D!1%3Bfor(let%20e%3D0%3Be%3Ca%3Be%2B%2B)o%5Be%5D!%3D%3Do%5B0%5D%26%26(t%3D!0)%3Bt%26%26l.warn(%22Frame%20durations%20vary%22)%7Dreturn%20e.sform_code%3D1%2Ce.affine%3D%5B%5B-e.pixDims%5B1%5D%2C0%2C0%2C.5*(e.dims%5B1%5D-2)*e.pixDims%5B1%5D%5D%2C%5B0%2C-e.pixDims%5B2%5D%2C0%2C.5*(e.dims%5B2%5D-2)*e.pixDims%5B2%5D%5D%2C%5B0%2C0%2C-e.pixDims%5B3%5D%2C.5*(e.dims%5B3%5D-2)*e.pixDims%5B3%5D%5D%2C%5B0%2C0%2C0%2C1%5D%5D%2Ce.numBitsPerVoxel%3D32%2Ce.datatypeCode%3D16%2Ch%7DreadV16(t)%7Bthis.hdr%3Dnew%20Ue.NIFTI1%3Bconst%20e%3Dthis.hdr%3Be.dims%3D%5B3%2C1%2C1%2C1%2C0%2C0%2C0%2C0%5D%2Ce.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%3Bconst%20i%3Dnew%20DataView(t)%3Be.dims%5B1%5D%3Di.getUint16(0%2C!0)%2Ce.dims%5B2%5D%3Di.getUint16(2%2C!0)%2Ce.dims%5B3%5D%3Di.getUint16(4%2C!0)%3Breturn%202*e.dims%5B1%5D*e.dims%5B2%5D*e.dims%5B3%5D%2B6!%3D%3Dt.byteLength%26%26l.warn(%22This%20does%20not%20look%20like%20a%20valid%20BrainVoyager%20V16%20file%22)%2Ce.numBitsPerVoxel%3D16%2Ce.datatypeCode%3D512%2Cl.warn(%22Warning%3A%20V16%20files%20have%20no%20spatial%20transforms%22)%2Ce.affine%3D%5B%5B0%2C0%2C-e.pixDims%5B1%5D%2C.5*(e.dims%5B1%5D-2)*e.pixDims%5B1%5D%5D%2C%5B-e.pixDims%5B2%5D%2C0%2C0%2C.5*(e.dims%5B2%5D-2)*e.pixDims%5B2%5D%5D%2C%5B0%2C-e.pixDims%5B3%5D%2C0%2C.5*(e.dims%5B3%5D-2)*e.pixDims%5B3%5D%5D%2C%5B0%2C0%2C0%2C1%5D%5D%2Ce.littleEndian%3D!0%2Ct.slice(6)%7DreadVMR(t)%7Bthis.hdr%3Dnew%20Ue.NIFTI1%3Bconst%20e%3Dthis.hdr%3Be.dims%3D%5B3%2C1%2C1%2C1%2C0%2C0%2C0%2C0%5D%2Ce.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%3Bconst%20i%3Dnew%20DataView(t)%2Cs%3Di.getUint16(0%2C!0)%3B4!%3D%3Ds%26%26l.warn(%22Not%20a%20valid%20version%204%20VMR%20image%22)%2Ce.dims%5B1%5D%3Di.getUint16(2%2C!0)%2Ce.dims%5B2%5D%3Di.getUint16(4%2C!0)%2Ce.dims%5B3%5D%3Di.getUint16(6%2C!0)%3Bconst%20r%3De.dims%5B1%5D*e.dims%5B2%5D*e.dims%5B3%5D%3Bif(s%3E%3D4)%7Blet%20s%3D8%2Br%3Bconst%20n%3Di.getUint32(s%2B88%2C!0)%3Bif(s%2B%3D92%2Cn%3E0)%7Bconst%20e%3Dt.byteLength%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)%7Bfor(%3Bs%3Ce%26%260!%3D%3Di.getUint8(s)%3B)s%2B%2B%3Bfor(s%2B%2B%2Cs%2B%3D4%3Bs%3Ce%26%260!%3D%3Di.getUint8(s)%3B)s%2B%2B%3Bs%2B%2B%3Bconst%20t%3Di.getUint32(s%2C!0)%3Bs%2B%3D4%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)s%2B%3D4%7D%7De.pixDims%5B1%5D%3Di.getFloat32(s%2B2%2C!0)%2Ce.pixDims%5B2%5D%3Di.getFloat32(s%2B6%2C!0)%2Ce.pixDims%5B3%5D%3Di.getFloat32(s%2B10%2C!0)%7Dreturn%20l.warn(%22Warning%3A%20VMR%20spatial%20transform%20not%20implemented%22)%2Ce.affine%3D%5B%5B0%2C0%2C-e.pixDims%5B1%5D%2C.5*(e.dims%5B1%5D-2)*e.pixDims%5B1%5D%5D%2C%5B-e.pixDims%5B2%5D%2C0%2C0%2C.5*(e.dims%5B2%5D-2)*e.pixDims%5B2%5D%5D%2C%5B0%2C-e.pixDims%5B3%5D%2C0%2C.5*(e.dims%5B3%5D-2)*e.pixDims%5B3%5D%5D%2C%5B0%2C0%2C0%2C1%5D%5D%2Cl.debug(e)%2Ce.numBitsPerVoxel%3D8%2Ce.datatypeCode%3D2%2Ct.slice(8%2C8%2Br)%7DreadMGH(t)%7Bthis.hdr%3Dnew%20Ue.NIFTI1%3Bconst%20e%3Dthis.hdr%3Be.littleEndian%3D!1%2Ce.dims%3D%5B3%2C1%2C1%2C1%2C0%2C0%2C0%2C0%5D%2Ce.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%3Blet%20i%3Dt%2Cs%3Dnew%20DataView(i)%3Bif(31%3D%3D%3Ds.getUint8(0)%26%26139%3D%3D%3Ds.getUint8(1))%7Bi%3DYe(new%20Uint8Array(t)).buffer%2Cs%3Dnew%20DataView(i)%7Dconst%20r%3Ds.getInt32(0%2C!1)%2Cn%3Ds.getInt32(4%2C!1)%2Ca%3Ds.getInt32(8%2C!1)%2Co%3Ds.getInt32(12%2C!1)%2Ch%3Ds.getInt32(16%2C!1)%2Cc%3Ds.getInt32(20%2C!1)%2Cd%3Ds.getFloat32(30%2C!1)%2Cm%3Ds.getFloat32(34%2C!1)%2Cu%3Ds.getFloat32(38%2C!1)%2CA%3Ds.getFloat32(42%2C!1)%2Cf%3Ds.getFloat32(46%2C!1)%2Cg%3Ds.getFloat32(50%2C!1)%2Cp%3Ds.getFloat32(54%2C!1)%2Cv%3Ds.getFloat32(58%2C!1)%2Cx%3Ds.getFloat32(62%2C!1)%2Cw%3Ds.getFloat32(66%2C!1)%2CC%3Ds.getFloat32(70%2C!1)%2Cb%3Ds.getFloat32(74%2C!1)%2Cy%3Ds.getFloat32(78%2C!1)%2CI%3Ds.getFloat32(82%2C!1)%2CM%3Ds.getFloat32(86%2C!1)%3B(1!%3D%3Dr%7C%7Cc%3C0%7C%7Cc%3E4)%26%26l.warn(%22Not%20a%20valid%20MGH%20file%22)%2C0%3D%3D%3Dc%3F(e.numBitsPerVoxel%3D8%2Ce.datatypeCode%3D2)%3A4%3D%3D%3Dc%3F(e.numBitsPerVoxel%3D16%2Ce.datatypeCode%3D4)%3A1%3D%3D%3Dc%3F(e.numBitsPerVoxel%3D32%2Ce.datatypeCode%3D8)%3A3%3D%3D%3Dc%26%26(e.numBitsPerVoxel%3D32%2Ce.datatypeCode%3D16)%2Ce.dims%5B1%5D%3Dn%2Ce.dims%5B2%5D%3Da%2Ce.dims%5B3%5D%3Do%2Ce.dims%5B4%5D%3Dh%2Ch%3E1%26%26(e.dims%5B0%5D%3D4)%2Ce.pixDims%5B1%5D%3Dd%2Ce.pixDims%5B2%5D%3Dm%2Ce.pixDims%5B3%5D%3Du%2Ce.vox_offset%3D284%2Ce.sform_code%3D1%3Bconst%20D%3DPe.fromValues(A*e.pixDims%5B1%5D%2Cp*e.pixDims%5B2%5D%2Cw*e.pixDims%5B3%5D%2C0%2Cf*e.pixDims%5B1%5D%2Cv*e.pixDims%5B2%5D%2CC*e.pixDims%5B3%5D%2C0%2Cg*e.pixDims%5B1%5D%2Cx*e.pixDims%5B2%5D%2Cb*e.pixDims%5B3%5D%2C0%2C0%2C0%2C0%2C1)%2CF%3D%5Be.dims%5B1%5D%2F2%2Ce.dims%5B2%5D%2F2%2Ce.dims%5B3%5D%2F2%2C1%5D%2CV%3D%5B0%2C0%2C0%2C0%5D%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)%7BV%5Bt%5D%3D0%3Bfor(let%20e%3D0%3Be%3C3%3Be%2B%2B)V%5Bt%5D%3DV%5Bt%5D%2BD%5Be%2B4*t%5D*F%5Be%5D%7De.affine%3D%5B%5BD%5B0%5D%2CD%5B1%5D%2CD%5B2%5D%2Cy-V%5B0%5D%5D%2C%5BD%5B4%5D%2CD%5B5%5D%2CD%5B6%5D%2CI-V%5B1%5D%5D%2C%5BD%5B8%5D%2CD%5B9%5D%2CD%5B10%5D%2CM-V%5B2%5D%5D%2C%5B0%2C0%2C0%2C1%5D%5D%3Bconst%20T%3De.dims%5B1%5D*e.dims%5B2%5D*e.dims%5B3%5D*e.dims%5B4%5D*(e.numBitsPerVoxel%2F8)%3Breturn%20i.slice(e.vox_offset%2Ce.vox_offset%2BT)%7DreadFIB(t)%7Bthis.hdr%3Dnew%20Ue.NIFTI1%3Bconst%20e%3Dthis.hdr%3Be.littleEndian%3D!1%2Ce.dims%3D%5B3%2C1%2C1%2C1%2C0%2C0%2C0%2C0%5D%2Ce.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%3Bconst%20i%3DCe.readMatV4(t)%3Bif(!(%22dimension%22in%20i)%7C%7C!(%22dti_fa%22in%20i))throw%20new%20Error(%22Not%20a%20valid%20DSIstudio%20FIB%20file%22)%3Bconst%20s%3D%22index0%22in%20i%26%26%22index1%22in%20i%26%26%22index2%22in%20i%3Be.numBitsPerVoxel%3D32%2Ce.datatypeCode%3D16%2Ce.dims%5B1%5D%3Di.dimension%5B0%5D%2Ce.dims%5B2%5D%3Di.dimension%5B1%5D%2Ce.dims%5B3%5D%3Di.dimension%5B2%5D%2Ce.dims%5B4%5D%3D1%2Ce.pixDims%5B1%5D%3Di.voxel_size%5B0%5D%2Ce.pixDims%5B2%5D%3Di.voxel_size%5B1%5D%2Ce.pixDims%5B3%5D%3Di.voxel_size%5B2%5D%2Ce.sform_code%3D1%3Bconst%20r%3D.5*(e.dims%5B1%5D-1)*e.pixDims%5B1%5D%2Cn%3D.5*(e.dims%5B2%5D-1)*e.pixDims%5B2%5D%2Ca%3D.5*(e.dims%5B3%5D-1)*e.pixDims%5B3%5D%3Be.affine%3D%5B%5Be.pixDims%5B1%5D%2C0%2C0%2C-r%5D%2C%5B0%2C-e.pixDims%5B2%5D%2C0%2Cn%5D%2C%5B0%2C0%2Ce.pixDims%5B2%5D%2C-a%5D%2C%5B0%2C0%2C0%2C1%5D%5D%2Ce.littleEndian%3D!0%3Bconst%20o%3De.dims%5B1%5D*e.dims%5B2%5D*e.dims%5B3%5D%2Cl%3Do*Math.ceil(e.numBitsPerVoxel%2F8)%2Ch%3Dl*e.dims%5B4%5D%2Cc%3Dnew%20Uint8Array(new%20ArrayBuffer(4*o*3))%3Bif(s)%7Bconst%20t%3De.dims%5B1%5D*e.dims%5B2%5D*e.dims%5B3%5D%2Cs%3Dnew%20Float32Array(t)%2Cr%3Dnew%20Float32Array(t)%2Cn%3Dnew%20Float32Array(t)%2Ca%3Di.index0%2Co%3Di.odf_vertices%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bconst%20t%3D3*a%5Be%5D%3Bs%5Be%5D%3Do%5Bt%2B0%5D%2Cr%5Be%5D%3Do%5Bt%2B1%5D%2Cn%5Be%5D%3D-o%5Bt%2B2%5D%7Dc.set(new%20Uint8Array(s.buffer%2Cs.byteOffset%2Cs.byteLength)%2C0*l)%2Cc.set(new%20Uint8Array(r.buffer%2Cr.byteOffset%2Cr.byteLength)%2C1*l)%2Cc.set(new%20Uint8Array(n.buffer%2Cn.byteOffset%2Cn.byteLength)%2C2*l)%7Dconst%20d%3Dnew%20Uint8Array(new%20ArrayBuffer(h))%2Cm%3DFloat32Array.from(i.dti_fa)%2Cu%3Dnew%20Uint8Array(m.buffer%2Cm.byteOffset%2Cm.byteLength)%3Breturn%20d.set(u%2C0)%2C%22report%22in%20i%26%26(e.description%3D(new%20TextDecoder).decode(i.report.subarray(0%2CMath.min(79%2Ci.report.byteLength))))%2C%5Bd.buffer%2Cnew%20Float32Array(c.buffer)%5D%7DreadSRC(t)%7Bthis.hdr%3Dnew%20Ue.NIFTI1%3Bconst%20e%3Dthis.hdr%3Be.littleEndian%3D!1%2Ce.dims%3D%5B3%2C1%2C1%2C1%2C0%2C0%2C0%2C0%5D%2Ce.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%3Bconst%20i%3DCe.readMatV4(t)%3Bif(!(%22dimension%22in%20i)%7C%7C!(%22image0%22in%20i))throw%20new%20Error(%22Not%20a%20valid%20DSIstudio%20SRC%20file%22)%3Blet%20s%3D0%2Cr%3D0%3Bfor(const%5Bt%2Ce%5Dof%20Object.entries(i))if(t.startsWith(%22image%22))%7Bif(0%3D%3D%3Ds%3Fr%3De.length%3Ar!%3D%3De.length%26%26(r%3D-1)%2Ce.constructor!%3D%3DUint16Array)throw%20new%20Error(%22DSIstudio%20SRC%20files%20always%20use%20Uint16%20datatype%22)%3Bs%2B%2B%7Dif(r%3C1%7C%7Cs%3C1)throw%20new%20Error(%22SRC%20file%20not%20valid%20DSI%20Studio%20data.%20The%20image(s)%20should%20have%20the%20same%20length%22)%3Be.numBitsPerVoxel%3D16%2Ce.datatypeCode%3D512%2Ce.dims%5B1%5D%3Di.dimension%5B0%5D%2Ce.dims%5B2%5D%3Di.dimension%5B1%5D%2Ce.dims%5B3%5D%3Di.dimension%5B2%5D%2Ce.dims%5B4%5D%3Ds%2Ce.dims%5B4%5D%3E1%26%26(e.dims%5B0%5D%3D4)%2Ce.pixDims%5B1%5D%3Di.voxel_size%5B0%5D%2Ce.pixDims%5B2%5D%3Di.voxel_size%5B1%5D%2Ce.pixDims%5B3%5D%3Di.voxel_size%5B2%5D%2Ce.sform_code%3D1%3Bconst%20n%3D.5*(e.dims%5B1%5D-1)*e.pixDims%5B1%5D%2Ca%3D.5*(e.dims%5B2%5D-1)*e.pixDims%5B2%5D%2Co%3D.5*(e.dims%5B3%5D-1)*e.pixDims%5B3%5D%3Be.affine%3D%5B%5Be.pixDims%5B1%5D%2C0%2C0%2C-n%5D%2C%5B0%2C-e.pixDims%5B2%5D%2C0%2Ca%5D%2C%5B0%2C0%2Ce.pixDims%5B2%5D%2C-o%5D%2C%5B0%2C0%2C0%2C1%5D%5D%2Ce.littleEndian%3D!0%3Bconst%20l%3De.dims%5B1%5D*e.dims%5B2%5D*e.dims%5B3%5D*(e.numBitsPerVoxel%2F8)%2Ch%3Dl*e.dims%5B4%5D%2Cc%3Dnew%20Uint8Array(new%20ArrayBuffer(h))%3Blet%20d%3D0%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)%7Bconst%20e%3Di%5B%60image%24%7Bt%7D%60%5D%2Cs%3Dnew%20Uint8Array(e.buffer%2Ce.byteOffset%2Ce.byteLength)%3Bc.set(s%2Cd)%2Cd%2B%3Dl%7Dreturn%22report%22in%20i%26%26(e.description%3D(new%20TextDecoder).decode(i.report.subarray(0%2CMath.min(79%2Ci.report.byteLength))))%2Cc.buffer%7DreadHEAD(t%2Ce)%7Bthis.hdr%3Dnew%20Ue.NIFTI1%3Bconst%20i%3Dthis.hdr%3Bi.dims%5B0%5D%3D3%2Ci.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%3Blet%20s%3D%5B0%2C0%2C0%5D%2Cr%3D%5B0%2C0%2C0%5D%2Cn%3D%5B1%2C1%2C1%5D%3Bconst%20a%3D(new%20TextDecoder).decode(t).split(%2F%5Cr%3F%5Cn%2F)%2Co%3D(t.byteLength%2B8)%2516%2Ch%3Dt.byteLength%2B(16-o)%3Bl.debug(t.byteLength%2C%22len%22%2Ch)%3Bconst%20c%3Dnew%20Uint8Array(h)%3Bc.fill(0)%2Cc.set(new%20Uint8Array(t))%3Bconst%20d%3Dnew%20Ue.NIFTIEXTENSION(h%2B8%2C42%2Cc%2C!0)%3Bi.addExtension(d)%2Ci.extensionCode%3D42%2Ci.extensionFlag%5B0%5D%3D1%2Ci.extensionSize%3Dh%2B8%3Bconst%20m%3Da.length%3Blet%20u%3D0%2CA%3D!1%3Bfor(%3Bu%3Cm%3B)%7Blet%20t%3Da%5Bu%5D%3Bif(u%2B%2B%2C!t.startsWith(%22type%22))continue%3Bconst%20e%3Dt.includes(%22integer-attribute%22)%2Co%3Dt.includes(%22float-attribute%22)%3Bif(t%3Da%5Bu%5D%2Cu%2B%2B%2C!t.startsWith(%22name%22))continue%3Blet%20h%3Dt.split(%22%3D%20%22)%3Bconst%20c%3Dh%5B1%5D%3Bt%3Da%5Bu%5D%2Cu%2B%2B%2Ch%3Dt.split(%22%3D%20%22)%3Blet%20d%3DparseInt(h%5B1%5D)%3Bif(!(d%3C1))%7Bif(t%3Da%5Bu%5D%2Cu%2B%2B%2Ch%3Dt.trim().split(%2F%5Cs%2B%2F)%2Co%7C%7Ce)%7Bfor(%3Bh.length%3Cd%3B)%7Bt%3Da%5Bu%5D%2Cu%2B%2B%3Bconst%20e%3Dt.trim().split(%2F%5Cs%2B%2F)%3Bh.push(...e)%7Dfor(let%20t%3D0%3Bt%3Cd%3Bt%2B%2B)h%5Bt%5D%3DparseFloat(h%5Bt%5D)%7Dswitch(c)%7Bcase%22BYTEORDER_STRING%22%3Ah%5B0%5D.includes(%22LSB_FIRST%22)%3Fi.littleEndian%3D!0%3Ah%5B0%5D.includes(%22MSB_FIRST%22)%26%26(i.littleEndian%3D!1)%3Bbreak%3Bcase%22BRICK_TYPES%22%3A%7Bi.dims%5B4%5D%3Dd%3Bconst%20t%3DparseInt(h%5B0%5D)%3B0%3D%3D%3Dt%3F(i.numBitsPerVoxel%3D8%2Ci.datatypeCode%3D2)%3A1%3D%3D%3Dt%3F(i.numBitsPerVoxel%3D16%2Ci.datatypeCode%3D4)%3A3%3D%3D%3Dt%3F(i.numBitsPerVoxel%3D32%2Ci.datatypeCode%3D16)%3Al.warn(%22Unknown%20BRICK_TYPES%20%22%2Ct)%7Dbreak%3Bcase%22IJK_TO_DICOM_REAL%22%3Aif(d%3C12)break%3BA%3D!0%2Ci.sform_code%3D2%2Ci.affine%3D%5B%5B-h%5B0%5D%2C-h%5B1%5D%2C-h%5B2%5D%2C-h%5B3%5D%5D%2C%5B-h%5B4%5D%2C-h%5B5%5D%2C-h%5B6%5D%2C-h%5B7%5D%5D%2C%5Bh%5B8%5D%2Ch%5B9%5D%2Ch%5B10%5D%2Ch%5B11%5D%5D%2C%5B0%2C0%2C0%2C1%5D%5D%3Bbreak%3Bcase%22DATASET_DIMENSIONS%22%3Ad%3DMath.max(d%2C3)%3Bfor(let%20t%3D0%3Bt%3Cd%3Bt%2B%2B)i.dims%5Bt%2B1%5D%3Dh%5Bt%5D%3Bbreak%3Bcase%22ORIENT_SPECIFIC%22%3As%3Dh%3Bbreak%3Bcase%22ORIGIN%22%3Ar%3Dh%3Bbreak%3Bcase%22DELTA%22%3An%3Dh%3Bbreak%3Bcase%22TAXIS_FLOATS%22%3Ai.pixDims%5B4%5D%3Dh%5B0%5D%3Bbreak%3Bdefault%3Al.warn(%22Unknown%3A%22%2Cc)%7D%7D%7DA%3Fthis.SetPixDimFromSForm()%3Athis.THD_daxes_to_NIFTI(n%2Cr%2Cs)%3Bconst%20f%3Di.numBitsPerVoxel%2F8*i.dims%5B1%5D*i.dims%5B2%5D*i.dims%5B3%5D*i.dims%5B4%5D%3Bif(!e)throw%20new%20Error(%22pairedImgData%20not%20set%22)%3Bif(e.byteLength%3Cf)%7Breturn%20Ye(new%20Uint8Array(e)).buffer%7Dreturn%20e.slice(0)%7DreadMHA(t%2Ce)%7Bconst%20i%3Dt.byteLength%3Bif(i%3C20)throw%20new%20Error(%22File%20too%20small%20to%20be%20VTK%3A%20bytes%20%3D%20%22%2Bt.byteLength)%3Bconst%20s%3Dnew%20Uint8Array(t)%3Blet%20r%3D0%3Bfunction%20n(t)%7Breturn%2010%3D%3D%3Dt%7C%7C13%3D%3D%3Dt%7Dfunction%20a()%7Bfor(%3Br%3Ci%26%26n(s%5Br%5D)%3B)r%2B%2B%3Bconst%20e%3Dr%3Bfor(%3Br%3Ci%26%26!n(s%5Br%5D)%3B)r%2B%2B%3Breturn%20r-e%3C2%3F%22%22%3A(new%20TextDecoder).decode(t.slice(e%2Cr))%7Dlet%20o%3Da()%3Bthis.hdr%3Dnew%20Ue.NIFTI1%3Bconst%20h%3Dthis.hdr%3Bh.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%2Ch.dims%3D%5B1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%5D%2Ch.littleEndian%3D!0%3Blet%20c%3D!1%2Cd%3D!1%3Bconst%20m%3DNe.fromValues(NaN%2C0%2C0%2C0%2C1%2C0%2C0%2C0%2C1)%2Cu%3DLe.fromValues(0%2C0%2C0)%3Bfor(%3B%22%22!%3D%3Do%3B)%7Blet%20t%3Do.split(%22%20%22)%3Bif(t.length%3E2%26%26(t%3Dt.slice(2))%2Co.startsWith(%22BinaryDataByteOrderMSB%22)%26%26t%5B0%5D.includes(%22False%22)%26%26(h.littleEndian%3D!0)%2Co.startsWith(%22BinaryDataByteOrderMSB%22)%26%26t%5B0%5D.includes(%22True%22)%26%26(h.littleEndian%3D!1)%2Co.startsWith(%22CompressedData%22)%26%26t%5B0%5D.includes(%22True%22)%26%26(c%3D!0)%2Co.startsWith(%22TransformMatrix%22))for(let%20e%3D0%3Be%3C9%3Be%2B%2B)m%5Be%5D%3DparseFloat(t%5Be%5D)%3Bif(o.startsWith(%22Offset%22))for(let%20e%3D0%3Be%3CMath.min(t.length%2C3)%3Be%2B%2B)u%5Be%5D%3DparseFloat(t%5Be%5D)%3Bif(o.startsWith(%22ElementSpacing%22))for(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)h.pixDims%5Be%2B1%5D%3DparseFloat(t%5Be%5D)%3Bif(o.startsWith(%22DimSize%22))%7Bh.dims%5B0%5D%3Dt.length%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)h.dims%5Be%2B1%5D%3DparseInt(t%5Be%5D)%7Dif(o.startsWith(%22ElementType%22))switch(t%5B0%5D)%7Bcase%22MET_UCHAR%22%3Ah.numBitsPerVoxel%3D8%2Ch.datatypeCode%3D2%3Bbreak%3Bcase%22MET_CHAR%22%3Ah.numBitsPerVoxel%3D8%2Ch.datatypeCode%3D256%3Bbreak%3Bcase%22MET_SHORT%22%3Ah.numBitsPerVoxel%3D16%2Ch.datatypeCode%3D4%3Bbreak%3Bcase%22MET_USHORT%22%3Ah.numBitsPerVoxel%3D16%2Ch.datatypeCode%3D512%3Bbreak%3Bcase%22MET_INT%22%3Ah.numBitsPerVoxel%3D32%2Ch.datatypeCode%3D8%3Bbreak%3Bcase%22MET_UINT%22%3Ah.numBitsPerVoxel%3D32%2Ch.datatypeCode%3D768%3Bbreak%3Bcase%22MET_FLOAT%22%3Ah.numBitsPerVoxel%3D32%2Ch.datatypeCode%3D16%3Bbreak%3Bcase%22MET_DOUBLE%22%3Ah.numBitsPerVoxel%3D64%2Ch.datatypeCode%3D64%3Bbreak%3Bdefault%3Athrow%20new%20Error(%22Unsupported%20MHA%20data%20type%3A%20%22%2Bt%5B0%5D)%7Dif(o.startsWith(%22ObjectType%22)%26%26!t%5B0%5D.includes(%22Image%22)%26%26l.warn(%22Only%20able%20to%20read%20ObjectType%20%3D%20Image%2C%20not%20%22%2Bo)%2Co.startsWith(%22ElementDataFile%22))%7B%22LOCAL%22!%3D%3Dt%5B0%5D%26%26(d%3D!0)%3Bbreak%7Do%3Da()%7Dconst%20A%3DNe.fromValues(h.pixDims%5B1%5D%2C0%2C0%2C0%2Ch.pixDims%5B2%5D%2C0%2C0%2C0%2Ch.pixDims%5B3%5D)%3Bfor(Ne.multiply(m%2Cm%2CA)%2Ch.affine%3D%5B%5B-m%5B0%5D%2C-m%5B3%5D%2C-m%5B6%5D%2C-u%5B0%5D%5D%2C%5B-m%5B1%5D%2C-m%5B4%5D%2C-m%5B7%5D%2C-u%5B1%5D%5D%2C%5Bm%5B2%5D%2Cm%5B5%5D%2Cm%5B8%5D%2Cu%5B2%5D%5D%2C%5B0%2C0%2C0%2C1%5D%5D%3B10%3D%3D%3Ds%5Br%5D%3B)r%2B%2B%3Breturn%20h.vox_offset%3Dr%2Cd%26%26e%3Fc%3FYe(new%20Uint8Array(e.slice(0))).buffer%3Ae.slice(0)%3Ac%3FYe(new%20Uint8Array(t.slice(h.vox_offset))).buffer%3At.slice(h.vox_offset)%7DreadMIF(t%2Ce)%7Bthis.hdr%3Dnew%20Ue.NIFTI1%3Bconst%20i%3Dthis.hdr%3Bi.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%2Ci.dims%3D%5B1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%5D%3Blet%20s%3Dt.byteLength%3Bif(s%3C20)throw%20new%20Error(%22File%20too%20small%20to%20be%20MIF%3A%20bytes%20%3D%20%22%2Bs)%3Bconst%20r%3Dnew%20Uint8Array(t)%3Bif(31%3D%3D%3Dr%5B0%5D%26%26139%3D%3D%3Dr%5B1%5D)%7Bl.debug(%22MIF%20with%20GZ%20decompression%22)%3Bconst%20e%3DYe(new%20Uint8Array(t))%3Bt%3De.buffer%2Cs%3Dt.byteLength%7Dlet%20n%3D0%3Bfunction%20a()%7Bfor(%3Bn%3Cs%26%2610%3D%3D%3Dr%5Bn%5D%3B)n%2B%2B%3Bconst%20e%3Dn%3Bfor(%3Bn%3Cs%26%2610!%3D%3Dr%5Bn%5D%3B)n%2B%2B%3Breturn%20n%2B%2B%2Cn-e%3C1%3F%22%22%3A(new%20TextDecoder).decode(t.slice(e%2Cn-1))%7Dlet%20o%3Da()%3Bif(!o.startsWith(%22mrtrix%20image%22))throw%20new%20Error(%22Not%20a%20valid%20MIF%20file%22)%3Bconst%20h%3D%5B%5D%3Blet%20c%3D!1%2Cd%3D0%2Cm%3D0%2Cu%3D!1%3Bfor(o%3Da()%3Bn%3Cs%26%26!o.startsWith(%22END%22)%3B)%7Blet%20t%3Do.split(%22%3A%22)%3Bif(o%3Da()%2Ct.length%3C2)break%3Bconst%20e%3Dt%5B0%5D%3Bt%3Dt%5B1%5D.split(%22%2C%22)%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)t%5Be%5D%3Dt%5Be%5D.trim()%3Bswitch(e)%7Bcase%22dim%22%3Ai.dims%5B0%5D%3Dt.length%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)i.dims%5Be%2B1%5D%3DparseInt(t%5Be%5D)%3Bbreak%3Bcase%22vox%22%3Afor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)i.pixDims%5Be%2B1%5D%3DparseFloat(t%5Be%5D)%2CisNaN(i.pixDims%5Be%2B1%5D)%26%26(i.pixDims%5Be%2B1%5D%3D0)%3Bbreak%3Bcase%22layout%22%3Afor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)h.push(parseInt(t%5Be%5D))%3Bbreak%3Bcase%22datatype%22%3A%7Bconst%20e%3Dt%5B0%5D%3Be.startsWith(%22Bit%22)%3F(c%3D!0%2Ci.datatypeCode%3D2)%3Ae.startsWith(%22Int8%22)%3Fi.datatypeCode%3D256%3Ae.startsWith(%22UInt8%22)%3Fi.datatypeCode%3D2%3Ae.startsWith(%22Int16%22)%3Fi.datatypeCode%3D4%3Ae.startsWith(%22UInt16%22)%3Fi.datatypeCode%3D512%3Ae.startsWith(%22Int32%22)%3Fi.datatypeCode%3D8%3Ae.startsWith(%22UInt32%22)%3Fi.datatypeCode%3D768%3Ae.startsWith(%22Float32%22)%3Fi.datatypeCode%3D16%3Ae.startsWith(%22Float64%22)%3Fi.datatypeCode%3D64%3Al.warn(%22Unsupported%20datatype%20%22%2Be)%2Ce.includes(%228%22)%3Fi.numBitsPerVoxel%3D8%3Ae.includes(%2216%22)%3Fi.numBitsPerVoxel%3D16%3Ae.includes(%2232%22)%3Fi.numBitsPerVoxel%3D32%3Ae.includes(%2264%22)%26%26(i.numBitsPerVoxel%3D64)%2Ci.littleEndian%3D!0%2Ce.endsWith(%22LE%22)%26%26(i.littleEndian%3D!0)%2Ce.endsWith(%22BE%22)%26%26(i.littleEndian%3D!1)%7Dbreak%3Bcase%22transform%22%3Aif(d%3E2%7C%7C4!%3D%3Dt.length)break%3Bi.affine%5Bd%5D%5B0%5D%3DparseFloat(t%5B0%5D)%2Ci.affine%5Bd%5D%5B1%5D%3DparseFloat(t%5B1%5D)%2Ci.affine%5Bd%5D%5B2%5D%3DparseFloat(t%5B2%5D)%2Ci.affine%5Bd%5D%5B3%5D%3DparseFloat(t%5B3%5D)%2Cd%2B%2B%3Bbreak%3Bcase%22comments%22%3Ai.description%3Dt%5B0%5D.substring(0%2CMath.min(79%2Ct%5B0%5D.length))%3Bbreak%3Bcase%22RepetitionTime%22%3Am%3DparseFloat(t%5B0%5D)%3Bbreak%3Bcase%22file%22%3Au%3D!t%5B0%5D.startsWith(%22.%20%22)%2Cu%7C%7C(t%3Dt%5B0%5D.split(%22%20%22)%2Ci.vox_offset%3DparseInt(t%5B1%5D))%7D%7Dconst%20A%3Di.dims%5B0%5D%3BA%3E5%26%26l.warn(%22reader%20only%20designed%20for%20a%20maximum%20of%205%20dimensions%20(XYZTD)%22)%3Blet%20f%2Cg%3D1%3Bfor(let%20t%3D0%3Bt%3CA%3Bt%2B%2B)g*%3DMath.max(i.dims%5Bt%2B1%5D%2C1)%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)for(let%20e%3D0%3Be%3C3%3Be%2B%2B)i.affine%5Bt%5D%5Be%5D*%3Di.pixDims%5Be%2B1%5D%3Bif(l.debug(%22mif%20affine%3A%22%2Bi.affine%5B0%5D)%2Cm%3E0%26%26(i.pixDims%5B4%5D%3Dm)%2Cu%26%26!e%26%26l.warn(%22MIH%20header%20provided%20without%20paired%20image%20data%22)%2Ce%26%26u)f%3De.slice(0)%3Belse%20if(c)%7Bi.numBitsPerVoxel%3D8%3Bconst%20e%3Dnew%20Uint8Array(g)%2Cs%3Dt.slice(i.vox_offset%2Ci.vox_offset%2BMath.ceil(g%2F8))%2Cr%3Dnew%20Uint8Array(s)%3Blet%20n%3D0%3Bfor(let%20t%3D0%3Bt%3Cg%3Bt%2B%2B)%7Bconst%20i%3Dt%258%3Be%5Bt%5D%3Dr%5Bn%5D%3E%3E7-i%261%2C7%3D%3D%3Di%26%26n%2B%2B%7Df%3De.buffer%7Delse%20f%3Dt.slice(i.vox_offset%2Ci.vox_offset%2Bg*(i.numBitsPerVoxel%2F8))%3Bh.length!%3D%3Di.dims%5B0%5D%26%26l.warn(%22dims%20does%20not%20match%20layout%22)%3Blet%20p%3D1%3Bconst%20v%3D%5B1%2C1%2C1%2C1%2C1%5D%2Cx%3D%5B!1%2C!1%2C!1%2C!1%2C!1%5D%3Bfor(let%20t%3D0%3Bt%3Ch.length%3Bt%2B%2B)for(let%20e%3D0%3Be%3Ch.length%3Be%2B%2B)%7BMath.abs(h%5Be%5D)%3D%3D%3Dt%26%26(v%5Be%5D%3Dp%2C(h%5Be%5D%3C0%7C%7CObject.is(h%5Be%5D%2C-0))%26%26(x%5Be%5D%3D!0)%2Cp*%3Di.dims%5Be%2B1%5D)%7Dlet%20w%3DCe.range(0%2Ci.dims%5B1%5D-1%2C1)%3Bx%5B0%5D%26%26(w%3DCe.range(i.dims%5B1%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ci.dims%5B1%5D%3Bt%2B%2B)w%5Bt%5D*%3Dv%5B0%5D%3Blet%20C%3DCe.range(0%2Ci.dims%5B2%5D-1%2C1)%3Bx%5B1%5D%26%26(C%3DCe.range(i.dims%5B2%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ci.dims%5B2%5D%3Bt%2B%2B)C%5Bt%5D*%3Dv%5B1%5D%3Blet%20b%3DCe.range(0%2Ci.dims%5B3%5D-1%2C1)%3Bx%5B2%5D%26%26(b%3DCe.range(i.dims%5B3%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ci.dims%5B3%5D%3Bt%2B%2B)b%5Bt%5D*%3Dv%5B2%5D%3Blet%20y%3DCe.range(0%2Ci.dims%5B4%5D-1%2C1)%3Bx%5B3%5D%26%26(y%3DCe.range(i.dims%5B4%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ci.dims%5B4%5D%3Bt%2B%2B)y%5Bt%5D*%3Dv%5B3%5D%3Blet%20I%3DCe.range(0%2Ci.dims%5B5%5D-1%2C1)%3Bx%5B4%5D%26%26(I%3DCe.range(i.dims%5B5%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ci.dims%5B5%5D%3Bt%2B%2B)I%5Bt%5D*%3Dv%5B4%5D%3Blet%20M%2CD%2CF%3D0%3Bswitch(i.datatypeCode)%7Bcase%20256%3AM%3Dnew%20Int8Array(f)%2CD%3Dnew%20Int8Array(g)%3Bbreak%3Bcase%202%3AM%3Dnew%20Uint8Array(f)%2CD%3Dnew%20Uint8Array(g)%3Bbreak%3Bcase%204%3AM%3Dnew%20Int16Array(f)%2CD%3Dnew%20Int16Array(g)%3Bbreak%3Bcase%20512%3AM%3Dnew%20Uint16Array(f)%2CD%3Dnew%20Uint16Array(g)%3Bbreak%3Bcase%208%3AM%3Dnew%20Int32Array(f)%2CD%3Dnew%20Int32Array(g)%3Bbreak%3Bcase%20768%3AM%3Dnew%20Uint32Array(f)%2CD%3Dnew%20Uint32Array(g)%3Bbreak%3Bcase%2016%3AM%3Dnew%20Float32Array(f)%2CD%3Dnew%20Float32Array(g)%3Bbreak%3Bcase%2064%3AM%3Dnew%20Float64Array(f)%2CD%3Dnew%20Float64Array(g)%3Bbreak%3Bdefault%3Athrow%20new%20Error(%22unknown%20datatypeCode%22)%7Dfor(let%20t%3D0%3Bt%3Ci.dims%5B5%5D%3Bt%2B%2B)for(let%20e%3D0%3Be%3Ci.dims%5B4%5D%3Be%2B%2B)for(let%20s%3D0%3Bs%3Ci.dims%5B3%5D%3Bs%2B%2B)for(let%20r%3D0%3Br%3Ci.dims%5B2%5D%3Br%2B%2B)for(let%20n%3D0%3Bn%3Ci.dims%5B1%5D%3Bn%2B%2B)D%5BF%5D%3DM%5Bw%5Bn%5D%2BC%5Br%5D%2Bb%5Bs%5D%2By%5Be%5D%2BI%5Bt%5D%5D%2CF%2B%2B%3Breturn%20D%7DreadNRRD(t%2Ce)%7Bthis.hdr%3Dnew%20Ue.NIFTI1%3Bconst%20i%3Dthis.hdr%3Bi.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%3Bconst%20s%3Dt.byteLength%3Blet%20r%3Dnull%3Bconst%20n%3Dnew%20Uint8Array(t)%3Bfor(let%20e%3D1%3Be%3Cs%3Be%2B%2B)if(10%3D%3D%3Dn%5Be-1%5D%26%2610%3D%3D%3Dn%5Be%5D)%7Bconst%20s%3Dt.slice(0%2Ce-1)%3Br%3D(new%20TextDecoder).decode(s)%2Ci.vox_offset%3De%2B1%3Bbreak%7Dif(null%3D%3D%3Dr)throw%20new%20Error(%22could%20not%20extract%20txt%22)%3Bconst%20a%3Dr.split(%22%5Cn%22)%3Ba%5B0%5D.startsWith(%22NRRD%22)%7C%7Calert(%22Invalid%20NRRD%20image%22)%3Bconst%20o%3Da.length%3Blet%20h%3D!1%2Cc%3D!1%2Cd%3D!1%3Bconst%20m%3DNe.fromValues(NaN%2C0%2C0%2C0%2C1%2C0%2C0%2C0%2C1)%2Cu%3DLe.fromValues(0%2C0%2C0)%3Blet%20A%3DNe.create()%3Bfor(let%20t%3D1%3Bt%3Co%3Bt%2B%2B)%7Blet%20e%3Da%5Bt%5D%3Bif(%22%23%22%3D%3D%3De%5B0%5D)continue%3Be%3De.toLowerCase()%3Bconst%20s%3De.split(%22%3A%22)%3Bif(s.length%3C2)continue%3Bconst%20r%3Ds%5B0%5D.trim()%3Blet%20n%3Ds%5B1%5D.trim()%3Bswitch(n%3Dn.replaceAll(%22)%22%2C%22%20%22)%2Cn%3Dn.replaceAll(%22(%22%2C%22%20%22)%2Cn%3Dn.trim()%2Cr)%7Bcase%22data%20file%22%3Ad%3D!0%3Bbreak%3Bcase%22encoding%22%3An.includes(%22raw%22)%3Fh%3D!1%3An.includes(%22gz%22)%3Fh%3D!0%3Aalert(%22Unsupported%20NRRD%20encoding%22)%3Bbreak%3Bcase%22type%22%3Aswitch(n)%7Bcase%22uchar%22%3Acase%22unsigned%20char%22%3Acase%22uint8%22%3Acase%22uint8_t%22%3Ai.numBitsPerVoxel%3D8%2Ci.datatypeCode%3D2%3Bbreak%3Bcase%22signed%20char%22%3Acase%22int8%22%3Acase%22int8_t%22%3Ai.numBitsPerVoxel%3D8%2Ci.datatypeCode%3D256%3Bbreak%3Bcase%22short%22%3Acase%22short%20int%22%3Acase%22signed%20short%22%3Acase%22signed%20short%20int%22%3Acase%22int16%22%3Acase%22int16_t%22%3Ai.numBitsPerVoxel%3D16%2Ci.datatypeCode%3D4%3Bbreak%3Bcase%22ushort%22%3Acase%22unsigned%20short%22%3Acase%22unsigned%20short%20int%22%3Acase%22uint16%22%3Acase%22uint16_t%22%3Ai.numBitsPerVoxel%3D16%2Ci.datatypeCode%3D512%3Bbreak%3Bcase%22int%22%3Acase%22signed%20int%22%3Acase%22int32%22%3Acase%22int32_t%22%3Ai.numBitsPerVoxel%3D32%2Ci.datatypeCode%3D8%3Bbreak%3Bcase%22uint%22%3Acase%22unsigned%20int%22%3Acase%22uint32%22%3Acase%22uint32_t%22%3Ai.numBitsPerVoxel%3D32%2Ci.datatypeCode%3D768%3Bbreak%3Bcase%22float%22%3Ai.numBitsPerVoxel%3D32%2Ci.datatypeCode%3D16%3Bbreak%3Bcase%22double%22%3Ai.numBitsPerVoxel%3D64%2Ci.datatypeCode%3D64%3Bbreak%3Bdefault%3Athrow%20new%20Error(%22Unsupported%20NRRD%20data%20type%3A%20%22%2Bn)%7Dbreak%3Bcase%22spacings%22%3A%7Bconst%20t%3Dn.split(%2F%5B%20%2C%5D%2B%2F)%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)i.pixDims%5Be%2B1%5D%3DparseFloat(t%5Be%5D)%7Dbreak%3Bcase%22sizes%22%3A%7Bconst%20t%3Dn.split(%2F%5B%20%2C%5D%2B%2F)%3Bi.dims%5B0%5D%3Dt.length%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)i.dims%5Be%2B1%5D%3DparseInt(t%5Be%5D)%7Dbreak%3Bcase%22endian%22%3An.includes(%22little%22)%3Fi.littleEndian%3D!0%3An.includes(%22big%22)%26%26(i.littleEndian%3D!1)%3Bbreak%3Bcase%22space%20directions%22%3A%7Bconst%20t%3Dn.split(%2F%5B%20%2C%5D%2B%2F)%3Bif(9!%3D%3Dt.length)break%3Bfor(let%20e%3D0%3Be%3C9%3Be%2B%2B)m%5Be%5D%3DparseFloat(t%5Be%5D)%7Dbreak%3Bcase%22space%20origin%22%3A%7Bconst%20t%3Dn.split(%2F%5B%20%2C%5D%2B%2F)%3Bif(3!%3D%3Dt.length)break%3Bu%5B0%5D%3DparseFloat(t%5B0%5D)%2Cu%5B1%5D%3DparseFloat(t%5B1%5D)%2Cu%5B2%5D%3DparseFloat(t%5B2%5D)%7Dbreak%3Bcase%22space%20units%22%3An.includes(%22microns%22)%26%26(c%3D!0)%3Bbreak%3Bcase%22space%22%3An.includes(%22right-anterior-superior%22)%7C%7Cn.includes(%22ras%22)%3FA%3DNe.fromValues(1%2C0%2C0%2C0%2C1%2C0%2C0%2C0%2C1)%3An.includes(%22left-anterior-superior%22)%7C%7Cn.includes(%22las%22)%3FA%3DNe.fromValues(-1%2C0%2C0%2C0%2C1%2C0%2C0%2C0%2C1)%3An.includes(%22left-posterior-superior%22)%7C%7Cn.includes(%22lps%22)%3FA%3DNe.fromValues(-1%2C0%2C0%2C0%2C-1%2C0%2C0%2C0%2C1)%3Al.warn(%22Unsupported%20NRRD%20space%20value%3A%22%2Cn)%3Bbreak%3Bdefault%3Al.warn(%22Unknown%3A%22%2Cr)%7D%7Dif(!isNaN(m%5B0%5D))%7Bthis.hdr.sform_code%3D2%2Cc%26%26(Pe.multiplyScalar(m%2Cm%2C.001)%2Cu%5B0%5D*%3D.001%2Cu%5B1%5D*%3D.001%2Cu%5B2%5D*%3D.001)%2CA%5B0%5D%3C0%26%26(u%5B0%5D%3D-u%5B0%5D)%2CA%5B4%5D%3C0%26%26(u%5B1%5D%3D-u%5B1%5D)%2CA%5B8%5D%3C0%26%26(u%5B2%5D%3D-u%5B2%5D)%2CNe.multiply(m%2CA%2Cm)%3Bconst%20t%3DPe.fromValues(m%5B0%5D%2Cm%5B3%5D%2Cm%5B6%5D%2Cu%5B0%5D%2Cm%5B1%5D%2Cm%5B4%5D%2Cm%5B7%5D%2Cu%5B1%5D%2Cm%5B2%5D%2Cm%5B5%5D%2Cm%5B8%5D%2Cu%5B2%5D%2C0%2C0%2C0%2C1)%2Ce%3Dthis.vox2mm(%5B0%2C0%2C0%5D%2Ct)%2Cs%3Dthis.vox2mm(%5B1%2C0%2C0%5D%2Ct)%3BLe.subtract(s%2Cs%2Ce)%3Bconst%20r%3Dthis.vox2mm(%5B0%2C1%2C0%5D%2Ct)%3BLe.subtract(r%2Cr%2Ce)%3Bconst%20n%3Dthis.vox2mm(%5B0%2C0%2C1%5D%2Ct)%3BLe.subtract(n%2Cn%2Ce)%2Ci.pixDims%5B1%5D%3DLe.length(s)%2Ci.pixDims%5B2%5D%3DLe.length(r)%2Ci.pixDims%5B3%5D%3DLe.length(n)%2Ci.affine%3D%5B%5Bt%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2Ct%5B3%5D%5D%2C%5Bt%5B4%5D%2Ct%5B5%5D%2Ct%5B6%5D%2Ct%5B7%5D%5D%2C%5Bt%5B8%5D%2Ct%5B9%5D%2Ct%5B10%5D%2Ct%5B11%5D%5D%2C%5B0%2C0%2C0%2C1%5D%5D%7Dreturn%20d%26%26e%3Fe.slice(0)%3A(d%26%26l.warn(%22Missing%20data%3A%20NRRD%20header%20describes%20detached%20data%20file%20but%20only%20one%20URL%20provided%22)%2Ch%3FYe(new%20Uint8Array(t.slice(i.vox_offset))).buffer%3At.slice(i.vox_offset))%7DcalculateRAS()%7Bif(!this.hdr)throw%20new%20Error(%22hdr%20not%20set%22)%3Bconst%20t%3Dthis.hdr.affine%2Ce%3Dthis.hdr%2Ci%3DNe.fromValues(Math.abs(t%5B0%5D%5B0%5D)%2CMath.abs(t%5B0%5D%5B1%5D)%2CMath.abs(t%5B0%5D%5B2%5D)%2CMath.abs(t%5B1%5D%5B0%5D)%2CMath.abs(t%5B1%5D%5B1%5D)%2CMath.abs(t%5B1%5D%5B2%5D)%2CMath.abs(t%5B2%5D%5B0%5D)%2CMath.abs(t%5B2%5D%5B1%5D)%2CMath.abs(t%5B2%5D%5B2%5D))%2Cs%3D%5B1%2C1%2C1%5D%3Bi%5B3%5D%3Ei%5B0%5D%26%26(s%5B0%5D%3D2)%2Ci%5B6%5D%3Ei%5B0%5D%26%26i%5B6%5D%3Ei%5B3%5D%26%26(s%5B0%5D%3D3)%2Cs%5B1%5D%3D1%2C1%3D%3D%3Ds%5B0%5D%3Fi%5B4%5D%3Ei%5B7%5D%3Fs%5B1%5D%3D2%3As%5B1%5D%3D3%3A2%3D%3D%3Ds%5B0%5D%3Fi%5B1%5D%3Ei%5B7%5D%3Fs%5B1%5D%3D1%3As%5B1%5D%3D3%3Ai%5B1%5D%3Ei%5B4%5D%3Fs%5B1%5D%3D1%3As%5B1%5D%3D2%2Cs%5B2%5D%3D6-s%5B1%5D-s%5B0%5D%3Blet%20r%3D%5B1%2C2%2C3%5D%3Br%5Bs%5B0%5D-1%5D%3D1%2Cr%5Bs%5B1%5D-1%5D%3D2%2Cr%5Bs%5B2%5D-1%5D%3D3%3Blet%20n%3DPe.fromValues(t%5B0%5D%5B0%5D%2Ct%5B0%5D%5B1%5D%2Ct%5B0%5D%5B2%5D%2Ct%5B0%5D%5B3%5D%2Ct%5B1%5D%5B0%5D%2Ct%5B1%5D%5B1%5D%2Ct%5B1%5D%5B2%5D%2Ct%5B1%5D%5B3%5D%2Ct%5B2%5D%5B0%5D%2Ct%5B2%5D%5B1%5D%2Ct%5B2%5D%5B2%5D%2Ct%5B2%5D%5B3%5D%2C0%2C0%2C0%2C1)%3Bthis.mm000%3Dthis.vox2mm(%5B-.5%2C-.5%2C-.5%5D%2Cn)%2Cthis.mm100%3Dthis.vox2mm(%5Be.dims%5B1%5D-.5%2C-.5%2C-.5%5D%2Cn)%2Cthis.mm010%3Dthis.vox2mm(%5B-.5%2Ce.dims%5B2%5D-.5%2C-.5%5D%2Cn)%2Cthis.mm001%3Dthis.vox2mm(%5B-.5%2C-.5%2Ce.dims%5B3%5D-.5%5D%2Cn)%3Bconst%20a%3DPe.create()%3BPe.copy(a%2Cn)%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)for(let%20e%3D0%3Be%3C3%3Be%2B%2B)a%5B4*t%2Be%5D%3Dn%5B4*t%2Br%5Be%5D-1%5D%3Bconst%20o%3D%5B0%2C0%2C0%5D%3Ba%5B0%5D%3C0%26%26(o%5B0%5D%3D1)%2Ca%5B5%5D%3C0%26%26(o%5B1%5D%3D1)%2Ca%5B10%5D%3C0%26%26(o%5B2%5D%3D1)%2Cthis.dimsRAS%3D%5Be.dims%5B0%5D%2Ce.dims%5Br%5B0%5D%5D%2Ce.dims%5Br%5B1%5D%5D%2Ce.dims%5Br%5B2%5D%5D%5D%2Cthis.pixDimsRAS%3D%5Be.pixDims%5B0%5D%2Ce.pixDims%5Br%5B0%5D%5D%2Ce.pixDims%5Br%5B1%5D%5D%2Ce.pixDims%5Br%5B2%5D%5D%5D%2Cthis.permRAS%3Dr.slice()%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)1%3D%3D%3Do%5Bt%5D%26%26(this.permRAS%5Bt%5D%3D-this.permRAS%5Bt%5D)%3Bif(this.arrayEquals(r%2C%5B1%2C2%2C3%5D)%26%26this.arrayEquals(o%2C%5B0%2C0%2C0%5D))return%20this.toRAS%3DPe.create()%2Cthis.matRAS%3DPe.clone(n)%2Cthis.calculateOblique()%2Cthis.img2RASstep%3D%5B1%2Cthis.dimsRAS%5B1%5D%2Cthis.dimsRAS%5B1%5D*this.dimsRAS%5B2%5D%5D%2Cvoid(this.img2RASstart%3D%5B0%2C0%2C0%5D)%3BPe.identity(n)%2Cn%5B0%5D%3D1-2*o%5B0%5D%2Cn%5B5%5D%3D1-2*o%5B1%5D%2Cn%5B10%5D%3D1-2*o%5B2%5D%2Cn%5B3%5D%3D(e.dims%5Br%5B0%5D%5D-1)*o%5B0%5D%2Cn%5B7%5D%3D(e.dims%5Br%5B1%5D%5D-1)*o%5B1%5D%2Cn%5B11%5D%3D(e.dims%5Br%5B2%5D%5D-1)*o%5B2%5D%3Bconst%20h%3DPe.create()%3BPe.invert(h%2Cn)%2CPe.multiply(h%2Ch%2Ca)%2Cthis.matRAS%3DPe.clone(h)%2Cn%3DPe.fromValues(0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C1)%2Cn%5Br%5B0%5D-1%2B0%5D%3D2*-o%5B0%5D%2B1%2Cn%5Br%5B1%5D-1%2B4%5D%3D2*-o%5B1%5D%2B1%2Cn%5Br%5B2%5D-1%2B8%5D%3D2*-o%5B2%5D%2B1%2Cn%5B3%5D%3Do%5B0%5D%2Cn%5B7%5D%3Do%5B1%5D%2Cn%5B11%5D%3Do%5B2%5D%2Cthis.toRAS%3DPe.clone(n)%2Cn%5B3%5D%3D0%2Cn%5B7%5D%3D0%2Cn%5B11%5D%3D0%2Cn%5B12%5D%3D0%2C-1!%3D%3Dthis.permRAS%5B0%5D%26%26-1!%3D%3Dthis.permRAS%5B1%5D%26%26-1!%3D%3Dthis.permRAS%5B2%5D%7C%7C(n%5B12%5D%3De.dims%5B1%5D-1)%2Cn%5B13%5D%3D0%2C-2!%3D%3Dthis.permRAS%5B0%5D%26%26-2!%3D%3Dthis.permRAS%5B1%5D%26%26-2!%3D%3Dthis.permRAS%5B2%5D%7C%7C(n%5B13%5D%3De.dims%5B2%5D-1)%2Cn%5B14%5D%3D0%2C-3!%3D%3Dthis.permRAS%5B0%5D%26%26-3!%3D%3Dthis.permRAS%5B1%5D%26%26-3!%3D%3Dthis.permRAS%5B2%5D%7C%7C(n%5B14%5D%3De.dims%5B3%5D-1)%2Cthis.toRASvox%3DPe.clone(n)%2Cl.debug(this.hdr.dims)%2Cl.debug(this.dimsRAS)%3Bconst%20c%3Dthis.hdr%3Br%3Dthis.permRAS%3Bconst%20d%3D%5BMath.abs(r%5B0%5D)%2CMath.abs(r%5B1%5D)%2CMath.abs(r%5B2%5D)%5D%2Cm%3D%5Bc.dims%5Bd%5B0%5D%5D%2Cc.dims%5Bd%5B1%5D%5D%2Cc.dims%5Bd%5B2%5D%5D%5D%2Cu%3D%5B1%2Cc.dims%5B1%5D%2Cc.dims%5B1%5D*c.dims%5B2%5D%5D%2CA%3D%5Bu%5Bd%5B0%5D-1%5D%2Cu%5Bd%5B1%5D-1%5D%2Cu%5Bd%5B2%5D-1%5D%5D%2Cf%3D%5B0%2C0%2C0%5D%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)r%5Bt%5D%3C0%26%26(f%5Bt%5D%3DA%5Bt%5D*(m%5Bt%5D-1)%2CA%5Bt%5D%3D-A%5Bt%5D)%3Bthis.img2RASstep%3DA%2Cthis.img2RASstart%3Df%2Cthis.calculateOblique()%7Dimg2RAS()%7Bif(!this.permRAS)throw%20new%20Error(%22permRAS%20undefined%22)%3Bif(!this.img)throw%20new%20Error(%22img%20undefined%22)%3Bif(!this.hdr)throw%20new%20Error(%22hdr%20undefined%22)%3Bconst%20t%3Dthis.permRAS.slice()%3Bif(1%3D%3D%3Dt%5B0%5D%26%262%3D%3D%3Dt%5B1%5D%26%263%3D%3D%3Dt%5B2%5D)return%20this.img%3Bconst%20e%3Dthis.hdr%2Ci%3Dthis.img.slice(0%2Ce.dims%5B1%5D*e.dims%5B1%5D*e.dims%5B2%5D*e.dims%5B3%5D)%2Cs%3D%5BMath.abs(t%5B0%5D)%2CMath.abs(t%5B1%5D)%2CMath.abs(t%5B2%5D)%5D%2Cr%3D%5Be.dims%5Bs%5B0%5D%5D%2Ce.dims%5Bs%5B1%5D%5D%2Ce.dims%5Bs%5B2%5D%5D%5D%2Cn%3D%5B1%2Ce.dims%5B1%5D%2Ce.dims%5B1%5D*e.dims%5B2%5D%5D%2Ca%3D%5Bn%5Bs%5B0%5D-1%5D%2Cn%5Bs%5B1%5D-1%5D%2Cn%5Bs%5B2%5D-1%5D%5D%2Co%3D%5B0%2C0%2C0%5D%3Bfor(let%20e%3D0%3Be%3C3%3Be%2B%2B)t%5Be%5D%3C0%26%26(o%5Be%5D%3Da%5Be%5D*(r%5Be%5D-1)%2Ca%5Be%5D%3D-a%5Be%5D)%3Blet%20l%3D0%3Bfor(let%20t%3D0%3Bt%3Cr%5B2%5D%3Bt%2B%2B)%7Bconst%20e%3Do%5B2%5D%2Bt*a%5B2%5D%3Bfor(let%20t%3D0%3Bt%3Cr%5B1%5D%3Bt%2B%2B)%7Bconst%20s%3Do%5B1%5D%2Bt*a%5B1%5D%3Bfor(let%20t%3D0%3Bt%3Cr%5B0%5D%3Bt%2B%2B)%7Bconst%20r%3Do%5B0%5D%2Bt*a%5B0%5D%3Bi%5Bl%5D%3Dthis.img%5Br%2Bs%2Be%5D%2Cl%2B%2B%7D%7D%7Dreturn%20i%7Dvox2mm(t%2Ce)%7Bconst%20i%3DPe.clone(e)%3BPe.transpose(i%2Ci)%3Bconst%20s%3Dke.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2C1)%3Bke.transformMat4(s%2Cs%2Ci)%3Breturn%20Le.fromValues(s%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D)%7Dmm2vox(t%2Ce%3D!1)%7Bif(!this.matRAS)throw%20new%20Error(%22matRAS%20undefined%22)%3Bconst%20i%3DPe.clone(this.matRAS)%2Cs%3DPe.clone(i)%3BPe.transpose(s%2Ci)%2CPe.invert(s%2Cs)%3Bconst%20r%3Dke.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2C1)%3Bke.transformMat4(r%2Cr%2Cs)%3Bconst%20n%3DLe.fromValues(r%5B0%5D%2Cr%5B1%5D%2Cr%5B2%5D)%3Breturn%20e%3Fn%3A%5BMath.round(n%5B0%5D)%2CMath.round(n%5B1%5D)%2CMath.round(n%5B2%5D)%5D%7DarrayEquals(t%2Ce)%7Breturn%20Array.isArray(t)%26%26Array.isArray(e)%26%26t.length%3D%3D%3De.length%26%26t.every(((t%2Ci)%3D%3Et%3D%3D%3De%5Bi%5D))%7DsetColormap(t)%7Bthis._colormap%3Dt%2Cthis.calMinMax()%2Cthis.onColormapChange%26%26this.onColormapChange(this)%7DsetColormapLabel(t)%7Bthis.colormapLabel%3Dse.makeLabelLut(t)%7Dasync%20setColormapLabelFromUrl(t)%7Bthis.colormapLabel%3Dawait%20se.makeLabelLutFromUrl(t)%7Dget%20colormap()%7Breturn%20this._colormap%7Dget%20colorMap()%7Breturn%20this._colormap%7Dset%20colormap(t)%7Bthis.setColormap(t)%7Dset%20colorMap(t)%7Bthis.setColormap(t)%7Dget%20opacity()%7Breturn%20this._opacity%7Dset%20opacity(t)%7Bthis._opacity%3Dt%2Cthis.onOpacityChange%26%26this.onOpacityChange(this)%7DcalMinMax()%7Bif(!this.hdr)throw%20new%20Error(%22hdr%20undefined%22)%3Bif(!this.img)throw%20new%20Error(%22img%20undefined%22)%3Blet%20t%3DNumber.POSITIVE_INFINITY%2Ce%3DNumber.NEGATIVE_INFINITY%2Ci%3D0%2Cs%3D0%3Bconst%20r%3Dthis.img.length%2Cn%3Dthis.img.constructor!%3D%3DFloat64Array%26%26this.img.constructor!%3D%3DFloat32Array%26%26this.ignoreZeroVoxels%3Bif(n)for(let%20s%3D0%3Bs%3Cr%3Bs%2B%2B)t%3DMath.min(this.img%5Bs%5D%2Ct)%2Ce%3DMath.max(this.img%5Bs%5D%2Ce)%2C0%3D%3D%3Dthis.img%5Bs%5D%26%26i%2B%2B%3Belse%20for(let%20n%3D0%3Bn%3Cr%3Bn%2B%2B)isNaN(this.img%5Bn%5D)%3Fs%2B%2B%3A0%3D%3D%3Dthis.img%5Bn%5D%26%26(i%2B%2B%2Cthis.ignoreZeroVoxels)%7C%7C(t%3DMath.min(this.img%5Bn%5D%2Ct)%2Ce%3DMath.max(this.img%5Bn%5D%2Ce))%3Bthis.ignoreZeroVoxels%26%26t%3D%3D%3De%26%26i%3E0%26%26(t%3D0)%3Bconst%20a%3Dthis.intensityRaw2Scaled(t)%2Co%3Dthis.intensityRaw2Scaled(e)%2Ch%3Dse.colormapFromKey(this._colormap)%3Blet%20c%3D0%2Cd%3D0%3Bif(void%200!%3D%3Dh.min%26%26(c%3Dh.min)%2Cvoid%200!%3D%3Dh.max%26%26(d%3Dh.max)%2Cc%3D%3D%3Dd%26%26this.trustCalMinMax%26%26isFinite(this.hdr.cal_min)%26%26isFinite(this.hdr.cal_max)%26%26this.hdr.cal_max%3Ethis.hdr.cal_min)return%20this.cal_min%3Dthis.hdr.cal_min%2Cthis.cal_max%3Dthis.hdr.cal_max%2Cthis.robust_min%3Dthis.cal_min%2Cthis.robust_max%3Dthis.cal_max%2Cthis.global_min%3Da%2Cthis.global_max%3Do%2C%5Bthis.hdr.cal_min%2Cthis.hdr.cal_max%2Cthis.hdr.cal_min%2Cthis.hdr.cal_max%5D%3Bif(c!%3D%3Dd)return%20this.cal_min%3Dc%2Cthis.cal_max%3Dd%2Cthis.robust_min%3Dthis.cal_min%2Cthis.robust_max%3Dthis.cal_max%2C%5Bc%2Cd%2Cc%2Cd%5D%3Bconst%20m%3D100*i%2Fr%3Blet%20u%3D!1%3Bm%3E60%26%26!this.ignoreZeroVoxels%26%26(l.warn(%60%24%7BMath.round(m)%7D%25%20of%20voxels%20are%20zero%3A%20ignoring%20zeros%20for%20cal_max%60)%2Cu%3D!0%2Cthis.ignoreZeroVoxels%3D!0)%2Cthis.ignoreZeroVoxels%7C%7C(i%3D0)%2Ci%2B%3Ds%3Bconst%20A%3DMath.round((r-i)*this.percentileFrac)%3Bif(A%3C1%7C%7Ct%3D%3D%3De)return%20l.debug(%22no%20variability%20in%20image%20intensity%3F%22)%2Cthis.cal_min%3Da%2Cthis.cal_max%3Do%2Cthis.robust_min%3Dthis.cal_min%2Cthis.robust_max%3Dthis.cal_max%2Cthis.global_min%3Da%2Cthis.global_max%3Do%2C%5Ba%2Co%2Ca%2Co%5D%3Bconst%20f%3D1001%2Cg%3D1e3%2F(e-t)%2Cp%3Dnew%20Array(f)%3Bfor(let%20t%3D0%3Bt%3Cf%3Bt%2B%2B)p%5Bt%5D%3D0%3Bif(n)for(let%20e%3D0%3Be%3Cr%3Be%2B%2B)p%5BMath.round((this.img%5Be%5D-t)*g)%5D%2B%2B%3Belse%20if(this.ignoreZeroVoxels)for(let%20e%3D0%3Be%3Cr%3Be%2B%2B)0!%3D%3Dthis.img%5Be%5D%26%26(isNaN(this.img%5Be%5D)%7C%7Cp%5BMath.round((this.img%5Be%5D-t)*g)%5D%2B%2B)%3Belse%20for(let%20e%3D0%3Be%3Cr%3Be%2B%2B)isNaN(this.img%5Be%5D)%7C%7Cp%5BMath.round((this.img%5Be%5D-t)*g)%5D%2B%2B%3Blet%20v%3D0%2Cx%3D0%3Bfor(%3Bv%3CA%3B)v%2B%3Dp%5Bx%5D%2Cx%2B%2B%3Bx--%2Cv%3D0%3Blet%20w%3Df%3Bfor(%3Bv%3CA%3B)w--%2Cv%2B%3Dp%5Bw%5D%3Bif(x%3D%3D%3Dw)%7Blet%20t%3D-1%3Bfor(%3B0!%3D%3Dt%3B)x%3E0%26%26(x--%2Cp%5Bx%5D%3E0%26%26(t%3D0))%2C0!%3D%3Dt%26%26w%3C1e3%26%26(w%2B%2B%2Cp%5Bw%5D%3E0%26%26(t%3D0))%2C0%3D%3D%3Dx%26%261e3%3D%3D%3Dw%26%26(t%3D0)%7Dlet%20C%3Dthis.intensityRaw2Scaled(x%2Fg%2Bt)%2Cb%3Dthis.intensityRaw2Scaled(w%2Fg%2Bt)%3Breturn%20this.hdr.cal_min%3Cthis.hdr.cal_max%26%26this.hdr.cal_min%3E%3Da%26%26this.hdr.cal_max%3C%3Do%26%26(C%3Dthis.hdr.cal_min%2Cb%3Dthis.hdr.cal_max)%2Cu%26%26(C%3DMath.min(C%2C0))%2Cthis.cal_min%3DC%2Cthis.cal_max%3Db%2Cthis.robust_min%3Dthis.cal_min%2Cthis.robust_max%3Dthis.cal_max%2Cthis.global_min%3Da%2Cthis.global_max%3Do%2C%5BC%2Cb%2Ca%2Co%5D%7DintensityRaw2Scaled(t)%7Bif(!this.hdr)throw%20new%20Error(%22hdr%20undefined%22)%3Breturn%200%3D%3D%3Dthis.hdr.scl_slope%26%26(this.hdr.scl_slope%3D1)%2Ct*this.hdr.scl_slope%2Bthis.hdr.scl_inter%7DintensityScaled2Raw(t)%7Bif(!this.hdr)throw%20new%20Error(%22hdr%20undefined%22)%3Breturn%200%3D%3D%3Dthis.hdr.scl_slope%26%26(this.hdr.scl_slope%3D1)%2C(t-this.hdr.scl_inter)%2Fthis.hdr.scl_slope%7DsaveToUint8Array(t%2Ce%3Dnull)%7Bif(!this.hdr)throw%20new%20Error(%22hdr%20undefined%22)%3Bif(!this.img)throw%20new%20Error(%22img%20undefined%22)%3Bconst%20i%3Dnull!%3D%3De%2Cs%3DXe(this.hdr%2Ci)%2Cr%3Dnew%20Uint8Array(4)%3Blet%20n%3Dnew%20Uint8Array(this.img.buffer)%3Bi%26%26(n%3Dnew%20Uint8Array(e.buffer))%3Bconst%20a%3Dnew%20Uint8Array(s.length%2Br.length%2Bn.length)%3Ba.set(s)%2Ca.set(r%2Cs.length)%2Ca.set(n%2Cs.length%2Br.length)%3Blet%20o%3Dnull%3Breturn%20o%3Dt.endsWith(%22.gz%22)%3FKe(a%2C%7Bfilename%3At%2Cmtime%3ADate.now()%2Clevel%3A6%7D)%3Aa%2Co%7DsaveToDisk(t%3D%22%22%2Ce%3Dnull)%7Bconst%20i%3Dthis.saveToUint8Array(t%2Ce)%3Bif(%22%22%3D%3D%3Dt)return%20l.debug(%22saveToDisk%3A%20empty%20file%20name%2C%20returning%20data%20as%20Uint8Array%20rather%20than%20triggering%20download%22)%2Ci%3Bconst%20s%3Dnew%20Blob(%5Bi.buffer%5D%2C%7Btype%3A%22application%2Foctet-stream%22%7D)%2Cr%3DURL.createObjectURL(s)%2Cn%3Ddocument.createElement(%22a%22)%3Breturn%20n.setAttribute(%22href%22%2Cr)%2Cn.setAttribute(%22download%22%2Ct)%2Cn.style.visibility%3D%22hidden%22%2Cdocument.body.appendChild(n)%2Cn.click()%2Cdocument.body.removeChild(n)%2Ci%7Dstatic%20async%20fetchDicomData(t%2Ce%3D%7B%7D)%7Bif(%22%22%3D%3D%3Dt)throw%20Error(%22url%20must%20not%20be%20empty%22)%3Blet%20i%3D%2F%5E(%3F%3A%5Ba-z%2B%5D%2B%3A)%3F%5C%2F%5C%2F%2Fi.test(t)%3Ft%3Anew%20URL(t%2Cwindow.location.href)%3B%2F(%3F%3A.(%5B%5E.%5D%2B))%3F%24%2F.exec(i.pathname)%7C%7C(i%3Dnew%20URL(%22niivue-manifest.txt%22%2Ct))%3Blet%20s%3Dawait%20fetch(i%2C%7Bheaders%3Ae%7D)%3Bif(!s.ok)throw%20Error(s.statusText)%3Bconst%20r%3D(await%20s.text()).split(%22%5Cn%22)%2Cn%3D%2F(.*%5C%2F).*%2F.exec(i)%5B0%5D%2Ca%3D%5B%5D%3Bfor(const%20t%20of%20r)%7Bconst%20i%3Dnew%20URL(t%2Cn)%3Bif(s%3Dawait%20fetch(i%2C%7Bheaders%3Ae%7D)%2C!s.ok)throw%20Error(s.statusText)%3Bconst%20r%3Dawait%20s.arrayBuffer()%3Ba.push(r)%7Dreturn%20a%7Dstatic%20async%20fetchPartial(t%2Ce%2Ci%3D%7B%7D)%7Btry%7Breturn%20await%20fetch(t%2C%7Bheaders%3A%7Brange%3A%60bytes%3D0-'%24%7Be%7D%60%2Cstream%3A%22true%22%2C...i%7D%7D)%7Dcatch(e)%7Bl.error(e)%2Cl.error(%22fetchPartial%20failed%2C%20trying%20again%20without%20range%20header%22)%3Breturn%20await%20fetch(t%2C%7Bheaders%3Ai%7D)%7D%7Dstatic%20async%20loadFromUrl(%7Burl%3Ae%3D%22%22%2CurlImgData%3Ai%3D%22%22%2Cheaders%3As%3D%7B%7D%2Cname%3Ar%3D%22%22%2Ccolormap%3An%3D%22gray%22%2Copacity%3Aa%3D1%2Ccal_min%3Ao%3DNaN%2Ccal_max%3Al%3DNaN%2CtrustCalMinMax%3Ah%3D!0%2CpercentileFrac%3Ac%3D.02%2CignoreZeroVoxels%3Ad%3D!1%2CuseQFormNotSForm%3Am%3D!1%2CcolormapNegative%3Au%3D%22%22%2Cframe4D%3AA%3D0%2CisManifest%3Af%3D!1%2ClimitFrames4D%3Ag%3DNaN%2CimageType%3Ap%3DQe.UNKNOWN%2CcolorbarVisible%3Av%3D!0%2Cbuffer%3Ax%3Dnew%20ArrayBuffer(0)%7D%3D%7B%7D)%7Bif(%22%22%3D%3D%3De)throw%20Error(%22url%20must%20not%20be%20empty%22)%3Blet%20w%3Dnull%2CC%3Dnull%3Bif(e%20instanceof%20Uint8Array%26%26(e%3De.buffer)%2Cx.byteLength%3E0%26%26(e%3Dx)%2Ce%20instanceof%20ArrayBuffer)if(C%3De%2C%22%22!%3D%3Dr)e%3Dr%3Belse%7Be%3D%22array.nii%22%3Bconst%20t%3Dnew%20Uint8Array(C)%3B31%3D%3D%3Dt%5B0%5D%26%26139%3D%3D%3Dt%5B1%5D%26%26(e%3D%22array.nii.gz%22)%7Dif(!isNaN(g))%7Blet%20t%3Dawait%20this.fetchPartial(e%2C512%2Cs)%3BC%3Dawait%20t.arrayBuffer()%3Blet%20i%3Dnew%20Uint8Array(C)%2Cr%3D!1%3Bif(31%3D%3D%3Di%5B0%5D%26%26139%3D%3D%3Di%5B1%5D)%7Br%3D!0%3Bnew%20Oe((t%3D%3E%7Bi%3Dt%7D)).push(i)%2CC%3Di.buffer%7Dlet%20n%3D92%3D%3D%3Di%5B0%5D%26%261%3D%3D%3Di%5B1%5D%3Bif(n%7C%7C(n%3D92%3D%3D%3Di%5B1%5D%26%261%3D%3D%3Di%5B0%5D)%2Cn)%7Bconst%20i%3DUe.readHeader(C)%3Bif(null%3D%3D%3Di)throw%20new%20Error(%22could%20not%20read%20nifti%20header%22)%3Bconst%20n%3Di.numBitsPerVoxel%2F8%3Blet%20a%3D1%3Bfor(let%20t%3D1%3Bt%3C4%3Bt%2B%2B)i.dims%5Bt%5D%3E1%26%26(a*%3Di.dims%5Bt%5D)%3Blet%20o%3D1%3Bfor(let%20t%3D4%3Bt%3C7%3Bt%2B%2B)i.dims%5Bt%5D%3E1%26%26(o*%3Di.dims%5Bt%5D)%3Bconst%20l%3DMath.max(Math.min(g%2Co)%2C1)%2Ch%3Di.vox_offset%2Bl*a*n%3Bif(C.byteLength%3Ch%26%26(t%3Dawait%20this.fetchPartial(e%2Ch%2Cs)%2CC%3Dawait%20t.arrayBuffer()%2Cr))%7Blet%20t%3Dnew%20Uint8Array(C)%3Bnew%20Oe((e%3D%3E%7Bt%3De%7D)).push(t)%2CC%3Dt.buffer%7DC%3DC.byteLength%3Ch%3Fnull%3AC.slice(0%2Ch)%7Delse%20C%3Dnull%7Dif(C)%3Belse%20if(f)C%3Dawait%20t.fetchDicomData(e%2Cs)%2Cp%3DQe.DCM_MANIFEST%3Belse%7Bconst%20t%3Dawait%20fetch(e%2C%7Bheaders%3As%7D)%3Bif(!t.ok)throw%20Error(t.statusText)%3BC%3Dawait%20t.arrayBuffer()%7Dconst%20b%3D%2F(%3F%3A%5C.(%5B%5E.%5D%2B))%3F%24%2F%3Blet%20y%2CI%3D%22%22%3Bif(I%3D%22%22%3D%3D%3Dr%3Fb.exec(e)%5B1%5D%3Ab.exec(r)%5B1%5D%2C%22HEAD%22%3D%3D%3DI.toUpperCase()%26%26%22%22%3D%3D%3Di%26%26(i%3De.substring(0%2Ce.lastIndexOf(%22HEAD%22))%2B%22BRIK%22)%2C%22%22%3D%3D%3Dr)%7Btry%7By%3Dnew%20URL(e).pathname.split(%22%2F%22)%7Dcatch(t)%7By%3De.split(%22%2F%22)%7D(r%3Dy.slice(-1)%5B0%5D).indexOf(%22%3F%22)%3E-1%26%26(r%3Dr.slice(0%2Cr.indexOf(%22%3F%22)))%7Dlet%20M%3Dnull%3Bif(i.length%3E0)%7Blet%20t%3Dawait%20fetch(i%2C%7Bheaders%3As%7D)%3B404%3D%3D%3Dt.status%26%26-1!%3D%3Di.lastIndexOf(%22BRIK%22)%26%26(t%3Dawait%20fetch(i%2B%22.gz%22%2C%7Bheaders%3As%7D))%2CM%3Dawait%20t.arrayBuffer()%7Dif(!C)throw%20new%20Error(%22Unable%20to%20load%20buffer%20properly%20from%20volume%22)%3Breturn%20w%3Dnew%20t(C%2Cr%2Cn%2Ca%2CM%2Co%2Cl%2Ch%2Cc%2Cd%2Cm%2Cu%2CA%2Cp)%2Cw.url%3De%2Cw.colorbarVisible%3Dv%2Cw%7Dstatic%20readFileAsync(t%2Ce%3DNaN)%7Breturn%20new%20Promise(((i%2Cs)%3D%3E%7Bconst%20r%3Dnew%20FileReader%3Br.onload%3D()%3D%3E%7B-1!%3D%3Dt.name.lastIndexOf(%22gz%22)%26%26isNaN(e)%3Fi(Ue.decompress(r.result))%3Ai(r.result)%7D%2Cr.onerror%3Ds%2CisNaN(e)%3Fr.readAsArrayBuffer(t)%3Ar.readAsArrayBuffer(t.slice(0%2Ce))%7D))%7Dstatic%20async%20loadFromFile(%7Bfile%3Ae%2Cname%3Ai%3D%22%22%2Ccolormap%3As%3D%22gray%22%2Copacity%3Ar%3D1%2CurlImgData%3An%3Dnull%2Ccal_min%3Aa%3DNaN%2Ccal_max%3Ao%3DNaN%2CtrustCalMinMax%3Ah%3D!0%2CpercentileFrac%3Ac%3D.02%2CignoreZeroVoxels%3Ad%3D!1%2CuseQFormNotSForm%3Am%3D!1%2CcolormapNegative%3Au%3D%22%22%2Cframe4D%3AA%3D0%2ClimitFrames4D%3Af%3DNaN%2CimageType%3Ag%3DQe.UNKNOWN%7D)%7Blet%20p%3Dnull%2Cv%3D%5B%5D%3Btry%7Bif(Array.isArray(e))for(let%20t%3D0%3Bt%3Ce.length%3Bt%2B%2B)v.push(await%20this.readFileAsync(e%5Bt%5D))%3Belse%7Bif(isNaN(f))v%3Dawait%20this.readFileAsync(e%2Cf)%3Belse%7Bv%3Dawait%20this.readFileAsync(e%2C512)%3Blet%20t%3Dnew%20Uint8Array(v)%2Ci%3D!1%3Bif(31%3D%3D%3Dt%5B0%5D%26%26139%3D%3D%3Dt%5B1%5D)%7Bi%3D!0%3Bnew%20Oe((e%3D%3E%7Bt%3De%7D)).push(t)%2Cv%3Dt.buffer%7Dlet%20s%3D92%3D%3D%3Dt%5B0%5D%26%261%3D%3D%3Dt%5B1%5D%3Bif(s%7C%7C(s%3D92%3D%3D%3Dt%5B1%5D%26%261%3D%3D%3Dt%5B0%5D)%2Cs)%7Bconst%20t%3DUe.readHeader(v)%3Bif(!t)throw%20new%20Error(%22could%20not%20read%20nifti%20header%22)%3Bconst%20s%3Dt.numBitsPerVoxel%2F8%3Blet%20r%3D1%3Bfor(let%20e%3D1%3Be%3C4%3Be%2B%2B)t.dims%5Be%5D%3E1%26%26(r*%3Dt.dims%5Be%5D)%3Blet%20n%3D1%3Bfor(let%20e%3D4%3Be%3C7%3Be%2B%2B)t.dims%5Be%5D%3E1%26%26(n*%3Dt.dims%5Be%5D)%3Bconst%20a%3DMath.max(Math.min(f%2Cn)%2C1)%2Co%3Dt.vox_offset%2Ba*r*s%3Bif(v.byteLength%3Co%26%26(v%3Dawait%20this.readFileAsync(e%2Co)%2Ci))%7Blet%20t%3Dnew%20Uint8Array(v)%3Bnew%20Oe((e%3D%3E%7Bt%3De%7D)).push(t)%2Cv%3Dt.buffer%7Dif(v.byteLength%3Co)throw%20new%20Error(%22failed%20to%20load%20image%20data%20(e.g.%20incompressible%20data)%22)%3Bv%3Dv.slice(0%2Co)%7Delse%20v%3Dawait%20this.readFileAsync(e)%7Di%3De.name%7Dlet%20l%3Dnull%3Bn%26%26(l%3Dawait%20this.readFileAsync(n))%2Cp%3Dnew%20t(v%2Ci%2Cs%2Cr%2Cl%2Ca%2Co%2Ch%2Cc%2Cd%2Cm%2Cu%2CA%2Cg)%2Cp.fileObject%3De%7Dcatch(t)%7Bl.error(t)%2Cl.error(t)%7Dif(null%3D%3D%3Dp)throw%20new%20Error(%22could%20not%20build%20NVImage%22)%3Breturn%20p%7Dstatic%20createNiftiArray(t%3D%5B256%2C256%2C256%5D%2Ce%3D%5B1%2C1%2C1%5D%2Ci%3D%5B1%2C0%2C0%2C-128%2C0%2C1%2C0%2C-128%2C0%2C0%2C1%2C-128%2C0%2C0%2C0%2C1%5D%2Cs%3D2%2Cr%3Dnew%20Uint8Array)%7Bconst%20n%3DXe(this.createNiftiHeader(t%2Ce%2Ci%2Cs)%2C!1)%3Bif(r.length%3C1)return%20n%3Bconst%20a%3Dnew%20Uint8Array(4)%2Co%3Dnew%20Uint8Array(r.buffer)%2Cl%3Dnew%20Uint8Array(n.length%2Ba.length%2Bo.length)%3Breturn%20l.set(n)%2Cl.set(a%2Cn.length)%2Cl.set(o%2Cn.length%2Ba.length)%2Cl%7Dstatic%20createNiftiHeader(t%3D%5B256%2C256%2C256%5D%2Ce%3D%5B1%2C1%2C1%5D%2Ci%3D%5B1%2C0%2C0%2C-128%2C0%2C1%2C0%2C-128%2C0%2C0%2C1%2C-128%2C0%2C0%2C0%2C1%5D%2Cs%3D2)%7Bconst%20r%3Dnew%20Ue.NIFTI1%3Br.littleEndian%3D!0%2Cr.dims%3D%5B3%2C1%2C1%2C1%2C0%2C0%2C0%2C0%5D%2Cr.dims%5B0%5D%3DMath.max(3%2Ct.length)%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)r.dims%5Be%2B1%5D%3Dt%5Be%5D%3Br.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%3Bfor(let%20i%3D0%3Bi%3Ct.length%3Bi%2B%2B)r.pixDims%5Bi%2B1%5D%3De%5Bi%5D%3Bif(16%3D%3D%3Di.length)%7Blet%20t%3D0%3Bfor(let%20e%3D0%3Be%3C4%3Be%2B%2B)for(let%20s%3D0%3Bs%3C4%3Bs%2B%2B)r.affine%5Be%5D%5Bs%5D%3Di%5Bt%5D%2Ct%2B%2B%7Dlet%20n%3D8%3Breturn%20256%3D%3D%3Ds%7C%7C2%3D%3D%3Ds%3Fn%3D8%3A512%3D%3D%3Ds%7C%7C4%3D%3D%3Ds%3Fn%3D16%3A16%3D%3D%3Ds%7C%7C768%3D%3D%3Ds%7C%7C8%3D%3D%3Ds%3Fn%3D32%3A64%3D%3D%3Ds%3Fn%3D64%3Al.warn(%22Unsupported%20NIfTI%20datatypeCode%3A%20%22%2Bs)%2Cr.datatypeCode%3Ds%2Cr.numBitsPerVoxel%3Dn%2Cr.scl_inter%3D0%2Cr.scl_slope%3D0%2Cr.sform_code%3D2%2Cr.magic%3D%22n%2B1%22%2Cr.vox_offset%3D352%2Cr%7DgetVolumeData(t%3D%5B-1%2C0%2C0%5D%2Ce%3D%5B0%2C0%2C0%5D%2Ci%3D%22same%22)%7Blet%20s%3Dnew%20Uint8Array%3Bif(Math.min(...t)%3C0%7C%7CMath.min(...e)%3C0)return%5Bs%2C%5B0%2C0%2C0%5D%5D%3Bconst%20r%3Dthis.dimsRAS.slice(1%2C4)%3Bfor(let%20i%3D0%3Bi%3C3%3Bi%2B%2B)if(t%5Bi%5D%3DMath.min(t%5Bi%5D%2Cr%5Bi%5D-1)%2Ce%5Bi%5D%3DMath.min(e%5Bi%5D%2Cr%5Bi%5D-1)%2Ce%5Bi%5D%3Ct%5Bi%5D)%7Bconst%20s%3De%5Bi%5D%3Be%5Bi%5D%3Dt%5Bi%5D%2Ct%5Bi%5D%3Ds%7Dconst%20n%3D%5Be%5B0%5D-t%5B0%5D%2B1%2Ce%5B1%5D-t%5B1%5D%2B1%2Ce%5B2%5D-t%5B2%5D%2B1%5D%2Ca%3Dn%5B0%5D*n%5B1%5D*n%5B2%5D%3Blet%20o%3Dthis.hdr.datatypeCode%3Bif(%22uint8%22%3D%3D%3Di%3Fo%3D2%3A%22float32%22!%3D%3Di%26%26%22scaled%22!%3D%3Di%26%26%22normalized%22!%3D%3Di%26%26%22windowed%22!%3D%3Di%7C%7C(o%3D16)%2C2%3D%3D%3Do)s%3Dnew%20Uint8Array(a)%3Belse%20if(4%3D%3D%3Do)s%3Dnew%20Int16Array(a)%3Belse%20if(512%3D%3D%3Do)s%3Dnew%20Uint16Array(a)%3Belse%20if(16%3D%3D%3Do)s%3Dnew%20Float32Array(a)%3Belse%7Bif(64!%3D%3Do)return%20l.error(%22getVolumeData%20unsupported%20datatype%22)%2C%5Bs%2C%5B0%2C0%2C0%5D%5D%3Bs%3Dnew%20Float64Array(a)%7Dconst%20h%3Dthis.img2RASstep%2Cc%3Dthis.img2RASstart%3Blet%20d%3D0%3Bfor(let%20i%3Dt%5B2%5D%3Bi%3C%3De%5B2%5D%3Bi%2B%2B)%7Bconst%20r%3Dc%5B2%5D%2Bi*h%5B2%5D%3Bfor(let%20i%3Dt%5B1%5D%3Bi%3C%3De%5B1%5D%3Bi%2B%2B)%7Bconst%20n%3Dr%2Bc%5B1%5D%2Bi*h%5B1%5D%3Bfor(let%20i%3Dt%5B0%5D%3Bi%3C%3De%5B0%5D%3Bi%2B%2B)%7Bconst%20t%3Dc%5B0%5D%2Bi*h%5B0%5D%3Bs%5Bd%2B%2B%5D%3Dthis.img%5Bt%2Bn%5D%7D%7D%7Dif(%22scaled%22%3D%3D%3Di%7C%7C%22normalized%22%3D%3D%3Di%7C%7C%22windowed%22%3D%3D%3Di)for(let%20t%3D0%3Bt%3Cs.length%3Bt%2B%2B)s%5Bt%5D%3Ds%5Bt%5D*this.hdr.scl_slope%2Bthis.hdr.scl_inter%3Bif(%22normalized%22%3D%3D%3Di%7C%7C%22windowed%22%3D%3D%3Di)%7Blet%20t%3Dthis.cal_min%2Ce%3Dthis.cal_max%3B%22normalized%22%3D%3D%3Di%26%26(t%3Dthis.global_min%2Ce%3Dthis.global_max)%3Bconst%20r%3D1%2F(e-t)%3Bfor(let%20e%3D0%3Be%3Cs.length%3Be%2B%2B)s%5Be%5D%3D(s%5Be%5D-t)*r%2Cs%5Be%5D%3DMath.max(Math.min(s%5Be%5D%2C1)%2C0)%7Dreturn%5Bs%2Cn%5D%7DsetVolumeData(t%3D%5B-1%2C0%2C0%5D%2Ce%3D%5B0%2C0%2C0%5D%2Ci%3Dnew%20Uint8Array)%7Bif(i.length%3C1%7C%7CMath.min(...t)%3C0%7C%7CMath.min(...e)%3C0)return%3Bconst%20s%3Dthis.dimsRAS.slice(1%2C4)%3Bfor(let%20i%3D0%3Bi%3C3%3Bi%2B%2B)if(t%5Bi%5D%3DMath.min(t%5Bi%5D%2Cs%5Bi%5D-1)%2Ce%5Bi%5D%3DMath.min(e%5Bi%5D%2Cs%5Bi%5D-1)%2Ce%5Bi%5D%3Ct%5Bi%5D)%7Bconst%20s%3De%5Bi%5D%3Be%5Bi%5D%3Dt%5Bi%5D%2Ct%5Bi%5D%3Ds%7Dconst%20r%3D%5Be%5B0%5D-t%5B0%5D%2B1%2Ce%5B1%5D-t%5B1%5D%2B1%2Ce%5B2%5D-t%5B2%5D%2B1%5D%2Cn%3Dr%5B0%5D*r%5B1%5D*r%5B2%5D%3Bif(i.length%3Cn)return%20void%20l.error(%22setVolumeData%20image%20does%20not%20have%20enough%20voxels%22)%3Bconst%20a%3Dthis.img2RASstep%2Co%3Dthis.img2RASstart%3Blet%20h%3D0%3Bfor(let%20s%3Dt%5B2%5D%3Bs%3C%3De%5B2%5D%3Bs%2B%2B)%7Bconst%20r%3Do%5B2%5D%2Bs*a%5B2%5D%3Bfor(let%20s%3Dt%5B1%5D%3Bs%3C%3De%5B1%5D%3Bs%2B%2B)%7Bconst%20n%3Dr%2Bo%5B1%5D%2Bs*a%5B1%5D%3Bfor(let%20s%3Dt%5B0%5D%3Bs%3C%3De%5B0%5D%3Bs%2B%2B)%7Bconst%20t%3Do%5B0%5D%2Bs*a%5B0%5D%3Bthis.img%5Bt%2Bn%5D%3Di%5Bh%2B%2B%5D%7D%7D%7D%7Dstatic%20loadFromBase64(%7Bbase64%3Ae%2Cname%3Ai%3D%22%22%2Ccolormap%3As%3D%22gray%22%2Copacity%3Ar%3D1%2Ccal_min%3An%3DNaN%2Ccal_max%3Aa%3DNaN%2CtrustCalMinMax%3Ao%3D!0%2CpercentileFrac%3Ah%3D.02%2CignoreZeroVoxels%3Ac%3D!1%2CuseQFormNotSForm%3Ad%3D!1%2CcolormapNegative%3Am%3D%22%22%2Cframe4D%3Au%3D0%2CimageType%3AA%3DQe.UNKNOWN%2Ccal_minNeg%3Af%3DNaN%2Ccal_maxNeg%3Ag%3DNaN%2CcolorbarVisible%3Ap%3D!0%2CcolormapLabel%3Av%3Dnull%7D)%7Blet%20x%3Dnull%3Btry%7Bconst%20l%3Dfunction(t)%7Bconst%20e%3Dwindow.atob(t)%2Ci%3De.length%2Cs%3Dnew%20Uint8Array(i)%3Bfor(let%20t%3D0%3Bt%3Ci%3Bt%2B%2B)s%5Bt%5D%3De.charCodeAt(t)%3Breturn%20s.buffer%7D(e)%3Bx%3Dnew%20t(l%2Ci%2Cs%2Cr%2Cnull%2Cn%2Ca%2Co%2Ch%2Cc%2Cd%2Cm%2Cu%2CA%2Cf%2Cg%2Cp%2Cv)%7Dcatch(t)%7Bl.debug(t)%7Dif(null%3D%3D%3Dx)throw%20new%20Error(%22could%20not%20load%20NVImage%22)%3Breturn%20x%7Dclone()%7Bconst%20e%3Dnew%20t%3Breturn%20e.id%3DGe()%2Ce.hdr%3DObject.assign(%7B%7D%2Cthis.hdr)%2Ce.img%3Dthis.img.slice()%2Ce.calculateRAS()%2Ce.calMinMax()%2Ce%7DzeroImage()%7Bthis.img.fill(0)%7DgetImageMetadata()%7Bif(!this.hdr)throw%20new%20Error(%22hdr%20undefined%22)%3Bconst%20t%3Dthis.id%2Ce%3Dthis.hdr.datatypeCode%2Ci%3Dthis.hdr.dims%2Cs%3Di%5B1%5D%2Cr%3Di%5B2%5D%2Cn%3Di%5B3%5D%2Ca%3DMath.max(1%2Ci%5B4%5D)%2Co%3Dthis.hdr.pixDims%3Breturn%7Bid%3At%2CdatatypeCode%3Ae%2Cnx%3As%2Cny%3Ar%2Cnz%3An%2Cnt%3Aa%2Cdx%3Ao%5B1%5D%2Cdy%3Ao%5B2%5D%2Cdz%3Ao%5B3%5D%2Cdt%3Ao%5B4%5D%2Cbpv%3AMath.floor(this.hdr.numBitsPerVoxel%2F8)%7D%7Dstatic%20zerosLike(t%2Ce%3D%22same%22)%7Bconst%20i%3Dt.clone()%3Breturn%20i.zeroImage()%2C%22uint8%22%3D%3D%3De%26%26(i.img%3DUint8Array.from(i.img)%2Ci.hdr.datatypeCode%3D2%2Ci.hdr.numBitsPerVoxel%3D8)%2C%22float32%22%3D%3D%3De%26%26(i.img%3DFloat32Array.from(i.img)%2Ci.hdr.datatypeCode%3D16%2Ci.hdr.numBitsPerVoxel%3D32)%2Ci%7DgetValue(t%2Ce%2Ci%2Cs%3D0%2Cr%3D!1)%7Bif(!this.hdr)throw%20new%20Error(%22hdr%20undefined%22)%3Bif(!this.img)throw%20new%20Error(%22img%20undefined%22)%3Bconst%20n%3Dthis.hdr.dims%5B1%5D%2Ca%3Dthis.hdr.dims%5B2%5D%2Co%3Dthis.hdr.dims%5B3%5D%2Cl%3Dthis.permRAS.slice()%3Bif(1!%3D%3Dl%5B0%5D%7C%7C2!%3D%3Dl%5B1%5D%7C%7C3!%3D%3Dl%5B2%5D)%7Bconst%20s%3Dke.fromValues(t%2Ce%2Ci%2C1)%3Bke.transformMat4(s%2Cs%2Cthis.toRASvox)%2Ct%3Ds%5B0%5D%2Ce%3Ds%5B1%5D%2Ci%3Ds%5B2%5D%7Dlet%20h%3Dt%2Be*n%2Bi*n*a%3Bif(2304%3D%3D%3Dthis.hdr.datatypeCode)return%20h*%3D4%2CMath.round(.21*this.img%5Bh%5D%2B.72*this.img%5Bh%2B1%5D%2B.07*this.img%5Bh%2B2%5D)%3Bif(128%3D%3D%3Dthis.hdr.datatypeCode)return%20h*%3D3%2CMath.round(.21*this.img%5Bh%5D%2B.72*this.img%5Bh%2B1%5D%2B.07*this.img%5Bh%2B2%5D)%3Bconst%20c%3Ds*n*a*o%3Blet%20d%3Dthis.img%5Bh%2Bc%5D%3Breturn%20r%26%26(d%3Dthis.imaginary%5Bh%2Bc%5D)%2Cthis.hdr.scl_slope*d%2Bthis.hdr.scl_inter%7DtoNiivueObject3D(t%2Ce)%7Bconst%20i%3Dthis.dimsRAS%2Cs%3Dthis.matRAS%2Cr%3Dthis.pixDimsRAS%2Cn%3D-.5%2Ca%3D-.5%2Co%3D-.5%2Ch%3Di%5B1%5D-1%2B.5%2Cc%3Di%5B2%5D-1%2B.5%2Cd%3Di%5B3%5D-1%2B.5%2Cm%3Dthis.vox2mm(%5Bn%2Ca%2Co%5D%2Cs)%2Cu%3Dthis.vox2mm(%5Bn%2Cc%2Co%5D%2Cs)%2CA%3Dthis.vox2mm(%5Bn%2Ca%2Cd%5D%2Cs)%2Cf%3Dthis.vox2mm(%5Bn%2Cc%2Cd%5D%2Cs)%2Cg%3Dthis.vox2mm(%5Bh%2Ca%2Co%5D%2Cs)%2Cp%3Dthis.vox2mm(%5Bh%2Cc%2Co%5D%2Cs)%2Cv%3Dthis.vox2mm(%5Bh%2Ca%2Cd%5D%2Cs)%2Cx%3Dthis.vox2mm(%5Bh%2Cc%2Cd%5D%2Cs)%2Cw%3D%5B...A%2C0%2C0%2C1%2C...v%2C1%2C0%2C1%2C...x%2C1%2C1%2C1%2C...f%2C0%2C1%2C1%2C...m%2C0%2C0%2C0%2C...u%2C0%2C1%2C0%2C...p%2C1%2C1%2C0%2C...g%2C1%2C0%2C0%5D%2CC%3De.createBuffer()%3Be.bindBuffer(e.ELEMENT_ARRAY_BUFFER%2CC)%3Bconst%20b%3D%5B0%2C3%2C2%2C2%2C1%2C0%2C4%2C7%2C6%2C6%2C5%2C4%2C5%2C6%2C2%2C2%2C3%2C5%2C4%2C0%2C1%2C1%2C7%2C4%2C7%2C1%2C2%2C2%2C6%2C7%2C4%2C5%2C3%2C3%2C0%2C4%5D%3Be.bufferData(e.ELEMENT_ARRAY_BUFFER%2Cnew%20Uint16Array(b)%2Ce.STATIC_DRAW)%3Bconst%20y%3De.createBuffer()%3Be.bindBuffer(e.ARRAY_BUFFER%2Cy)%2Ce.bufferData(e.ARRAY_BUFFER%2Cnew%20Float32Array(w)%2Ce.STATIC_DRAW)%3Bconst%20I%3De.createVertexArray()%3Be.bindVertexArray(I)%2Ce.bindBuffer(e.ELEMENT_ARRAY_BUFFER%2CC)%2Ce.bindBuffer(e.ARRAY_BUFFER%2Cy)%2Ce.enableVertexAttribArray(0)%2Ce.vertexAttribPointer(0%2C3%2Ce.FLOAT%2C!1%2C24%2C0)%2Ce.enableVertexAttribArray(1)%2Ce.vertexAttribPointer(1%2C3%2Ce.FLOAT%2C!1%2C24%2C12)%2Ce.bindVertexArray(null)%3Bconst%20M%3Dnew%20k(t%2Cy%2Ce.TRIANGLES%2Cb.length%2CC%2CI)%2CD%3Dfunction(t%2Ce%3D!0)%7Bconst%20i%3DMath.round(t.length%2F3)%2Cs%3DWe.fromValues(0%2C0%2C0)%2Cr%3DWe.create()%2Cn%3DWe.create()%3Blet%20a%3D0%2Co%3D1%3Be%26%26(o%3D2)%3Bfor(let%20e%3D0%3Be%3Co%3Be%2B%2B)%7Ba%3D0%3Bfor(let%20e%3D0%3Be%3Ci%3Be%2B%2B)%7Bconst%20i%3DWe.fromValues(t%5B3*e%5D%2Ct%5B3*e%2B1%5D%2Ct%5B3*e%2B2%5D)%3B0%3D%3D%3De%26%26(We.copy(r%2Ci)%2CWe.copy(n%2Ci))%2CWe.min(r%2Cr%2Ci)%2CWe.max(n%2Cn%2Ci)%2CWe.subtract(i%2Ci%2Cs)%3Bconst%20o%3DWe.len(i)%3Ba%3DMath.max(a%2Co)%7Dif(e%2B1%3E%3Do)break%3Blet%20h%3D!0%3Bfor(let%20t%3D0%3Bt%3C3%3B%2B%2Bt)r%5Bt%5D%3Es%5Bt%5D%26%26(h%3D!1)%2Cn%5Bt%5D%3Cs%5Bt%5D%26%26(h%3D!1)%3Bif(h)break%3BWe.lerp(s%2Cr%2Cn%2C.5)%2Cl.debug(%22origin%20moved%20inside%20volume%3A%20%22%2Cs)%7Dreturn%7Bmin%3A%5Br%5B0%5D%2Cr%5B1%5D%2Cr%5B2%5D%5D%2Cmax%3A%5Bn%5B0%5D%2Cn%5B1%5D%2Cn%5B2%5D%5D%2CfurthestVertexFromOrigin%3Aa%2Corigin%3As%7D%7D(%5B...A%2C...v%2C...x%2C...f%2C...m%2C...u%2C...p%2C...g%5D)%3Breturn%20M.extentsMin%3DD.min.slice()%2CM.extentsMax%3DD.max.slice()%2CM.furthestVertexFromOrigin%3DD.furthestVertexFromOrigin%2CM.originNegate%3DLe.clone(D.origin)%2CLe.negate(M.originNegate%2CM.originNegate)%2CM.fieldOfViewDeObliqueMM%3D%5Bi%5B1%5D*r%5B1%5D%2Ci%5B2%5D*r%5B2%5D%2Ci%5B3%5D*r%5B3%5D%5D%2CM%7DapplyOptionsUpdate(t)%7Bthis.hdr.cal_min%3Dt.cal_min%2Cthis.hdr.cal_max%3Dt.cal_max%2CObject.assign(this%2Ct)%7DgetImageOptions()%7Breturn%20ze(%22%22%2C%22%22%2Cthis.name%2Cthis._colormap%2Cthis.opacity%2Cthis.hdr.cal_min%2Cthis.hdr.cal_max%2Cthis.trustCalMinMax%2Cthis.percentileFrac%2Cthis.ignoreZeroVoxels%2Cthis.useQFormNotSForm%2Cthis.colormapNegative%2Cthis.frame4D%2Cthis.imageType)%7DtoUint8Array(t%3Dnull)%7Bconst%20e%3Dnull!%3D%3Dt%2Ci%3DXe(%7B...this.hdr%2Cvox_offset%3A352%7D%2Ce)%3Blet%20s%3Dt%3Bif(e)%7Bconst%20e%3Dthis.permRAS%3Bif(1!%3D%3De%5B0%5D%7C%7C2!%3D%3De%5B1%5D%7C%7C3!%3D%3De%5B2%5D)%7Bconst%20i%3Dthis.hdr.dims%2Cr%3D%5B0%2C0%2C0%5D%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)for(let%20i%3D0%3Bi%3C3%3Bi%2B%2B)Math.abs(e%5Bt%5D)-1%3D%3D%3Di%26%26(r%5Bi%5D%3Dt*Math.sign(e%5Bt%5D))%3Blet%20n%3D1%3Bconst%20a%3D%5B1%2C1%2C1%5D%2Co%3D%5B!1%2C!1%2C!1%5D%3Bfor(let%20t%3D0%3Bt%3Cr.length%3Bt%2B%2B)for(let%20e%3D0%3Be%3Cr.length%3Be%2B%2B)%7BMath.abs(r%5Be%5D)%3D%3D%3Dt%26%26(a%5Be%5D%3Dn%2C(r%5Be%5D%3C0%7C%7CObject.is(r%5Be%5D%2C-0))%26%26(o%5Be%5D%3D!0)%2Cn*%3Di%5Be%2B1%5D)%7Dlet%20h%3DCe.range(0%2Ci%5B1%5D-1%2C1)%3Bo%5B0%5D%26%26(h%3DCe.range(i%5B1%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ci%5B1%5D%3Bt%2B%2B)h%5Bt%5D*%3Da%5B0%5D%3Blet%20c%3DCe.range(0%2Ci%5B2%5D-1%2C1)%3Bo%5B1%5D%26%26(c%3DCe.range(i%5B2%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ci%5B2%5D%3Bt%2B%2B)c%5Bt%5D*%3Da%5B1%5D%3Blet%20d%3DCe.range(0%2Ci%5B3%5D-1%2C1)%3Bo%5B2%5D%26%26(d%3DCe.range(i%5B3%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ci%5B3%5D%3Bt%2B%2B)d%5Bt%5D*%3Da%5B2%5D%3Bconst%20m%3Dnew%20Uint8Array(t)%2Cu%3Dnew%20Uint8Array(i%5B1%5D*i%5B2%5D*i%5B3%5D)%3Blet%20A%3D0%3Bfor(let%20t%3D0%3Bt%3Ci%5B3%5D%3Bt%2B%2B)for(let%20e%3D0%3Be%3Ci%5B2%5D%3Be%2B%2B)for(let%20s%3D0%3Bs%3Ci%5B1%5D%3Bs%2B%2B)u%5BA%5D%3Dm%5Bh%5Bs%5D%2Bc%5Be%5D%2Bd%5Bt%5D%5D%2CA%2B%2B%3Bs%3Du%2Cl.debug(%22drawing%20bytes%22)%2Cl.debug(s)%7D%7Dconst%20r%3De%3Fs%3Anew%20Uint8Array(this.img.buffer)%2Cn%3Dnew%20Uint8Array(4)%2Ca%3Dnew%20Uint8Array(i.length%2Bn.length%2Br.length)%3Breturn%20a.set(i)%2Ca.set(n%2Ci.length)%2Ca.set(r%2Ci.length%2Bn.length)%2Ca%7DconvertVox2Frac(t)%7Breturn%20Le.fromValues((t%5B0%5D%2B.5)%2Fthis.dimsRAS%5B1%5D%2C(t%5B1%5D%2B.5)%2Fthis.dimsRAS%5B2%5D%2C(t%5B2%5D%2B.5)%2Fthis.dimsRAS%5B3%5D)%7DconvertFrac2Vox(t)%7Breturn%20Le.fromValues(Math.round(t%5B0%5D*this.dims%5B1%5D-.5)%2CMath.round(t%5B1%5D*this.dims%5B2%5D-.5)%2CMath.round(t%5B2%5D*this.dims%5B3%5D-.5))%7DconvertFrac2MM(t%2Ce%3D!1)%7Bconst%20i%3Dke.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2C1)%3Breturn%20e%3Fke.transformMat4(i%2Ci%2Cthis.frac2mm)%3Ake.transformMat4(i%2Ci%2Cthis.frac2mmOrtho)%2Ci%7DconvertMM2Frac(t%2Ce%3D!1)%7Bconst%20i%3Dke.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2C1)%2Cs%3Dthis.dimsRAS%2Cr%3DLe.fromValues(0%2C0%2C0)%3Bif(void%200%3D%3D%3Ds)return%20r%3Bif(!e)%7Bconst%20t%3DPe.clone(this.frac2mmOrtho)%3Breturn%20Pe.invert(t%2Ct)%2Cke.transformMat4(i%2Ci%2Ct)%2Cr%5B0%5D%3Di%5B0%5D%2Cr%5B1%5D%3Di%5B1%5D%2Cr%5B2%5D%3Di%5B2%5D%2Cr%7Dif(s%5B1%5D%3C1%7C%7Cs%5B2%5D%3C1%7C%7Cs%5B3%5D%3C1)return%20r%3Bconst%20n%3DPe.clone(this.matRAS)%3Breturn%20Pe.invert(n%2Cn)%2CPe.transpose(n%2Cn)%2Cke.transformMat4(i%2Ci%2Cn)%2Cr%5B0%5D%3D(i%5B0%5D%2B.5)%2Fs%5B1%5D%2Cr%5B1%5D%3D(i%5B1%5D%2B.5)%2Fs%5B2%5D%2Cr%5B2%5D%3D(i%5B2%5D%2B.5)%2Fs%5B3%5D%2Cr%7D%7D%2CJe%3D(t%3D%3E(t%5Bt.AXIAL%3D0%5D%3D%22AXIAL%22%2Ct%5Bt.CORONAL%3D1%5D%3D%22CORONAL%22%2Ct%5Bt.SAGITTAL%3D2%5D%3D%22SAGITTAL%22%2Ct%5Bt.MULTIPLANAR%3D3%5D%3D%22MULTIPLANAR%22%2Ct%5Bt.RENDER%3D4%5D%3D%22RENDER%22%2Ct))(Je%7C%7C%7B%7D)%2C_e%3D(t%3D%3E(t%5Bt.NEVER%3D0%5D%3D%22NEVER%22%2Ct%5Bt.ALWAYS%3D1%5D%3D%22ALWAYS%22%2Ct%5Bt.AUTO%3D2%5D%3D%22AUTO%22%2Ct))(_e%7C%7C%7B%7D)%2C%24e%3D(t%3D%3E(t%5Bt.AUTO%3D0%5D%3D%22AUTO%22%2Ct%5Bt.COLUMN%3D1%5D%3D%22COLUMN%22%2Ct%5Bt.GRID%3D2%5D%3D%22GRID%22%2Ct%5Bt.ROW%3D3%5D%3D%22ROW%22%2Ct))(%24e%7C%7C%7B%7D)%2Cti%3D(t%3D%3E(t%5Bt.none%3D0%5D%3D%22none%22%2Ct%5Bt.contrast%3D1%5D%3D%22contrast%22%2Ct%5Bt.measurement%3D2%5D%3D%22measurement%22%2Ct%5Bt.pan%3D3%5D%3D%22pan%22%2Ct%5Bt.slicer3D%3D4%5D%3D%22slicer3D%22%2Ct%5Bt.callbackOnly%3D5%5D%3D%22callbackOnly%22%2Ct))(ti%7C%7C%7B%7D)%2Cei%3D%7BtextHeight%3A.06%2CcolorbarHeight%3A.05%2CcrosshairWidth%3A1%2CcrosshairGap%3A0%2CrulerWidth%3A4%2Cshow3Dcrosshair%3A!1%2CbackColor%3A%5B0%2C0%2C0%2C1%5D%2CcrosshairColor%3A%5B1%2C0%2C0%2C1%5D%2CfontColor%3A%5B.5%2C.5%2C.5%2C1%5D%2CselectionBoxColor%3A%5B1%2C1%2C1%2C.5%5D%2CclipPlaneColor%3A%5B.7%2C0%2C.7%2C.5%5D%2CclipThick%3A2%2CclipVolumeLow%3A%5B0%2C0%2C0%5D%2CclipVolumeHigh%3A%5B1%2C1%2C1%5D%2CrulerColor%3A%5B1%2C0%2C0%2C.8%5D%2CcolorbarMargin%3A.05%2CtrustCalMinMax%3A!0%2CclipPlaneHotKey%3A%22KeyC%22%2CviewModeHotKey%3A%22KeyV%22%2CdoubleTouchTimeout%3A500%2ClongTouchTimeout%3A1e3%2CkeyDebounceTime%3A50%2CisNearestInterpolation%3A!1%2CisResizeCanvas%3A!0%2CatlasOutline%3A0%2CisRuler%3A!1%2CisColorbar%3A!1%2CisOrientCube%3A!1%2CmultiplanarPadPixels%3A0%2CmultiplanarForceRender%3A!1%2CmultiplanarEqualSize%3A!1%2CmultiplanarShowRender%3A2%2CisRadiologicalConvention%3A!1%2CmeshThicknessOn2D%3A1%2F0%2CdragMode%3A1%2Cyoke3Dto2DZoom%3A!1%2CisDepthPickMesh%3A!1%2CisCornerOrientationText%3A!1%2CsagittalNoseLeft%3A!1%2CisSliceMM%3A!1%2CisV1SliceShader%3A!1%2CisHighResolutionCapable%3A!0%2ClogLevel%3A%22info%22%2CloadingText%3A%22waiting%20for%20images...%22%2CisForceMouseClickToVoxelCenters%3A!1%2CdragAndDropEnabled%3A!0%2CdrawingEnabled%3A!1%2CpenValue%3A1%2CfloodFillNeighbors%3A6%2CisFilledPen%3A!1%2Cthumbnail%3A%22%22%2CmaxDrawUndoBitmaps%3A8%2CsliceType%3A3%2CmeshXRay%3A0%2CisAntiAlias%3Anull%2ClimitFrames4D%3ANaN%2CisAdditiveBlend%3A!1%2CshowLegend%3A!0%2ClegendBackgroundColor%3A%5B.3%2C.3%2C.3%2C.5%5D%2ClegendTextColor%3A%5B1%2C1%2C1%2C1%5D%2CmultiplanarLayout%3A0%2CrenderOverlayBlend%3A1%2CsliceMosaicString%3A%22%22%2CcenterMosaic%3A!1%2CclickToSegment%3A!1%2CclickToSegmentRadius%3A2%2CclickToSegmentSteps%3A10%2CclickToSegmentBright%3A!0%7D%2Cii%3D%7Bgamma%3A1%2Cazimuth%3A110%2Celevation%3A10%2CcrosshairPos%3ASe.create()%2CclipPlane%3A%5B0%2C0%2C0%2C0%5D%2CclipPlaneDepthAziElev%3A%5B2%2C0%2C0%5D%2CvolScaleMultiplier%3A1%2Cpan2Dxyzmm%3ABe.create()%2CclipThick%3A2%2CclipVolumeLow%3A%5B0%2C0%2C0%5D%2CclipVolumeHigh%3A%5B1%2C1%2C1%5D%7D%2Csi%3Dclass%20t%7Bconstructor()%7Be(this%2C%22data%22%2C%7Btitle%3A%22Untitled%20document%22%2CimageOptionsArray%3A%5B%5D%2CmeshOptionsArray%3A%5B%5D%2Copts%3A%7B...ei%7D%2CpreviewImageDataURL%3A%22%22%2Clabels%3A%5B%5D%2CencodedImageBlobs%3A%5B%5D%2CencodedDrawingBlob%3A%22%22%7D)%2Ce(this%2C%22scene%22)%2Ce(this%2C%22volumes%22%2C%5B%5D)%2Ce(this%2C%22meshDataObjects%22)%2Ce(this%2C%22meshes%22%2C%5B%5D)%2Ce(this%2C%22drawBitmap%22%2Cnull)%2Ce(this%2C%22imageOptionsMap%22%2Cnew%20Map)%2Ce(this%2C%22meshOptionsMap%22%2Cnew%20Map)%2Cthis.scene%3D%7BonAzimuthElevationChange%3A()%3D%3E%7B%7D%2ConZoom3DChange%3A()%3D%3E%7B%7D%2CsceneData%3A%7B...ii%2Cpan2Dxyzmm%3ABe.fromValues(0%2C0%2C0%2C1)%2CcrosshairPos%3ASe.fromValues(.5%2C.5%2C.5)%7D%2Cget%20renderAzimuth()%7Breturn%20this.sceneData.azimuth%7D%2Cset%20renderAzimuth(t)%7Bthis.sceneData.azimuth%3Dt%2Cthis.onAzimuthElevationChange%26%26this.onAzimuthElevationChange(this.sceneData.azimuth%2Cthis.sceneData.elevation)%7D%2Cget%20renderElevation()%7Breturn%20this.sceneData.elevation%7D%2Cset%20renderElevation(t)%7Bthis.sceneData.elevation%3Dt%2Cthis.onAzimuthElevationChange%26%26this.onAzimuthElevationChange(this.sceneData.azimuth%2Cthis.sceneData.elevation)%7D%2Cget%20volScaleMultiplier()%7Breturn%20this.sceneData.volScaleMultiplier%7D%2Cset%20volScaleMultiplier(t)%7Bthis.sceneData.volScaleMultiplier%3Dt%2Cthis.onZoom3DChange(t)%7D%2Cget%20crosshairPos()%7Breturn%20this.sceneData.crosshairPos%7D%2Cset%20crosshairPos(t)%7Bthis.sceneData.crosshairPos%3Dt%7D%2Cget%20clipPlane()%7Breturn%20this.sceneData.clipPlane%7D%2Cset%20clipPlane(t)%7Bthis.sceneData.clipPlane%3Dt%7D%2Cget%20clipPlaneDepthAziElev()%7Breturn%20this.sceneData.clipPlaneDepthAziElev%7D%2Cset%20clipPlaneDepthAziElev(t)%7Bthis.sceneData.clipPlaneDepthAziElev%3Dt%7D%2Cget%20pan2Dxyzmm()%7Breturn%20this.sceneData.pan2Dxyzmm%7D%2Cset%20pan2Dxyzmm(t)%7Bthis.sceneData.pan2Dxyzmm%3Dt%7D%7D%7Dget%20title()%7Breturn%20this.data.title%7Dget%20previewImageDataURL()%7Breturn%20this.data.previewImageDataURL%7Dset%20previewImageDataURL(t)%7Bthis.data.previewImageDataURL%3Dt%7Dset%20title(t)%7Bthis.data.title%3Dt%7Dget%20imageOptionsArray()%7Breturn%20this.data.imageOptionsArray%7Dget%20encodedImageBlobs()%7Breturn%20this.data.encodedImageBlobs%7Dget%20encodedDrawingBlob()%7Breturn%20this.data.encodedDrawingBlob%7Dget%20opts()%7Breturn%20this.data.opts%7Dset%20opts(t)%7Bthis.data.opts%3D%7B...t%7D%7Dget%20labels()%7Breturn%20this.data.labels%7Dset%20labels(t)%7Bthis.data.labels%3Dt%7Dget%20customData()%7Breturn%20this.data.customData%7Dset%20customData(t)%7Bthis.data.customData%3Dt%7DhasImage(t)%7Breturn%20void%200!%3D%3Dthis.volumes.find((e%3D%3Ee.id%3D%3D%3Dt.id))%7DhasImageFromUrl(t)%7Breturn%20void%200!%3D%3Dthis.data.imageOptionsArray.find((e%3D%3Ee.url%3D%3D%3Dt))%7DaddImageOptions(t%2Ce)%7Bif(!this.hasImage(t)%26%26!e.name)if(e.url)%7Bconst%20t%3D%2F%5E(%3F%3A%5Ba-z%2B%5D%2B%3A)%3F%5C%2F%5C%2F%2Fi.test(e.url)%3Fnew%20URL(e.url)%3Anew%20URL(e.url%2Cwindow.location.href)%3Be.name%3Dt.pathname.split(%22%2F%22).pop()%2Ce.name.toLowerCase().endsWith(%22.gz%22)%26%26(e.name%3De.name.slice(0%2C-3))%2Ce.name.toLowerCase().endsWith(%22.nii%22)%7C%7C(e.name%2B%3D%22.nii%22)%7Delse%20e.name%3D%22untitled.nii%22%3Be.imageType%3DQe.NII%2Cthis.data.imageOptionsArray.push(e)%2Cthis.imageOptionsMap.set(t.id%2Cthis.data.imageOptionsArray.length-1)%7DremoveImage(t)%7Bif(this.imageOptionsMap.has(t.id))%7Bconst%20e%3Dthis.imageOptionsMap.get(t.id)%3Bthis.data.imageOptionsArray.length%3Ee%26%26this.data.imageOptionsArray.splice(e%2C1)%2Cthis.imageOptionsMap.delete(t.id)%7Dthis.volumes%3Dthis.volumes.filter((e%3D%3Ee.id!%3D%3Dt.id))%7DgetImageOptions(t)%7Breturn%20this.imageOptionsMap.has(t.id)%3Fthis.data.imageOptionsArray%5Bthis.imageOptionsMap.get(t.id)%5D%3Anull%7Djson()%7Bconst%20t%3D%7BencodedImageBlobs%3A%5B%5D%2CpreviewImageDataURL%3Athis.data.previewImageDataURL%2CimageOptionsMap%3Anew%20Map%7D%2Ce%3D%5B%5D%3Bt.sceneData%3D%7B...this.scene.sceneData%7D%2Ct.opts%3D%7B...this.opts%7D%2Cthis.opts.meshThicknessOn2D%3D%3D%3D1%2F0%26%26(t.opts.meshThicknessOn2D%3D%22infinity%22)%2Ct.labels%3D%5B...this.data.labels%5D%3Bfor(const%20e%20of%20t.labels)delete%20e.onClick%3Bif(t.customData%3Dthis.customData%2Cthis.volumes.length)%7Blet%20i%3Dthis.imageOptionsArray%5B0%5D%3Bif(i%7C%7C(l.debug(%22no%20image%20options%20for%20base%20image%22)%2Ci%3D%7Bname%3A%22%22%2Ccolormap%3A%22gray%22%2Copacity%3A1%2CpairedImgData%3Anull%2Ccal_min%3ANaN%2Ccal_max%3ANaN%2CtrustCalMinMax%3A!0%2CpercentileFrac%3A.02%2CignoreZeroVoxels%3A!1%2CuseQFormNotSForm%3A!1%2CcolormapNegative%3A%22%22%2CcolormapLabel%3Anull%2CimageType%3AQe.NII%2Cframe4D%3A0%2ClimitFrames4D%3ANaN%2Curl%3A%22%22%2CurlImageData%3A%22%22%2CalphaThreshold%3A!1%2Ccal_minNeg%3ANaN%2Ccal_maxNeg%3ANaN%2CcolorbarVisible%3A!0%7D)%2Ci.colormap%3Dthis.volumes%5B0%5D.colormap%2Ci.opacity%3Dthis.volumes%5B0%5D.opacity%2Ci.cal_max%3Dthis.volumes%5B0%5D.cal_max%7C%7CNaN%2Ci.cal_min%3Dthis.volumes%5B0%5D.cal_min%7C%7CNaN%2C!i)throw%20new%20Error(%22image%20options%20for%20base%20layer%20not%20found%22)%3B%7Be.push(i)%3Bconst%20s%3DCe.uint8tob64(this.volumes%5B0%5D.toUint8Array())%3Bt.encodedImageBlobs.push(s)%2Cthis.drawBitmap%26%26(t.encodedDrawingBlob%3DCe.uint8tob64(this.volumes%5B0%5D.toUint8Array(this.drawBitmap)))%2Ct.imageOptionsMap.set(this.volumes%5B0%5D.id%2C0)%7Dfor(let%20i%3D1%3Bi%3Cthis.volumes.length%3Bi%2B%2B)%7Bconst%20s%3Dthis.volumes%5Bi%5D%3Blet%20r%3Dthis.getImageOptions(s)%3Bnull%3D%3D%3Dr%3F(l.warn(%22no%20options%20found%20for%20image%2C%20using%20default%22)%2Cr%3D%7Bname%3A%22%22%2Ccolormap%3A%22gray%22%2Copacity%3A1%2CpairedImgData%3Anull%2Ccal_min%3ANaN%2Ccal_max%3ANaN%2CtrustCalMinMax%3A!0%2CpercentileFrac%3A.02%2CignoreZeroVoxels%3A!1%2CuseQFormNotSForm%3A!1%2CcolormapNegative%3A%22%22%2CcolormapLabel%3Anull%2CimageType%3AQe.NII%2Cframe4D%3A0%2ClimitFrames4D%3ANaN%2Curl%3A%22%22%2CurlImageData%3A%22%22%2CalphaThreshold%3A!1%2Ccal_minNeg%3ANaN%2Ccal_maxNeg%3ANaN%2CcolorbarVisible%3A!0%7D)%3A%22imageType%22in%20r%7C%7C(r.imageType%3DQe.NII)%2Cr.colormap%3Ds.colormap%2Cr.colormapLabel%3Ds.colormapLabel%2Cr.opacity%3Ds.opacity%2Cr.cal_max%3Ds.cal_max%7C%7CNaN%2Cr.cal_min%3Ds.cal_min%7C%7CNaN%2Ce.push(r)%3Bconst%20n%3DCe.uint8tob64(s.toUint8Array())%3Bt.encodedImageBlobs.push(n)%2Ct.imageOptionsMap.set(s.id%2Ci)%7D%7Dt.imageOptionsArray%3D%5B...e%5D%3Bconst%20i%3D%5B%5D%3Bt.connectomes%3D%5B%5D%3Bfor(const%20e%20of%20this.meshes)%7Bif(%22connectome%22%3D%3D%3De.type)%7Bt.connectomes.push(JSON.stringify(e.json()))%3Bcontinue%7Dconst%20s%3D%7Bpts%3Ae.pts%2Ctris%3Ae.tris%2Cname%3Ae.name%2Crgba255%3AUint8Array.from(e.rgba255)%2Copacity%3Ae.opacity%2Cconnectome%3Ae.connectome%2Cdpg%3Ae.dpg%2Cdps%3Ae.dps%2Cdpv%3Ae.dpv%2CmeshShaderIndex%3Ae.meshShaderIndex%2Clayers%3Ae.layers.map((t%3D%3E(%7Bvalues%3At.values%2CnFrame4D%3At.nFrame4D%2Cframe4D%3A0%2CoutlineBorder%3At.outlineBorder%2Cglobal_min%3At.global_min%2Cglobal_max%3At.global_max%2Ccal_min%3At.cal_min%2Ccal_max%3At.cal_max%2Copacity%3At.opacity%2Ccolormap%3At.colormap%2CcolormapNegative%3At.colormapNegative%2CcolormapLabel%3At.colormapLabel%2CuseNegativeCmap%3At.useNegativeCmap%7D)))%2ChasConnectome%3Ae.hasConnectome%2CedgeColormap%3Ae.edgeColormap%2CedgeColormapNegative%3Ae.edgeColormapNegative%2CedgeMax%3Ae.edgeMax%2CedgeMin%3Ae.edgeMin%2Cedges%3Ae.edges%26%26Array.isArray(e.edges)%3F%5B...e.edges%5D%3A%5B%5D%2CextentsMax%3Ae.extentsMax%2CextentsMin%3Ae.extentsMin%2CfurthestVertexFromOrigin%3Ae.furthestVertexFromOrigin%2CnodeColormap%3Ae.nodeColormap%2CnodeColormapNegative%3Ae.nodeColormapNegative%2CnodeMaxColor%3Ae.nodeMaxColor%2CnodeMinColor%3Ae.nodeMinColor%2CnodeScale%3Ae.nodeScale%2ClegendLineThickness%3Ae.legendLineThickness%2CoffsetPt0%3Ae.offsetPt0%2Cnodes%3Ae.nodes%7D%3Be.offsetPt0%26%26e.offsetPt0.length%3E0%26%26(s.offsetPt0%3De.offsetPt0%2Cs.fiberGroupColormap%3De.fiberGroupColormap%2Cs.fiberColor%3De.fiberColor%2Cs.fiberDither%3De.fiberDither%2Cs.fiberRadius%3De.fiberRadius%2Cs.colormap%3De.colormap)%2Ci.push(s)%7Dreturn%20t.meshesString%3DJSON.stringify(Te(i))%2Ct%7Dasync%20download(t%2Ce)%7Bconst%20i%3Dthis.json()%2Cs%3DJSON.stringify(i)%2Cr%3De%3F%22application%2Fgzip%22%3A%22application%2Fjson%22%3Blet%20n%3Bn%3De%3Fawait%20Ce.compressStringToArrayBuffer(s)%3AJSON.stringify(i)%2CCe.download(n%2Ct%2Cr)%7Dstatic%20deserializeMeshDataObjects(t)%7Bif(t.data.meshesString)%7Bt.meshDataObjects%3DEe(JSON.parse(t.data.meshesString))%3Bfor(const%20e%20of%20t.meshDataObjects)for(const%20t%20of%20e.layers)%22colorMap%22in%20t%26%26(t.colormap%3Dt.colorMap%2Cdelete%20t.colorMap)%2C%22colorMapNegative%22in%20t%26%26(t.colormapNegative%3Dt.colorMapNegative%2Cdelete%20t.colorMapNegative)%7D%7Dstatic%20async%20loadFromUrl(e)%7Bconst%20i%3Dawait%20fetch(e)%2Cs%3Dawait%20i.arrayBuffer()%3Blet%20r%3Bif(Ce.isArrayBufferCompressed(s))%7Bconst%20t%3Dawait%20Ce.decompressArrayBuffer(s)%3Br%3DJSON.parse(t)%7Delse%7Bconst%20t%3Dnew%20TextDecoder%3Br%3DJSON.parse(t.decode(s))%7Dreturn%20t.loadFromJSON(r)%7Dstatic%20async%20loadFromFile(e)%7Bconst%20i%3Dawait%20Ce.readFileAsync(e)%3Blet%20s%3Bconst%20r%3Dnew%20t%3Bif(Ce.isArrayBufferCompressed(i))s%3Dawait%20Ce.decompressArrayBuffer(i)%3Belse%7Bs%3D(new%20TextDecoder).decode(i)%7Dreturn%20r.data%3DJSON.parse(s)%2C%22infinity%22%3D%3D%3Dr.data.opts.meshThicknessOn2D%26%26(r.data.opts.meshThicknessOn2D%3D1%2F0)%2Cr.scene.sceneData%3D%7B...ii%2C...r.data.sceneData%7D%2Ct.deserializeMeshDataObjects(r)%2Cr%7Dstatic%20loadFromJSON(e)%7Bconst%20i%3Dnew%20t%3Breturn%20i.data%3De%2C%22infinity%22%3D%3D%3Di.data.opts.meshThicknessOn2D%26%26(i.data.opts.meshThicknessOn2D%3D1%2F0)%2Ci.scene.sceneData%3D%7B...ii%2C...e.sceneData%7D%2Ct.deserializeMeshDataObjects(i)%2Ci%7D%7D%2Cri%3D(t%3D%3E(t.LEFT%3D%22left%22%2Ct.RIGHT%3D%22right%22%2Ct.CENTER%3D%22center%22%2Ct))(ri%7C%7C%7B%7D)%2Cni%3D(t%3D%3E(t.NONE%3D%22none%22%2Ct.CIRCLE%3D%22circle%22%2Ct.RING%3D%22ring%22%2Ct))(ni%7C%7C%7B%7D)%2Cai%3D(t%3D%3E(t%5Bt.NONE%3D0%5D%3D%22NONE%22%2Ct%5Bt.TOPLEFT%3D9%5D%3D%22TOPLEFT%22%2Ct%5Bt.TOPCENTER%3D10%5D%3D%22TOPCENTER%22%2Ct%5Bt.TOPRIGHT%3D12%5D%3D%22TOPRIGHT%22%2Ct%5Bt.MIDDLELEFT%3D17%5D%3D%22MIDDLELEFT%22%2Ct%5Bt.MIDDLECENTER%3D18%5D%3D%22MIDDLECENTER%22%2Ct%5Bt.MIDDLERIGHT%3D20%5D%3D%22MIDDLERIGHT%22%2Ct%5Bt.BOTTOMLEFT%3D33%5D%3D%22BOTTOMLEFT%22%2Ct%5Bt.BOTTOMCENTER%3D34%5D%3D%22BOTTOMCENTER%22%2Ct%5Bt.BOTTOMRIGHT%3D36%5D%3D%22BOTTOMRIGHT%22%2Ct))(ai%7C%7C%7B%7D)%2Coi%3Dclass%7Bconstructor(t%3D%5B1%2C1%2C1%2C1%5D%2Ci%3D1%2Cs%3D%22left%22%2Cr%3D0%2Cn%3D%5B0%2C0%2C0%5D%2Ca%3D%22none%22%2Co%2Cl%2Ch)%7Be(this%2C%22textColor%22)%2Ce(this%2C%22textScale%22)%2Ce(this%2C%22textAlignment%22)%2Ce(this%2C%22lineWidth%22)%2Ce(this%2C%22lineColor%22)%2Ce(this%2C%22lineTerminator%22)%2Ce(this%2C%22bulletScale%22)%2Ce(this%2C%22bulletColor%22)%2Ce(this%2C%22backgroundColor%22)%2Cthis.textColor%3Dt%2Cthis.textScale%3Di%2Cthis.textAlignment%3Ds%2Cthis.lineWidth%3Dr%2Cthis.lineColor%3Dn%2Cthis.lineTerminator%3Da%2Cthis.bulletScale%3Do%2Cthis.bulletColor%3Dl%2Cthis.backgroundColor%3Dh%7D%7D%2Cli%3Dclass%7Bconstructor(t%2Ci%2Cs%2Cr%2Cn)%7Be(this%2C%22text%22)%2Ce(this%2C%22style%22)%2Ce(this%2C%22points%22)%2Ce(this%2C%22anchor%22)%2Ce(this%2C%22onClick%22)%2Cthis.text%3Dt%2Cthis.style%3Di%2Cthis.points%3Ds%2Cthis.anchor%3Dr%7C%7C0%2Cthis.onClick%3Dn%7D%7D%3Bimport%7Bvec3%20as%20hi%7Dfrom%22gl-matrix%22%3Bvar%20ci%3D%7Bname%3A%22untitled%20connectome%22%2CnodeColormap%3A%22warm%22%2CnodeColormapNegative%3A%22winter%22%2CnodeMinColor%3A0%2CnodeMaxColor%3A4%2CnodeScale%3A3%2CedgeColormap%3A%22warm%22%2CedgeColormapNegative%3A%22winter%22%2CedgeMin%3A2%2CedgeMax%3A6%2CedgeScale%3A1%2ClegendLineThickness%3A0%7D%2Cdi%3Dclass%20t%20extends%20De%7Bconstructor(t%2Ci)%7Bsuper(new%20Float32Array(%5B%5D)%2Cnew%20Uint32Array(%5B%5D)%2Ci.name%2Cnew%20Uint8Array(%5B%5D)%2C1%2C!0%2Ct%2Ci)%2Ce(this%2C%22gl%22)%2Ce(this%2C%22nodesChanged%22)%2Cthis.gl%3Dt%2Cthis.type%3D%22connectome%22%2Cthis.nodes%26%26this.updateLabels()%2Cthis.nodesChanged%3Dnew%20EventTarget%7Dstatic%20convertLegacyConnectome(t)%7Bconst%20e%3D%7Bnodes%3A%5B%5D%2Cedges%3A%5B%5D%2C...ci%7D%3Bfor(const%20i%20in%20t)if(i%20in%20ci)%7Bconst%20s%3Di%3Be%5Bs%5D%3Dt%5Bs%5D%7Dconst%20i%3Dt.nodes%3Bfor(let%20t%3D0%3Bt%3Ci.names.length%3Bt%2B%2B)e.nodes.push(%7Bname%3Ai.names%5Bt%5D%2Cx%3Ai.X%5Bt%5D%2Cy%3Ai.Y%5Bt%5D%2Cz%3Ai.Z%5Bt%5D%2CcolorValue%3Ai.Color%5Bt%5D%2CsizeValue%3Ai.Size%5Bt%5D%7D)%3Bfor(let%20s%3D0%3Bs%3Ci.names.length-1%3Bs%2B%2B)for(let%20r%3Ds%2B1%3Br%3Ci.names.length%3Br%2B%2B)%7Bconst%20n%3Dt.edges%5Bs*i.names.length%2Br%5D%3Be.edges.push(%7Bfirst%3As%2Csecond%3Ar%2CcolorValue%3An%7D)%7Dreturn%20e%7Dstatic%20convertFreeSurferConnectome(t%2Ce%3D%22warm%22)%7Blet%20i%3D!0%3Bif(%22data_type%22in%20t%3F%22fs_pointset%22!%3D%3Dt.data_type%26%26(i%3D!1)%3Ai%3D!1%2C%22points%22in%20t%7C%7C(i%3D!1)%2C!i)throw%20Error(%22not%20a%20valid%20FreeSurfer%20json%20pointset%22)%3Bconst%20s%3Dt.points.map((t%3D%3E(%7Bname%3AArray.isArray(t.comments)%26%26t.comments.length%3E0%26%26%22text%22in%20t.comments%5B0%5D%3Ft.comments%5B0%5D.text%3A%22%22%2Cx%3At.coordinates.x%2Cy%3At.coordinates.y%2Cz%3At.coordinates.z%2CcolorValue%3A1%2CsizeValue%3A1%2Cmetadata%3At.comments%7D)))%3Breturn%7B...ci%2CnodeColormap%3Ae%2CedgeColormap%3Ae%2Cnodes%3As%2Cedges%3A%5B%5D%7D%7DupdateLabels()%7Bconst%20t%3Dthis.nodes%3Bif(t%26%26t.length%3E0)%7Bconst%20e%3Dt.reduce(((t%2Ce)%3D%3Et.sizeValue%3Ee.sizeValue%3Ft%3Ae)).sizeValue%2Ci%3Dthis.nodeMinColor%3Fthis.nodeMinColor%3At.reduce(((t%2Ce)%3D%3Et.colorValue%3Ce.colorValue%3Ft%3Ae)).colorValue%2Cs%3Dthis.nodeMaxColor%3Fthis.nodeMaxColor%3At.reduce(((t%2Ce)%3D%3Et.colorValue%3Ee.colorValue%3Ft%3Ae)).colorValue%2Cr%3Dse.colormap(this.nodeColormap%2Cthis.colormapInvert)%2Cn%3Dse.colormap(this.nodeColormapNegative%2Cthis.colormapInvert)%2Ca%3D%22nodeColormapNegative%22in%20this%2Co%3Dthis.legendLineThickness%3Fthis.legendLineThickness%3A0%3Bfor(let%20h%3D0%3Bh%3Ct.length%3Bh%2B%2B)%7Blet%20c%3Dt%5Bh%5D.colorValue%2Cd%3D!1%3Bif(a%26%26c%3C0%26%26(d%3D!0%2Cc%3D-c)%2Ci%3Cs)%7Bif(c%3Ci)%7Bl.warn(%22color%20value%20lower%20than%20min%22)%3Bcontinue%7Dc%3D(c-i)%2F(s-i)%7Delse%20c%3D1%3Bc%3D4*Math.round(Math.max(Math.min(255%2C255*c)))%3Blet%20m%3D%5Br%5Bc%5D%2Cr%5Bc%2B1%5D%2Cr%5Bc%2B2%5D%2C255%5D%3Bd%26%26(m%3D%5Bn%5Bc%5D%2Cn%5Bc%2B1%5D%2Cn%5Bc%2B2%5D%2C255%5D)%2Cm%3Dm.map((t%3D%3Et%2F255))%2Cl.debug(%22adding%20label%20for%20%22%2Ct%5Bh%5D)%2Ct%5Bh%5D.label%3Dnew%20li(t%5Bh%5D.name%2C%7BtextColor%3Am%2CbulletScale%3At%5Bh%5D.sizeValue%2Fe%2CbulletColor%3Am%2ClineWidth%3Ao%2ClineColor%3Am%2CtextScale%3A1%2CtextAlignment%3A%22left%22%2ClineTerminator%3A%22none%22%7D%2C%5Bt%5Bh%5D.x%2Ct%5Bh%5D.y%2Ct%5Bh%5D.z%5D)%2Cl.debug(%22label%20for%20node%3A%22%2Ct%5Bh%5D.label)%7D%7D%7DaddConnectomeNode(t)%7Bif(l.debug(%22adding%20node%22%2Ct)%2C!this.nodes)throw%20new%20Error(%22nodes%20not%20defined%22)%3Bthis.nodes.push(t)%2Cthis.updateLabels()%2Cthis.nodesChanged.dispatchEvent(new%20CustomEvent(%22nodeAdded%22%2C%7Bdetail%3A%7Bnode%3At%7D%7D))%7DdeleteConnectomeNode(t)%7Bconst%20e%3Dthis.nodes.indexOf(t)%2Ci%3Dthis.edges%3Bi%26%26(this.edges%3Di.filter((t%3D%3Et.first!%3D%3De%26%26t.second!%3D%3De)))%2Cthis.nodes%3Dthis.nodes.filter((e%3D%3Ee!%3D%3Dt))%2Cthis.updateLabels()%2Cthis.updateConnectome(this.gl)%2Cthis.nodesChanged.dispatchEvent(new%20CustomEvent(%22nodeDeleted%22%2C%7Bdetail%3A%7Bnode%3At%7D%7D))%7DupdateConnectomeNodeByIndex(t%2Ce)%7Bthis.nodes%5Bt%5D%3De%2Cthis.updateLabels()%2Cthis.updateConnectome(this.gl)%2Cthis.nodesChanged.dispatchEvent(new%20CustomEvent(%22nodeChanged%22%2C%7Bdetail%3A%7Bnode%3Ae%7D%7D))%7DupdateConnectomeNodeByPoint(t%2Ce)%7Bconst%20i%3Dthis.nodes%3Bif(!i)throw%20new%20Error(%22Node%20to%20update%20does%20not%20exist%22)%3Bconst%20s%3Di.find((e%3D%3ECe.arraysAreEqual(%5Be.x%2Ce.y%2Ce.z%5D%2Ct)))%3Bif(!s)throw%20new%20Error(%60Node%20with%20point%20%24%7Bt%7D%20to%20update%20does%20not%20exist%60)%3Bconst%20r%3Di.findIndex((t%3D%3Et%3D%3D%3Ds))%3Bthis.updateConnectomeNodeByIndex(r%2Ce)%7DaddConnectomeEdge(t%2Ce%2Ci)%7Bconst%20s%3Dthis.edges%3Blet%20r%3Ds.find((i%3D%3E(i.first%3D%3D%3Dt%7C%7Ci.second%3D%3D%3Dt)%26%26i.first%2Bi.second%3D%3D%3Dt%2Be))%3Breturn%20r%7C%7C(r%3D%7Bfirst%3At%2Csecond%3Ae%2CcolorValue%3Ai%7D%2Cs.push(r)%2Cthis.updateConnectome(this.gl)%2Cr)%7DdeleteConnectomeEdge(t%2Ce)%7Bconst%20i%3Dthis.edges%2Cs%3Di.find((i%3D%3E(i.first%3D%3D%3Dt%7C%7Ci.first%3D%3D%3De)%26%26i.first%2Bi.second%3D%3D%3Dt%2Be))%3Bif(!s)throw%20new%20Error(%60edge%20between%20%24%7Bt%7D%20and%20%24%7Be%7D%20not%20found%60)%3Breturn%20this.edges%3Di.filter((t%3D%3Et!%3D%3Ds))%2Cthis.updateConnectome(this.gl)%2Cs%7DfindClosestConnectomeNode(t%2Ce)%7Bconst%20i%3Dthis.nodes%3Bif(!i%7C%7C0%3D%3D%3Di.length)return%20null%3Bconst%20s%3Di.map(((e%2Ci)%3D%3E(%7Bnode%3Ae%2Cdistance%3AMath.sqrt(Math.pow(e.x-t%5B0%5D%2C2)%2BMath.pow(e.y-t%5B1%5D%2C2)%2BMath.pow(e.z-t%5B2%5D%2C2))%2Cindex%3Ai%7D))).filter((t%3D%3Et.distance%3Ce)).sort(((t%2Ce)%3D%3Et.distance-e.distance))%3Breturn%20s.length%3E0%3Fs%5B0%5D.node%3Anull%7DupdateConnectome(t)%7Bconst%20e%3D%5B%5D%2Ci%3D%5B%5D%2Cs%3D%5B%5D%3Blet%20r%3Dse.colormap(this.nodeColormap%2Cthis.colormapInvert)%2Cn%3Dse.colormap(this.nodeColormapNegative%2Cthis.colormapInvert)%2Ca%3D%22nodeColormapNegative%22in%20this%3Bif(void%200%3D%3D%3Dthis.nodeMinColor%7C%7Cvoid%200%3D%3D%3Dthis.nodeMaxColor)throw%20new%20Error(%22nodeMinColor%20or%20nodeMaxColor%20is%20undefined%22)%3Bif(void%200%3D%3D%3Dthis.edgeMin%7C%7Cvoid%200%3D%3D%3Dthis.edgeMax)throw%20new%20Error(%22edgeMin%20or%20edgeMax%20undefined%22)%3Blet%20o%3Dthis.nodeMinColor%2Cl%3Dthis.nodeMaxColor%3Bconst%20h%3Dthis.nodes%2Cc%3Dh.length%3Bfor(let%20t%3D0%3Bt%3Cc%3Bt%2B%2B)%7Bconst%20c%3Dh%5Bt%5D.sizeValue*this.nodeScale%3Bif(c%3C%3D0)continue%3Blet%20d%3Dh%5Bt%5D.colorValue%2Cm%3D!1%3Bif(a%26%26d%3C0%26%26(m%3D!0%2Cd%3D-d)%2Co%3Cl)%7Bif(d%3Co)continue%3Bd%3D(d-o)%2F(l-o)%7Delse%20d%3D1%3Bd%3D4*Math.round(Math.max(Math.min(255%2C255*d)))%3Blet%20u%3D%5Br%5Bd%5D%2Cr%5Bd%2B1%5D%2Cr%5Bd%2B2%5D%2C255%5D%3Bm%26%26(u%3D%5Bn%5Bd%5D%2Cn%5Bd%2B1%5D%2Cn%5Bd%2B2%5D%2C255%5D)%3Bconst%20A%3Dhi.fromValues(h%5Bt%5D.x%2Ch%5Bt%5D.y%2Ch%5Bt%5D.z)%3Bk.makeColoredSphere(i%2Ce%2Cs%2Cc%2CA%2Cu)%7Dr%3Dse.colormap(this.edgeColormap%2Cthis.colormapInvert)%2Cn%3Dse.colormap(this.edgeColormapNegative%2Cthis.colormapInvert)%2Ca%3D%22edgeColormapNegative%22in%20this%2Co%3Dthis.edgeMin%2Cl%3Dthis.edgeMax%3Bconst%20d%3Dthis.edges%3Bfor(const%20t%20of%20d)%7Blet%20c%3Dt.colorValue%3Bconst%20d%3Da%26%26c%3C0%3Bd%26%26(c%3D-c)%3Bconst%20m%3Dc*this.edgeScale%3Bif(m%3C%3D0)continue%3Bif(o%3Cl)%7Bif(c%3Co)continue%3Bc%3D(c-o)%2F(l-o)%7Delse%20c%3D1%3Bc%3D4*Math.round(Math.max(Math.min(255%2C255*c)))%3Blet%20u%3D%5Br%5Bc%5D%2Cr%5Bc%2B1%5D%2Cr%5Bc%2B2%5D%2C255%5D%3Bd%26%26(u%3D%5Bn%5Bc%5D%2Cn%5Bc%2B1%5D%2Cn%5Bc%2B2%5D%2C255%5D)%3Bconst%20A%3Dhi.fromValues(h%5Bt.first%5D.x%2Ch%5Bt.first%5D.y%2Ch%5Bt.first%5D.z)%2Cf%3Dhi.fromValues(h%5Bt.second%5D.x%2Ch%5Bt.second%5D.y%2Ch%5Bt.second%5D.z)%3Bk.makeColoredCylinder(i%2Ce%2Cs%2CA%2Cf%2Cm%2Cu)%7Dconst%20m%3Dnew%20Float32Array(i)%2Cu%3Dnew%20Uint32Array(e)%2CA%3Dae.getExtents(m)%3Bthis.furthestVertexFromOrigin%3DA.mxDx%2Cthis.extentsMin%3DA.extentsMin%2Cthis.extentsMax%3DA.extentsMax%3Bconst%20f%3Dthis.generatePosNormClr(m%2Cu%2Cnew%20Uint8Array(s))%3Bt.bindBuffer(t.ELEMENT_ARRAY_BUFFER%2Cthis.indexBuffer)%2Ct.bufferData(t.ELEMENT_ARRAY_BUFFER%2CUint32Array.from(u)%2Ct.STATIC_DRAW)%2Ct.bindBuffer(t.ARRAY_BUFFER%2Cthis.vertexBuffer)%2Ct.bufferData(t.ARRAY_BUFFER%2CFloat32Array.from(f)%2Ct.STATIC_DRAW)%2Cthis.indexCount%3De.length%7DupdateMesh(t)%7Bthis.updateConnectome(t)%2Cthis.updateLabels()%7Djson()%7Bconst%20t%3D%7B%7D%3Bfor(const%20e%20in%20this)(e%20in%20ci%7C%7C%22nodes%22%3D%3D%3De%7C%7C%22edges%22%3D%3D%3De)%26%26(t%5Be%5D%3Dthis%5Be%5D)%3Breturn%20t%7Dstatic%20async%20loadConnectomeFromUrl(e%2Ci)%7Bconst%20s%3Dawait%20fetch(i)%2Cr%3Dawait%20s.json()%3Breturn%20new%20t(e%2Cr)%7D%7D%3Bimport%7Bmat4%20as%20mi%2Cvec3%20as%20ui%2Cvec4%20as%20Ai%7Dfrom%22gl-matrix%22%3Bfunction%20fi(t%2Ce)%7Bconst%20i%3DMath.floor(Math.log(t)%2FMath.log(10))%2Cs%3Dt%2FMath.pow(10%2Ci)%3Blet%20r%3Breturn%20r%3De%3Fs%3C1.5%3F1%3As%3C3%3F2%3As%3C7%3F5%3A10%3As%3C%3D1%3F1%3As%3C%3D2%3F2%3As%3C%3D5%3F5%3A10%2Cr*Math.pow(10%2Ci)%7Dfunction%20gi(t%2Ce%2Ci%3D4)%7Bconst%20s%3Dfi(e-t%2C!1)%2Cr%3Dfi(s%2F(i-1)%2C!0)%2Cn%3DMath.floor(t%2Fr)*r%2Ca%3DMath.ceil(e%2Fr)*r%3Breturn%5Br%2Cn%2Ca%2Cn%3D%3D%3Dt%26%26a%3D%3D%3De%5D%7Dfunction%20pi(t%2Ce)%7Blet%20i%3Dgi(t%2Ce%2C3)%3Breturn%20i%5B3%5D%7C%7C(i%3Dgi(t%2Ce%2C5))%2Ci%5B3%5D%7C%7C(i%3Dgi(t%2Ce%2C4))%2Ci%5B3%5D%7C%7C(i%3Dgi(t%2Ce%2C3))%2Ci%5B3%5D%7C%7C(i%3Dgi(t%2Ce%2C5))%2C%5Bi%5B0%5D%2Ci%5B1%5D%2Ci%5B2%5D%5D%7Dfunction%20vi(t)%7Breturn%20t*(Math.PI%2F180)%7Dfunction%20xi(t%2Ce%2Ci%2Cs)%7Blet%20r%3D-t%2Cn%3D-e%3Breturn%20isFinite(i)%26%26isFinite(s)%26%26(r%3Di%2Cn%3Ds)%2Cr%3En%26%26(%5Br%2Cn%5D%3D%5Bn%2Cr%5D)%2C%5Br%2Cn%5D%7Dfunction%20wi(t%2Ce%3D%5B0%2C1%2C2%5D)%7Bconst%20i%3Dui.create()%3Breturn%20i%5B0%5D%3Dt%5Be%5B0%5D%5D%2Ci%5B1%5D%3Dt%5Be%5B1%5D%5D%2Ci%5B2%5D%3Dt%5Be%5B2%5D%5D%2Ci%7Dfunction%20Ci(t)%7Bconst%20e%3DAi.fromValues(1%2C0%2C0%2C0)%2Ci%3DAi.create()%3Breturn%20Ai.transformMat4(i%2Ce%2Ct)%2Ci%5B0%5D%7Dfunction%20bi(t%2Ce%2Ci)%7Breturn%20Math.min(Math.max(t%2Ce)%2Ci)%7Dfunction%20yi(t%2Ce)%7Bconst%20i%3Dnew%20Uint8Array(t.buffer)%2Cs%3Dnew%20Int8Array(i.buffer)%3Blet%20r%3D0%3Bconst%20n%3Dnew%20Uint8Array(e)%3Blet%20a%3D0%3Bfor(%3Br%3Ci.length%3B)%7Bconst%20t%3Ds%5Br%5D%3Bif(r%2B%2B%2Ct%3C0)%7Bconst%20e%3Ds%5Br%5D%3Br%2B%2B%3Bfor(let%20i%3D0%3Bi%3C1-t%3Bi%2B%2B)n%5Ba%5D%3De%2Ca%2B%2B%7Delse%20for(let%20e%3D0%3Be%3Ct%2B1%3Be%2B%2B)n%5Ba%5D%3Ds%5Br%5D%2Cr%2B%2B%2Ca%2B%2B%7Dreturn%20n%7Dfunction%20Ii(t%2Ce)%7Breturn%200%3D%3D%3Dt.scl_slope%26%26(t.scl_slope%3D1)%2Ce*t.scl_slope%2Bt.scl_inter%7Dimport%7BwebSocket%20as%20Mi%7Dfrom%22rxjs%2FwebSocket%22%3Bimport%7Bv4%20as%20Di%7Dfrom%22%40lukeed%2Fuuid%22%3Bvar%20Fi%3Dclass%7Bconstructor(t%2Ci%2Cs%2Cr)%7Be(this%2C%22id%22)%2Ce(this%2C%22displayName%22)%2Ce(this%2C%22key%22)%2Ce(this%2C%22properties%22)%2Cthis.id%3Di%7C%7CDi()%2Cthis.displayName%3Dt%7C%7C%60user-%24%7Bthis.id%7D%60%2Cthis.key%3Ds%7C%7CDi()%2Cthis.properties%3Dr%7C%7Cnew%20Map%7D%7D%3Bvar%20Vi%3Dclass%7Bconstructor(t%2Ci%2Cs%2Cr%3D%22%22%2Cn%3D%22%22)%7Bif(e(this%2C%22userList%22)%2Ce(this%2C%22user%22)%2Ce(this%2C%22userQueueName%22)%2Ce(this%2C%22userListName%22)%2Ce(this%2C%22onMessageCallback%22)%2Ce(this%2C%22isConnectedToServer%22%2C!1)%2Ce(this%2C%22isController%22%2C!1)%2Ce(this%2C%22sessionScene%22%2C%7B%7D)%2Ce(this%2C%22sessionKey%22)%2Ce(this%2C%22sessionName%22)%2Ce(this%2C%22sessionSceneName%22)%2Ce(this%2C%22serverConnection%24%22%2Cnull)%2Cthis.userList%3D%5B%5D%2Cthis.user%3Di%7C%7Cnew%20Fi(%22anonymous%22)%2Cthis.onMessageCallback%3Ds%2Cthis.sessionScene%3D%7B%7D%2Cthis.sessionKey%3Dn%7C%7CDi()%2Cthis.sessionName%3Dt%2Cthis.sessionSceneName%3D%60session-%24%7Bt%7D-scene%60%2Cr)this.connectToServer(r%2Ct)%2Cthis.subscribeToServer()%2Cthis.isConnectedToServer%3D!0%2Cnull!%3D%3Dthis.serverConnection%24%26%26this.serverConnection%24.next(%7Bop%3A%22create%22%2Ckey%3Athis.sessionKey%7D)%3Belse%7Bif(!function(t)%7Bconst%20e%3Dwindow%5Bt%5D%2Ci%3D%22test%22%3Btry%7Breturn%20e.setItem(i%2Ci)%2Ce.removeItem(i)%2C!0%7Dcatch(t)%7Breturn!1%7D%7D(%22localStorage%22))throw%20new%20Error(%22Local%20storage%20unavailable%22)%3Bthis.userQueueName%3D%60user-%24%7Bthis.user.id%7D-q%60%2Cthis.userListName%3D%60%24%7Bt%7D-user-list%60%2Cthis.userList%3DJSON.parse(localStorage.getItem(this.userListName)%7C%7C%22%5B%5D%22)%2Cthis.userList.push(this.user)%2ClocalStorage.setItem(this.userListName%2CJSON.stringify(this.userList))%2ClocalStorage.setItem(this.userQueueName%2CJSON.stringify(%5B%5D))%2Cwindow.addEventListener(%22storage%22%2Cthis.localStorageEventListener.bind(this))%7D%7DsendSessionMessage(t)%7Bt.from%3Dthis.user.id%2Cthis.isConnectedToServer%26%26null!%3D%3Dthis.serverConnection%24%3Fthis.serverConnection%24.next(%7B...t%2Ckey%3Athis.sessionKey%2CuserKey%3Athis.user.key%7D)%3Athis.sendLocalMessage(t)%7DconnectToServer(t%2Ce)%7Bconst%20i%3Dnew%20URL(t)%3Bi.pathname%3D%22websockets%22%2Ci.search%3D%22%3Fsession%3D%22%2Be%2Cthis.serverConnection%24%3DMi(i.href)%2Cl.debug(i.href)%7DsubscribeToServer()%7Bnull!%3D%3Dthis.serverConnection%24%26%26this.serverConnection%24.subscribe(%7Bnext%3At%3D%3E%7Bthis.onMessageCallback(t)%7D%2Cerror%3At%3D%3El.error(t)%2Ccomplete%3A()%3D%3El.debug(%22complete%22)%7D)%7DsendLocalMessage(t)%7Bfor(const%20e%20of%20this.userList)%7Bif(e.id%3D%3D%3Dthis.user.id)continue%3Bconst%20i%3D%60user-%24%7Be.id%7D-q%60%2Cs%3DlocalStorage.getItem(i)%2Cr%3Ds%3FJSON.parse(s)%3A%5B%5D%3Br.push(t)%2ClocalStorage.setItem(i%2CJSON.stringify(r))%7D%7DlocalStorageEventListener(t)%7Bif(t.newValue)switch(t.key)%7Bcase%20this.userListName%3A%7Bconst%20e%3DJSON.parse(t.newValue)%2Ci%3DJSON.parse(t.oldValue%3F%3F%22%5B%5D%22)%3Bthis.userList%3De%3Bconst%20s%3De.filter((t%3D%3E!i.map((t%3D%3Et.id)).includes(t.id)))%3Bfor(const%20t%20of%20s)this.onMessageCallback(%7Bop%3A%22user%20joined%22%2Cuser%3At%7D)%7Dbreak%3Bcase%20this.userQueueName%3A%7Bconst%20e%3DJSON.parse(t.newValue)%3Bfor(const%20t%20of%20e)this.onMessageCallback%26%26this.onMessageCallback(t)%3BlocalStorage.setItem(this.userQueueName%3F%3F%22%22%2CJSON.stringify(%5B%5D))%7D%7D%7D%7D%2CTi%3Dclass%7Bconstructor(t)%7Be(this%2C%22niivue%22)%2Ce(this%2C%22mediaUrlMap%22)%2Ce(this%2C%22isInSession%22%2C!1)%2Ce(this%2C%22user%22)%2Ce(this%2C%22sessionBus%22)%2Ce(this%2C%22onFrameChange%22%2C((t%2Ce)%3D%3E%7B%7D))%2Cthis.niivue%3Dt%2Cthis.mediaUrlMap%3Dnew%20Map%2Cthis.niivue.onLocationChange%3Dthis.onLocationChangeHandler.bind(this)%2Cthis.niivue.onZoom3DChange%3Dthis.onZoom3DChangeHandler.bind(this)%2Cthis.niivue.scene.onAzimuthElevationChange%3Dthis.onAzimuthElevationChangeHandler.bind(this)%2Cthis.niivue.onClipPlaneChange%3Dthis.onClipPlaneChangeHandler.bind(this)%2Cthis.niivue.onVolumeAddedFromUrl%3Dthis.onVolumeAddedFromUrlHandler.bind(this)%2Cthis.niivue.onVolumeWithUrlRemoved%3Dthis.onVolumeWithUrlRemovedHandler.bind(this)%2Cthis.niivue.onMeshAddedFromUrl%3Dthis.onMeshAddedFromUrlHandler.bind(this)%2Cthis.niivue.onMeshWithUrlRemoved%3Dthis.onMeshWithUrlRemovedHandler.bind(this)%2Cthis.niivue.onCustomMeshShaderAdded%3Dthis.onCustomMeshShaderAddedHandler.bind(this)%2Cthis.niivue.onMeshShaderChanged%3Dthis.onMeshShaderChanged.bind(this)%2Cthis.niivue.onMeshPropertyChanged%3Dthis.onMeshPropertyChanged.bind(this)%2Cthis.niivue.onFrameChange%3Dthis.onFrameChangeHandler.bind(this)%3Bfor(const%20t%20of%20this.niivue.volumes)t.onColormapChange%3Dthis.onColormapChangeHandler.bind(this)%2Ct.onOpacityChange%3Dthis.onOpacityChangeHandler.bind(this)%7DonLocationChangeHandler(t)%7Bl.debug(t)%7DaddVolume(t%2Ce)%7Bthis.niivue.volumes.push(t)%3Bconst%20i%3D1%3D%3D%3Dthis.niivue.volumes.length%3F0%3Athis.niivue.volumes.length-1%3Bthis.niivue.setVolume(t%2Ci)%2Cthis.niivue.mediaUrlMap.set(t%2Ce)%7DaddMesh(t%2Ce)%7Bthis.niivue.meshes.push(t)%3Bconst%20i%3D1%3D%3D%3Dthis.niivue.meshes.length%3F0%3Athis.niivue.meshes.length-1%3Bthis.niivue.setMesh(t%2Ci)%2Cthis.niivue.mediaUrlMap.set(t%2Ce)%7DonNewMessage(t)%7Bswitch(t.op)%7Bcase%201%3Athis.niivue.volScaleMultiplier%3Dt.zoom%3Bbreak%3Bcase%202%3Athis.niivue.scene.clipPlane%3Dt.clipPlane%3Bbreak%3Bcase%203%3Athis.niivue.scene._elevation%3Dt.elevation%2Cthis.niivue.scene._azimuth%3Dt.azimuth%3Bbreak%3Bcase%204%3A%7Bconst%20e%3Dthis.niivue.getMediaByUrl(t.url)%3Be%26%26(e.frame4D%3Dt.index)%7Dbreak%3Bcase%205%3Athis.niivue.getMediaByUrl(t.imageOptions.url)%7C%7CZe.loadFromUrl(t.imageOptions).then((e%3D%3E%7Be%26%26this.addVolume(e%2Ct.imageOptions.url)%7D)).catch((t%3D%3E%7Bif(t)throw%20t%7D))%3Bbreak%3Bcase%206%3A%7Bconst%20e%3Dthis.niivue.getMediaByUrl(t.url)%3Be%26%26(this.niivue.setVolume(e%2C-1)%2Cthis.niivue.mediaUrlMap.delete(e))%7Dbreak%3Bcase%207%3Athis.niivue.getMediaByUrl(t.url)._colormap%3Dt.colormap%2Cthis.niivue.updateGLVolume()%3Bbreak%3Bcase%208%3Athis.niivue.getMediaByUrl(t.url)._opacity%3Dt.opacity%2Cthis.niivue.updateGLVolume()%3Bbreak%3Bcase%209%3Athis.niivue.getMediaByUrl(t.meshOptions.url)%7C%7C(t.meshOptions.gl%3Dthis.niivue.gl%2CDe.loadFromUrl(t.meshOptions).then((e%3D%3E%7Bthis.addMesh(e%2Ct.meshOptions.url)%7D)).catch((t%3D%3E%7Bif(t)throw%20t%7D)))%3Bbreak%3Bcase%2010%3A%7Bconst%20e%3Dthis.niivue.getMediaByUrl(t.url)%3Be%26%26(this.niivue.setMesh(e%2C-1)%2Cthis.niivue.mediaUrlMap.delete(e))%7Dbreak%3Bcase%2011%3A%7Bconst%20e%3Dthis.niivue.createCustomMeshShader(t.fragmentShaderText%2Ct.name)%3Bthis.niivue.meshShaders.push(e)%7Dbreak%3Bcase%2012%3Athis.niivue.meshes%5Bt.meshIndex%5D.meshShaderIndex%3Dt.shaderIndex%2Cthis.niivue.updateGLVolume()%3Bbreak%3Bcase%2013%3Athis.niivue.meshes%5Bt.meshIndex%5D.setProperty(t.key%2Ct.val%2Cthis.niivue.gl)%7Dthis.niivue.drawScene()%7DconnectToSession(t%2Ce%2Ci%2Cs)%7Bthis.user%3De%7C%7Cnew%20Fi%2Cthis.sessionBus%3Dnew%20Vi(t%2Cthis.user%2Cthis.onNewMessage.bind(this)%2Ci%2Cs)%2Cthis.isInSession%3D!0%7DonZoom3DChangeHandler(t)%7Bthis.isInSession%26%26this.sessionBus%26%26this.sessionBus.sendSessionMessage(%7Bop%3A1%2Czoom%3At%7D)%7DonAzimuthElevationChangeHandler(t%2Ce)%7Bthis.isInSession%26%26this.sessionBus%26%26this.sessionBus.sendSessionMessage(%7Bop%3A3%2Cazimuth%3At%2Celevation%3Ae%7D)%7DonClipPlaneChangeHandler(t)%7Bthis.isInSession%26%26this.sessionBus%26%26this.sessionBus.sendSessionMessage(%7Bop%3A2%2CclipPlane%3At%7D)%7DonVolumeAddedFromUrlHandler(t%2Ce)%7Bthis.isInSession%26%26this.sessionBus%26%26(l.debug(t)%2Cthis.sessionBus.sendSessionMessage(%7Bop%3A5%2CimageOptions%3At%7D))%2Ce.onColormapChange%3Dthis.onColormapChangeHandler.bind(this)%2Ce.onOpacityChange%3Dthis.onOpacityChangeHandler.bind(this)%7DonImageLoadedHandler(t)%7Bif(t.onColormapChange%3Dthis.onColormapChangeHandler.bind(this)%2Ct.onOpacityChange%3Dthis.onOpacityChangeHandler.bind(this)%2Cthis.isInSession%26%26this.sessionBus%26%26this.niivue.mediaUrlMap.has(t))%7Bconst%20e%3Dthis.niivue.mediaUrlMap.get(t)%3Bthis.sessionBus.sendSessionMessage(%7Bop%3A%22volume%20with%20url%20added%22%2Curl%3Ae%7D)%7D%7DonVolumeWithUrlRemovedHandler(t)%7Bthis.isInSession%26%26this.sessionBus%26%26this.sessionBus.sendSessionMessage(%7Bop%3A6%2Curl%3At%7D)%7DonMeshAddedFromUrlHandler(t)%7Bl.debug(%22mesh%20loaded%20from%20url%22)%2Cl.debug(t)%2Cthis.isInSession%26%26this.sessionBus%26%26this.sessionBus.sendSessionMessage(%7Bop%3A9%2CmeshOptions%3At%7D)%7DonMeshLoadedHandler(t)%7Bl.debug(%22mesh%20has%20been%20added%22)%2Cl.debug(t)%7DonMeshWithUrlRemovedHandler(t)%7Bthis.isInSession%26%26this.sessionBus%26%26this.sessionBus.sendSessionMessage(%7Bop%3A10%2Curl%3At%7D)%7DonColormapChangeHandler(t)%7Bif(this.isInSession%26%26this.sessionBus%26%26this.niivue.mediaUrlMap.has(t))%7Bconst%20e%3Dthis.niivue.mediaUrlMap.get(t)%2Ci%3Dt.colormap%3Bthis.sessionBus.sendSessionMessage(%7Bop%3A7%2Curl%3Ae%2Ccolormap%3Ai%7D)%7D%7DonOpacityChangeHandler(t)%7Bif(this.isInSession%26%26this.sessionBus%26%26this.niivue.mediaUrlMap.has(t))%7Bconst%20e%3Dthis.niivue.mediaUrlMap.get(t)%2Ci%3Dt.opacity%3Bthis.sessionBus.sendSessionMessage(%7Bop%3A8%2Curl%3Ae%2Copacity%3Ai%7D)%7D%7DonFrameChangeHandler(t%2Ce)%7Bif(l.debug(%22frame%20has%20changed%20to%20%22%2Be)%2Cl.debug(t)%2Cthis.niivue.mediaUrlMap.has(t)%26%26this.isInSession%26%26this.sessionBus)%7Bconst%20i%3Dthis.niivue.mediaUrlMap.get(t)%3Bthis.sessionBus.sendSessionMessage(%7Bop%3A4%2Curl%3Ai%2Cindex%3Ae%7D)%7Dthis.onFrameChange(t%2Ce)%7DonCustomMeshShaderAddedHandler(t%2Ce)%7Bthis.isInSession%26%26this.sessionBus%26%26this.sessionBus.sendSessionMessage(%7Bop%3A11%2CfragmentShaderText%3At%2Cname%3Ae%7D)%7DonMeshShaderChanged(t%2Ce)%7Bthis.isInSession%26%26this.sessionBus%26%26this.sessionBus.sendSessionMessage(%7Bop%3A12%2CmeshIndex%3At%2CshaderIndex%3Ae%7D)%7DonMeshPropertyChanged(t%2Ce%2Ci)%7Bthis.isInSession%26%26this.sessionBus%26%26(l.debug(13)%2Cthis.sessionBus.sendSessionMessage(%7Bop%3A13%2CmeshIndex%3At%2Ckey%3Ae%2Cval%3Ai%7D))%7D%7D%2CEi%3D%5B%22ASC%22%2C%22BYU%22%2C%22DFS%22%2C%22FSM%22%2C%22PIAL%22%2C%22ORIG%22%2C%22INFLATED%22%2C%22SMOOTHWM%22%2C%22SPHERE%22%2C%22WHITE%22%2C%22G%22%2C%22GEO%22%2C%22GII%22%2C%22ICO%22%2C%22MZ3%22%2C%22NV%22%2C%22OBJ%22%2C%22OFF%22%2C%22PLY%22%2C%22SRF%22%2C%22STL%22%2C%22TCK%22%2C%22TRACT%22%2C%22TRI%22%2C%22TRK%22%2C%22TT%22%2C%22TRX%22%2C%22VTK%22%2C%22X3D%22%2C%22JCON%22%2C%22JSON%22%5D%2CSi%3D33984%2CBi%3D33985%2CUi%3D33986%2CRi%3D33991%2CNi%3D33994%2CPi%3D%7Bfilename%3A%22%22%2CisSaveDrawing%3A!1%2CvolumeByIndex%3A0%7D%2CLi%3Dclass%20t%7Bconstructor(t%3Dei)%7Be(this%2C%22loaders%22%2C%7B%7D)%2Ce(this%2C%22canvas%22%2Cnull)%2Ce(this%2C%22_gl%22%2Cnull)%2Ce(this%2C%22isBusy%22%2C!1)%2Ce(this%2C%22needsRefresh%22%2C!1)%2Ce(this%2C%22colormapTexture%22%2Cnull)%2Ce(this%2C%22colormapLists%22%2C%5B%5D)%2Ce(this%2C%22volumeTexture%22%2Cnull)%2Ce(this%2C%22gradientTexture%22%2Cnull)%2Ce(this%2C%22gradientTextureAmount%22%2C0)%2Ce(this%2C%22drawTexture%22%2Cnull)%2Ce(this%2C%22drawUndoBitmaps%22%2C%5B%5D)%2Ce(this%2C%22drawLut%22%2Cse.makeDrawLut(%22%24itksnap%22))%2Ce(this%2C%22drawOpacity%22%2C.8)%2Ce(this%2C%22renderDrawAmbientOcclusion%22%2C.4)%2Ce(this%2C%22colorbarHeight%22%2C0)%2Ce(this%2C%22drawPenLocation%22%2C%5BNaN%2CNaN%2CNaN%5D)%2Ce(this%2C%22drawPenAxCorSag%22%2C-1)%2Ce(this%2C%22drawFillOverwrites%22%2C!0)%2Ce(this%2C%22drawPenFillPts%22%2C%5B%5D)%2Ce(this%2C%22overlayTexture%22%2Cnull)%2Ce(this%2C%22overlayTextureID%22%2Cnull)%2Ce(this%2C%22sliceMMShader%22)%2Ce(this%2C%22sliceV1Shader%22)%2Ce(this%2C%22orientCubeShader%22)%2Ce(this%2C%22orientCubeShaderVAO%22%2Cnull)%2Ce(this%2C%22rectShader%22)%2Ce(this%2C%22renderShader%22)%2Ce(this%2C%22lineShader%22)%2Ce(this%2C%22line3DShader%22)%2Ce(this%2C%22passThroughShader%22)%2Ce(this%2C%22renderGradientShader%22)%2Ce(this%2C%22renderSliceShader%22)%2Ce(this%2C%22renderVolumeShader%22)%2Ce(this%2C%22pickingMeshShader%22)%2Ce(this%2C%22pickingImageShader%22)%2Ce(this%2C%22colorbarShader%22)%2Ce(this%2C%22fontShader%22%2Cnull)%2Ce(this%2C%22fiberShader%22)%2Ce(this%2C%22fontTexture%22%2Cnull)%2Ce(this%2C%22circleShader%22)%2Ce(this%2C%22matCapTexture%22%2Cnull)%2Ce(this%2C%22bmpShader%22%2Cnull)%2Ce(this%2C%22bmpTexture%22%2Cnull)%2Ce(this%2C%22thumbnailVisible%22%2C!1)%2Ce(this%2C%22bmpTextureWH%22%2C1)%2Ce(this%2C%22growCutShader%22)%2Ce(this%2C%22orientShaderAtlasU%22%2Cnull)%2Ce(this%2C%22orientShaderAtlasI%22%2Cnull)%2Ce(this%2C%22orientShaderU%22%2Cnull)%2Ce(this%2C%22orientShaderI%22%2Cnull)%2Ce(this%2C%22orientShaderF%22%2Cnull)%2Ce(this%2C%22orientShaderRGBU%22%2Cnull)%2Ce(this%2C%22surfaceShader%22%2Cnull)%2Ce(this%2C%22blurShader%22%2Cnull)%2Ce(this%2C%22sobelShader%22%2Cnull)%2Ce(this%2C%22genericVAO%22%2Cnull)%2Ce(this%2C%22unusedVAO%22%2Cnull)%2Ce(this%2C%22crosshairs3D%22%2Cnull)%2Ce(this%2C%22DEFAULT_FONT_GLYPH_SHEET%22%2CFe)%2Ce(this%2C%22DEFAULT_FONT_METRICS%22%2CVe)%2Ce(this%2C%22fontMetrics%22)%2Ce(this%2C%22fontMets%22%2Cnull)%2Ce(this%2C%22backgroundMasksOverlays%22%2C0)%2Ce(this%2C%22overlayOutlineWidth%22%2C0)%2Ce(this%2C%22overlayAlphaShader%22%2C1)%2Ce(this%2C%22isAlphaClipDark%22%2C!1)%2Ce(this%2C%22position%22)%2Ce(this%2C%22extentsMin%22)%2Ce(this%2C%22extentsMax%22)%2Ce(this%2C%22resizeObserver%22%2Cnull)%2Ce(this%2C%22syncOpts%22%2C%7B%7D)%2Ce(this%2C%22readyForSync%22%2C!1)%2Ce(this%2C%22uiData%22%2C%7Bmousedown%3A!1%2Ctouchdown%3A!1%2CmouseButtonLeftDown%3A!1%2CmouseButtonCenterDown%3A!1%2CmouseButtonRightDown%3A!1%2CmouseDepthPicker%3A!1%2CclickedTile%3A-1%2Cpan2DxyzmmAtMouseDown%3A%5B0%2C0%2C0%2C1%5D%2CprevX%3A0%2CprevY%3A0%2CcurrX%3A0%2CcurrY%3A0%2CcurrentTouchTime%3A0%2ClastTouchTime%3A0%2CtouchTimer%3Anull%2CdoubleTouch%3A!1%2CisDragging%3A!1%2CdragStart%3A%5B0%2C0%5D%2CdragEnd%3A%5B0%2C0%5D%2CdragClipPlaneStartDepthAziElev%3A%5B0%2C0%2C0%5D%2ClastTwoTouchDistance%3A0%2CmultiTouchGesture%3A!1%7D)%2Ce(this%2C%22back%22%2Cnull)%2Ce(this%2C%22overlays%22%2C%5B%5D)%2Ce(this%2C%22deferredVolumes%22%2C%5B%5D)%2Ce(this%2C%22deferredMeshes%22%2C%5B%5D)%2Ce(this%2C%22furthestVertexFromOrigin%22%2C100)%2Ce(this%2C%22volScale%22%2C%5B%5D)%2Ce(this%2C%22vox%22%2C%5B%5D)%2Ce(this%2C%22mousePos%22%2C%5B0%2C0%5D)%2Ce(this%2C%22screenSlices%22%2C%5B%5D)%2Ce(this%2C%22cuboidVertexBuffer%22)%2Ce(this%2C%22otherNV%22%2Cnull)%2Ce(this%2C%22volumeObject3D%22%2Cnull)%2Ce(this%2C%22pivot3D%22%2C%5B0%2C0%2C0%5D)%2Ce(this%2C%22furthestFromPivot%22%2C10)%2Ce(this%2C%22currentClipPlaneIndex%22%2C0)%2Ce(this%2C%22lastCalled%22%2C(new%20Date).getTime())%2Ce(this%2C%22selectedObjectId%22%2C-1)%2Ce(this%2C%22CLIP_PLANE_ID%22%2C1)%2Ce(this%2C%22VOLUME_ID%22%2C254)%2Ce(this%2C%22DISTANCE_FROM_CAMERA%22%2C-.54)%2Ce(this%2C%22graph%22%2C%7BLTWH%3A%5B0%2C0%2C640%2C480%5D%2Copacity%3A0%2Cvols%3A%5B0%5D%2CautoSizeMultiplanar%3A!1%2CnormalizeValues%3A!1%7D)%2Ce(this%2C%22meshShaders%22%2C%5B%7BName%3A%22Phong%22%2CFrag%3A%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctvec3%20r%20%3D%20vec3(0.0%2C%200.0%2C%201.0)%3B%20%2F%2FrayDir%3A%20for%20orthographic%20projections%20moving%20in%20Z%20direction%20(no%20need%20for%20normal%20matrix)%5Cn%5Ctfloat%20ambient%20%3D%200.35%3B%5Cn%5Ctfloat%20diffuse%20%3D%200.5%3B%5Cn%5Ctfloat%20specular%20%3D%200.2%3B%5Cn%5Ctfloat%20shininess%20%3D%2010.0%3B%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ctvec3%20lightPosition%20%3D%20vec3(0.0%2C%2010.0%2C%20-5.0)%3B%5Cn%5Ctvec3%20l%20%3D%20normalize(lightPosition)%3B%5Cn%5Ctfloat%20lightNormDot%20%3D%20dot(n%2C%20l)%3B%5Cn%5Ctvec3%20a%20%3D%20vClr.rgb%20*%20ambient%3B%5Cn%5Ctvec3%20d%20%3D%20max(lightNormDot%2C%200.0)%20*%20vClr.rgb%20*%20diffuse%3B%5Cn%5Ctfloat%20s%20%3D%20specular%20*%20pow(max(dot(reflect(l%2C%20n)%2C%20r)%2C%200.0)%2C%20shininess)%3B%5Cn%5Ctcolor%20%3D%20vec4(a%20%2B%20d%20%2B%20s%2C%20opacity)%3B%5Cn%7D%22%7D%2C%7BName%3A%22Matte%22%2CFrag%3A%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctfloat%20ambient%20%3D%200.35%3B%5Cn%5Ctfloat%20diffuse%20%3D%200.6%3B%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ctvec3%20lightPosition%20%3D%20vec3(0.0%2C%2010.0%2C%20-5.0)%3B%5Cn%5Ctvec3%20l%20%3D%20normalize(lightPosition)%3B%5Cn%5Ctfloat%20lightNormDot%20%3D%20dot(n%2C%20l)%3B%5Cn%5Ctvec3%20a%20%3D%20vClr.rgb%20*%20ambient%3B%5Cn%5Ctvec3%20d%20%3D%20max(lightNormDot%2C%200.0)%20*%20vClr.rgb%20*%20diffuse%3B%5Cn%5Ctcolor%20%3D%20vec4(a%20%2B%20d%2C%20opacity)%3B%5Cn%7D%22%7D%2C%7BName%3A%22Harmonic%22%2CFrag%3A'%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnout%20vec4%20color%3B%5Cn%2F%2FSpherical%20harmonics%20constants%5Cnconst%20float%20C1%20%3D%200.429043%3B%5Cnconst%20float%20C2%20%3D%200.511664%3B%5Cnconst%20float%20C3%20%3D%200.743125%3B%5Cnconst%20float%20C4%20%3D%200.886227%3B%5Cnconst%20float%20C5%20%3D%200.247708%3B%5Cn%2F%2FSpherical%20harmonics%20coefficients%5Cn%2F%2F%20Ramamoorthi%2C%20R.%2C%20and%20P.%20Hanrahan.%202001b.%20%22An%20Efficient%20Representation%20for%20Irradiance%20Environment%20Maps.%22%20In%20Proceedings%20of%20SIGGRAPH%202001%2C%20pp.%20497%E2%80%93500.%5Cn%2F%2F%20https%3A%2F%2Fgithub.com%2Feskimoblood%2FprocessingSketches%2Fblob%2Fmaster%2Fdata%2Fshader%2Fshinyvert.glsl%5Cn%2F%2F%20https%3A%2F%2Fgithub.com%2Feskimoblood%2FprocessingSketches%2Fblob%2Fmaster%2Fdata%2Fshader%2Fshinyvert.glsl%5Cn%2F%2F%20Constants%20for%20Eucalyptus%20Grove%20lighting%5Cnconst%20vec3%20L00%20%20%3D%20vec3(%200.3783264%2C%20%200.4260425%2C%20%200.4504587)%3B%5Cnconst%20vec3%20L1m1%20%3D%20vec3(%200.2887813%2C%20%200.3586803%2C%20%200.4147053)%3B%5Cnconst%20vec3%20L10%20%20%3D%20vec3(%200.0379030%2C%20%200.0295216%2C%20%200.0098567)%3B%5Cnconst%20vec3%20L11%20%20%3D%20vec3(-0.1033028%2C%20-0.1031690%2C%20-0.0884924)%3B%5Cnconst%20vec3%20L2m2%20%3D%20vec3(-0.0621750%2C%20-0.0554432%2C%20-0.0396779)%3B%5Cnconst%20vec3%20L2m1%20%3D%20vec3(%200.0077820%2C%20-0.0148312%2C%20-0.0471301)%3B%5Cnconst%20vec3%20L20%20%20%3D%20vec3(-0.0935561%2C%20-0.1254260%2C%20-0.1525629)%3B%5Cnconst%20vec3%20L21%20%20%3D%20vec3(-0.0572703%2C%20-0.0502192%2C%20-0.0363410)%3B%5Cnconst%20vec3%20L22%20%20%3D%20vec3(%200.0203348%2C%20-0.0044201%2C%20-0.0452180)%3B%5Cnvec3%20SH(vec3%20vNormal)%20%7B%5Cn%5CtvNormal%20%3D%20vec3(vNormal.x%2CvNormal.z%2CvNormal.y)%3B%5Cn%5Ctvec3%20diffuseColor%20%3D%20C1%20*%20L22%20*%20(vNormal.x%20*%20vNormal.x%20-%20vNormal.y%20*%20vNormal.y)%20%2B%5Cn%5CtC3%20*%20L20%20*%20vNormal.z%20*%20vNormal.z%20%2B%5Cn%5CtC4%20*%20L00%20-%5Cn%5CtC5%20*%20L20%20%2B%5Cn%5Ct2.0%20*%20C1%20*%20L2m2%20*%20vNormal.x%20*%20vNormal.y%20%2B%5Cn%5Ct2.0%20*%20C1%20*%20L21%20%20*%20vNormal.x%20*%20vNormal.z%20%2B%5Cn%5Ct2.0%20*%20C1%20*%20L2m1%20*%20vNormal.y%20*%20vNormal.z%20%2B%5Cn%5Ct2.0%20*%20C2%20*%20L11%20%20*%20vNormal.x%20%2B%5Cn%5Ct2.0%20*%20C2%20*%20L1m1%20*%20vNormal.y%20%2B%5Cn%5Ct2.0%20*%20C2%20*%20L10%20%20*%20vNormal.z%3B%5Cn%5Ctreturn%20diffuseColor%3B%5Cn%7D%5Cnvoid%20main()%20%7B%5Cn%5Ctvec3%20r%20%3D%20vec3(0.0%2C%200.0%2C%201.0)%3B%20%2F%2FrayDir%3A%20for%20orthographic%20projections%20moving%20in%20Z%20direction%20(no%20need%20for%20normal%20matrix)%5Cn%5Ctfloat%20ambient%20%3D%200.3%3B%5Cn%5Ctfloat%20diffuse%20%3D%200.6%3B%5Cn%5Ctfloat%20specular%20%3D%200.1%3B%5Cn%5Ctfloat%20shininess%20%3D%2010.0%3B%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ctvec3%20lightPosition%20%3D%20vec3(0.0%2C%2010.0%2C%20-5.0)%3B%5Cn%5Ctvec3%20l%20%3D%20normalize(lightPosition)%3B%5Cn%5Ctfloat%20s%20%3D%20specular%20*%20pow(max(dot(reflect(l%2C%20n)%2C%20r)%2C%200.0)%2C%20shininess)%3B%5Cn%5Ctvec3%20a%20%3D%20vClr.rgb%20*%20ambient%3B%5Cn%5Ctvec3%20d%20%3D%20vClr.rgb%20*%20diffuse%20*%20SH(-reflect(n%2C%20vec3(l.x%2C%20l.y%2C%20-l.z))%20)%3B%5Cn%5Ctcolor%20%3D%20vec4(a%20%2B%20d%20%2B%20s%2C%20opacity)%3B%5Cn%7D'%7D%2C%7BName%3A%22Hemispheric%22%2CFrag%3A%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctvec3%20r%20%3D%20vec3(0.0%2C%200.0%2C%201.0)%3B%20%2F%2FrayDir%3A%20for%20orthographic%20projections%20moving%20in%20Z%20direction%20(no%20need%20for%20normal%20matrix)%5Cn%5Ctfloat%20ambient%20%3D%200.35%3B%5Cn%5Ctfloat%20diffuse%20%3D%200.5%3B%5Cn%5Ctfloat%20specular%20%3D%200.2%3B%5Cn%5Ctfloat%20shininess%20%3D%2010.0%3B%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ctvec3%20lightPosition%20%3D%20vec3(0.0%2C%2010.0%2C%20-5.0)%3B%5Cn%5Ctvec3%20l%20%3D%20normalize(lightPosition)%3B%5Cn%5Ctfloat%20lightNormDot%20%3D%20dot(n%2C%20l)%3B%5Cn%5Ctvec3%20up%20%3D%20vec3(0.0%2C%201.0%2C%200.0)%3B%5Cn%5Ctfloat%20ax%20%3D%20dot(n%2C%20up)%20*%200.5%20%2B%200.5%3B%20%20%2F%2FShreiner%20et%20al.%20(2013)%20OpenGL%20Programming%20Guide%2C%208th%20Ed.%2C%20p%20388.%20ISBN-10%3A%200321773039%5Cn%5Ctvec3%20upClr%20%3D%20vec3(1.0%2C%201.0%2C%200.95)%3B%5Cn%5Ctvec3%20downClr%20%3D%20vec3(0.4%2C%200.4%2C%200.6)%3B%5Cn%5Ctvec3%20a%20%3D%20vClr.rgb%20*%20ambient%3B%5Cn%5Cta%20*%3D%20mix(downClr%2C%20upClr%2C%20ax)%3B%5Cn%5Ctvec3%20d%20%3D%20max(lightNormDot%2C%200.0)%20*%20vClr.rgb%20*%20diffuse%3B%5Cn%5Ctfloat%20s%20%3D%20specular%20*%20pow(max(dot(reflect(l%2C%20n)%2C%20r)%2C%200.0)%2C%20shininess)%3B%5Cn%5Ctcolor%20%3D%20vec4(a%20%2B%20d%20%2B%20s%2C%20opacity)%3B%5Cn%7D%22%7D%2C%7BName%3A%22Crevice%22%2CFrag%3A%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnin%20vec4%20vPc%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ct%2F%2F%20Compute%20curvature%5Cn%5Ctvec3%20dx%20%3D%20dFdx(n)%3B%5Cn%5Ctvec3%20dy%20%3D%20dFdy(n)%3B%5Cn%5Ctvec3%20xneg%20%3D%20n%20-%20dx%3B%5Cn%5Ctvec3%20xpos%20%3D%20n%20%2B%20dx%3B%5Cn%5Ctvec3%20yneg%20%3D%20n%20-%20dy%3B%5Cn%5Ctvec3%20ypos%20%3D%20n%20%2B%20dy%3B%5Cn%5Ctfloat%20depth%20%3D%20length(vPc.xyz)%3B%5Cn%5Ctfloat%20curv%20%3D%20(cross(xneg%2C%20xpos).y%20-%20cross(yneg%2C%20ypos).x)%20%2F%20depth%3B%5Cn%5Ct%2F%2Fat%20this%20stage%200.5%20for%20flat%2C%20with%20valleys%20dark%20and%20ridges%20bright%5Cn%5Ctcurv%20%3D%201.0%20-%20(curv%20%2B%200.5)%3B%5Cn%5Ct%2F%2Fclamp%5Cn%5Ctcurv%20%3D%20%20min(max(curv%2C%200.0)%2C%201.0)%3B%5Cn%5Ct%2F%2F%20easing%20function%5Cn%5Ctcurv%20%3D%20pow(curv%2C%200.5)%3B%5Cn%5Ct%2F%2Fmodulate%20ambient%20and%20diffuse%20with%20curvature%5Cn%5Ctvec3%20r%20%3D%20vec3(0.0%2C%200.0%2C%201.0)%3B%20%2F%2FrayDir%3A%20for%20orthographic%20projections%20moving%20in%20Z%20direction%20(no%20need%20for%20normal%20matrix)%5Cn%5Ctfloat%20ambient%20%3D%200.6%3B%5Cn%5Ctfloat%20diffuse%20%3D%200.6%3B%5Cn%5Ctfloat%20specular%20%3D%200.2%3B%5Cn%5Ctfloat%20shininess%20%3D%2010.0%3B%5Cn%5Ctvec3%20lightPosition%20%3D%20vec3(0.0%2C%2010.0%2C%20-2.0)%3B%5Cn%5Ctvec3%20l%20%3D%20normalize(lightPosition)%3B%5Cn%5Ctfloat%20lightNormDot%20%3D%20dot(n%2C%20l)%3B%5Cn%5Ctvec3%20a%20%3D%20vClr.rgb%20*%20ambient%20*%20curv%3B%5Cn%5Ctvec3%20d%20%3D%20max(lightNormDot%2C%200.0)%20*%20vClr.rgb%20*%20diffuse%3B%5Cn%5Ctfloat%20s%20%3D%20specular%20*%20pow(max(dot(reflect(l%2C%20n)%2C%20r)%2C%200.0)%2C%20shininess)%3B%5Cn%5Ctcolor%20%3D%20vec4(a%20%2B%20d%20%2B%20s%2C%20opacity)%3B%5Cn%7D%22%7D%2C%7BName%3A%22Edge%22%2CFrag%3A%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctvec3%20r%20%3D%20vec3(0.0%2C%200.0%2C%201.0)%3B%20%2F%2FrayDir%3A%20for%20orthographic%20projections%20moving%20in%20Z%20direction%20(no%20need%20for%20normal%20matrix)%5Cn%5Ctfloat%20diffuse%20%3D%201.0%3B%5Cn%5Ctfloat%20specular%20%3D%200.2%3B%5Cn%5Ctfloat%20shininess%20%3D%2010.0%3B%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ctvec3%20lightPosition%20%3D%20vec3(0.0%2C%200.0%2C%20-5.0)%3B%5Cn%5Ctvec3%20l%20%3D%20normalize(lightPosition)%3B%5Cn%5Ctfloat%20lightNormDot%20%3D%20max(dot(n%2C%20l)%2C%200.0)%3B%5Cn%5Ctvec3%20d%20%3D%20lightNormDot%20*%20vClr.rgb%20*%20diffuse%3B%5Cn%5Ctfloat%20s%20%3D%20specular%20*%20pow(max(dot(reflect(l%2C%20n)%2C%20r)%2C%200.0)%2C%20shininess)%3B%5Cn%5Ctcolor%20%3D%20vec4(d%20%2B%20s%2C%20opacity)%3B%5Cn%7D%22%7D%2C%7BName%3A%22Diffuse%22%2CFrag%3A%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctfloat%20diffuse%20%3D%201.4%3B%5Cn%5Ctvec3%20l%20%3D%20vec3(0.0%2C%200.0%2C%20-1.0)%3B%5Cn%5Ctfloat%20lightNormDot%20%3D%20max(dot(normalize(vN)%2C%20l)%2C%200.0)%3B%5Cn%5Ctcolor%20%3D%20vec4(lightNormDot%20*%20vClr.rgb%20*%20diffuse%2C%20opacity)%3B%5Cn%7D%22%7D%2C%7BName%3A%22Outline%22%2CFrag%3A%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctvec3%20r%20%3D%20vec3(0.0%2C%200.0%2C%201.0)%3B%20%2F%2FrayDir%3A%20for%20orthographic%20projections%20moving%20in%20Z%20direction%20(no%20need%20for%20normal%20matrix)%5Cn%5Ctfloat%20ambient%20%3D%200.3%3B%5Cn%5Ctfloat%20diffuse%20%3D%200.6%3B%5Cn%5Ctfloat%20specular%20%3D%200.25%3B%5Cn%5Ctfloat%20shininess%20%3D%2010.0%3B%5Cn%5Ctfloat%20PenWidth%20%3D%200.6%3B%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ctvec3%20lightPosition%20%3D%20vec3(0.0%2C%2010.0%2C%20-5.0)%3B%5Cn%5Ctvec3%20l%20%3D%20normalize(lightPosition)%3B%5Cn%5Ctfloat%20lightNormDot%20%3D%20dot(n%2C%20l)%3B%5Cn%5Ctfloat%20view%20%3D%20abs(dot(n%2Cr))%3B%20%2F%2Fwith%20respect%20to%20viewer%5Cn%5Ctif%20(PenWidth%20%3C%20view)%20discard%3B%5Cn%5Ctvec3%20a%20%3D%20vClr.rgb%20*%20ambient%3B%5Cn%5Ctvec3%20d%20%3D%20max(lightNormDot%2C%200.0)%20*%20vClr.rgb%20*%20diffuse%3B%5Cn%5Ctfloat%20s%20%3D%20specular%20*%20pow(max(dot(reflect(l%2C%20n)%2C%20r)%2C%200.0)%2C%20shininess)%3B%5Cn%5Ctcolor.rgb%20%3D%20a%20%2B%20d%20%2B%20s%3B%5Cn%5Ctcolor.a%20%3D%20opacity%3B%5Cn%7D%22%7D%2C%7BName%3A%22Specular%22%2CFrag%3A%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctfloat%20specularRGB%20%3D%200.7%3B%5Cn%5Ctfloat%20specularWhite%20%3D%200.3%3B%5Cn%5Ctfloat%20shininess%20%3D%2010.0%3B%5Cn%5Ctfloat%20diffuse%20%3D%201.0%3B%5Cn%5Ctvec3%20r%20%3D%20vec3(0.0%2C%200.0%2C%201.0)%3B%20%2F%2FrayDir%3A%20for%20orthographic%20projections%20moving%20in%20Z%20direction%20(no%20need%20for%20normal%20matrix)%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ctvec3%20l%20%3D%20vec3(0.0%2C%200.0%2C%20-1.0)%3B%5Cn%5Ctfloat%20lightNormDot%20%3D%20max(dot(n%2C%20l)%2C%200.0)%3B%5Cn%5Ctvec3%20d3%20%3D%20lightNormDot%20*%20vClr.rgb%20*%20diffuse%3B%5Cn%5Ctfloat%20s%20%3D%20pow(max(dot(reflect(l%2C%20n)%2C%20r)%2C%200.0)%2C%20shininess)%3B%5Cn%5Ctvec3%20s3%20%3D%20specularRGB%20*%20s%20*%20vClr.rgb%3B%5Cn%5Cts%20*%3D%20specularWhite%3B%5Cn%5Ctcolor%20%3D%20vec4(d3%20%2B%20s3%20%2B%20s%2C%20opacity)%3B%5Cn%7D%22%7D%2C%7BName%3A%22Toon%22%2CFrag%3A%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnout%20vec4%20color%3B%5Cnfloat%20stepmix(float%20edge0%2C%20float%20edge1%2C%20float%20E%2C%20float%20x)%7B%5Cn%5Ctfloat%20T%20%3D%20clamp(0.5%20*%20(x%20-%20edge0%20%2B%20E)%20%2F%20E%2C%200.0%2C%201.0)%3B%5Cn%5Ctreturn%20mix(edge0%2C%20edge1%2C%20T)%3B%5Cn%7D%5Cnvoid%20main()%20%7B%5Cn%5Ctvec3%20r%20%3D%20vec3(0.0%2C%200.0%2C%201.0)%3B%5Cn%5Ctfloat%20ambient%20%3D%200.3%3B%5Cn%5Ctfloat%20diffuse%20%3D%200.6%3B%5Cn%5Ctfloat%20specular%20%3D%200.5%3B%5Cn%5Ctfloat%20shininess%20%3D%2050.0%3B%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ctvec3%20lightPosition%20%3D%20vec3(0.0%2C%2010.0%2C%20-5.0)%3B%5Cn%5Ctvec3%20l%20%3D%20normalize(lightPosition)%3B%5Cn%5Ctfloat%20df%20%3D%20max(0.0%2C%20dot(n%2C%20l))%3B%5Cn%5Ctfloat%20sf%20%3D%20pow(max(dot(reflect(l%2C%20n)%2C%20r)%2C%200.0)%2C%20shininess)%3B%5Cn%5Ctconst%20float%20A%20%3D%200.1%3B%5Cn%5Ctconst%20float%20B%20%3D%200.3%3B%5Cn%5Ctconst%20float%20C%20%3D%200.6%3B%5Cn%5Ctconst%20float%20D%20%3D%201.0%3B%5Cn%5Ctfloat%20E%20%3D%20fwidth(df)%3B%5Cn%5Ctif%20(df%20%3E%20A%20-%20E%20%26%26%20df%20%3C%20A%20%2B%20E)%20df%20%3D%20stepmix(A%2C%20B%2C%20E%2C%20df)%3B%5Cn%5Ctelse%20if%20(df%20%3E%20B%20-%20E%20%26%26%20df%20%3C%20B%20%2B%20E)%20df%20%3D%20stepmix(B%2C%20C%2C%20E%2C%20df)%3B%5Cn%5Ctelse%20if%20(df%20%3E%20C%20-%20E%20%26%26%20df%20%3C%20C%20%2B%20E)%20df%20%3D%20stepmix(C%2C%20D%2C%20E%2C%20df)%3B%5Cn%5Ctelse%20if%20(df%20%3C%20A)%20df%20%3D%200.0%3B%5Cn%5Ctelse%20if%20(df%20%3C%20B)%20df%20%3D%20B%3B%5Cn%5Ctelse%20if%20(df%20%3C%20C)%20df%20%3D%20C%3B%5Cn%5Ctelse%20df%20%3D%20D%3B%5Cn%5CtE%20%3D%20fwidth(sf)%3B%5Cn%5Ctif%20(sf%20%3E%200.5%20-%20E%20%26%26%20sf%20%3C%200.5%20%2B%20E)%5Cn%5Ct%5Ctsf%20%3D%20smoothstep(0.5%20-%20E%2C%200.5%20%2B%20E%2C%20sf)%3B%5Cn%5Ctelse%5Cn%5Ct%5Ctsf%20%3D%20step(0.5%2C%20sf)%3B%5Cn%5Ctvec3%20a%20%3D%20vClr.rgb%20*%20ambient%3B%5Cn%5Ctvec3%20d%20%3D%20max(df%2C%200.0)%20*%20vClr.rgb%20*%20diffuse%3B%5Cn%5Ctcolor.rgb%20%3D%20a%20%2B%20d%20%2B%20(specular%20*%20sf)%3B%5Cn%5Ctcolor.a%20%3D%20opacity%3B%5Cn%7D%22%7D%2C%7BName%3A%22Flat%22%2CFrag%3AS%7D%2C%7BName%3A%22Matcap%22%2CFrag%3A%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnuniform%20sampler2D%20matCap%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ctvec2%20uv%20%3D%20n.xy%20*%200.5%20%2B%200.5%3B%5Cn%5Ctuv.y%20%3D%201.0%20-%20uv.y%3B%5Cn%5Ctvec3%20clr%20%3D%20texture(matCap%2Cuv.xy).rgb%20*%20vClr.rgb%3B%5Cn%5Ctcolor%20%3D%20vec4(clr%2C%20opacity)%3B%5Cn%7D%22%7D%5D)%2Ce(this%2C%22dragModes%22%2C%7Bcontrast%3A1%2Cmeasurement%3A2%2Cnone%3A0%2Cpan%3A3%2Cslicer3D%3A4%2CcallbackOnly%3A5%7D)%2Ce(this%2C%22sliceTypeAxial%22%2C0)%2Ce(this%2C%22sliceTypeCoronal%22%2C1)%2Ce(this%2C%22sliceTypeSagittal%22%2C2)%2Ce(this%2C%22sliceTypeMultiplanar%22%2C3)%2Ce(this%2C%22sliceTypeRender%22%2C4)%2Ce(this%2C%22onDragRelease%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onMouseUp%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onLocationChange%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onIntensityChange%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onClickToSegment%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onImageLoaded%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onMeshLoaded%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onFrameChange%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onError%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onColormapChange%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onInfo%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onWarn%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onDebug%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onVolumeAddedFromUrl%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onVolumeWithUrlRemoved%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onVolumeUpdated%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onMeshAddedFromUrl%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onMeshAdded%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onMeshWithUrlRemoved%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onZoom3DChange%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onAzimuthElevationChange%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onClipPlaneChange%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onCustomMeshShaderAdded%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onMeshShaderChanged%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onMeshPropertyChanged%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onDocumentLoaded%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22document%22%2Cnew%20si)%2Ce(this%2C%22mediaUrlMap%22%2Cnew%20Map)%2Ce(this%2C%22initialized%22%2C!1)%2Ce(this%2C%22currentDrawUndoBitmap%22)%2Ce(this%2C%22loadingText%22)%3Bfor(const%20e%20in%20t)%22function%22%3D%3Dtypeof%20t%5Be%5D%3Fthis%5Be%5D%3Dt%5Be%5D%3Athis.opts%5Be%5D%3Dvoid%200%3D%3D%3Dei%5Be%5D%3Fei%5Be%5D%3At%5Be%5D%3Bthis.opts.isHighResolutionCapable%3Fthis.uiData.dpr%3Dwindow.devicePixelRatio%7C%7C1%3Athis.uiData.dpr%3D1%2Cthis.currentDrawUndoBitmap%3Dthis.opts.maxDrawUndoBitmaps%2Cthis.opts.drawingEnabled%26%26this.createEmptyDrawing()%2Cthis.opts.thumbnail.length%3E0%26%26(this.thumbnailVisible%3D!0)%2Cthis.loadingText%3Dthis.opts.loadingText%2Cl.setLogLevel(this.opts.logLevel)%7Dget%20scene()%7Breturn%20this.document.scene%7Dget%20opts()%7Breturn%20this.document.opts%7Dget%20sliceMosaicString()%7Breturn%20this.document.opts.sliceMosaicString%7C%7C%22%22%7Dset%20sliceMosaicString(t)%7Bthis.document.opts.sliceMosaicString%3Dt%7Dget%20volumes()%7Breturn%20this.document.volumes%7Dset%20volumes(t)%7Bthis.document.volumes%3Dt%7Dget%20meshes()%7Breturn%20this.document.meshes%7Dset%20meshes(t)%7Bthis.document.meshes%3Dt%7Dget%20drawBitmap()%7Breturn%20this.document.drawBitmap%7Dset%20drawBitmap(t)%7Bthis.document.drawBitmap%3Dt%7Dget%20volScaleMultiplier()%7Breturn%20this.scene.volScaleMultiplier%7Dset%20volScaleMultiplier(t)%7Bthis.setScale(t)%7Dasync%20saveScene(t%3D%22niivue.png%22)%7Bconst%20e%3Dthis.canvas%3Bif(!e)throw%20new%20Error(%22canvas%20not%20defined%22)%3Bthis.drawScene()%2Ce.toBlob((e%3D%3E%7Be%26%26(%22%22%3D%3D%3Dt%26%26(t%3D(t%3D%60niivue-screenshot-%24%7B(new%20Date).toString()%7D.png%60).replace(%2F%5Cs%2Fg%2C%22_%22))%2Cfunction(t%2Ce)%7Bconst%20i%3Ddocument.createElement(%22a%22)%3Bdocument.body.appendChild(i)%2Ci.style.display%3D%22none%22%3Bconst%20s%3Dwindow.URL.createObjectURL(t)%3Bi.href%3Ds%2Ci.download%3De%2Ci.click()%2Ci.remove()%7D(e%2Ct))%7D))%7Dasync%20attachTo(t%2Ce%3Dnull)%7Breturn%20await%20this.attachToCanvas(document.getElementById(t)%2Ce)%2Cl.debug(%22attached%20to%20element%20with%20id%3A%20%22%2Ct)%2Cthis%7Dasync%20attachToCanvas(t%2Ce%3Dnull)%7Breturn%20this.canvas%3Dt%2Cnull%3D%3D%3De%26%26(e%3Dnavigator.hardwareConcurrency%3E6%2Cl.debug(%22AntiAlias%20%22%2Ce%2C%22%20Threads%20%22%2Cnavigator.hardwareConcurrency))%2Cthis.gl%3Dthis.canvas.getContext(%22webgl2%22%2C%7Balpha%3A!0%2Cantialias%3Ae%7D)%2Cl.info(%22NIIVUE%20VERSION%20%22%2Ca)%2Cthis.canvas.parentElement.style.backgroundColor%3D%22black%22%2Cthis.opts.isResizeCanvas%26%26(this.canvas.style.width%3D%22100%25%22%2Cthis.canvas.style.height%3D%22100%25%22%2Cthis.canvas.style.display%3D%22block%22%2Cthis.canvas.width%3Dthis.canvas.offsetWidth%2Cthis.canvas.height%3Dthis.canvas.offsetHeight%2Cwindow.addEventListener(%22resize%22%2Cthis.resizeListener.bind(this))%2Cthis.resizeObserver%3Dnew%20ResizeObserver(this.resizeListener.bind(this))%2Cthis.resizeObserver.observe(this.canvas.parentElement))%2Cthis.registerInteractions()%2Cawait%20this.init()%2Cthis.drawScene()%2Cthis%7DsyncWith(t%2Ce%3D%7B%222d%22%3A!0%2C%223d%22%3A!0%7D)%7Bthis.otherNV%3Dt%2Cthis.syncOpts%3D%7B...e%7D%7DbroadcastTo(t%2Ce%3D%7B%222d%22%3A!0%2C%223d%22%3A!0%7D)%7Bthis.otherNV%3Dt%2Cthis.syncOpts%3De%7Dsync()%7Bif(!this.gl%7C%7C!this.otherNV%7C%7Cvoid%200%3D%3D%3Dthis.otherNV)return%3Bif(!this.gl.canvas.matches(%22%3Afocus%22))return%3Bconst%20e%3Dthis.frac2mm(this.scene.crosshairPos)%3Bif(this.otherNV%20instanceof%20t)%7Bconst%20t%3Dthis.scene.gamma%3Bt!%3D%3Dthis.otherNV.scene.gamma%26%26this.otherNV.setGamma(t)%2Cthis.syncOpts%5B%222d%22%5D%26%26(this.otherNV.scene.crosshairPos%3Dthis.otherNV.mm2frac(e)%2Cthis.otherNV.scene.pan2Dxyzmm%3Dn.clone(this.scene.pan2Dxyzmm))%2Cthis.syncOpts%5B%223d%22%5D%26%26(this.otherNV.scene.renderAzimuth%3Dthis.scene.renderAzimuth%2Cthis.otherNV.scene.renderElevation%3Dthis.scene.renderElevation%2Cthis.otherNV.scene.volScaleMultiplier%3Dthis.scene.volScaleMultiplier)%2Cthis.otherNV.drawScene()%2Cthis.otherNV.createOnLocationChange()%7Delse%20if(Array.isArray(this.otherNV))for(let%20t%3D0%3Bt%3Cthis.otherNV.length%3Bt%2B%2B)%7Bif(this.otherNV%5Bt%5D%3D%3D%3Dthis)continue%3Bconst%20i%3Dthis.scene.gamma%3Bi!%3D%3Dthis.otherNV%5Bt%5D.scene.gamma%26%26this.otherNV%5Bt%5D.setGamma(i)%2Cthis.syncOpts%5B%222d%22%5D%26%26(this.otherNV%5Bt%5D.scene.crosshairPos%3Dthis.otherNV%5Bt%5D.mm2frac(e)%2Cthis.otherNV%5Bt%5D.scene.pan2Dxyzmm%3Dn.clone(this.scene.pan2Dxyzmm))%2Cthis.syncOpts%5B%223d%22%5D%26%26(this.otherNV%5Bt%5D.scene.renderAzimuth%3Dthis.scene.renderAzimuth%2Cthis.otherNV%5Bt%5D.scene.renderElevation%3Dthis.scene.renderElevation%2Cthis.otherNV%5Bt%5D.scene.volScaleMultiplier%3Dthis.scene.volScaleMultiplier)%2Cthis.otherNV%5Bt%5D.drawScene()%2Cthis.otherNV%5Bt%5D.createOnLocationChange()%7D%7DarrayEquals(t%2Ce)%7Breturn%20Array.isArray(t)%26%26Array.isArray(e)%26%26t.length%3D%3D%3De.length%26%26t.every(((t%2Ci)%3D%3Et%3D%3D%3De%5Bi%5D))%7DresizeListener()%7Bif(this.canvas%26%26this.gl)%7Bif(!this.opts.isResizeCanvas)return%20this.opts.isHighResolutionCapable%26%26(l.warn(%22isHighResolutionCapable%20requires%20isResizeCanvas%22)%2Cthis.opts.isHighResolutionCapable%3D!1)%2Cthis.uiData.dpr%3D1%2Cvoid%20this.drawScene()%3Bthis.canvas.style.width%3D%22100%25%22%2Cthis.canvas.style.height%3D%22100%25%22%2Cthis.canvas.style.display%3D%22block%22%2Cthis.opts.isHighResolutionCapable%3F(this.uiData.dpr%3Dwindow.devicePixelRatio%7C%7C1%2Cl.debug(%22devicePixelRatio%3A%20%22%2Bthis.uiData.dpr))%3Athis.uiData.dpr%3D1%2C%22width%22in%20this.canvas.parentElement%3F(this.canvas.width%3Dthis.canvas.parentElement.width*this.uiData.dpr%2Cthis.canvas.height%3Dthis.canvas.parentElement.height*this.uiData.dpr)%3A(this.canvas.width%3Dthis.canvas.offsetWidth*this.uiData.dpr%2Cthis.canvas.height%3Dthis.canvas.offsetHeight*this.uiData.dpr)%2Cthis.gl.viewport(0%2C0%2Cthis.gl.canvas.width%2Cthis.gl.canvas.height)%2Cthis.drawScene()%7D%7DgetRelativeMousePosition(t%2Ce)%7Bif(!(e%3De%7C%7Ct.target))return%3Bconst%20i%3De.getBoundingClientRect()%3Breturn%7Bx%3At.clientX-i.left%2Cy%3At.clientY-i.top%7D%7DgetNoPaddingNoBorderCanvasRelativeMousePosition(t%2Ce)%7Be%3De%7C%7Ct.target%3Breturn%20this.getRelativeMousePosition(t%2Ce)%7DmouseContextMenuListener(t)%7Bt.preventDefault()%7DmouseDownListener(t)%7Bt.preventDefault()%2Cthis.drawPenLocation%3D%5BNaN%2CNaN%2CNaN%5D%2Cthis.drawPenAxCorSag%3D-1%2Cthis.uiData.mousedown%3D!0%2Cl.debug(%22mouse%20down%22)%2Cl.debug(t)%3Bconst%20e%3Dthis.getNoPaddingNoBorderCanvasRelativeMousePosition(t%2Cthis.gl.canvas)%3Bif(!e)return%3Bconst%5Bi%2Cs%5D%3D%5Be.x*this.uiData.dpr%2Ce.y*this.uiData.dpr%5D%2Cr%3Dthis.getLabelAtPoint(%5Bi%2Cs%5D)%3Bif(r)%7Bif(r.onClick)return%20void%20r.onClick(r)%3Bfor(const%20t%20of%20this.meshes)if(%22connectome%22%3D%3D%3Dt.type)for(const%20e%20of%20t.nodes)e.label%3D%3D%3Dr%26%26(this.scene.crosshairPos%3Dthis.mm2frac(%5Be.x%2Ce.y%2Ce.z%5D)%2Cthis.updateGLVolume()%2Cthis.drawScene())%7Dthis.uiData.clickedTile%3Dthis.tileIndex(i%2Cs)%2C0%3D%3D%3Dt.button%26%26t.shiftKey%3F(this.uiData.mouseButtonCenterDown%3D!0%2Cthis.mouseCenterButtonHandler(t))%3A0%3D%3D%3Dt.button%3F(this.uiData.mouseButtonLeftDown%3D!0%2Cthis.mouseLeftButtonHandler(t))%3A2%3D%3D%3Dt.button%3F(this.uiData.mouseButtonRightDown%3D!0%2Cthis.mouseRightButtonHandler(t))%3A1%3D%3D%3Dt.button%26%26(this.uiData.mouseButtonCenterDown%3D!0%2Cthis.mouseCenterButtonHandler(t))%7DmouseLeftButtonHandler(t)%7Bconst%20e%3Dthis.getNoPaddingNoBorderCanvasRelativeMousePosition(t%2Cthis.gl.canvas)%3Bthis.mouseDown(e.x%2Ce.y)%2Cthis.mouseClick(e.x%2Ce.y)%7DmouseCenterButtonHandler(t)%7Bconst%20e%3Dthis.getNoPaddingNoBorderCanvasRelativeMousePosition(t%2Cthis.gl.canvas)%3Bthis.mousePos%3D%5Be.x*this.uiData.dpr%2Ce.y*this.uiData.dpr%5D%2C0!%3D%3Dthis.opts.dragMode%26%26(this.setDragStart(e.x%2Ce.y)%2Cthis.uiData.isDragging%7C%7C(this.uiData.pan2DxyzmmAtMouseDown%3Dn.clone(this.scene.pan2Dxyzmm))%2Cthis.uiData.isDragging%3D!0%2Cthis.uiData.dragClipPlaneStartDepthAziElev%3Dthis.scene.clipPlaneDepthAziElev)%7DmouseRightButtonHandler(t)%7Bconst%20e%3Dthis.getNoPaddingNoBorderCanvasRelativeMousePosition(t%2Cthis.gl.canvas)%3Bthis.mousePos%3D%5Be.x*this.uiData.dpr%2Ce.y*this.uiData.dpr%5D%2C0!%3D%3Dthis.opts.dragMode%26%26(this.setDragStart(e.x%2Ce.y)%2Cthis.uiData.isDragging%7C%7C(this.uiData.pan2DxyzmmAtMouseDown%3Dn.clone(this.scene.pan2Dxyzmm))%2Cthis.uiData.isDragging%3D!0%2Cthis.uiData.dragClipPlaneStartDepthAziElev%3Dthis.scene.clipPlaneDepthAziElev)%7DcalculateMinMaxVoxIdx(t)%7Bif(t.length%3E2)throw%20new%20Error(%22array%20must%20not%20contain%20more%20than%20two%20values%22)%3Breturn%5BMath.floor(Math.min(t%5B0%5D%2Ct%5B1%5D))%2CMath.floor(Math.max(t%5B0%5D%2Ct%5B1%5D))%5D%7DcalculateNewRange(%7BvolIdx%3At%3D0%7D%3D%7B%7D)%7Bif(4%3D%3D%3Dthis.opts.sliceType%26%26this.sliceMosaicString.length%3C1)return%3Bif(this.uiData.dragStart%5B0%5D%3D%3D%3Dthis.uiData.dragEnd%5B0%5D%26%26this.uiData.dragStart%5B1%5D%3D%3D%3Dthis.uiData.dragEnd%5B1%5D)return%3Blet%20e%3Dthis.canvasPos2frac(%5Bthis.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D%5D)%3Bif(e%5B0%5D%3C0)return%3Bconst%20i%3Dthis.frac2vox(e%2Ct)%3Bif(e%3Dthis.canvasPos2frac(%5Bthis.uiData.dragEnd%5B0%5D%2Cthis.uiData.dragEnd%5B1%5D%5D)%2Ce%5B0%5D%3C0)return%3Bconst%20s%3Dthis.frac2vox(e%2Ct)%3Blet%20r%3D-Number.MAX_VALUE%2Cn%3DNumber.MAX_VALUE%3Bconst%20a%3Dthis.calculateMinMaxVoxIdx(%5Bi%5B0%5D%2Cs%5B0%5D%5D)%2Co%3Dthis.calculateMinMaxVoxIdx(%5Bi%5B1%5D%2Cs%5B1%5D%5D)%2Cl%3Dthis.calculateMinMaxVoxIdx(%5Bi%5B2%5D%2Cs%5B2%5D%5D)%3Bi%5B0%5D-s%5B0%5D%3D%3D0%3Fa%5B1%5D%3Di%5B0%5D%2B1%3Ai%5B1%5D-s%5B1%5D%3D%3D0%3Fo%5B1%5D%3Di%5B1%5D%2B1%3Ai%5B2%5D-s%5B2%5D%3D%3D0%26%26(l%5B1%5D%3Di%5B2%5D%2B1)%3Bconst%20h%3Dthis.volumes%5Bt%5D.hdr%2Cc%3Dthis.volumes%5Bt%5D.img%3Bif(!h%7C%7C!c)return%3Bconst%20d%3Dh.dims%5B1%5D%2Cm%3Dh.dims%5B2%5D%3Bfor(let%20t%3Dl%5B0%5D%3Bt%3Cl%5B1%5D%3Bt%2B%2B)%7Bconst%20e%3Dt*d*m%3Bfor(let%20t%3Do%5B0%5D%3Bt%3Co%5B1%5D%3Bt%2B%2B)%7Bconst%20i%3Dt*d%3Bfor(let%20t%3Da%5B0%5D%3Bt%3Ca%5B1%5D%3Bt%2B%2B)%7Bconst%20s%3De%2Bi%2Bt%3Bn%3Ec%5Bs%5D%26%26(n%3Dc%5Bs%5D)%2Cr%3Cc%5Bs%5D%26%26(r%3Dc%5Bs%5D)%7D%7D%7Dif(n%3E%3Dr)return%3Bconst%20u%3DIi(h%2Cn)%2CA%3DIi(h%2Cr)%3Bthis.volumes%5Bt%5D.cal_min%3Du%2Cthis.volumes%5Bt%5D.cal_max%3DA%2Cthis.onIntensityChange(this.volumes%5Bt%5D)%7DgenerateMouseUpCallback(t%2Ce)%7Bconst%20i%3Dthis.tileIndex(this.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D)%2Cs%3Dthis.tileIndex(this.uiData.dragEnd%5B0%5D%2Cthis.uiData.dragEnd%5B1%5D)%3Blet%20n%3D-1%3Bi%3D%3D%3Ds%26%26(n%3Ds)%3Blet%20a%3D-1%3Bn%3E%3D0%26%26(a%3Dthis.screenSlices%5Bn%5D.axCorSag)%3Bconst%20o%3Dthis.frac2mm(t)%2Cl%3Dthis.frac2mm(e)%2Ch%3Dr.create()%3Br.sub(h%2Cr.fromValues(o%5B0%5D%2Co%5B1%5D%2Co%5B2%5D)%2Cr.fromValues(l%5B0%5D%2Cl%5B1%5D%2Cl%5B2%5D))%3Bconst%20c%3Dr.len(h)%2Cd%3Dthis.frac2vox(t)%2Cm%3Dthis.frac2vox(e)%3Bthis.onDragRelease(%7BfracStart%3At%2CfracEnd%3Ae%2CvoxStart%3Ad%2CvoxEnd%3Am%2CmmStart%3Ao%2CmmEnd%3Al%2CmmLength%3Ac%2CtileIdx%3An%2CaxCorSag%3Aa%7D)%7DmouseUpListener()%7Bconst%20t%3D%7BmouseButtonRightDown%3Athis.uiData.mouseButtonRightDown%2CmouseButtonCenterDown%3Athis.uiData.mouseButtonCenterDown%2CisDragging%3Athis.uiData.isDragging%2CmousePos%3Athis.mousePos%2CfracPos%3Athis.canvasPos2frac(this.mousePos)%7D%3Bthis.uiData.mousedown%3D!1%2Cthis.uiData.mouseButtonRightDown%3D!1%3Bconst%20e%3Dthis.uiData.mouseButtonCenterDown%3Bvar%20i%3Bif(this.uiData.mouseButtonCenterDown%3D!1%2Cthis.uiData.mouseButtonLeftDown%3D!1%2Cthis.drawPenFillPts.length%3E0%3Fthis.drawPenFilled()%3Athis.drawPenAxCorSag%3E%3D0%26%26this.drawAddUndoBitmap()%2Cthis.drawPenLocation%3D%5BNaN%2CNaN%2CNaN%5D%2Cthis.drawPenAxCorSag%3D-1%2Ci%3Dthis.onMouseUp%2CObject.prototype.toString.call(i).indexOf(%22Function%22)%3E-1%26%26this.onMouseUp(t)%2Cthis.uiData.isDragging)%7Bthis.uiData.isDragging%3D!1%2C5%3D%3D%3Dthis.opts.dragMode%26%26this.drawScene()%3Bconst%20t%3Dthis.canvasPos2frac(%5Bthis.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D%5D)%2Ci%3Dthis.canvasPos2frac(%5Bthis.uiData.dragEnd%5B0%5D%2Cthis.uiData.dragEnd%5B1%5D%5D)%3Bif(this.generateMouseUpCallback(t%2Ci)%2C1!%3D%3Dthis.opts.dragMode)return%3Bif(e)return%3Bif(this.uiData.dragStart%5B0%5D%3D%3D%3Dthis.uiData.dragEnd%5B0%5D%26%26this.uiData.dragStart%5B1%5D%3D%3D%3Dthis.uiData.dragEnd%5B1%5D)return%3Bthis.calculateNewRange(%7BvolIdx%3A0%7D)%2Cthis.refreshLayers(this.volumes%5B0%5D%2C0)%7Dthis.drawScene()%7DcheckMultitouch(t)%7Bif(this.uiData.touchdown%26%26!this.uiData.multiTouchGesture)%7Bconst%20e%3Dthis.canvas.getBoundingClientRect()%3Bthis.mouseDown(t.touches%5B0%5D.clientX-e.left%2Ct.touches%5B0%5D.clientY-e.top)%2Cthis.mouseClick(t.touches%5B0%5D.clientX-e.left%2Ct.touches%5B0%5D.clientY-e.top)%7D%7DtouchStartListener(t)%7Bt.preventDefault()%2Cthis.uiData.touchTimer%7C%7C(this.uiData.touchTimer%3DsetTimeout((()%3D%3E%7Bthis.resetBriCon(t)%7D)%2Cthis.opts.longTouchTimeout))%2Cthis.uiData.touchdown%3D!0%2Cthis.uiData.currentTouchTime%3D(new%20Date).getTime()%3Bconst%20e%3Dthis.uiData.currentTouchTime-this.uiData.lastTouchTime%3Bif(e%3Cthis.opts.doubleTouchTimeout%26%26e%3E0)return%20this.uiData.doubleTouch%3D!0%2Cthis.setDragStart(t.targetTouches%5B0%5D.clientX-t.target.getBoundingClientRect().left%2Ct.targetTouches%5B0%5D.clientY-t.target.getBoundingClientRect().top)%2Cthis.resetBriCon(t)%2Cvoid(this.uiData.lastTouchTime%3Dthis.uiData.currentTouchTime)%3Bthis.uiData.doubleTouch%3D!1%2Cthis.setDragStart(0%2C0)%2Cthis.setDragEnd(0%2C0)%2Cthis.uiData.lastTouchTime%3Dthis.uiData.currentTouchTime%2Cthis.uiData.touchdown%26%26t.touches.length%3C2%3Fthis.uiData.multiTouchGesture%3D!1%3Athis.uiData.multiTouchGesture%3D!0%2CsetTimeout(this.checkMultitouch.bind(this)%2C1%2Ct)%7DtouchEndListener(t)%7Bif(t.preventDefault()%2Cthis.uiData.touchdown%3D!1%2Cthis.uiData.lastTwoTouchDistance%3D0%2Cthis.uiData.multiTouchGesture%3D!1%2Cthis.uiData.touchTimer%26%26(clearTimeout(this.uiData.touchTimer)%2Cthis.uiData.touchTimer%3Dnull)%2Cthis.uiData.isDragging)%7Bthis.uiData.isDragging%3D!1%2C1%3D%3D%3Dthis.opts.dragMode%26%26(this.calculateNewRange()%2Cthis.refreshLayers(this.volumes%5B0%5D%2C0))%3Bconst%20t%3Dthis.canvasPos2frac(%5Bthis.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D%5D)%2Ce%3Dthis.canvasPos2frac(%5Bthis.uiData.dragEnd%5B0%5D%2Cthis.uiData.dragEnd%5B1%5D%5D)%3Bthis.generateMouseUpCallback(t%2Ce)%7Dthis.mouseUpListener()%7DmouseMoveListener(t)%7Bif(this.uiData.mousedown)%7Bconst%20e%3Dthis.getNoPaddingNoBorderCanvasRelativeMousePosition(t%2Cthis.gl.canvas)%3Bif(!e)return%3Bconst%20i%3De.x*this.uiData.dpr%2Cs%3De.y*this.uiData.dpr%3Bif(this.tileIndex(i%2Cs)!%3D%3Dthis.uiData.clickedTile)return%3Bthis.uiData.mouseButtonLeftDown%3F(this.mouseMove(e.x%2Ce.y)%2Cthis.mouseClick(e.x%2Ce.y))%3A(this.uiData.mouseButtonRightDown%7C%7Cthis.uiData.mouseButtonCenterDown)%26%26this.setDragEnd(e.x%2Ce.y)%2Cthis.drawScene()%2Cthis.uiData.prevX%3Dthis.uiData.currX%2Cthis.uiData.prevY%3Dthis.uiData.currY%7Delse%20if(!this.uiData.mousedown%26%26this.opts.clickToSegment)%7Bconst%20e%3Dthis.getNoPaddingNoBorderCanvasRelativeMousePosition(t%2Cthis.gl.canvas)%3Bif(!e)return%3Bconst%20i%3De.x*this.uiData.dpr%2Cs%3De.y*this.uiData.dpr%3Bthis.mousePos%3D%5Bi%2Cs%5D%2Cthis.drawScene()%7D%7DresetBriCon(t%3Dnull)%7Bif(this.uiData.isDragging)return%3Blet%20e%3D!1%3B4%3D%3D%3Dthis.opts.sliceType%26%26(e%3D!0)%3Blet%20i%3D0%2Cs%3D0%3Bif(null!%3D%3Dt%26%26(%22targetTouches%22in%20t%3F(i%3Dt.targetTouches%5B0%5D.clientX-t.target.getBoundingClientRect().left%2Cs%3Dt.targetTouches%5B0%5D.clientY-t.target.getBoundingClientRect().top)%3A(i%3Dt.offsetX%2Cs%3Dt.offsetY)%2Ci*%3Dthis.uiData.dpr%2Cs*%3Dthis.uiData.dpr%2Cthis.inRenderTile(i%2Cs)%3E%3D0%26%26(e%3D!0))%2Ce)return%20this.uiData.mouseDepthPicker%3D!0%2Cthis.drawScene()%2Cvoid%20this.drawScene()%3B4!%3D%3Dthis.opts.dragMode%26%26(this.volumes.length%3C1%7C%7Cthis.uiData.doubleTouch%7C%7C(this.volumes%5B0%5D.cal_min%3Dthis.volumes%5B0%5D.robust_min%2Cthis.volumes%5B0%5D.cal_max%3Dthis.volumes%5B0%5D.robust_max%2Cthis.onIntensityChange(this.volumes%5B0%5D)%2Cthis.refreshLayers(this.volumes%5B0%5D%2C0)%2Cthis.drawScene()))%7DsetDragStart(t%2Ce)%7Bt*%3Dthis.uiData.dpr%2Ce*%3Dthis.uiData.dpr%2Cthis.uiData.dragStart%5B0%5D%3Dt%2Cthis.uiData.dragStart%5B1%5D%3De%7DsetDragEnd(t%2Ce)%7Bt*%3Dthis.uiData.dpr%2Ce*%3Dthis.uiData.dpr%2Cthis.uiData.dragEnd%5B0%5D%3Dt%2Cthis.uiData.dragEnd%5B1%5D%3De%7DtouchMoveListener(t)%7Bif(this.uiData.touchdown%26%26t.touches.length%3C2)%7Bconst%20e%3Dthis.canvas.getBoundingClientRect()%3Bif(this.uiData.isDragging%7C%7C(this.uiData.pan2DxyzmmAtMouseDown%3Dn.clone(this.scene.pan2Dxyzmm))%2Cthis.uiData.isDragging%3D!0%2Cthis.uiData.doubleTouch%26%26this.uiData.isDragging)return%20this.setDragEnd(t.targetTouches%5B0%5D.clientX-t.target.getBoundingClientRect().left%2Ct.targetTouches%5B0%5D.clientY-t.target.getBoundingClientRect().top)%2Cvoid%20this.drawScene()%3Bthis.mouseClick(t.touches%5B0%5D.clientX-e.left%2Ct.touches%5B0%5D.clientY-e.top)%2Cthis.mouseMove(t.touches%5B0%5D.clientX-e.left%2Ct.touches%5B0%5D.clientY-e.top)%7Delse%20this.handlePinchZoom(t)%7DhandlePinchZoom(t)%7Bif(2%3D%3D%3Dt.targetTouches.length%26%262%3D%3D%3Dt.changedTouches.length)%7Bconst%20e%3DMath.hypot(t.touches%5B0%5D.pageX-t.touches%5B1%5D.pageX%2Ct.touches%5B0%5D.pageY-t.touches%5B1%5D.pageY)%2Ci%3Dthis.canvas.getBoundingClientRect()%3Bthis.mousePos%3D%5Bt.touches%5B0%5D.clientX-i.left%2Ct.touches%5B0%5D.clientY-i.top%5D%2Ce%3Cthis.uiData.lastTwoTouchDistance%3Fthis.sliceScroll2D(-.01%2Ct.touches%5B0%5D.clientX-i.left%2Ct.touches%5B0%5D.clientY-i.top)%3Athis.sliceScroll2D(.01%2Ct.touches%5B0%5D.clientX-i.left%2Ct.touches%5B0%5D.clientY-i.top)%2Cthis.uiData.lastTwoTouchDistance%3De%7D%7DkeyUpListener(t)%7Bif(t.code%3D%3D%3Dthis.opts.clipPlaneHotKey)%7Bconst%20t%3D(new%20Date).getTime()%3Bif(t-this.lastCalled%3Ethis.opts.keyDebounceTime)%7Bswitch(this.currentClipPlaneIndex%3D(this.currentClipPlaneIndex%2B1)%257%2Cthis.currentClipPlaneIndex)%7Bcase%200%3Athis.scene.clipPlaneDepthAziElev%3D%5B2%2C0%2C0%5D%3Bbreak%3Bcase%201%3Athis.scene.clipPlaneDepthAziElev%3D%5B0%2C270%2C0%5D%3Bbreak%3Bcase%202%3Athis.scene.clipPlaneDepthAziElev%3D%5B0%2C90%2C0%5D%3Bbreak%3Bcase%203%3Athis.scene.clipPlaneDepthAziElev%3D%5B0%2C0%2C0%5D%3Bbreak%3Bcase%204%3Athis.scene.clipPlaneDepthAziElev%3D%5B0%2C180%2C0%5D%3Bbreak%3Bcase%205%3Athis.scene.clipPlaneDepthAziElev%3D%5B0%2C0%2C-90%5D%3Bbreak%3Bcase%206%3Athis.scene.clipPlaneDepthAziElev%3D%5B0%2C0%2C90%5D%7Dthis.setClipPlane(this.scene.clipPlaneDepthAziElev)%7Dthis.lastCalled%3Dt%7Delse%20if(t.code%3D%3D%3Dthis.opts.viewModeHotKey)%7Bconst%20t%3D(new%20Date).getTime()%3Bt-this.lastCalled%3Ethis.opts.keyDebounceTime%26%26(this.setSliceType((this.opts.sliceType%2B1)%255)%2Cthis.lastCalled%3Dt)%7D%7DkeyDownListener(t)%7B%22KeyH%22%3D%3D%3Dt.code%26%264%3D%3D%3Dthis.opts.sliceType%3Fthis.setRenderAzimuthElevation(this.scene.renderAzimuth-1%2Cthis.scene.renderElevation)%3A%22KeyL%22%3D%3D%3Dt.code%26%264%3D%3D%3Dthis.opts.sliceType%3Fthis.setRenderAzimuthElevation(this.scene.renderAzimuth%2B1%2Cthis.scene.renderElevation)%3A%22KeyJ%22%3D%3D%3Dt.code%26%264%3D%3D%3Dthis.opts.sliceType%3Fthis.setRenderAzimuthElevation(this.scene.renderAzimuth%2Cthis.scene.renderElevation%2B1)%3A%22KeyK%22%3D%3D%3Dt.code%26%264%3D%3D%3Dthis.opts.sliceType%3Fthis.setRenderAzimuthElevation(this.scene.renderAzimuth%2Cthis.scene.renderElevation-1)%3A%22KeyH%22%3D%3D%3Dt.code%26%264!%3D%3Dthis.opts.sliceType%3Fthis.moveCrosshairInVox(-1%2C0%2C0)%3A%22KeyL%22%3D%3D%3Dt.code%26%264!%3D%3Dthis.opts.sliceType%3Fthis.moveCrosshairInVox(1%2C0%2C0)%3A%22KeyU%22%3D%3D%3Dt.code%26%264!%3D%3Dthis.opts.sliceType%26%26t.ctrlKey%3Fthis.moveCrosshairInVox(0%2C0%2C1)%3A%22KeyD%22%3D%3D%3Dt.code%26%264!%3D%3Dthis.opts.sliceType%26%26t.ctrlKey%3Fthis.moveCrosshairInVox(0%2C0%2C-1)%3A%22KeyJ%22%3D%3D%3Dt.code%26%264!%3D%3Dthis.opts.sliceType%3Fthis.moveCrosshairInVox(0%2C-1%2C0)%3A%22KeyK%22%3D%3D%3Dt.code%26%264!%3D%3Dthis.opts.sliceType%3Fthis.moveCrosshairInVox(0%2C1%2C0)%3A%22KeyM%22%3D%3D%3Dt.code%26%264!%3D%3Dthis.opts.sliceType%3F(this.opts.dragMode%2B%2B%2Cthis.opts.dragMode%3E%3D4%26%26(this.opts.dragMode%3D0)%2Cl.info(%22drag%20mode%20changed%20to%20%22%2Cti%5Bthis.opts.dragMode%5D))%3A%22ArrowLeft%22%3D%3D%3Dt.code%3Fthis.setFrame4D(this.volumes%5B0%5D.id%2Cthis.volumes%5B0%5D.frame4D-1)%3A%22ArrowRight%22%3D%3D%3Dt.code%3Fthis.setFrame4D(this.volumes%5B0%5D.id%2Cthis.volumes%5B0%5D.frame4D%2B1)%3A%22Slash%22%3D%3D%3Dt.code%26%26t.shiftKey%26%26alert(%60NIIVUE%20VERSION%3A%20%24%7Ba%7D%60)%7DwheelListener(t)%7Bif(t.preventDefault()%2Ct.stopPropagation()%2Cthis.thumbnailVisible)return%3Bconst%20e%3Dthis.canvas.getBoundingClientRect()%3Bt.deltaY%3C0%3Fthis.sliceScroll2D(-.01%2Ct.clientX-e.left%2Ct.clientY-e.top)%3Athis.sliceScroll2D(.01%2Ct.clientX-e.left%2Ct.clientY-e.top)%7DregisterInteractions()%7Bif(!this.canvas)throw%20new%20Error(%22canvas%20undefined%22)%3Bthis.canvas.addEventListener(%22mousedown%22%2Cthis.mouseDownListener.bind(this))%2Cthis.canvas.addEventListener(%22mouseup%22%2Cthis.mouseUpListener.bind(this))%2Cthis.canvas.addEventListener(%22mousemove%22%2Cthis.mouseMoveListener.bind(this))%2Cthis.canvas.addEventListener(%22touchstart%22%2Cthis.touchStartListener.bind(this))%2Cthis.canvas.addEventListener(%22touchend%22%2Cthis.touchEndListener.bind(this))%2Cthis.canvas.addEventListener(%22touchmove%22%2Cthis.touchMoveListener.bind(this))%2Cthis.canvas.addEventListener(%22wheel%22%2Cthis.wheelListener.bind(this))%2Cthis.canvas.addEventListener(%22contextmenu%22%2Cthis.mouseContextMenuListener.bind(this))%2Cthis.canvas.addEventListener(%22dblclick%22%2Cthis.resetBriCon.bind(this))%2Cthis.canvas.addEventListener(%22dragenter%22%2Cthis.dragEnterListener.bind(this)%2C!1)%2Cthis.canvas.addEventListener(%22dragover%22%2Cthis.dragOverListener.bind(this)%2C!1)%2Cthis.canvas.addEventListener(%22drop%22%2Cthis.dropListener.bind(this)%2C!1)%2Cthis.canvas.setAttribute(%22tabindex%22%2C%220%22)%2Cthis.canvas.addEventListener(%22keyup%22%2Cthis.keyUpListener.bind(this)%2C!1)%2Cthis.canvas.addEventListener(%22keydown%22%2Cthis.keyDownListener.bind(this)%2C!1)%7DdragEnterListener(t)%7Bt.stopPropagation()%2Ct.preventDefault()%7DdragOverListener(t)%7Bt.stopPropagation()%2Ct.preventDefault()%7DgetFileExt(t%2Ce%3D!0)%7Bl.debug(%22fullname%3A%20%22%2Ct)%3Bconst%20i%3D%2F(%3F%3A%5C.(%5B%5E.%5D%2B))%3F%24%2F%3Blet%20s%3Di.exec(t)%5B1%5D%3Bif(s%3Ds.toUpperCase()%2C%22GZ%22%3D%3D%3Ds)s%3Di.exec(t.slice(0%2C-3))%5B1%5D%2Cs%3Ds.toUpperCase()%3Belse%20if(%22CBOR%22%3D%3D%3Ds)%7Bconst%20e%3Ds%3Bs%3Di.exec(t.slice(0%2C-5))%5B1%5D%2Cs%3Ds.toUpperCase()%2Cs%3D%60%24%7Bs%7D.%24%7Be%7D%60%7Dreturn%20e%3Fs%3As.toLowerCase()%7Dasync%20addVolumeFromUrl(t)%7Bconst%20e%3Dawait%20Ze.loadFromUrl(t)%3Breturn%20this.document.addImageOptions(e%2Ct)%2Ce.onColormapChange%3Dthis.onColormapChange%2Cthis.mediaUrlMap.set(e%2Ct.url)%2Cthis.onVolumeAddedFromUrl%26%26this.onVolumeAddedFromUrl(t%2Ce)%2Cthis.addVolume(e)%2Ce%7Dasync%20addVolumesFromUrl(t)%7Bconst%20e%3Dt.map((async%20t%3D%3E%7Bconst%20e%3Dthis.getFileExt(t.name%7C%7Ct.url)%3Bif(this.loaders%5Be%5D)%7Blet%20i%3Dt.url%3Bconst%20s%3Dthis.loaders%5Be%5D.toExt%3Blet%20r%3Dt.name%7C%7Ct.url%3Bif(r%3Dr.split(%22%2F%22).pop()%2C%22string%22%3D%3Dtypeof%20t.url)%7Bconst%20e%3Dt.url%3Btry%7Bconst%20t%3Dawait%20fetch(e)%3Bif(!t.ok)throw%20new%20Error(%60Failed%20to%20load%20file%3A%20%24%7Bt.statusText%7D%60)%3Bi%3Dawait%20t.arrayBuffer()%7Dcatch(t)%7Bthrow%20new%20Error(%60Failed%20to%20load%20url%20%24%7Be%7D%3A%20%24%7Bt%7D%60)%7D%7Dconst%20n%3Dawait%20this.loaders%5Be%5D.loader(i)%3Bt.url%3Dn%2Ct.name%3D%60%24%7Br%7D.%24%7Bs%7D%60%7Dconst%20i%3D%7Burl%3At.url%2Cheaders%3At.headers%2Cname%3At.name%2Ccolormap%3At.colormap%3Ft.colormap%3At.colorMap%2CcolormapNegative%3At.colormapNegative%3Ft.colormapNegative%3At.colorMapNegative%2Copacity%3At.opacity%2CurlImgData%3At.urlImgData%2Ccal_min%3At.cal_min%2Ccal_max%3At.cal_max%2CtrustCalMinMax%3Athis.opts.trustCalMinMax%2CisManifest%3At.isManifest%2Cframe4D%3At.frame4D%2ClimitFrames4D%3At.limitFrames4D%7C%7Cthis.opts.limitFrames4D%2CcolorbarVisible%3At.colorbarVisible%7D%2Cs%3Dawait%20Ze.loadFromUrl(i)%3Breturn%20this.document.addImageOptions(s%2Ci)%2Cs.onColormapChange%3Dthis.onColormapChange%2Cthis.mediaUrlMap.set(s%2Ci.url)%2Cthis.onVolumeAddedFromUrl%26%26this.onVolumeAddedFromUrl(i%2Cs)%2Cs%7D))%2Ci%3Dawait%20Promise.all(e)%3Bfor(let%20t%3D0%3Bt%3Ci.length%3Bt%2B%2B)this.addVolume(i%5Bt%5D)%3Breturn%20i%7DgetMediaByUrl(t)%7Breturn%5B...this.mediaUrlMap.entries()%5D.filter((e%3D%3Ee%5B1%5D%3D%3D%3Dt)).map((t%3D%3Et%5B0%5D)).pop()%7DremoveVolumeByUrl(t)%7Bconst%20e%3Dthis.getMediaByUrl(t)%3Bif(!e)throw%20new%20Error(%22No%20volume%20with%20URL%20present%22)%3Bthis.removeVolume(e)%7DreadDirectory(t)%7Bconst%20e%3Dt.createReader()%3Blet%20i%3D%5B%5D%3Bconst%20s%3D()%3D%3E%7Be.readEntries((e%3D%3E%7Be.length%3F(i%3Di.concat(e)%2Cs())%3A(async%20t%3D%3E%7Bconst%20e%3D%5B%5D%2Ci%3Dasync%20t%3D%3Enew%20Promise(((e%2Ci)%3D%3Et.file(e%2Ci)))%3Bfor(let%20s%3D0%3Bs%3Ct.length%3Bs%2B%2B)e.push(await%20i(t%5Bs%5D))%3Breturn%20e%7D)(i).then((e%3D%3E%7BZe.loadFromFile(%7Bfile%3Ae%2Cname%3At.name%2CurlImgData%3Anull%2CimageType%3AQe.DCM_FOLDER%7D).then((t%3D%3E%7Bthis.addVolume(t)%2Cthis.setDrawingEnabled(!0)%7D)).catch((t%3D%3E%7Bthrow%20t%7D))%7D)).catch((t%3D%3E%7Bthrow%20t%7D))%7D))%7D%3Breturn%20s()%2Ci%7DisMeshExt(t)%7Bconst%20e%3Dthis.getFileExt(t)%3Breturn%20l.debug(%22dropped%20ext%22)%2Cl.debug(e)%2CEi.includes(e)%7Dasync%20loadFromArrayBuffer(t%2Ce)%7Bconst%20i%3Dthis.getFileExt(e)%3Bif(Ei.includes(i))return%20void%20await%20this.addMeshFromUrl(%7Burl%3Ae%2Cbuffer%3At%7D)%3Bconst%20s%3Dze(e)%3Bs.buffer%3Dt%2Cs.name%3De%2Cawait%20this.addVolumeFromUrl(s)%7Dasync%20loadFromFile(t)%7Bconst%20e%3Dthis.getFileExt(t.name)%3BEi.includes(e)%3Fawait%20De.loadFromFile(%7Bfile%3At%2Cgl%3Athis.gl%2Cname%3At.name%7D).then((t%3D%3E%7Bthis.addMesh(t)%7D))%3Aawait%20Ze.loadFromFile(%7Bfile%3At%2Cname%3At.name%7D).then((t%3D%3E%7Bthis.addVolume(t)%7D))%7DuseLoader(t%2Ce%2Ci)%7Bthis.loaders%3D%7B...this.loaders%2C%5Be.toUpperCase()%5D%3A%7Bloader%3At%2CtoExt%3Ai%7D%7D%7DdropListener(t)%7Bif(t.stopPropagation()%2Ct.preventDefault()%2C!this.opts.dragAndDropEnabled)return%3Bconst%20e%3D%5B%5D%2Ci%3Dt.dataTransfer%3Bif(!i)return%3Bconst%20s%3Di.getData(%22text%2Furi-list%22)%3Bif(s)%7Be.push(s)%3Bconst%20t%3Dze(s)%2Ci%3Dthis.getFileExt(s)%3Bl.debug(%22dropped%20ext%22)%2Cl.debug(i)%2CEi.includes(i)%3Fthis.addMeshFromUrl(%7Burl%3As%7D).catch((t%3D%3E%7Bthrow%20t%7D))%3A%22NVD%22%3D%3D%3Di%3Fthis.loadDocumentFromUrl(s).catch((t%3D%3E%7Bthrow%20t%7D))%3Athis.addVolumeFromUrl(t).catch((t%3D%3E%7Bthrow%20t%7D))%7Delse%7Bconst%20e%3Di.items%3Bif(e.length%3E0)%7Bt.shiftKey%7C%7Ct.altKey%7C%7C(this.volumes%3D%5B%5D%2Cthis.overlays%3D%5B%5D%2Cthis.meshes%3D%5B%5D)%2Cthis.closeDrawing()%3Bfor(const%20i%20of%20Array.from(e))%7Bconst%20s%3Di.webkitGetAsEntry()%3Bif(l.debug(s)%2C!s)throw%20new%20Error(%22could%20not%20get%20entry%20from%20file%22)%3Bif(s.isFile)%7Bconst%20i%3Dthis.getFileExt(s.name)%3Bif(%22PNG%22%3D%3D%3Di)%7Bs.file((t%3D%3E%7Bthis.loadBmpTexture(t).catch((t%3D%3E%7Bthrow%20t%7D))%7D))%3Bcontinue%7Dlet%20r%3Bif(-1!%3D%3Ds.name.lastIndexOf(%22HEAD%22))for(const%20t%20of%20Array.from(e))%7Bconst%20e%3Dt.webkitGetAsEntry()%3Bif(!e)throw%20new%20Error(%22could%20not%20get%20paired%20entry%22)%3Bs.name.substring(0%2Cs.name.lastIndexOf(%22HEAD%22))%3D%3D%3De.name.substring(0%2Ce.name.lastIndexOf(%22BRIK%22))%26%26(r%3De)%7Dif(-1!%3D%3Ds.name.lastIndexOf(%22BRIK%22))continue%3Bif(Ei.includes(i))%7Bs.file((t%3D%3E%7BDe.loadFromFile(%7Bfile%3At%2Cgl%3Athis.gl%2Cname%3At.name%7D).then((t%3D%3E%7Bthis.addMesh(t)%7D)).catch((t%3D%3E%7Bthrow%20t%7D))%7D))%3Bcontinue%7Dif(%22NVD%22%3D%3D%3Di)%7Bs.file((t%3D%3E%7Bsi.loadFromFile(t).then((t%3D%3E%7Bthis.loadDocument(t)%2Cl.debug(%22loaded%20document%22)%7D)).catch((t%3D%3E%7Bthrow%20t%7D))%7D))%3Bbreak%7Ds.file((e%3D%3E%7Br%3Fr.file((t%3D%3E%7BZe.loadFromFile(%7Bfile%3Ae%2CurlImgData%3At%2ClimitFrames4D%3Athis.opts.limitFrames4D%7D).then((t%3D%3E%7Bthis.addVolume(t)%7D)).catch((t%3D%3E%7Bthrow%20t%7D))%7D))%3AZe.loadFromFile(%7Bfile%3Ae%2CurlImgData%3Ar%2ClimitFrames4D%3Athis.opts.limitFrames4D%7D).then((e%3D%3E%7Bt.altKey%3F(l.debug(%22alt%20key%20detected%3A%20assuming%20this%20is%20a%20drawing%20overlay%22)%2Cthis.drawClearAllUndoBitmaps()%2Cthis.loadDrawing(e))%3Athis.addVolume(e)%7D)).catch((t%3D%3E%7Bthrow%20t%7D))%7D))%7Delse%20s.isDirectory%26%26this.readDirectory(s)%7D%7D%7Dthis.drawScene()%7DsetMultiplanarPadPixels(t)%7Bthis.opts.multiplanarPadPixels%3Dt%2Cthis.drawScene()%7DsetMultiplanarLayout(t)%7B%22string%22%3D%3Dtypeof%20t%26%26(t%3DparseInt(t))%2Cthis.opts.multiplanarLayout%3Dt%2Cthis.drawScene()%7DsetCornerOrientationText(t)%7Bthis.opts.isCornerOrientationText%3Dt%2Cthis.updateGLVolume()%7DsetRadiologicalConvention(t)%7Bthis.opts.isRadiologicalConvention%3Dt%2Cthis.updateGLVolume()%7DsetDefaults(t%3D%7B%7D%2Ce%3D!1)%7Bthis.document.opts%3D%7B...ei%7D%2Cthis.scene.sceneData%3D%7B...ii%7D%3Bfor(const%20e%20in%20t)%22function%22%3D%3Dtypeof%20t%5Be%5D%3Fthis%5Be%5D%3Dt%5Be%5D%3Athis.opts%5Be%5D%3Dvoid%200%3D%3D%3Dei%5Be%5D%3Fei%5Be%5D%3At%5Be%5D%3Bif(this.scene.pan2Dxyzmm%3D%5B0%2C0%2C0%2C1%5D%2Ce%26%26this.volumes%26%26this.volumes.length%3E0)for(let%20t%3D0%3Bt%3Cthis.volumes.length%3Bt%2B%2B)this.volumes%5Bt%5D.cal_min%3Dthis.volumes%5Bt%5D.robust_min%2Cthis.volumes%5Bt%5D.cal_max%3Dthis.volumes%5Bt%5D.robust_max%3Bthis.updateGLVolume()%7DsetMeshThicknessOn2D(t)%7Bthis.opts.meshThicknessOn2D%3Dt%2Cthis.updateGLVolume()%7DsetSliceMosaicString(t)%7Bthis.sliceMosaicString%3Dt%2Cthis.updateGLVolume()%7DsetSliceMM(t)%7Bthis.opts.isSliceMM%3Dt%2Cthis.updateGLVolume()%7DsetAdditiveBlend(t)%7Bthis.opts.isAdditiveBlend%3Dt%2Cthis.updateGLVolume()%7DgetRadiologicalConvention()%7Breturn%20this.opts.isRadiologicalConvention%7DsetHighResolutionCapable(t)%7Bthis.opts.isHighResolutionCapable%3Dt%2Ct%26%26!this.opts.isResizeCanvas%26%26(l.warn(%22isHighResolutionCapable%20requires%20isResizeCanvas%22)%2Cthis.opts.isHighResolutionCapable%3D!1)%2Cthis.opts.isHighResolutionCapable%7C%7C(this.uiData.dpr%3D1)%2Cthis.resizeListener()%2Cthis.drawScene()%7DaddVolume(t)%7Bthis.volumes.push(t)%3Bconst%20e%3D1%3D%3D%3Dthis.volumes.length%3F0%3Athis.volumes.length-1%3Bthis.setVolume(t%2Ce)%2Cthis.onImageLoaded(t)%2Cl.debug(%22loaded%20volume%22%2Ct.name)%2Cl.debug(t)%7DaddMesh(t)%7Bthis.meshes.push(t)%3Bconst%20e%3D1%3D%3D%3Dthis.meshes.length%3F0%3Athis.meshes.length-1%3Bthis.setMesh(t%2Ce)%2Cthis.onMeshLoaded(t)%7DgetVolumeIndexByID(t)%7Bconst%20e%3Dthis.volumes.length%3Bfor(let%20i%3D0%3Bi%3Ce%3Bi%2B%2B)%7Bif(this.volumes%5Bi%5D.id%3D%3D%3Dt)return%20i%7Dreturn-1%7DdrawAddUndoBitmap()%7B!this.drawBitmap%7C%7Cthis.drawBitmap.length%3C1%3Fl.debug(%22drawAddUndoBitmap%20error%3A%20No%20drawing%20open%22)%3A(this.currentDrawUndoBitmap%2B%2B%2Cthis.currentDrawUndoBitmap%3E%3Dthis.opts.maxDrawUndoBitmaps%26%26(this.currentDrawUndoBitmap%3D0)%2Cthis.drawUndoBitmaps%5Bthis.currentDrawUndoBitmap%5D%3Dfunction(t)%7Bconst%20e%3Dt.length%3Blet%20i%3D0%3Bconst%20s%3Dnew%20Uint8Array(e%2BMath.ceil(.01*e))%2Cr%3Dnew%20Int8Array(s.buffer)%3Blet%20n%3D0%3Bfor(%3Bi%3Ce%3B)%7Blet%20a%3Dt%5Bi%5D%3Bi%2B%2B%3Blet%20o%3D1%3Bfor(%3Bo%3C129%26%26i%3Ce%26%26t%5Bi%5D%3D%3D%3Da%3B)i%2B%2B%2Co%2B%2B%3Bif(o%3E1)r%5Bn%5D%3D1-o%2Cn%2B%2B%2Cs%5Bn%5D%3Da%2Cn%2B%2B%3Belse%7Bfor(%3Bi%3Ce%26%26!(o%3E127)%26%26!(i%2B2%3Ce%26%26a!%3D%3Dt%5Bi%5D%26%26t%5Bi%2B2%5D%3D%3D%3Dt%5Bi%5D%26%26t%5Bi%2B1%5D%3D%3D%3Dt%5Bi%5D)%3B)a%3Dt%5Bi%5D%2Ci%2B%2B%2Co%2B%2B%3Bs%5Bn%5D%3Do-1%2Cn%2B%2B%3Bfor(let%20e%3D0%3Be%3Co%3Be%2B%2B)s%5Bn%5D%3Dt%5Bi-o%2Be%5D%2Cn%2B%2B%7D%7Dreturn%20l.info(%22PackBits%20%22%2Be%2B%22%20-%3E%20%22%2Bn%2B%22%20bytes%20(x%22%2Be%2Fn%2B%22)%22)%2Cs.slice(0%2Cn)%7D(this.drawBitmap))%7DdrawClearAllUndoBitmaps()%7Bif(this.currentDrawUndoBitmap%3Dthis.opts.maxDrawUndoBitmaps%2Cthis.drawUndoBitmaps%26%26!(this.drawUndoBitmaps.length%3C1))for(let%20t%3Dthis.drawUndoBitmaps.length-1%3Bt%3E%3D0%3Bt--)this.drawUndoBitmaps%5Bt%5D%3Dnew%20Uint8Array%7DdrawUndo()%7Bthis.drawUndoBitmaps.length%3C1%3Fl.debug(%22undo%20bitmaps%20not%20loaded%22)%3A(this.currentDrawUndoBitmap--%2Cthis.currentDrawUndoBitmap%3C0%26%26(this.currentDrawUndoBitmap%3Dthis.drawUndoBitmaps.length-1)%2Cthis.currentDrawUndoBitmap%3E%3Dthis.drawUndoBitmaps.length%26%26(this.currentDrawUndoBitmap%3D0)%2Cthis.drawUndoBitmaps%5Bthis.currentDrawUndoBitmap%5D.length%3C2%3Fl.debug(%22drawUndo%20is%20misbehaving%22)%3A(this.drawBitmap%3Dyi(this.drawUndoBitmaps%5Bthis.currentDrawUndoBitmap%5D%2Cthis.drawBitmap.length)%2Cthis.refreshDrawing(!0)))%7DloadDrawing(t)%7Bif(this.drawBitmap%26%26l.debug(%22Overwriting%20open%20drawing!%22)%2C!this.back)throw%20new%20Error(%22back%20undefined%22)%3Bthis.drawClearAllUndoBitmaps()%3Bconst%20e%3Dt.hdr.dims%3Bif(e%5B1%5D!%3D%3Dthis.back.hdr.dims%5B1%5D%7C%7Ce%5B2%5D!%3D%3Dthis.back.hdr.dims%5B2%5D%7C%7Ce%5B3%5D!%3D%3Dthis.back.hdr.dims%5B3%5D)return%20l.debug(%22drawing%20dimensions%20do%20not%20match%20background%20image%22)%2C!1%3Bt.img.constructor!%3D%3DUint8Array%26%26l.debug(%22Drawings%20should%20be%20UINT8%22)%3Bconst%20i%3Dt.permRAS%2Cs%3De%5B1%5D*e%5B2%5D*e%5B3%5D%3Bthis.drawBitmap%3Dnew%20Uint8Array(s)%2Cthis.drawTexture%3Dthis.r8Tex(this.drawTexture%2CRi%2Cthis.back.dims%2C!0)%3Bconst%20r%3D%5B0%2C0%2C0%5D%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)for(let%20e%3D0%3Be%3C3%3Be%2B%2B)Math.abs(i%5Bt%5D)-1%3D%3D%3De%26%26(r%5Be%5D%3Dt*Math.sign(i%5Bt%5D))%3Blet%20n%3D1%3Bconst%20a%3D%5B1%2C1%2C1%5D%2Co%3D%5B!1%2C!1%2C!1%5D%3Bfor(let%20t%3D0%3Bt%3Cr.length%3Bt%2B%2B)for(let%20i%3D0%3Bi%3Cr.length%3Bi%2B%2B)%7BMath.abs(r%5Bi%5D)%3D%3D%3Dt%26%26(a%5Bi%5D%3Dn%2C(r%5Bi%5D%3C0%7C%7CObject.is(r%5Bi%5D%2C-0))%26%26(o%5Bi%5D%3D!0)%2Cn*%3De%5Bi%2B1%5D)%7Dlet%20h%3DCe.range(0%2Ce%5B1%5D-1%2C1)%3Bo%5B0%5D%26%26(h%3DCe.range(e%5B1%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ce%5B1%5D%3Bt%2B%2B)h%5Bt%5D*%3Da%5B0%5D%3Blet%20c%3DCe.range(0%2Ce%5B2%5D-1%2C1)%3Bo%5B1%5D%26%26(c%3DCe.range(e%5B2%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ce%5B2%5D%3Bt%2B%2B)c%5Bt%5D*%3Da%5B1%5D%3Blet%20d%3DCe.range(0%2Ce%5B3%5D-1%2C1)%3Bo%5B2%5D%26%26(d%3DCe.range(e%5B3%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ce%5B3%5D%3Bt%2B%2B)d%5Bt%5D*%3Da%5B2%5D%3Bconst%20m%3Dt.img%2Cu%3Dthis.drawBitmap%3Blet%20A%3D0%3Bfor(let%20t%3D0%3Bt%3Ce%5B3%5D%3Bt%2B%2B)for(let%20i%3D0%3Bi%3Ce%5B2%5D%3Bi%2B%2B)for(let%20s%3D0%3Bs%3Ce%5B1%5D%3Bs%2B%2B)u%5Bh%5Bs%5D%2Bc%5Bi%5D%2Bd%5Bt%5D%5D%3Dm%5BA%5D%2CA%2B%2B%3Breturn%20this.drawAddUndoBitmap()%2Cthis.refreshDrawing(!1)%2Cthis.drawScene()%2C!0%7Dbinarize(t)%7Bconst%20e%3Dt.hdr.dims%2Ci%3De%5B1%5D*e%5B2%5D*e%5B3%5D%2Cs%3Dnew%20Uint8Array(i)%3Bfor(let%20e%3D0%3Be%3Ci%3Be%2B%2B)0!%3D%3Dt.img%5Be%5D%26%26(s%5Be%5D%3D1)%3Bt.img%3Ds%2Ct.hdr.datatypeCode%3D2%2Ct.hdr.cal_min%3D0%2Ct.hdr.cal_max%3D1%7Dasync%20loadDrawingFromUrl(t%2Ce%3D!1)%7Bthis.drawBitmap%26%26l.debug(%22Overwriting%20open%20drawing!%22)%2Cthis.drawClearAllUndoBitmaps()%3Blet%20i%3D!1%3Btry%7Bconst%20s%3Dawait%20Ze.loadFromUrl(ze(t))%3Be%26%26await%20this.binarize(s)%2Ci%3Dthis.loadDrawing(s)%7Dcatch(e)%7Bl.error(%22loadDrawingFromUrl()%20failed%20to%20load%20%22%2Bt)%2Cthis.drawClearAllUndoBitmaps()%7Dreturn%20i%7DfindOtsu(t%3D2)%7Bif(this.volumes.length%3C1)return%5B%5D%3Bconst%20e%3Dthis.volumes%5B0%5D.img%2Ci%3De.length%3Bif(i%3C1)return%5B%5D%3Bconst%20s%3D256%2Cr%3Dnew%20Array(s).fill(0)%2Cn%3Dthis.volumes%5B0%5D.cal_min%2Ca%3Dthis.volumes%5B0%5D.cal_max%3Bif(a%3C%3Dn)return%5B%5D%3Bconst%20o%3D(a-n)%2Fs%3Bfunction%20l(t)%7Breturn%20t*o%2Bn%7Dconst%20h%3D255%2FMath.abs(a-n)%2Cc%3Dthis.volumes%5B0%5D.hdr.scl_inter%2Cd%3Dthis.volumes%5B0%5D.hdr.scl_slope%3Bfor(let%20t%3D0%3Bt%3Ci%3Bt%2B%2B)%7Blet%20i%3De%5Bt%5D*d%2Bc%3Bi%3DMath.min(Math.max(i%2Cn)%2Ca)%2Ci%3DMath.round((i-n)*h)%2Cr%5Bi%5D%2B%2B%7Dconst%20m%3DArray(s).fill(0).map((()%3D%3EArray(s).fill(0)))%2Cu%3DArray(s).fill(0).map((()%3D%3EArray(s).fill(0)))%3Bfor(let%20t%3D1%3Bt%3Cs%3B%2B%2Bt)m%5Bt%5D%5Bt%5D%3Dr%5Bt%5D%2Cu%5Bt%5D%5Bt%5D%3Dt*r%5Bt%5D%3Bfor(let%20t%3D1%3Bt%3C255%3B%2B%2Bt)m%5B1%5D%5Bt%2B1%5D%3Dm%5B1%5D%5Bt%5D%2Br%5Bt%2B1%5D%2Cu%5B1%5D%5Bt%2B1%5D%3Du%5B1%5D%5Bt%5D%2B(t%2B1)*r%5Bt%2B1%5D%3Bfor(let%20t%3D2%3Bt%3Cs%3Bt%2B%2B)for(let%20e%3Dt%2B1%3Be%3Cs%3Be%2B%2B)m%5Bt%5D%5Be%5D%3Dm%5B1%5D%5Be%5D-m%5B1%5D%5Bt-1%5D%2Cu%5Bt%5D%5Be%5D%3Du%5B1%5D%5Be%5D-u%5B1%5D%5Bt-1%5D%3Bfor(let%20t%3D1%3Bt%3Cs%3B%2B%2Bt)for(let%20e%3Dt%2B1%3Be%3Cs%3Be%2B%2B)0!%3D%3Dm%5Bt%5D%5Be%5D%26%26(m%5Bt%5D%5Be%5D%3Du%5Bt%5D%5Be%5D*u%5Bt%5D%5Be%5D%2Fm%5Bt%5D%5Be%5D)%3Blet%20A%3D0%3Bconst%20f%3D%5B1%2F0%2C1%2F0%2C1%2F0%5D%3Bif(t%3E3)for(let%20t%3D0%3Bt%3C253%3Bt%2B%2B)for(let%20e%3Dt%2B1%3Be%3C254%3Be%2B%2B)for(let%20i%3De%2B1%3Bi%3C255%3Bi%2B%2B)%7Bconst%20s%3Dm%5B0%5D%5Bt%5D%2Bm%5Bt%2B1%5D%5Be%5D%2Bm%5Be%2B1%5D%5Bi%5D%2Bm%5Bi%2B1%5D%5B255%5D%3Bs%3EA%26%26(f%5B0%5D%3Dt%2Cf%5B1%5D%3De%2Cf%5B2%5D%3Di%2CA%3Ds)%7Delse%20if(3%3D%3D%3Dt)for(let%20t%3D0%3Bt%3C254%3Bt%2B%2B)for(let%20e%3Dt%2B1%3Be%3C255%3Be%2B%2B)%7Bconst%20i%3Dm%5B0%5D%5Bt%5D%2Bm%5Bt%2B1%5D%5Be%5D%2Bm%5Be%2B1%5D%5B255%5D%3Bi%3EA%26%26(f%5B0%5D%3Dt%2Cf%5B1%5D%3De%2CA%3Di)%7Delse%20for(let%20t%3D0%3Bt%3C255%3Bt%2B%2B)%7Bconst%20e%3Dm%5B0%5D%5Bt%5D%2Bm%5Bt%2B1%5D%5B255%5D%3Be%3EA%26%26(f%5B0%5D%3Dt%2CA%3De)%7Dreturn%5Bl(f%5B0%5D)%2Cl(f%5B1%5D)%2Cl(f%5B2%5D)%5D%7DdrawOtsu(t%3D2)%7Bif(0%3D%3D%3Dthis.volumes.length)return%3Bconst%20e%3Dthis.volumes%5B0%5D.img.length%2Ci%3Dthis.findOtsu(t)%3Bif(i.length%3C3)return%3Bthis.drawBitmap%7C%7Cthis.createEmptyDrawing()%3Bconst%20s%3Dthis.drawBitmap%2Cr%3Dthis.volumes%5B0%5D.img%3Bfor(let%20t%3D0%3Bt%3Ce%3Bt%2B%2B)%7Bif(0!%3D%3Ds%5Bt%5D)continue%3Bconst%20e%3Dr%5Bt%5D%3Be%3Ei%5B0%5D%26%26(s%5Bt%5D%3D1)%2Ce%3Ei%5B1%5D%26%26(s%5Bt%5D%3D2)%2Ce%3Ei%5B2%5D%26%26(s%5Bt%5D%3D3)%7Dthis.drawAddUndoBitmap()%2Cthis.refreshDrawing(!0)%7DremoveHaze(t%3D5%2Ce%3D0)%7Bconst%20i%3Dthis.volumes%5Be%5D.img%2Cs%3Dthis.volumes%5Be%5D.hdr%2Cr%3Di.length%3Blet%20n%3D2%3B5!%3D%3Dt%26%261!%3D%3Dt%7C%7C(n%3D4)%2C4!%3D%3Dt%26%262!%3D%3Dt%7C%7C(n%3D3)%3Bconst%20a%3Dthis.findOtsu(n)%3Bif(a.length%3C3)return%3Blet%20o%3Da%5B0%5D%3B1%3D%3D%3Dt%26%26(o%3Da%5B2%5D)%2C2%3D%3D%3Dt%26%26(o%3Da%5B1%5D)%3Bconst%20l%3Ds.scl_inter%2Ch%3Ds.scl_slope%2Cc%3Dthis.volumes%5Be%5D.global_min%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)%7Bi%5Bt%5D*h%2Bl%3Co%26%26(i%5Bt%5D%3Dc)%7Dthis.refreshLayers(this.volumes%5Be%5D%2C0)%2Cthis.drawScene()%7DsaveImage(t%3DPi)%7Bconst%20e%3D%7B...Pi%2C...t%7D%2C%7Bfilename%3Ai%2CisSaveDrawing%3As%2CvolumeByIndex%3Ar%7D%3De%3Bif(l.debug(%22saveImage%22%2Ci%2Cs%2Cr)%2Cvoid%200%3D%3D%3Dthis.back%3F.dims)return%20l.debug(%22No%20voxelwise%20image%20open%22)%2C!1%3Bif(s)%7Bif(!this.drawBitmap)return%20l.debug(%22No%20drawing%20open%22)%2C!1%3Bconst%20t%3Dthis.volumes%5B0%5D.permRAS%3Bif(1%3D%3D%3Dt%5B0%5D%26%262%3D%3D%3Dt%5B1%5D%26%263%3D%3D%3Dt%5B2%5D)%7Bl.debug(%22saving%20drawing%22)%3Breturn%20this.volumes%5B0%5D.saveToDisk(i%2Cthis.drawBitmap)%7D%7Bl.debug(%22saving%20drawing%22)%3Bconst%20e%3Dthis.volumes%5B0%5D.hdr.dims%2Cs%3D%5B0%2C0%2C0%5D%3Bfor(let%20e%3D0%3Be%3C3%3Be%2B%2B)for(let%20i%3D0%3Bi%3C3%3Bi%2B%2B)Math.abs(t%5Be%5D)-1%3D%3D%3Di%26%26(s%5Bi%5D%3De*Math.sign(t%5Be%5D))%3Blet%20r%3D1%3Bconst%20n%3D%5B1%2C1%2C1%5D%2Ca%3D%5B!1%2C!1%2C!1%5D%3Bfor(let%20t%3D0%3Bt%3Cs.length%3Bt%2B%2B)for(let%20i%3D0%3Bi%3Cs.length%3Bi%2B%2B)%7BMath.abs(s%5Bi%5D)%3D%3D%3Dt%26%26(n%5Bi%5D%3Dr%2C(s%5Bi%5D%3C0%7C%7CObject.is(s%5Bi%5D%2C-0))%26%26(a%5Bi%5D%3D!0)%2Cr*%3De%5Bi%2B1%5D)%7Dlet%20o%3DCe.range(0%2Ce%5B1%5D-1%2C1)%3Ba%5B0%5D%26%26(o%3DCe.range(e%5B1%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ce%5B1%5D%3Bt%2B%2B)o%5Bt%5D*%3Dn%5B0%5D%3Blet%20h%3DCe.range(0%2Ce%5B2%5D-1%2C1)%3Ba%5B1%5D%26%26(h%3DCe.range(e%5B2%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ce%5B2%5D%3Bt%2B%2B)h%5Bt%5D*%3Dn%5B1%5D%3Blet%20c%3DCe.range(0%2Ce%5B3%5D-1%2C1)%3Ba%5B2%5D%26%26(c%3DCe.range(e%5B3%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ce%5B3%5D%3Bt%2B%2B)c%5Bt%5D*%3Dn%5B2%5D%3Bconst%20d%3Dnew%20Uint8Array(this.drawBitmap)%2Cm%3Dnew%20Uint8Array(e%5B1%5D*e%5B2%5D*e%5B3%5D)%3Blet%20u%3D0%3Bfor(let%20t%3D0%3Bt%3Ce%5B3%5D%3Bt%2B%2B)for(let%20i%3D0%3Bi%3Ce%5B2%5D%3Bi%2B%2B)for(let%20s%3D0%3Bs%3Ce%5B1%5D%3Bs%2B%2B)m%5Bu%5D%3Dd%5Bo%5Bs%5D%2Bh%5Bi%5D%2Bc%5Bt%5D%5D%2Cu%2B%2B%3Bl.debug(%22saving%20drawing%22)%3Breturn%20this.volumes%5B0%5D.saveToDisk(i%2Cm)%7D%7Dl.debug(%22saving%20image%22)%3Breturn%20this.volumes%5Br%5D.saveToDisk(i)%7DgetMeshIndexByID(t)%7Bif(%22number%22%3D%3Dtypeof%20t)return%20t%3E%3Dthis.meshes.length%3F-1%3At%3Bconst%20e%3Dthis.meshes.length%3Bfor(let%20i%3D0%3Bi%3Ce%3Bi%2B%2B)%7Bif(this.meshes%5Bi%5D.id%3D%3D%3Dt)return%20i%7Dreturn-1%7DsetMeshProperty(t%2Ce%2Ci)%7Bconst%20s%3Dthis.getMeshIndexByID(t)%3Bs%3C0%3Fl.warn(%22setMeshProperty()%20id%20not%20loaded%22%2Ct)%3A(this.meshes%5Bs%5D.setProperty(e%2Ci%2Cthis.gl)%2Cthis.updateGLVolume()%2Cthis.onMeshPropertyChanged(s%2Ce%2Ci))%7DindexNearestXYZmm(t%2Ce%2Ci%2Cs)%7Bconst%20r%3Dthis.getMeshIndexByID(t)%3Breturn%20r%3C0%3F(l.warn(%22indexNearestXYZmm()%20id%20not%20loaded%22%2Ct)%2C%5BNaN%2CNaN%5D)%3Athis.meshes%5Br%5D.indexNearestXYZmm(e%2Ci%2Cs)%7DdecimateHierarchicalMesh(t%2Ce%3D3)%7Bconst%20i%3Dthis.getMeshIndexByID(t)%3Bif(i%3C0)return%20void%20l.warn(%22reverseFaces()%20id%20not%20loaded%22%2Ct)%3Bconst%20s%3Dthis.meshes%5Bi%5D.decimateHierarchicalMesh(this.gl%2Ce)%3Breturn%20this.updateGLVolume()%2Cs%7DreverseFaces(t)%7Bconst%20e%3Dthis.getMeshIndexByID(t)%3Be%3C0%3Fl.warn(%22reverseFaces()%20id%20not%20loaded%22%2Ct)%3A(this.meshes%5Be%5D.reverseFaces(this.gl)%2Cthis.updateGLVolume())%7DsetMeshLayerProperty(t%2Ce%2Ci%2Cs)%7Bconst%20r%3Dthis.getMeshIndexByID(t)%3Br%3C0%3Fl.warn(%22setMeshLayerProperty()%20id%20not%20loaded%22%2Ct)%3A(this.meshes%5Br%5D.setLayerProperty(e%2Ci%2Cs%2Cthis.gl)%2Cthis.updateGLVolume())%7DsetPan2Dxyzmm(t)%7Bthis.scene.pan2Dxyzmm%3Dt%2Cthis.opts.yoke3Dto2DZoom%26%26(this.scene.volScaleMultiplier%3Dt%5B3%5D)%2Cthis.drawScene()%7DsetRenderAzimuthElevation(t%2Ce)%7Bthis.scene.renderAzimuth%3Dt%2Cthis.scene.renderElevation%3De%2Cthis.onAzimuthElevationChange(t%2Ce)%2Cthis.drawScene()%7DgetOverlayIndexByID(t)%7Bconst%20e%3Dthis.overlays.length%3Bfor(let%20i%3D0%3Bi%3Ce%3Bi%2B%2B)%7Bif(this.overlays%5Bi%5D.id%3D%3D%3Dt)return%20i%7Dreturn-1%7DsetVolume(t%2Ce%3D0)%7Bif(e%3Ethis.volumes.length)return%3Bconst%20i%3Dthis.getVolumeIndexByID(t.id)%3B0%3D%3D%3De%3F(this.volumes.splice(i%2C1)%2Cthis.volumes.unshift(t)%2Cthis.back%3Dthis.volumes%5B0%5D%2Cthis.overlays%3Dthis.volumes.slice(1))%3Ae%3C0%3F(this.volumes.splice(this.getVolumeIndexByID(t.id)%2C1)%2Cthis.back%3Dthis.volumes%5B0%5D%2Cthis.volumes.length%3E1%3Fthis.overlays%3Dthis.volumes.slice(1)%3Athis.overlays%3D%5B%5D)%3A(this.volumes.splice(i%2C1)%2Cthis.volumes.splice(e%2C0%2Ct)%2Cthis.overlays%3Dthis.volumes.slice(1)%2Cthis.back%3Dthis.volumes%5B0%5D)%2Cthis.updateGLVolume()%7DsetMesh(t%2Ce%3D0)%7Bthis.meshes.forEach((t%3D%3E%7Bl.debug(%22MESH%3A%20%22%2Ct.name)%7D))%3Bif(e%3Ethis.meshes.length)return%3Bconst%20i%3Dthis.getMeshIndexByID(t.id)%3B0%3D%3D%3De%3F(this.meshes.splice(i%2C1)%2Cthis.meshes.unshift(t))%3Ae%3C0%3Fthis.meshes.splice(this.getMeshIndexByID(t.id)%2C1)%3A(this.meshes.splice(i%2C1)%2Cthis.meshes.splice(e%2C0%2Ct))%2Cthis.updateGLVolume()%2Cthis.meshes.forEach((t%3D%3E%7Bl.debug(t.name)%7D))%7DremoveVolume(t)%7Bif(this.setVolume(t%2C-1)%2Cthis.mediaUrlMap.has(t))%7Bconst%20e%3Dthis.mediaUrlMap.get(t)%3Bthis.onVolumeWithUrlRemoved(e)%2Cthis.mediaUrlMap.delete(t)%7Dthis.drawScene()%7DremoveVolumeByIndex(t)%7Bif(t%3E%3Dthis.volumes.length)throw%20new%20Error(%22Index%20of%20volume%20out%20of%20bounds%22)%3Bthis.removeVolume(this.volumes%5Bt%5D)%7DremoveMesh(t)%7Bif(t.unloadMesh(this.gl)%2Cthis.setMesh(t%2C-1)%2Cthis.mediaUrlMap.has(t))%7Bconst%20e%3Dthis.mediaUrlMap.get(t)%3Bthis.onMeshWithUrlRemoved(e)%2Cthis.mediaUrlMap.delete(t)%7D%7DremoveMeshByUrl(t)%7Bconst%20e%3Dthis.getMediaByUrl(t)%3Be%26%26(this.removeMesh(e)%2Cthis.mediaUrlMap.delete(e)%2Cthis.onMeshWithUrlRemoved(t))%7DmoveVolumeToBottom(t)%7Bthis.setVolume(t%2C0)%7DmoveVolumeUp(t)%7Bconst%20e%3Dthis.getVolumeIndexByID(t.id)%3Bthis.setVolume(t%2Ce%2B1)%7DmoveVolumeDown(t)%7Bconst%20e%3Dthis.getVolumeIndexByID(t.id)%3Bthis.setVolume(t%2Ce-1)%7DmoveVolumeToTop(t)%7Bthis.setVolume(t%2Cthis.volumes.length-1)%7DmouseDown(t%2Ce)%7Bt*%3Dthis.uiData.dpr%2Ce*%3Dthis.uiData.dpr%2Cthis.mousePos%3D%5Bt%2Ce%5D%7DmouseMove(t%2Ce)%7Bt*%3Dthis.uiData.dpr%2Ce*%3Dthis.uiData.dpr%3Bconst%20i%3D(t-this.mousePos%5B0%5D)%2Fthis.uiData.dpr%2Cs%3D(e-this.mousePos%5B1%5D)%2Fthis.uiData.dpr%3Bthis.mousePos%3D%5Bt%2Ce%5D%2Cthis.inRenderTile(t%2Ce)%3C0%7C%7CMath.abs(i)%3C1%26%26Math.abs(s)%3C1%7C%7C(this.scene.renderAzimuth%2B%3Di%2Cthis.scene.renderElevation%2B%3Ds%2Cthis.drawScene())%7Dsph2cartDeg(t%2Ce)%7Bconst%20i%3D-e*(Math.PI%2F180)%2Cs%3D(t-90)%25360*(Math.PI%2F180)%2Cr%3D%5BMath.cos(i)*Math.cos(s)%2CMath.cos(i)*Math.sin(s)%2CMath.sin(i)%5D%2Cn%3DMath.sqrt(r%5B0%5D*r%5B0%5D%2Br%5B1%5D*r%5B1%5D%2Br%5B2%5D*r%5B2%5D)%3Breturn%20n%3C%3D0%7C%7C(r%5B0%5D%2F%3Dn%2Cr%5B1%5D%2F%3Dn%2Cr%5B2%5D%2F%3Dn)%2Cr%7DsetClipPlane(t)%7Bconst%20e%3Dthis.sph2cartDeg(t%5B1%5D%2B180%2Ct%5B2%5D)%3Bthis.scene.clipPlane%3D%5Be%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D%2Ct%5B0%5D%5D%2Cthis.scene.clipPlaneDepthAziElev%3Dt%2Cthis.onClipPlaneChange(this.scene.clipPlane)%2Cthis.drawScene()%7DsetCrosshairColor(t)%7Bthis.opts.crosshairColor%3Dt%2Cthis.drawScene()%7DsetCrosshairWidth(t)%7Bthis.opts.crosshairWidth%3Dt%2Cthis.crosshairs3D%26%26(this.crosshairs3D.mm%5B0%5D%3DNaN)%2Cthis.drawScene()%7DsetDrawColormap(t)%7Bthis.drawLut%3Dse.makeDrawLut(t)%2Cthis.updateGLVolume()%7DsetDrawingEnabled(t)%7Bthis.opts.drawingEnabled%3Dt%2Cthis.opts.drawingEnabled%26%26(this.drawBitmap%7C%7Cthis.createEmptyDrawing())%2Cthis.drawScene()%7DsetPenValue(t%2Ce%3D!1)%7Bthis.opts.penValue%3Dt%2Cthis.opts.isFilledPen%3De%2Cthis.drawScene()%7DsetDrawOpacity(t)%7Bthis.drawOpacity%3Dt%2Cthis.drawScene()%7DsetSelectionBoxColor(t)%7Bthis.opts.selectionBoxColor%3Dt%7DsliceScroll2D(t%2Ce%2Ci%2Cs%3D!0)%7Bif(this.inGraphTile(e%2Ci))%7Blet%20e%3Dthis.volumes%5B0%5D.frame4D%3Breturn%20t%3E0%26%26e%2B%2B%2Ct%3C0%26%26e--%2Cvoid%20this.setFrame4D(this.volumes%5B0%5D.id%2Ce)%7Dif(0!%3D%3Dt%26%263%3D%3D%3Dthis.opts.dragMode%26%26-1%3D%3D%3Dthis.inRenderTile(this.uiData.dpr*e%2Cthis.uiData.dpr*i))%7Blet%20e%3Dthis.scene.pan2Dxyzmm%5B3%5D*(1%2B10*t)%3Be%3DMath.round(10*e)%2F10%3Bconst%20i%3Dthis.scene.pan2Dxyzmm%5B3%5D-e%3Bthis.opts.yoke3Dto2DZoom%26%26(this.scene.volScaleMultiplier%3De)%2Cthis.scene.pan2Dxyzmm%5B3%5D%3De%3Bconst%20s%3Dthis.frac2mm(this.scene.crosshairPos)%3Breturn%20this.scene.pan2Dxyzmm%5B0%5D%2B%3Di*s%5B0%5D%2Cthis.scene.pan2Dxyzmm%5B1%5D%2B%3Di*s%5B1%5D%2Cthis.scene.pan2Dxyzmm%5B2%5D%2B%3Di*s%5B2%5D%2Cthis.drawScene()%2Cthis.canvas.focus()%2Cvoid%20this.sync()%7Dthis.mouseClick(e%2Ci%2Ct%2Cs)%7DsetSliceType(t)%7Breturn%20this.opts.sliceType%3Dt%2Cthis.drawScene()%2Cthis%7DsetOpacity(t%2Ce)%7Bthis.volumes%5Bt%5D.opacity%3De%2C0!%3D%3Dt%3Fthis.updateGLVolume()%3Athis.drawScene()%7DsetScale(t)%7Bthis.scene.volScaleMultiplier%3Dt%2Cthis.drawScene()%7DsetClipPlaneColor(t)%7Bthis.opts.clipPlaneColor%3Dt%2Cthis.renderShader.use(this.gl)%2Cthis.gl.uniform4fv(this.renderShader.uniforms.clipPlaneColor%2Cthis.opts.clipPlaneColor)%2Cthis.drawScene()%7DsetClipPlaneThick(t)%7Bthis.opts.clipThick%3Dt%2Cthis.renderShader.use(this.gl)%2Cthis.gl.uniform1f(this.renderShader.uniforms.clipThick%2Cthis.opts.clipThick)%2Cthis.drawScene()%7DsetClipVolume(t%2Ce)%7Bthis.opts.clipVolumeLow%3D%5BMath.min(t%5B0%5D%2Ce%5B0%5D)%2CMath.min(t%5B1%5D%2Ce%5B1%5D)%2CMath.min(t%5B2%5D%2Ce%5B2%5D)%5D%2Cthis.opts.clipVolumeHigh%3D%5BMath.max(t%5B0%5D%2Ce%5B0%5D)%2CMath.max(t%5B1%5D%2Ce%5B1%5D)%2CMath.max(t%5B2%5D%2Ce%5B2%5D)%5D%2Cthis.renderShader.use(this.gl)%2Cthis.gl.uniform3fv(this.renderShader.uniforms.clipLo%2Cthis.opts.clipVolumeLow)%2Cthis.gl.uniform3fv(this.renderShader.uniforms.clipHi%2Cthis.opts.clipVolumeHigh)%2Cthis.pickingImageShader.use(this.gl)%2Cthis.gl.uniform3fv(this.pickingImageShader.uniforms.clipLo%2Cthis.opts.clipVolumeLow)%2Cthis.gl.uniform3fv(this.pickingImageShader.uniforms.clipHi%2Cthis.opts.clipVolumeHigh)%2Cthis.drawScene()%7Dasync%20setVolumeRenderIllumination(t%3D0)%7Bthis.renderShader%3Dthis.renderVolumeShader%2Ct%3E0%26%26(this.renderShader%3Dthis.renderGradientShader)%2Ct%3C0%26%26(this.renderShader%3Dthis.renderSliceShader)%2Cthis.initRenderShader(this.renderShader%2Ct)%2Cthis.renderShader.use(this.gl)%2Cthis.setClipPlaneColor(this.opts.clipPlaneColor)%2Cthis.gradientTextureAmount%3Dt%2Cthis.refreshLayers(this.volumes%5B0%5D%2C0)%2Cthis.drawScene()%7DoverlayRGBA(t)%7Bconst%20e%3Dt.hdr%2Ci%3De.dims%5B1%5D*e.dims%5B2%5D*e.dims%5B3%5D%2Cs%3Dnew%20Uint8ClampedArray(4*i)%2Cr%3D.2*Math.min(Math.min(e.dims%5B1%5D%2Ce.dims%5B2%5D)%2Ce.dims%5B3%5D)%2Cn%3D.5*e.dims%5B1%5D%2Ca%3D.5*e.dims%5B2%5D%2Co%3D.5*e.dims%5B3%5D%3Blet%20l%3D0%3Bfor(let%20t%3D0%3Bt%3Ce.dims%5B3%5D%3Bt%2B%2B)for(let%20i%3D0%3Bi%3Ce.dims%5B2%5D%3Bi%2B%2B)for(let%20h%3D0%3Bh%3Ce.dims%5B1%5D%3Bh%2B%2B)%7Bconst%20e%3DMath.abs(h-n)%2Cc%3DMath.abs(i-a)%2Cd%3DMath.abs(t-o)%3Blet%20m%3D0%3BMath.sqrt(e*e%2Bc*c%2Bd*d)%3Cr%26%26(m%3D255)%2Cs%5Bl%2B%2B%5D%3D0%2Cs%5Bl%2B%2B%5D%3Dm%2Cs%5Bl%2B%2B%5D%3D0%2Cs%5Bl%2B%2B%5D%3D.5*m%7Dreturn%20s%7Dvox2mm(t%2Ce)%7Breturn%20Ce.vox2mm(t%2Ce)%7DcloneVolume(t)%7Breturn%20this.volumes%5Bt%5D.clone()%7Dasync%20loadDocumentFromUrl(t)%7Bconst%20e%3Dawait%20si.loadFromUrl(t)%3Bthis.loadDocument(e)%7DloadDocument(t)%7Bthis.volumes%3D%5B%5D%2Cthis.meshes%3D%5B%5D%2Cthis.document%3Dt%2Cthis.document.labels%3Dthis.document.labels%3Fthis.document.labels%3A%5B%5D%3Bconst%20e%3D%7B...ei%2C...t.opts%7D%3Bthis.scene.pan2Dxyzmm%3Dt.scene.pan2Dxyzmm%3Ft.scene.pan2Dxyzmm%3A%5B0%2C0%2C0%2C1%5D%2Cthis.document.opts%3De%2Cthis.setClipPlane(this.scene.clipPlaneDepthAziElev)%2Cl.debug(%22load%20document%22%2Ct)%2Cthis.mediaUrlMap.clear()%2Cthis.createEmptyDrawing()%3Bconst%20i%3Dt.encodedImageBlobs%3Bfor(let%20e%3D0%3Be%3Ct.imageOptionsArray.length%3Be%2B%2B)%7Bconst%20s%3Dt.imageOptionsArray%5Be%5D%2Cr%3Di%5Be%5D%3Bif(r)%7B%22colorMap%22in%20s%26%26(s.colormap%3Ds.colorMap)%3Bconst%20t%3DZe.loadFromBase64(%7Bbase64%3Ar%2C...s%7D)%3Bif(t)%7Bif(t.colormapLabel)%7Bconst%20e%3DObject.keys(t.colormapLabel.lut).length%2Ci%3Dnew%20Uint8ClampedArray(e)%3Bfor(const%20e%20in%20t.colormapLabel.lut)i%5Be%5D%3Dt.colormapLabel.lut%5Be%5D%3Bt.colormapLabel.lut%3Di%7Dthis.addVolume(t)%7D%7D%7Dthis.volumes.length%3E0%26%26(this.back%3Dthis.volumes%5B0%5D)%3Bconst%20s%3Dt.encodedDrawingBlob%3Bif(s)%7Bconst%20e%3Dt.imageOptionsArray%5B0%5D%2Ci%3DZe.loadFromBase64(%7Bbase64%3As%2C...e%7D)%3Bi%26%26this.loadDrawing(i)%7Dfor(const%20e%20of%20t.meshDataObjects%3F%3F%5B%5D)%7Bconst%20t%3D%7Bgl%3Athis.gl%2C...e%7D%3Be.offsetPt0%26%26(t.rgba255%5B3%5D%3D0%2Ct.tris%3Dnew%20Uint32Array(e.offsetPt0))%2Cl.debug(t)%3Bconst%20i%3Dnew%20De(t.pts%2Ct.tris%2Ct.name%2Ct.rgba255%2Ct.opacity%2Ct.visible%2Cthis.gl%2Ct.connectome%2Ct.dpg%2Ct.dps%2Ct.dpv)%3Be.offsetPt0%26%26(i.fiberGroupColormap%3De.fiberGroupColormap%2Ci.fiberColor%3De.fiberColor%2Ci.fiberDither%3De.fiberDither%2Ci.fiberRadius%3De.fiberRadius%2Ci.colormap%3De.colormap)%2Ci.meshShaderIndex%3Dt.meshShaderIndex%2Ci.layers%3Dt.layers%2Ci.updateMesh(this.gl)%2Cl.debug(i)%2Cthis.addMesh(i)%7Dif(t.data.connectomes)for(const%20e%20of%20t.data.connectomes)%7Bconst%20t%3DJSON.parse(e)%2Ci%3Dthis.loadConnectomeAsMesh(t)%3Bi.updateMesh(this.gl)%2Cthis.addMesh(i)%7Dreturn%20this.updateGLVolume()%2Cthis.drawScene()%2Cthis.onDocumentLoaded(t)%2Cthis%7Dasync%20generateLoadDocumentJavaScript(t%2Ce)%7Bconst%20i%3Dthis.json()%3Breturn%60%5Cn%20%20%20%20%20%20%20%20%24%7Be%7D%5Cn%5Cn%20%20%20%20%20%20%20%20async%20function%20saveNiivueAsHtml(pageName)%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%2F%2Fget%20new%20docstring%5Cn%20%20%20%20%20%20%20%20%20%20const%20docString%20%3D%20nv1.json()%3B%5Cn%20%20%20%20%20%20%20%20%20%20const%20html%20%3D%5Cn%20%20%20%20%20%20%20%20%20%20document.getElementsByTagName(%22html%22)%5B0%5D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20.innerHTML.replace(base64%2C%20await%20NVUtilities.compressToBase64String(JSON.stringify(docString)))%3B%5Cn%20%20%20%20%20%20%20%20%20%20NVUtilities.download(html%2C%20pageName%2C%20%22application%2Fhtml%22)%3B%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%5Cn%20%20%20%20%20%20%20%20var%20nv1%20%3D%20new%20Niivue()%3B%5Cn%20%20%20%20%20%20%20%20nv1.attachTo(%22%24%7Bt%7D%22)%3B%5Cn%20%20%20%20%20%20%20%20var%20base64%20%3D%20%22%24%7Bawait%20Ce.compressToBase64String(JSON.stringify(i))%7D%22%3B%5Cn%20%20%20%20%20%20%20%20NVUtilities.decompressBase64String(base64).then((jsonText)%20%3D%3E%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20var%20json%20%3D%20JSON.parse(jsonText)%3B%20%2F%2F%20string%20-%3E%20JSON%5Cn%20%20%20%20%20%20%20%20%20%20var%20doc%20%3D%20NVDocument.loadFromJSON(json)%3B%5Cn%20%20%20%20%20%20%20%20%20%20nv1.loadDocument(doc)%3B%5Cn%20%20%20%20%20%20%20%20%20%20nv1.updateGLVolume()%3B%5Cn%20%20%20%20%20%20%20%20%7D)%3B%5Cn%5Cn%20%20%20%20%20%20%60%7Dasync%20generateHTML(t%3D%22gl1%22%2Ce)%7Breturn%60%3C!DOCTYPE%20html%3E%5Cn%20%20%20%20%20%20%20%20%3Chtml%20lang%3D%22en%22%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Chead%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cmeta%20charset%3D%22utf-8%22%20%2F%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cmeta%20http-equiv%3D%22X-UA-Compatible%22%20content%3D%22IE%3Dedge%22%20%2F%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2Cinitial-scale%3D1.0%22%20%2F%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Ctitle%3ESave%20as%20HTML%3C%2Ftitle%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cstyle%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20html%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20height%3A%20auto%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20min-height%3A%20100%25%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20margin%3A%200%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20body%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20display%3A%20flex%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20flex-direction%3A%20column%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20margin%3A%200%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20min-height%3A%20100%25%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20width%3A%20100%25%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20position%3A%20absolute%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20font-family%3A%20system-ui%2C%20Arial%2C%20Helvetica%2C%20sans-serif%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3A%20%23ffffff%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20color%3A%20black%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20user-select%3A%20none%3B%20%2F*%20Standard%20syntax%20*%2F%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20header%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20margin%3A%2010px%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20main%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20flex%3A%201%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3A%20%23000000%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20position%3A%20relative%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20footer%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20margin%3A%2010px%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20canvas%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20position%3A%20absolute%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20cursor%3A%20crosshair%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20canvas%3Afocus%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20outline%3A%200px%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20div%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20display%3A%20table-row%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20background-color%3A%20blue%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fstyle%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3C%2Fhead%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cbody%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cnoscript%3Eniivue%20requires%20JavaScript.%3C%2Fnoscript%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cheader%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20Save%20the%20current%20scene%20as%20HTML%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22save%22%3ESave%20as%20HTML%3C%2Fbutton%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fheader%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cmain%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ccanvas%20id%3D%22gl1%22%3E%3C%2Fcanvas%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fmain%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cscript%20type%3D%22module%22%20async%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24%7Bawait%20this.generateLoadDocumentJavaScript(t%2Ce)%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20function%20saveAsHtml()%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20saveNiivueAsHtml(%22page.html%22)%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20assign%20our%20event%20handler%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20button%20%3D%20document.getElementById(%22save%22)%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20button.onclick%20%3D%20saveAsHtml%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3C%5C%2Fscript%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3C%2Fbody%3E%5Cn%20%20%20%20%20%20%20%20%3C%2Fhtml%3E%60%7Dasync%20saveHTML(t%3D%22untitled.html%22%2Ce%3D%22gl1%22%2Ci)%7Bconst%20s%3Dawait%20this.generateHTML(e%2Ci)%3Breturn%20Ce.download(s%2Ct%2C%22application%2Fhtml%22)%7Djson()%7Bthis.document.opts%3Dthis.opts%2Cthis.document.scene%3Dthis.scene%2Cthis.document.volumes%3Dthis.volumes%2Cthis.document.meshes%3Dthis.meshes%2Cthis.drawScene()%2Cthis.document.previewImageDataURL%3Dthis.canvas.toDataURL()%3Breturn%20this.document.json()%7Dasync%20saveDocument(t%3D%22untitled.nvd%22%2Ce%3D!0)%7Breturn%20this.document.title%3Dt%2Cl.debug(%22saveDocument%22%2Cthis.volumes%5B0%5D)%2Cthis.drawScene()%2Cthis.document.previewImageDataURL%3Dthis.canvas.toDataURL()%2Cthis.document.volumes%3Dthis.volumes%2Cthis.document.meshes%3Dthis.meshes%2Cthis.document.download(t%2Ce)%7Dasync%20loadImages(t)%7Bconst%20e%3D%5B%5D%2Ci%3D%5B%5D%3Bfor(const%20s%20of%20t)if(%22url%22in%20s)%7Bconst%20t%3Dthis.getFileExt(s.url)%3Bif(this.loaders%5Bt%5D)%7Bconst%20r%3Dthis.loaders%5Bt%5D.toExt.toUpperCase()%3BEi.includes(r)%3Fi.push(s)%3Ae.push(s)%3Bcontinue%7DEi.includes(t.toUpperCase())%3Fi.push(s)%3Ae.push(s)%7Dreturn%20e.length%3E0%26%26await%20this.loadVolumes(e)%2Ci.length%3E0%26%26await%20this.loadMeshes(i)%2Cthis%7Dasync%20loadVolumes(t)%7Breturn%20this.loadingText%3D%22loading...%22%2Cthis.drawScene()%2Cthis.thumbnailVisible%3F(this.deferredVolumes%3Dt%2Cthis)%3A(this.volumes%3D%5B%5D%2Cthis.gl.clearColor(0%2C0%2C0%2C1)%2Cthis.gl.clear(this.gl.COLOR_BUFFER_BIT)%2Cawait%20this.addVolumesFromUrl(t)%2Cthis)%7Dasync%20addMeshFromUrl(t)%7Bconst%20e%3Dthis.getFileExt(t.url)%3Bif(%22JCON%22%3D%3D%3De%7C%7C%22JSON%22%3D%3D%3De)%7Bconst%20e%3Dawait%20fetch(t.url%2C%7B%7D)%2Ci%3Dawait%20e.json()%2Cs%3Dthis.loadConnectomeAsMesh(i)%3Breturn%20this.mediaUrlMap.set(s%2Ct.url)%2Cthis.onMeshAddedFromUrl(t%2Cs)%2Cthis.addMesh(s)%2Cs%7Dconst%20i%3Dawait%20De.loadFromUrl(%7B...t%2Cgl%3Athis.gl%7D)%3Breturn%20this.mediaUrlMap.set(i%2Ct.url)%2Cthis.onMeshAddedFromUrl(t%2Ci)%2Cthis.addMesh(i)%2Ci%7Dasync%20addMeshesFromUrl(t)%7Bconst%20e%3Dt.map((async%20t%3D%3E%7Bconst%20e%3Dthis.getFileExt(t.name%7C%7Ct.url)%3Bif(this.loaders%5Be%5D)%7Blet%20i%3Dt.url%3Bconst%20s%3Dthis.loaders%5Be%5D.toExt%3Blet%20r%3Dt.name%7C%7Ct.url%3Bif(r%3Dr.split(%22%2F%22).pop()%2C%22string%22%3D%3Dtypeof%20t.url)%7Bconst%20e%3Dt.url%3Btry%7Bconst%20t%3Dawait%20fetch(e)%3Bif(!t.ok)throw%20new%20Error(%60Failed%20to%20load%20file%3A%20%24%7Bt.statusText%7D%60)%3Bi%3Dawait%20t.arrayBuffer()%7Dcatch(t)%7Bthrow%20new%20Error(%60Failed%20to%20load%20url%20%24%7Be%7D%3A%20%24%7Bt%7D%60)%7D%7Dconst%7Bpositions%3An%2Cindices%3Aa%7D%3Dawait%20this.loaders%5Be%5D.loader(i)%3Bt.name%3D%60%24%7Br%7D.%24%7Bs%7D%60%3Bconst%20o%3Dae.createMZ3(n%2Ca%2C!1)%3Bt.buffer%3Do%7Dif(%22JCON%22%3D%3D%3De%7C%7C%22JSON%22%3D%3D%3De)%7Bconst%20e%3Dawait%20fetch(t.url%2C%7B%7D)%2Ci%3Dawait%20e.json()%2Cs%3Dthis.loadConnectomeAsMesh(i)%3Breturn%20this.mediaUrlMap.set(s%2Ct.url)%2Cthis.onMeshAddedFromUrl(t%2Cs)%2Cs%7Dconst%20i%3Dawait%20De.loadFromUrl(%7B...t%2Cgl%3Athis.gl%7D)%3Breturn%20this.mediaUrlMap.set(i%2Ct.url)%2Cthis.onMeshAddedFromUrl(t%2Ci)%2Ci%7D))%2Ci%3Dawait%20Promise.all(e)%3Bfor(let%20t%3D0%3Bt%3Ci.length%3Bt%2B%2B)this.addMesh(i%5Bt%5D)%3Breturn%20i%7Dasync%20loadMeshes(t)%7Breturn%20this.loadingText%3D%22loading...%22%2Cthis.drawScene()%2Cthis.thumbnailVisible%3F(this.deferredMeshes%3Dt%2Cthis)%3A(this.initialized%2Cthis.meshes%3D%5B%5D%2Cthis.gl.clearColor(0%2C0%2C0%2C1)%2Cthis.gl.clear(this.gl.COLOR_BUFFER_BIT)%2Cawait%20this.addMeshesFromUrl(t)%2Cthis.updateGLVolume()%2Cthis.drawScene()%2Cthis)%7Dasync%20loadConnectomeFromUrl(t%2Ce%3D%7B%7D)%7Bconst%20i%3Dawait%20fetch(t%2C%7Bheaders%3Ae%7D)%2Cs%3Dawait%20i.json()%3Breturn%20this.loadConnectome(s)%7Dasync%20loadFreeSurferConnectomeFromUrl(t%2Ce%3D%7B%7D)%7Bconst%20i%3Dawait%20fetch(t%2C%7Bheaders%3Ae%7D)%2Cs%3Dawait%20i.json()%3Breturn%20this.loadFreeSurferConnectome(s)%7Dasync%20loadFreeSurferConnectome(t)%7Bconst%20e%3Ddi.convertFreeSurferConnectome(t)%3Breturn%20this.loadConnectome(e)%7DhandleNodeAdded(t)%7Bconst%20e%3Dt.detail.node%2Ci%3D%5B1%2C1%2C1%2C1%5D%3Bthis.addLabel(e.name%2C%7BtextColor%3Ai%2CbulletScale%3A1%2CbulletColor%3Ai%2ClineWidth%3A0%2ClineColor%3Ai%2ClineTerminator%3A%22none%22%2CtextScale%3A1%7D%2C%5Be.x%2Ce.y%2Ce.z%5D)%2Cthis.drawScene()%7DloadConnectomeAsMesh(t)%7Blet%20e%3Dt%3Bif(%22data_type%22in%20t%26%26%22fs_pointset%22%3D%3D%3Dt.data_type)e%3Ddi.convertFreeSurferConnectome(t)%2Cl.warn(%22converted%20FreeSurfer%20connectome%22%2Ce)%3Belse%7Bif(!(%22nodes%22in%20t))throw%20new%20Error(%22not%20a%20known%20connectome%20format%22)%3B%7Bconst%20i%3Dt.nodes%3B%22names%22in%20i%26%26%22X%22in%20i%26%26%22Y%22in%20i%26%26%22Z%22in%20i%26%26%22Color%22in%20i%26%26%22Size%22in%20i%26%26(e%3Ddi.convertLegacyConnectome(t)%2Cl.warn(%22converted%20legacy%20connectome%22%2Ce))%7D%7Dreturn%20new%20di(this.gl%2Ce)%7DloadConnectome(t)%7Bthis.loadingText%3D%22loading...%22%2Cthis.drawScene()%2Cthis.meshes%3D%5B%5D%2Cthis.gl.clearColor(0%2C0%2C0%2C1)%2Cthis.gl.clear(this.gl.COLOR_BUFFER_BIT)%3Bconst%20e%3Dthis.loadConnectomeAsMesh(t)%3Breturn%20this.addMesh(e)%2Cthis.drawScene()%2Cthis%7DcreateEmptyDrawing()%7Bif(null%3D%3D%3Dthis.back%7C%7C!this.back.dims)return%3Bif(Math.min(Math.min(this.back.dims%5B1%5D%2Cthis.back.dims%5B2%5D)%2Cthis.back.dims%5B3%5D)%3C1)return%3Bconst%20t%3Dthis.back.dims%5B1%5D*this.back.dims%5B2%5D*this.back.dims%5B3%5D%3Bthis.drawBitmap%3Dnew%20Uint8Array(t)%2Cthis.drawClearAllUndoBitmaps()%2Cthis.drawAddUndoBitmap()%2Cthis.drawTexture%3Dthis.r8Tex(this.drawTexture%2CRi%2Cthis.back.dims%2C!0)%2Cthis.refreshDrawing(!1)%7Dr16Tex(t%2Ce%2Ci%2Cs)%7Bt%26%26this.gl.deleteTexture(t)%2Ct%3Dthis.gl.createTexture()%2Cthis.gl.activeTexture(e)%2Cthis.gl.bindTexture(this.gl.TEXTURE_3D%2Ct)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_MIN_FILTER%2Cthis.gl.NEAREST)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_MAG_FILTER%2Cthis.gl.NEAREST)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_R%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_S%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_T%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT%2C1)%2Cthis.gl.texStorage3D(this.gl.TEXTURE_3D%2C1%2Cthis.gl.R16I%2Ci%5B1%5D%2Ci%5B2%5D%2Ci%5B3%5D)%3Bconst%20r%3Di%5B1%5D*i%5B2%5D*i%5B3%5D%3Breturn%20s.length!%3D%3Dr%26%26(s%3Dnew%20Int16Array(r))%2Cthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Ci%5B1%5D%2Ci%5B2%5D%2Ci%5B3%5D%2Cthis.gl.RED_INTEGER%2Cthis.gl.SHORT%2Cs)%2Ct%7DdrawGrowCut()%7Bif(!this.back%7C%7C!this.back.dims)throw%20new%20Error(%22back%20not%20defined%22)%3Bconst%20t%3Dthis.back.hdr%2Ce%3Dthis.gl%2Ci%3Dt.dims%5B1%5D*t.dims%5B2%5D*t.dims%5B3%5D%3Bif(!this.drawBitmap%7C%7Cthis.drawBitmap.length!%3D%3Di)return%20void%20l.debug(%22bitmap%20dims%20are%20wrong%22)%3Bconst%20s%3De.createFramebuffer()%3Be.bindFramebuffer(e.FRAMEBUFFER%2Cs)%2Ce.disable(e.CULL_FACE)%2Ce.viewport(0%2C0%2Cthis.back.dims%5B1%5D%2Cthis.back.dims%5B2%5D)%2Ce.disable(e.BLEND)%3Blet%20r%3Dfunction(t)%7Bconst%20e%3Dt.hdr.dims%2Ci%3Dt.permRAS%2Cs%3De%5B1%5D*e%5B2%5D*e%5B3%5D%2Cr%3Dnew%20Int16Array(s)%2Cn%3D%5B0%2C0%2C0%5D%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)for(let%20e%3D0%3Be%3C3%3Be%2B%2B)Math.abs(i%5Bt%5D)-1%3D%3D%3De%26%26(n%5Be%5D%3Dt*Math.sign(i%5Bt%5D))%3Blet%20a%3D1%3Bconst%20o%3D%5B1%2C1%2C1%5D%2Cl%3D%5B!1%2C!1%2C!1%5D%3Bfor(let%20t%3D0%3Bt%3Cn.length%3Bt%2B%2B)for(let%20i%3D0%3Bi%3Cn.length%3Bi%2B%2B)Math.abs(n%5Bi%5D)%3D%3D%3Dt%26%26(o%5Bi%5D%3Da%2C(n%5Bi%5D%3C0%7C%7CObject.is(n%5Bi%5D%2C-0))%26%26(l%5Bi%5D%3D!0)%2Ca*%3De%5Bi%2B1%5D)%3Blet%20h%3DCe.range(0%2Ce%5B1%5D-1%2C1)%3Bl%5B0%5D%26%26(h%3DCe.range(e%5B1%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ce%5B1%5D%3Bt%2B%2B)h%5Bt%5D*%3Do%5B0%5D%3Blet%20c%3DCe.range(0%2Ce%5B2%5D-1%2C1)%3Bl%5B1%5D%26%26(c%3DCe.range(e%5B2%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ce%5B2%5D%3Bt%2B%2B)c%5Bt%5D*%3Do%5B1%5D%3Blet%20d%3DCe.range(0%2Ce%5B3%5D-1%2C1)%3Bl%5B2%5D%26%26(d%3DCe.range(e%5B3%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ce%5B3%5D%3Bt%2B%2B)d%5Bt%5D*%3Do%5B2%5D%3Blet%20m%3D0%3Bfor(let%20i%3D0%3Bi%3Ce%5B3%5D%3Bi%2B%2B)for(let%20s%3D0%3Bs%3Ce%5B2%5D%3Bs%2B%2B)for(let%20n%3D0%3Bn%3Ce%5B1%5D%3Bn%2B%2B)r%5Bh%5Bn%5D%2Bc%5Bs%5D%2Bd%5Bi%5D%5D%3Dt.img%5Bm%5D%2Cm%2B%2B%3Breturn%20r%7D(this.back)%3Bconst%20n%3Dthis.r16Tex(null%2C33995%2Cthis.back.dims%2Cr)%3Bfor(let%20t%3D1%3Bt%3Ci%3Bt%2B%2B)r%5Bt%5D%3Dthis.drawBitmap%5Bt%5D%3Bconst%20a%3Dthis.r16Tex(null%2C33998%2Cthis.back.dims%2Cr)%2Co%3Dthis.r16Tex(null%2C33999%2Cthis.back.dims%2Cr)%3Bfor(let%20t%3D1%3Bt%3Ci%3Bt%2B%2B)r%5Bt%5D%3E0%26%26(r%5Bt%5D%3D1e4)%3Bconst%20h%3Dthis.r16Tex(null%2C33996%2Cthis.back.dims%2Cr)%2Cc%3Dthis.r16Tex(null%2C33997%2Cthis.back.dims%2Cr)%3Be.bindVertexArray(this.genericVAO)%3Bconst%20d%3Dthis.growCutShader%3Bd.use(e)%3Be.uniform1i(d.uniforms.finalPass%2C0)%2Ce.uniform1i(d.uniforms.backTex%2C11)%3Bfor(let%20t%3D0%3Bt%3C128%3Bt%2B%2B)%7Be.uniform1i(d.uniforms.labelTex%2C14)%2Ce.uniform1i(d.uniforms.strengthTex%2C12)%3Bfor(let%20t%3D0%3Bt%3Cthis.back.dims%5B3%5D%3Bt%2B%2B)%7Bconst%20i%3D1%2Fthis.back.dims%5B3%5D*(t%2B.5)%3Be.uniform1f(d.uniforms.coordZ%2Ci)%2Ce.framebufferTextureLayer(e.FRAMEBUFFER%2Ce.COLOR_ATTACHMENT0%2Co%2C0%2Ct)%2Ce.framebufferTextureLayer(e.FRAMEBUFFER%2Ce.COLOR_ATTACHMENT1%2Cc%2C0%2Ct)%2Ce.drawBuffers(%5Be.COLOR_ATTACHMENT0%2Ce.COLOR_ATTACHMENT1%5D)%3Be.checkFramebufferStatus(e.FRAMEBUFFER)!%3D%3De.FRAMEBUFFER_COMPLETE%26%26l.error(%22Incomplete%20framebuffer%22)%2Ce.drawArrays(e.TRIANGLE_STRIP%2C0%2C4)%7D127%3D%3D%3Dt%26%26e.uniform1i(d.uniforms.finalPass%2C1)%2Ce.uniform1i(d.uniforms.labelTex%2C15)%2Ce.uniform1i(d.uniforms.strengthTex%2C13)%3Bfor(let%20t%3D0%3Bt%3Cthis.back.dims%5B3%5D%3Bt%2B%2B)%7Bconst%20i%3D1%2Fthis.back.dims%5B3%5D*(t%2B.5)%3Be.uniform1f(d.uniforms.coordZ%2Ci)%2Ce.framebufferTextureLayer(e.FRAMEBUFFER%2Ce.COLOR_ATTACHMENT0%2Ca%2C0%2Ct)%2Ce.framebufferTextureLayer(e.FRAMEBUFFER%2Ce.COLOR_ATTACHMENT1%2Ch%2C0%2Ct)%2Ce.drawBuffers(%5Be.COLOR_ATTACHMENT0%2Ce.COLOR_ATTACHMENT1%5D)%3Be.checkFramebufferStatus(e.FRAMEBUFFER)!%3D%3De.FRAMEBUFFER_COMPLETE%26%26l.error(%22Incomplete%20framebuffer%22)%2Ce.drawArrays(e.TRIANGLE_STRIP%2C0%2C4)%7D%7De.drawBuffers(%5Be.COLOR_ATTACHMENT0%5D)%3Bconst%20m%3De.COLOR_ATTACHMENT1%2Cu%3Da%3Be.readBuffer(m)%3Bconst%20A%3De.getParameter(e.IMPLEMENTATION_COLOR_READ_FORMAT)%2Cf%3De.getParameter(e.IMPLEMENTATION_COLOR_READ_TYPE)%3BA%3D%3D%3De.RED_INTEGER%26%26f%3D%3D%3De.SHORT%7C%7Cl.debug(%22readPixels%20will%20fail.%22)%2Cr%3Dnew%20Int16Array%3Bconst%20g%3Dthis.back.dims%5B1%5D*this.back.dims%5B2%5D%2Cp%3Dnew%20Int16Array(g)%3Bfor(let%20t%3D0%3Bt%3Cthis.back.dims%5B3%5D%3Bt%2B%2B)e.framebufferTextureLayer(e.FRAMEBUFFER%2Cm%2Cu%2C0%2Ct)%2Ce.readPixels(0%2C0%2Cthis.back.dims%5B1%5D%2Cthis.back.dims%5B2%5D%2CA%2Cf%2Cp)%2Cr%3DInt16Array.from(%5B...r%2C...p%5D)%3Blet%20v%3Dr%5B0%5D%3Bfor(let%20t%3D0%3Bt%3Cr.length%3Bt%2B%2B)v%3DMath.max(v%2Cr%5Bt%5D)%3Bfor(let%20t%3D1%3Bt%3Ci%3Bt%2B%2B)this.drawBitmap%5Bt%5D%3Dr%5Bt%5D%3Be.deleteTexture(n)%2Ce.deleteTexture(h)%2Ce.deleteTexture(c)%2Ce.deleteTexture(a)%2Ce.deleteTexture(o)%2Ce.bindVertexArray(this.unusedVAO)%2Ce.viewport(0%2C0%2Ce.canvas.width%2Ce.canvas.height)%2Ce.bindFramebuffer(e.FRAMEBUFFER%2Cnull)%2Ce.deleteFramebuffer(s)%2Cthis.drawAddUndoBitmap()%2Cthis.refreshDrawing(!0)%7DdrawPt(t%2Ce%2Ci%2Cs)%7Bif(!this.back%3F.dims)throw%20new%20Error(%22back.dims%20not%20set%22)%3Bconst%20r%3Dthis.back.dims%5B1%5D%2Cn%3Dthis.back.dims%5B2%5D%2Ca%3Dthis.back.dims%5B3%5D%3Bt%3DMath.min(Math.max(t%2C0)%2Cr-1)%2Ce%3DMath.min(Math.max(e%2C0)%2Cn-1)%2Ci%3DMath.min(Math.max(i%2C0)%2Ca-1)%2Cthis.drawBitmap%5Bt%2Be*r%2Bi*r*n%5D%3Ds%7DdrawPenLine(t%2Ce%2Ci)%7Bconst%20s%3DMath.abs(t%5B0%5D-e%5B0%5D)%2Cr%3DMath.abs(t%5B1%5D-e%5B1%5D)%2Cn%3DMath.abs(t%5B2%5D-e%5B2%5D)%3Blet%20a%3D-1%2Co%3D-1%2Cl%3D-1%3Be%5B0%5D%3Et%5B0%5D%26%26(a%3D1)%2Ce%5B1%5D%3Et%5B1%5D%26%26(o%3D1)%2Ce%5B2%5D%3Et%5B2%5D%26%26(l%3D1)%3Blet%20h%3Dt%5B0%5D%2Cc%3Dt%5B1%5D%2Cd%3Dt%5B2%5D%3Bconst%20m%3De%5B0%5D%2Cu%3De%5B1%5D%2CA%3De%5B2%5D%3Bif(s%3E%3Dr%26%26s%3E%3Dn)%7Blet%20t%3D2*r-s%2Ce%3D2*n-s%3Bfor(%3Bh!%3D%3Dm%3B)h%2B%3Da%2Ct%3E%3D0%26%26(c%2B%3Do%2Ct-%3D2*s)%2Ce%3E%3D0%26%26(d%2B%3Dl%2Ce-%3D2*s)%2Ct%2B%3D2*r%2Ce%2B%3D2*n%2Cthis.drawPt(h%2Cc%2Cd%2Ci)%7Delse%20if(r%3E%3Ds%26%26r%3E%3Dn)%7Blet%20t%3D2*s-r%2Ce%3D2*n-r%3Bfor(%3Bc!%3D%3Du%3B)c%2B%3Do%2Ct%3E%3D0%26%26(h%2B%3Da%2Ct-%3D2*r)%2Ce%3E%3D0%26%26(d%2B%3Dl%2Ce-%3D2*r)%2Ct%2B%3D2*s%2Ce%2B%3D2*n%2Cthis.drawPt(h%2Cc%2Cd%2Ci)%7Delse%7Blet%20t%3D2*r-n%2Ce%3D2*s-n%3Bfor(%3Bd!%3D%3DA%3B)d%2B%3Dl%2Ct%3E%3D0%26%26(c%2B%3Do%2Ct-%3D2*n)%2Ce%3E%3D0%26%26(h%2B%3Da%2Ce-%3D2*n)%2Ct%2B%3D2*r%2Ce%2B%3D2*s%2Cthis.drawPt(h%2Cc%2Cd%2Ci)%7D%7DdrawFloodFillCore(t%2Ce%2Ci%3D6)%7Bif(!this.back%3F.dims)throw%20new%20Error(%22back.dims%20undefined%22)%3Bconst%20s%3D%5Bthis.back.dims%5B1%5D%2Cthis.back.dims%5B2%5D%2Cthis.back.dims%5B3%5D%5D%2Cr%3Ds%5B0%5D%2Cn%3Dr*s%5B1%5D%3Bfunction%20a(t)%7Bconst%20e%3DMath.floor(t%2Fn)%2Ci%3DMath.floor((t-e*n)%2Fr)%3Breturn%5BMath.floor(t%25r)%2Ci%2Ce%5D%7Dconst%20o%3D%5B%5D%3Bfor(o.push(e)%2Ct%5Be%5D%3D2%3Bo.length%3E0%3B)%7Blet%20e%3Dfunction(e)%7Bconst%20i%3Dh.slice()%3Bif(i%5B0%5D%2B%3De%5B0%5D%2Ci%5B1%5D%2B%3De%5B1%5D%2Ci%5B2%5D%2B%3De%5B2%5D%2Ci%5B0%5D%3C0%7C%7Ci%5B1%5D%3C0%7C%7Ci%5B2%5D%3C0)return%3Bif(i%5B0%5D%3E%3Ds%5B0%5D%7C%7Ci%5B1%5D%3E%3Ds%5B1%5D%7C%7Ci%5B2%5D%3E%3Ds%5B2%5D)return%3Bconst%20a%3D(l%3Di)%5B0%5D%2Bl%5B1%5D*r%2Bl%5B2%5D*n%3Bvar%20l%3B1%3D%3D%3Dt%5Ba%5D%26%26(t%5Ba%5D%3D2%2Co.push(a))%7D%3Bconst%20l%3Do%5B0%5D%3Bo.shift()%3Bconst%20h%3Da(l)%3Be(%5B0%2C0%2C-1%5D)%2Ce(%5B0%2C0%2C1%5D)%2Ce(%5B0%2C-1%2C0%5D)%2Ce(%5B0%2C1%2C0%5D)%2Ce(%5B-1%2C0%2C0%5D)%2Ce(%5B1%2C0%2C0%5D)%2Ci%3C%3D6%7C%7C(e(%5B-1%2C-1%2C0%5D)%2Ce(%5B1%2C1%2C0%5D)%2Ce(%5B-1%2C1%2C0%5D)%2Ce(%5B1%2C1%2C0%5D)%2Ce(%5B0%2C-1%2C-1%5D)%2Ce(%5B0%2C1%2C-1%5D)%2Ce(%5B-1%2C0%2C-1%5D)%2Ce(%5B1%2C0%2C-1%5D)%2Ce(%5B0%2C-1%2C1%5D)%2Ce(%5B0%2C1%2C1%5D)%2Ce(%5B-1%2C0%2C1%5D)%2Ce(%5B1%2C0%2C1%5D)%2Ci%3C%3D18%7C%7C(e(%5B-1%2C-1%2C-1%5D)%2Ce(%5B1%2C-1%2C-1%5D)%2Ce(%5B-1%2C1%2C-1%5D)%2Ce(%5B1%2C1%2C-1%5D)%2Ce(%5B-1%2C-1%2C1%5D)%2Ce(%5B1%2C-1%2C1%5D)%2Ce(%5B-1%2C1%2C1%5D)%2Ce(%5B1%2C1%2C1%5D)))%7D%7DdrawFloodFill(t%2Ce%3D0%2Ci%3D0%2Cs%3DNaN%2Cr%3DNaN%2Cn%3D6)%7Bif(!this.drawBitmap)throw%20new%20Error(%22drawBitmap%20undefined%22)%3Bif(!this.back%3F.dims)throw%20new%20Error(%22back.dims%20undefined%22)%3Be%3DMath.abs(e)%3Bconst%20a%3D%5Bthis.back.dims%5B1%5D%2Cthis.back.dims%5B2%5D%2Cthis.back.dims%5B3%5D%5D%3Bif(t%5B0%5D%3C0%7C%7Ct%5B1%5D%3C0%7C%7Ct%5B2%5D%3C0)return%3Bif(t%5B0%5D%3E%3Da%5B0%5D%7C%7Ct%5B1%5D%3E%3Da%5B1%5D%7C%7Ct%5B2%5D%3E%3Da%5B2%5D)return%3Bconst%20o%3Da%5B0%5D%2Ch%3Do*a%5B1%5D%2Cc%3Dh*a%5B2%5D%2Cd%3Dthis.drawBitmap.slice()%3Bif(d.length!%3D%3Dh*a%5B2%5D)return%3Bconst%20m%3D(u%3Dt)%5B0%5D%2Bu%5B1%5D*o%2Bu%5B2%5D*h%3Bvar%20u%3Bconst%20A%3Dd%5Bm%5D%3Bif(A!%3D%3De)%7Bfor(let%20t%3D1%3Bt%3Cc%3Bt%2B%2B)d%5Bt%5D%3D0%2Cthis.drawBitmap%5Bt%5D%3D%3D%3DA%26%26(d%5Bt%5D%3D1)%3Bif(this.drawFloodFillCore(d%2Cm%2Cn)%2C0!%3D%3Di)%7Bconst%20t%3Dthis.volumes%5B0%5D.img2RAS()%3Blet%20a%3Dt%5Bm%5D%2Co%3Da%3Bif(isFinite(r)%26%26isFinite(s))a%3Dr%2Co%3Ds%3Belse%7Bfor(let%20e%3D1%3Be%3Cc%3Be%2B%2B)2%3D%3D%3Dd%5Be%5D%26%26(a%3DMath.max(a%2Ct%5Be%5D)%2Co%3DMath.min(o%2Ct%5Be%5D))%3Bi%3D%3D%3DNumber.POSITIVE_INFINITY%26%26(a%3Di)%2Ci%3D%3D%3DNumber.NEGATIVE_INFINITY%26%26(o%3Di)%7Dl.debug(%22Intensity%20range%20of%20selected%20cluster%20%3A%22%2Co%2Ca)%3Bfor(let%20e%3D1%3Be%3Cc%3Be%2B%2B)d%5Be%5D%3D0%2Ct%5Be%5D%3E%3Do%26%26t%5Be%5D%3C%3Da%26%26(d%5Be%5D%3D1)%3Bthis.drawFloodFillCore(d%2Cm%2Cn)%2Ce%3DA%7Dfor(let%20t%3D1%3Bt%3Cc%3Bt%2B%2B)2%3D%3D%3Dd%5Bt%5D%26%26(this.drawBitmap%5Bt%5D%3De)%3Bthis.drawAddUndoBitmap()%2Cthis.refreshDrawing(!1)%7Delse%200!%3D%3Di%3Fl.debug(%22drawFloodFill%20selected%20voxel%20is%20not%20part%20of%20a%20drawing%22)%3Al.debug(%22drawFloodFill%20selected%20voxel%20is%20already%20desired%20color%22)%7DdrawPenFilled()%7Bconst%20t%3Dthis.drawPenFillPts.length%3Bif(t%3C2)return%20void(this.drawPenFillPts%3D%5B%5D)%3Bconst%20e%3Dthis.drawPenAxCorSag%3Blet%20i%3D0%2Cs%3D1%3Bif(1%3D%3D%3De%26%26(s%3D2)%2C2%3D%3D%3De%26%26(i%3D1%2Cs%3D2)%2C!this.back%3F.dims)throw%20new%20Error(%22back.dims%20undefined%22)%3Bconst%20r%3D%5Bthis.back.dims%5Bi%2B1%5D%2Cthis.back.dims%5Bs%2B1%5D%5D%2Cn%3Dnew%20Uint8Array(r%5B0%5D*r%5B1%5D)%3Blet%20a%3D1%3Bfunction%20o(t%2Ce)%7Bconst%20i%3DMath.abs(t%5B0%5D-e%5B0%5D)%2Cs%3DMath.abs(t%5B1%5D-e%5B1%5D)%3Bn%5Bt%5B0%5D%2Bt%5B1%5D*r%5B0%5D%5D%3Da%2Cn%5Be%5B0%5D%2Be%5B1%5D*r%5B0%5D%5D%3Da%3Blet%20o%3D-1%2Cl%3D-1%3Be%5B0%5D%3Et%5B0%5D%26%26(o%3D1)%2Ce%5B1%5D%3Et%5B1%5D%26%26(l%3D1)%3Blet%20h%3Dt%5B0%5D%2Cc%3Dt%5B1%5D%3Bconst%20d%3De%5B0%5D%2Cm%3De%5B1%5D%3Bif(i%3E%3Ds)%7Blet%20t%3D2*s-i%3Bfor(%3Bh!%3D%3Dd%3B)h%2B%3Do%2Ct%3E%3D0%26%26(c%2B%3Dl%2Ct-%3D2*i)%2Ct%2B%3D2*s%2Cn%5Bh%2Bc*r%5B0%5D%5D%3Da%7Delse%7Blet%20t%3D2*i-s%3Bfor(%3Bc!%3D%3Dm%3B)c%2B%3Dl%2Ct%3E%3D0%26%26(h%2B%3Do%2Ct-%3D2*s)%2Ct%2B%3D2*i%2Cn%5Bh%2Bc*r%5B0%5D%5D%3Da%7D%7Dconst%20l%3D%5Bthis.drawPenFillPts%5B0%5D%5Bi%5D%2Cthis.drawPenFillPts%5B0%5D%5Bs%5D%5D%3Blet%20h%3Dl%3Bfor(let%20e%3D1%3Be%3Ct%3Be%2B%2B)%7Bconst%20t%3D%5Bthis.drawPenFillPts%5Be%5D%5Bi%5D%2Cthis.drawPenFillPts%5Be%5D%5Bs%5D%5D%3Bo(h%2Ct)%2Ch%3Dt%7Do(l%2Ch)%3Bconst%20c%3D%5B%5D%3Bfunction%20d(t)%7Bif(t%5B0%5D%3C0%7C%7Ct%5B1%5D%3C0%7C%7Ct%5B0%5D%3E%3Dr%5B0%5D%7C%7Ct%5B1%5D%3E%3Dr%5B1%5D)return%3Bconst%20e%3Dt%5B0%5D%2Bt%5B1%5D*r%5B0%5D%3B0%3D%3D%3Dn%5Be%5D%26%26(c.push(t)%2Cn%5Be%5D%3D2)%7Dfor(let%20t%3D0%3Bt%3Cr%5B0%5D%3Bt%2B%2B)d(%5Bt%2C0%5D)%3Bfor(let%20t%3D0%3Bt%3Cr%5B0%5D%3Bt%2B%2B)d(%5Bt%2Cr%5B1%5D-1%5D)%3Bfor(let%20t%3D0%3Bt%3Cr%5B1%5D%3Bt%2B%2B)d(%5B0%2Ct%5D)%3Bfor(let%20t%3D0%3Bt%3Cr%5B1%5D%3Bt%2B%2B)d(%5Br%5B0%5D-1%2Ct%5D)%3Bfor(%3Bc.length%3E0%3B)%7Bconst%20t%3Dc.shift()%3Bd(%5Bt%5B0%5D-1%2Ct%5B1%5D%5D)%2Cd(%5Bt%5B0%5D%2B1%2Ct%5B1%5D%5D)%2Cd(%5Bt%5B0%5D%2Ct%5B1%5D-1%5D)%2Cd(%5Bt%5B0%5D%2Ct%5B1%5D%2B1%5D)%7Da%3Dthis.opts.penValue%3Bconst%20m%3Dthis.drawPenFillPts%5B0%5D%5B3-(i%2Bs)%5D%3Bif(!this.drawBitmap)throw%20new%20Error(%22drawBitmap%20undefined%22)%3Bif(0%3D%3D%3De)%7Bconst%20t%3Dm*r%5B0%5D*r%5B1%5D%3Bfor(let%20e%3D0%3Be%3Cr%5B0%5D*r%5B1%5D%3Be%2B%2B)2!%3D%3Dn%5Be%5D%26%26(this.drawBitmap%5Be%2Bt%5D%3Da)%7Delse%7Blet%20t%3D1%3Bconst%20i%3Dthis.back.dims%5B1%5D*this.back.dims%5B2%5D%3Blet%20s%3Dm*this.back.dims%5B1%5D%3B2%3D%3D%3De%26%26(t%3Dthis.back.dims%5B1%5D%2Cs%3Dm)%3Blet%20o%3D0%3Bfor(let%20e%3D0%3Be%3Cr%5B1%5D%3Be%2B%2B)for(let%20l%3D0%3Bl%3Cr%5B0%5D%3Bl%2B%2B)2!%3D%3Dn%5Bo%5D%26%26(this.drawBitmap%5Bl*t%2Be*i%2Bs%5D%3Da)%2Co%2B%2B%7Dif(!this.drawFillOverwrites%26%26this.drawUndoBitmaps%5Bthis.currentDrawUndoBitmap%5D.length%3E0)%7Bconst%20t%3Dthis.drawBitmap.length%2Ce%3Dyi(this.drawUndoBitmaps%5Bthis.currentDrawUndoBitmap%5D%2Ct)%3Bfor(let%20i%3D0%3Bi%3Ct%3Bi%2B%2B)0!%3D%3De%5Bi%5D%26%26(this.drawBitmap%5Bi%5D%3De%5Bi%5D)%7Dthis.drawPenFillPts%3D%5B%5D%2Cthis.drawAddUndoBitmap()%2Cthis.refreshDrawing(!1)%7DcloseDrawing()%7Bthis.drawClearAllUndoBitmaps()%2Cthis.rgbaTex(this.drawTexture%2CRi%2C%5B2%2C2%2C2%2C2%5D%2C!0)%2Cthis.drawBitmap%3Dnull%2Cthis.drawScene()%7DrefreshDrawing(t%3D!0)%7Bif(!this.back%3F.dims)throw%20new%20Error(%22back.dims%20undefined%22)%3Bif(!this.drawBitmap)throw%20new%20Error(%22drawBitmap%20undefined%22)%3Bconst%20e%3Dthis.back.dims.slice()%2Ci%3Dthis.back.dims%5B1%5D*this.back.dims%5B2%5D*this.back.dims%5B3%5D%3B8%3D%3D%3Dthis.drawBitmap.length%3F(e%5B1%5D%3D2%2Ce%5B2%5D%3D2%2Ce%5B3%5D%3D2)%3Ai!%3D%3Dthis.drawBitmap.length%26%26l.warn(%22Drawing%20bitmap%20must%20match%20the%20background%20image%22)%2Cthis.gl.activeTexture(Ri)%2Cthis.gl.bindTexture(this.gl.TEXTURE_3D%2Cthis.drawTexture)%2Cthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Ce%5B1%5D%2Ce%5B2%5D%2Ce%5B3%5D%2Cthis.gl.RED%2Cthis.gl.UNSIGNED_BYTE%2Cthis.drawBitmap)%2Ct%26%26this.drawScene()%7Dr8Tex(t%2Ce%2Ci%2Cs%3D!1)%7Bif(t%26%26this.gl.deleteTexture(t)%2Ct%3Dthis.gl.createTexture()%2Cthis.gl.activeTexture(e)%2Cthis.gl.bindTexture(this.gl.TEXTURE_3D%2Ct)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_MIN_FILTER%2Cthis.gl.NEAREST)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_MAG_FILTER%2Cthis.gl.NEAREST)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_R%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_S%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_T%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT%2C1)%2Cthis.gl.texStorage3D(this.gl.TEXTURE_3D%2C1%2Cthis.gl.R8%2Ci%5B1%5D%2Ci%5B2%5D%2Ci%5B3%5D)%2Cs)%7Bconst%20t%3Dnew%20Uint8Array(i%5B1%5D*i%5B2%5D*i%5B3%5D)%3Bthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Ci%5B1%5D%2Ci%5B2%5D%2Ci%5B3%5D%2Cthis.gl.RED%2Cthis.gl.UNSIGNED_BYTE%2Ct)%7Dreturn%20t%7DrgbaTex(t%2Ce%2Ci%2Cs%3D!1)%7Bif(t%26%26this.gl.deleteTexture(t)%2Ct%3Dthis.gl.createTexture()%2Cthis.gl.activeTexture(e)%2Cthis.gl.bindTexture(this.gl.TEXTURE_3D%2Ct)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_MIN_FILTER%2Cthis.gl.LINEAR)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_MAG_FILTER%2Cthis.gl.LINEAR)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_R%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_S%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_T%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT%2C1)%2Cthis.gl.texStorage3D(this.gl.TEXTURE_3D%2C1%2Cthis.gl.RGBA8%2Ci%5B1%5D%2Ci%5B2%5D%2Ci%5B3%5D)%2Cs)%7Bconst%20t%3Dnew%20Uint8Array(i%5B1%5D*i%5B2%5D*i%5B3%5D*4)%3Bthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Ci%5B1%5D%2Ci%5B2%5D%2Ci%5B3%5D%2Cthis.gl.RGBA%2Cthis.gl.UNSIGNED_BYTE%2Ct)%7Dreturn%20t%7DrequestCORSIfNotSameOrigin(t%2Ce)%7Bnew%20URL(e%2Cwindow.location.href).origin!%3D%3Dwindow.location.origin%26%26(t.crossOrigin%3D%22%22)%7Dasync%20loadPngAsTexture(t%2Ce)%7Breturn%20new%20Promise(((i%2Cs)%3D%3E%7Bconst%20r%3Dnew%20Image%3Br.onload%3D()%3D%3E%7Bif(!this.bmpShader)return%3Blet%20t%3B4%3D%3D%3De%3F(null!%3D%3Dthis.bmpTexture%26%26this.gl.deleteTexture(this.bmpTexture)%2Cthis.bmpTexture%3Dthis.gl.createTexture()%2Ct%3Dthis.bmpTexture%2Cthis.bmpTextureWH%3Dr.width%2Fr.height%2Cthis.gl.activeTexture(33988)%2Cthis.bmpShader.use(this.gl)%2Cthis.gl.uniform1i(this.bmpShader.uniforms.bmpTexture%2C4))%3A5%3D%3D%3De%3F(this.gl.activeTexture(33989)%2Cnull!%3D%3Dthis.matCapTexture%26%26this.gl.deleteTexture(this.matCapTexture)%2Cthis.matCapTexture%3Dthis.gl.createTexture()%2Ct%3Dthis.matCapTexture)%3A(this.fontShader.use(this.gl)%2Cthis.gl.activeTexture(33987)%2Cthis.gl.uniform1i(this.fontShader.uniforms.fontTexture%2C3)%2Cnull!%3D%3Dthis.fontTexture%26%26this.gl.deleteTexture(this.fontTexture)%2Cthis.fontTexture%3Dthis.gl.createTexture()%2Ct%3Dthis.fontTexture)%2Cthis.gl.bindTexture(this.gl.TEXTURE_2D%2Ct)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_WRAP_S%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_WRAP_T%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_MIN_FILTER%2Cthis.gl.LINEAR)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_MAG_FILTER%2Cthis.gl.LINEAR)%2Cthis.gl.texImage2D(this.gl.TEXTURE_2D%2C0%2Cthis.gl.RGBA%2Cthis.gl.RGBA%2Cthis.gl.UNSIGNED_BYTE%2Cr)%2Ci(t)%2C4!%3D%3De%26%26this.drawScene()%7D%2Cr.onerror%3Ds%2Cthis.requestCORSIfNotSameOrigin(r%2Ct)%2Cr.src%3Dt%7D))%7Dasync%20loadFontTexture(t)%7Breturn%20this.loadPngAsTexture(t%2C3)%7Dasync%20loadBmpTexture(t)%7Breturn%20this.loadPngAsTexture(t%2C4)%7Dasync%20loadMatCapTexture(t)%7Breturn%20this.loadPngAsTexture(t%2C5)%7DinitFontMets()%7Bif(!this.fontMetrics)throw%20new%20Error(%22fontMetrics%20undefined%22)%3Bthis.fontMets%3D%7BdistanceRange%3Athis.fontMetrics.atlas.distanceRange%2Csize%3Athis.fontMetrics.atlas.size%2Cmets%3A%7B%7D%7D%3Bfor(let%20t%3D0%3Bt%3C256%3Bt%2B%2B)this.fontMets.mets%5Bt%5D%3D%7Bxadv%3A0%2Cuv_lbwh%3A%5B0%2C0%2C0%2C0%5D%2Clbwh%3A%5B0%2C0%2C0%2C0%5D%7D%3Bconst%20t%3Dthis.fontMetrics.atlas.width%2Ce%3Dthis.fontMetrics.atlas.height%3Bfor(let%20i%3D0%3Bi%3Cthis.fontMetrics.glyphs.length%3Bi%2B%2B)%7Bconst%20s%3Dthis.fontMetrics.glyphs%5Bi%5D%2Cr%3Ds.unicode%3Bif(this.fontMets.mets%5Br%5D.xadv%3Ds.advance%2Cvoid%200%3D%3D%3Ds.planeBounds)continue%3Blet%20n%3Ds.atlasBounds.left%2Ft%2Ca%3D(e-s.atlasBounds.top)%2Fe%2Co%3D(s.atlasBounds.right-s.atlasBounds.left)%2Ft%2Cl%3D(s.atlasBounds.top-s.atlasBounds.bottom)%2Fe%3Bthis.fontMets.mets%5Br%5D.uv_lbwh%3D%5Bn%2Ca%2Co%2Cl%5D%2Cn%3Ds.planeBounds.left%2Ca%3Ds.planeBounds.bottom%2Co%3Ds.planeBounds.right-s.planeBounds.left%2Cl%3Ds.planeBounds.top-s.planeBounds.bottom%2Cthis.fontMets.mets%5Br%5D.lbwh%3D%5Bn%2Ca%2Co%2Cl%5D%7D%7Dasync%20loadFont(t%3DFe%2Ce%3DVe)%7Bawait%20this.loadFontTexture(t)%3Bconst%20i%3Dawait%20fetch(e)%3Bif(!i.ok)throw%20Error(i.statusText)%3Bconst%20s%3Dawait%20i.text()%3Bthis.fontMetrics%3DJSON.parse(s)%2Cthis.initFontMets()%2Cthis.fontShader.use(this.gl)%2Cthis.drawScene()%7Dasync%20loadDefaultMatCap()%7Breturn%20this.loadMatCapTexture(%22data%3Aimage%2Fjpeg%3Bbase64%2C%2F9j%2F4QrFRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAdAAAAcgEyAAIAAAAUAAAAj4dpAAQAAAABAAAApAAAANAACvyAAAAnEAAK%2FIAAACcQQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKQAyMDE4OjA3OjEzIDE3OjU0OjI3AAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAACAKADAAQAAAABAAACAAAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAAmPAAAAAAAAAEgAAAABAAAASAAAAAH%2F2P%2FtAAxBZG9iZV9DTQAB%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAoACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A0FEqSiVItYFNCcpAJKXa1EDFZ6f0zKzn7aG%2B0fSedGj4ldFV0npfTKhbln1rO27gn%2BRV%2Bd%2FbQKXncbpuXlGKKnPHiBp%2Fnn2f9JalX1WeG78q5lLe%2Ff7%2FAObb%2FwBJHyOu3v8AZjNFFY0B0Lo%2F6hqz7LH2u3WuNjvFxn8qCWy%2Fp3QaGn9K%2FIsHZgEf523b%2FwBNVXVY8%2BysNHgdf4BKU6IVTA0VHljfuCg7Dx3c1t%2BQj8iPCeEUOfZ0yo%2FQJb%2BIVW3AvZwN48ufuW1CYslFDzxaQYOh8FGFt34ldg9w17Hus3IxH1aj3N8e4SQ1wnBTJJKZAqUocqQKSn%2F%2F0NFRIUkoUi1GQtPovRbeov8AVfNeK0w5%2FdxHLa%2F%2FACaH0fpbup5DtxLcKg%2Fp7OJPPosd%2FwBX%2B5%2F22rXVeui4fY%2Bn%2FosKsbAWabwNPb%2B7T%2F58QJSA6eV1nEwWfZOnNadmhcPoA%2F8Aox6xbcm2%2Bw2WuL3HuVTa5FaUF1JgVMKDUQJKXAUgEwUgipcBOAkFIIoWhKFKEkUMC1DfUCjwmISQ42XhRL6x8WqjC6J7JWXnYkTawf1h%2FFJTRThMnhJT%2F9HSUXNtttqxaBN%2BQ4MZ5T%2BcVKQBJMAak%2BSrYfVPsmRdmtE5GwsxgeGl3tNn9itPK0Ox1rOpwcZvQenu%2FR1CMu0cucfc6uf5f07%2FAPtlY7HSqbXlxJcS5xMlx5JPLirNZTbXgNqtWGKtWrDCklO1EahNKI1FSQKQUQpBFDIKQUQpBFC6SJVU%2B1wawST2R7enZNTN7m6DmNYRQ1EykRCZJDAhBsZIRyoOCSnEyaPSs0%2Bi7hC2rUyqg9p8eQqQYgVP%2F9Kzn2%2Bnj7RzYY%2BQ1csg2SVa6tb%2BmDOzGj7z7lntOqUjqmIblRVyoqjSVbqKAXN1hR2FVayjsKcpstKK0quwozSkhMFMITSpgpwQUgThQBUgUUOt0XYX2En3gCB5d1rLlq7HMcHNJaRwRorB6jlFu02GEDG%2BqGXUm1NyniuI0kDifzlUSLp5TSnKUouTyolJCKwSFRe2HEK%2B9U7xDpQKn%2F%2FTo579%2BVZ%2FWI%2B72oO0tUnfpMsjxefxKs5VBrA0Uc5eqmWEfTaOoq3W5UWGCrVbuE4ILdY5HY5U2OVhjk5DbY5Ga5VWORWuRQ2WuUwUBrlMOTghOCnlCDk4cihLKfchbk%2B5JCSU0qEpSipnKYlRlIlJDFxVXJ%2BiT4Kw4qtkH2H4IKf%2F1M6qBnie1sH%2FADl0PWsMNY17RpAC53LBq6hcB2eSPmd4XYXubmdPa4al7Nw%2BPKp8yTHJA9LILd5UCeOcetAh5Fw2uhFY9Ty6YO4d9VXaYKnhKwwSjRbtblYY5UWPVhj1IFjcY5Ga5VGPRmuTghtNciByrNciNcihsBycOQQ5SDk5CXcn3IW5PuSQllKUPcn3JKZykXKEpi5FCnOVa93tKK5yrWulwb4kIKf%2F1afW6%2FTzW2drWA%2FNvsd%2F31afR88nFFTj%2FN6BC63R6uH6oHuoO7%2Byfa%2F%2FAL6srByDW%2BJ0d%2BVRczj4h%2BLNy2UwNjydjIY1wc0djp8DqFmWsLXK2cng%2FI%2FBBtcHKKFhmnUkLXQjseqp0Km16nBYCG8x6O16osejsenhYW416I16qteitenBDZDlIOQA9SDkUJw5PuQQ5S3IqS7k%2B5C3J9ySEm5MXIe9Rc9JS73oDTuu8mgn79E1lkBRxz7C88vOnwGgSQ%2F%2F1tAhrgWuEtcCHDxB0K5fJodiZL6Ha7D7T4tP0Hf5q6WVQ6vifaKRbWJtpB0HLmcub%2FWZ9NifONhETRcxlxI15UxZ2VNro%2FgVMPVbhbAk2C6UwOqGCSpApwCCWwxyOx6ptcisenhYW416K16qNeitenha2g9ED1VD1MORQ2g5SDlXD1IPRUm3Jb0LeoufCSEpehvsQnWqvdkAAklJSSx5scK2nV3fwH5xVgEAADQDQBV8WtwabXj3v4Hg3sP7SMkgl%2F%2FXtSlJ5HZMmUqxyOqYHpE5FQ%2FQuM2NH5jj%2Bd%2FxT%2F8AwNUGyDqum8jqDoQdRCyc3phqm3HBdVy6saln9X96v%2FqEycOoXxl0LTBUwhN01GoUwUyl9swptKGHBSBCSkzXojbFXCkHJwQ22vRA9Uw9TFiKG4Hpw9VBan9VFDa9RQstVZ18KvdlAaJWhsWZAHdTw6HXuF9o%2FRDVjT%2Bcf3v6jUPDwH3EXZIIr5bWdC7%2Bt%2B6xaoH%2BwJUgrQlCmAnhFD%2F%2F0LCSSZTLFKTdDIUVIIKauV0uq8myoim08%2FuO%2FrNH0f6zVl3Y9uO7bew1k8O5af6r10ITkBzS1wDmnlpEg%2FIppC4F5vb3TgLXt6VjOk1E0Hwbq3%2FMd%2F5JVX9Ly2%2FR2Wj%2BSdp%2FzX%2F%2BSTeFdxNQJ0R2Nks%2BlTYP7JI%2F6O5QLXDlrh8WkfwSpVqS3JBrzw0n4AqTcXJd9Gp%2F%2BaR%2F1UIqtiXqDrSrbOl5L%2Fp7WDzMn7mqzV0rHZrZNp89B%2FmhGitsOVXXkZDttTS7xPYf1nLRxOm1UkPti20aj90HyH539pXtrWgNaAGjgDQJkQEEsgpBQCmEUMgnUZTykp%2F%2F2f%2FtErpQaG90b3Nob3AgMy4wADhCSU0EJQAAAAAAEAAAAAAAAAAAAAAAAAAAAAA4QklNBDoAAAAAAO8AAAAQAAAAAQAAAAAAC3ByaW50T3V0cHV0AAAABQAAAABQc3RTYm9vbAEAAAAASW50ZWVudW0AAAAASW50ZQAAAABJbWcgAAAAD3ByaW50U2l4dGVlbkJpdGJvb2wAAAAAC3ByaW50ZXJOYW1lVEVYVAAAAAEAAAAAAA9wcmludFByb29mU2V0dXBPYmpjAAAAEQBBAGoAdQBzAHQAZQAgAGQAZQAgAHAAcgB1AGUAYgBhAAAAAAAKcHJvb2ZTZXR1cAAAAAEAAAAAQmx0bmVudW0AAAAMYnVpbHRpblByb29mAAAACXByb29mQ01ZSwA4QklNBDsAAAAAAi0AAAAQAAAAAQAAAAAAEnByaW50T3V0cHV0T3B0aW9ucwAAABcAAAAAQ3B0bmJvb2wAAAAAAENsYnJib29sAAAAAABSZ3NNYm9vbAAAAAAAQ3JuQ2Jvb2wAAAAAAENudENib29sAAAAAABMYmxzYm9vbAAAAAAATmd0dmJvb2wAAAAAAEVtbERib29sAAAAAABJbnRyYm9vbAAAAAAAQmNrZ09iamMAAAABAAAAAAAAUkdCQwAAAAMAAAAAUmQgIGRvdWJAb%2BAAAAAAAAAAAABHcm4gZG91YkBv4AAAAAAAAAAAAEJsICBkb3ViQG%2FgAAAAAAAAAAAAQnJkVFVudEYjUmx0AAAAAAAAAAAAAAAAQmxkIFVudEYjUmx0AAAAAAAAAAAAAAAAUnNsdFVudEYjUHhsQFIAAAAAAAAAAAAKdmVjdG9yRGF0YWJvb2wBAAAAAFBnUHNlbnVtAAAAAFBnUHMAAAAAUGdQQwAAAABMZWZ0VW50RiNSbHQAAAAAAAAAAAAAAABUb3AgVW50RiNSbHQAAAAAAAAAAAAAAABTY2wgVW50RiNQcmNAWQAAAAAAAAAAABBjcm9wV2hlblByaW50aW5nYm9vbAAAAAAOY3JvcFJlY3RCb3R0b21sb25nAAAAAAAAAAxjcm9wUmVjdExlZnRsb25nAAAAAAAAAA1jcm9wUmVjdFJpZ2h0bG9uZwAAAAAAAAALY3JvcFJlY3RUb3Bsb25nAAAAAAA4QklNA%2B0AAAAAABAASAAAAAEAAQBIAAAAAQABOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD%2BAAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNJxAAAAAAAAoAAQAAAAAAAAABOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FA%2BgAAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwPoAAAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAAAD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FA%2BgAADhCSU0EAAAAAAAAAgAAOEJJTQQCAAAAAAACAAA4QklNBDAAAAAAAAEBADhCSU0ELQAAAAAABgABAAAAMjhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAAM9AAAABgAAAAAAAAAAAAACAAAAAgAAAAAEAG0AYwA2ADEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAAAAABudWxsAAAAAgAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAIAAAAAAFJnaHRsb25nAAACAAAAAAZzbGljZXNWbExzAAAAAU9iamMAAAABAAAAAAAFc2xpY2UAAAASAAAAB3NsaWNlSURsb25nAAAAAAAAAAdncm91cElEbG9uZwAAAAAAAAAGb3JpZ2luZW51bQAAAAxFU2xpY2VPcmlnaW4AAAANYXV0b0dlbmVyYXRlZAAAAABUeXBlZW51bQAAAApFU2xpY2VUeXBlAAAAAEltZyAAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAACAAAAAABSZ2h0bG9uZwAAAgAAAAADdXJsVEVYVAAAAAEAAAAAAABudWxsVEVYVAAAAAEAAAAAAABNc2dlVEVYVAAAAAEAAAAAAAZhbHRUYWdURVhUAAAAAQAAAAAADmNlbGxUZXh0SXNIVE1MYm9vbAEAAAAIY2VsbFRleHRURVhUAAAAAQAAAAAACWhvcnpBbGlnbmVudW0AAAAPRVNsaWNlSG9yekFsaWduAAAAB2RlZmF1bHQAAAAJdmVydEFsaWduZW51bQAAAA9FU2xpY2VWZXJ0QWxpZ24AAAAHZGVmYXVsdAAAAAtiZ0NvbG9yVHlwZWVudW0AAAARRVNsaWNlQkdDb2xvclR5cGUAAAAATm9uZQAAAAl0b3BPdXRzZXRsb25nAAAAAAAAAApsZWZ0T3V0c2V0bG9uZwAAAAAAAAAMYm90dG9tT3V0c2V0bG9uZwAAAAAAAAALcmlnaHRPdXRzZXRsb25nAAAAAAA4QklNBCgAAAAAAAwAAAACP%2FAAAAAAAAA4QklNBBQAAAAAAAQAAAAyOEJJTQQMAAAAAAmrAAAAAQAAAKAAAACgAAAB4AABLAAAAAmPABgAAf%2FY%2F%2B0ADEFkb2JlX0NNAAH%2F7gAOQWRvYmUAZIAAAAAB%2F9sAhAAMCAgICQgMCQkMEQsKCxEVDwwMDxUYExMVExMYEQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQ0LCw0ODRAODhAUDg4OFBQODg4OFBEMDAwMDBERDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz%2FwAARCACgAKADASIAAhEBAxEB%2F90ABAAK%2F8QBPwAAAQUBAQEBAQEAAAAAAAAAAwABAgQFBgcICQoLAQABBQEBAQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMMMwEAAhEDBCESMQVBUWETInGBMgYUkaGxQiMkFVLBYjM0coLRQwclklPw4fFjczUWorKDJkSTVGRFwqN0NhfSVeJl8rOEw9N14%2FNGJ5SkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9xEAAgIBAgQEAwQFBgcHBgU1AQACEQMhMRIEQVFhcSITBTKBkRShsUIjwVLR8DMkYuFygpJDUxVjczTxJQYWorKDByY1wtJEk1SjF2RFVTZ0ZeLys4TD03Xj80aUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9ic3R1dnd4eXp7fH%2F9oADAMBAAIRAxEAPwDQUSpKJUi1gU0JykAkpdrUQMVnp%2FTMrOftob7R9J50aPiV0VXSel9MqFuWfWs7buCf5FX539tApedxum5eUYoqc8eIGn%2BefZ%2F0lqVfVZ4bvyrmUt79%2Fv8A5tv%2FAEkfI67e%2FwBmM0UVjQHQuj%2FqGrPssfa7da42O8XGfyoJbL%2BndBoaf0r8iwdmAR%2Fnbdv%2FAE1VdVjz7Kw0eB1%2FgEpTohVMDRUeWN%2B4KDsPHdzW35CPyI8J4RQ59nTKj9Alv4hVbcC9nA3jy5%2B5bUJiyUUPPFpBg6HwUYW3fiV2D3DXse6zcjEfVqPc3x7hJDXCcFMkkpkCpShypApKf%2F%2FQ0VEhSShSLUZC0%2Bi9Ft6i%2FwBV814rTDn93Ectr%2F8AJofR%2Blu6nkO3EtwqD%2Bns4k8%2Bix3%2FAFf7n%2FbatdV66Lh9j6f%2BiwqxsBZpvA09v7tP%2FnxAlIDp5XWcTBZ9k6c1p2aFw%2BgD%2FwCjHrFtybb7DZa4vce5VNrkVpQXUmBUwoNRAkpcBSATBSCKlwE4CQUgihaEoUoSRQwLUN9QKPCYhJDjZeFEvrHxaqMLonslZediRNrB%2FWH8UlNFOEyeElP%2F0dJRc2222rFoE35DgxnlP5xUpAEkwBqT5Kth9U%2ByZF2a0TkbCzGB4aXe02f2K08rQ7HWs6nBxm9B6e79HUIy7Ry5x9zq5%2Fl%2FTv8A%2B2VjsdKpteXElxLnEyXHkk8uKs1lNteA2q1YYq1asMKSU7URqE0ojUVJApBRCkEUMgpBRCkEULpIlVT7XBrBJPZHt6dk1M3uboOY1hFDUTKREJkkMCEGxkhHKg4JKcTJo9KzT6LuELatTKqD2nx5CpBiBU%2F%2F0rOfb6ePtHNhj5DVyyDZJVrq1v6YM7MaPvPuWe06pSOqYhuVFXKiqNJVuooBc3WFHYVVrKOwpymy0orSq7CjNKSEwUwhNKmCnBBSBOFAFSBRQ63RdhfYSfeAIHl3WsuWrscxwc0lpHBGisHqOUW7TYYQMb6oZdSbU3KeK4jSQOJ%2FOVRIunlNKcpSi5PKiUkIrBIVF7YcQr71TvEOlAqf%2F9Ojnv35Vn9Yj7vag7S1Sd%2BkyyPF5%2FEqzlUGsDRRzl6qZYR9No6irdblRYYKtVu4Tggt1jkdjlTY5WGOTkNtjkZrlVY5Fa5FDZa5TBQGuUw5OCE4KeUIOThyKEsp9yFuT7kkJJTSoSlKKmcpiVGUiUkMXFVcn6JPgrDiq2QfYfggp%2F%2FUzqoGeJ7Wwf8AOXQ9aww1jXtGkALncsGrqFwHZ5I%2BZ3hdhe5uZ09rhqXs3D48qnzJMckD0sgt3lQJ45x60CHkXDa6EVj1PLpg7h31VdpgqeErDBKNFu1uVhjlRY9WGPUgWNxjkZrlUY9Ga5OCG01yIHKs1yI1yKGwHJw5BDlIOTkJdyfchbk%2B5JCWUpQ9yfckpnKRcoSmLkUKc5Vr3e0ornKta6XBviQgp%2F%2FVp9br9PNbZ2tYD82%2Bx3%2FfVp9HzycUVOP83oELrdHq4fqge6g7v7J9r%2F8AvqysHINb4nR35VFzOPiH4s3LZTA2PJ2MhjXBzR2OnwOoWZawtcrZyeD8j8EG1wcooWGadSQtdCOx6qnQqbXqcFgIbzHo7Xqix6Ox6eFhbjXojXqq16K16cENkOUg5AD1IORQnDk%2B5BDlLcipLuT7kLcn3JISbkxch71Fz0lLvegNO67yaCfv0TWWQFHHPsLzy86fAaBJD%2F%2FW0CGuBa4S1wIcPEHQrl8mh2JkvodrsPtPi0%2FQd%2FmrpZVDq%2BJ9opFtYm2kHQcuZy5v9Zn02J842ERNFzGXEjXlTFnZU2uj%2BBUw9VuFsCTYLpTA6oYJKkCnAIJbDHI7Hqm1yKx6eFhbjXorXqo16K16eFraD0QPVUPUw5FDaDlIOVcPUg9FSbclvQt6i58JISl6G%2BxCdaq92QACSUlJLHmxwradXd%2FAfnFWAQAANANAFXxa3BptePe%2FgeDew%2FtIySCX%2F9e1KUnkdkyZSrHI6pgekTkVD9C4zY0fmOP53%2FFP%2FwDA1QbIOq6byOoOhB1ELJzemGqbccF1XLqxqWf1f3q%2F%2BoTJw6hfGXQtMFTCE3TUahTBTKX2zCm0oYcFIEJKTNeiNsVcKQcnBDba9ED1TD1MWIobgenD1UFqf1UUNr1FCy1VnXwq92UBolaGxZkAd1PDode4X2j9ENWNP5x%2Fe%2FqNQ8PAfcRdkgivltZ0Lv637rFqgf7AlSCtCUKYCeEUP%2F%2FQsJJJlMsUpN0MhRUggpq5XS6rybKiKbTz%2B47%2Bs0fR%2FrNWXdj247tt7DWTw7lp%2FqvXQhOQHNLXAOaeWkSD8imkLgXm9vdOAte3pWM6TUTQfBurf8x3%2FklVf0vLb9HZaP5J2n%2FNf%2F5JN4V3E1AnRHY2Sz6VNg%2Fskj%2Fo7lAtcOWuHxaR%2FBKlWpLckGvPDSfgCpNxcl30an%2F5pH%2FVQiq2JeoOtKts6Xkv%2BntYPMyfuarNXSsdmtk2nz0H%2BaEaK2w5VdeRkO21NLvE9h%2FWctHE6bVSQ%2B2LbRqP3QfIfnf2le2taA1oAaOANAmRAQSyCkFAKYRQyCdRlPKSn%2F%2FZADhCSU0EIQAAAAAAUwAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAAABIAQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAEMAAAABADhCSU0EBgAAAAAABwAGAAAAAQEA%2F%2BESK2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTgtMDctMTJUMjA6MDc6NDcrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE4LTA3LTEzVDE3OjU0OjI3KzAxOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE4LTA3LTEzVDE3OjU0OjI3KzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL2pwZWciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo3MmVhYjVmZS02NDZkLWVhNDMtODQyNC0xNWQzZTgwOWExNDQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0OGNjMGI3YS1iYTJkLWZmNDAtYmNkNC1jNGQzMzIyZjBiNzQiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDphYzFjM2NhNS1hYTg4LWI5NGMtOGE4MS05YmU4MjA3ZGZiODciPiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT5hZG9iZTpkb2NpZDpwaG90b3Nob3A6YThjMGNhZTYtODNjYy1hYzQ4LWI2YzAtN2FiODNlOWJkMGM3PC9yZGY6bGk%2BIDwvcmRmOkJhZz4gPC9waG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM%2BIDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YWMxYzNjYTUtYWE4OC1iOTRjLThhODEtOWJlODIwN2RmYjg3IiBzdEV2dDp3aGVuPSIyMDE4LTA3LTEyVDIwOjA3OjQ3KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIi8%2BIDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpjYmI3MzZlZC0zOTRhLTM2NDgtYThiOC02Mzk1MmY0NDcxMjIiIHN0RXZ0OndoZW49IjIwMTgtMDctMTNUMTY6MTM6NTgrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQ2YjNkYTI3LWI4YjEtYmU0Yi1hYTQ4LTExZGM5NmZkNTIyZiIgc3RFdnQ6d2hlbj0iMjAxOC0wNy0xM1QxNzo1NDoyNyswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvanBlZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iZGVyaXZlZCIgc3RFdnQ6cGFyYW1ldGVycz0iY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9qcGVnIi8%2BIDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo3MmVhYjVmZS02NDZkLWVhNDMtODQyNC0xNWQzZTgwOWExNDQiIHN0RXZ0OndoZW49IjIwMTgtMDctMTNUMTc6NTQ6MjcrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk%2BIDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjQ2YjNkYTI3LWI4YjEtYmU0Yi1hYTQ4LTExZGM5NmZkNTIyZiIgc3RSZWY6ZG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjg3NjM1NDk5LWZiMTItYWU0MC04NWEzLThkMWFiN2NkZGVhOSIgc3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmFjMWMzY2E1LWFhODgtYjk0Yy04YTgxLTliZTgyMDdkZmI4NyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hwYWNrZXQgZW5kPSJ3Ij8%2B%2F%2BIMWElDQ19QUk9GSUxFAAEBAAAMSExpbm8CEAAAbW50clJHQiBYWVogB84AAgAJAAYAMQAAYWNzcE1TRlQAAAAASUVDIHNSR0IAAAAAAAAAAAAAAAEAAPbWAAEAAAAA0y1IUCAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARY3BydAAAAVAAAAAzZGVzYwAAAYQAAABsd3RwdAAAAfAAAAAUYmtwdAAAAgQAAAAUclhZWgAAAhgAAAAUZ1hZWgAAAiwAAAAUYlhZWgAAAkAAAAAUZG1uZAAAAlQAAABwZG1kZAAAAsQAAACIdnVlZAAAA0wAAACGdmlldwAAA9QAAAAkbHVtaQAAA%2FgAAAAUbWVhcwAABAwAAAAkdGVjaAAABDAAAAAMclRSQwAABDwAAAgMZ1RSQwAABDwAAAgMYlRSQwAABDwAAAgMdGV4dAAAAABDb3B5cmlnaHQgKGMpIDE5OTggSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkAAGRlc2MAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAADzUQABAAAAARbMWFlaIAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9kZXNjAAAAAAAAABZJRUMgaHR0cDovL3d3dy5pZWMuY2gAAAAAAAAAAAAAABZJRUMgaHR0cDovL3d3dy5pZWMuY2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2aWV3AAAAAAATpP4AFF8uABDPFAAD7cwABBMLAANcngAAAAFYWVogAAAAAABMCVYAUAAAAFcf521lYXMAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAKPAAAAAnNpZyAAAAAAQ1JUIGN1cnYAAAAAAAAEAAAAAAUACgAPABQAGQAeACMAKAAtADIANwA7AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3AHwAgQCGAIsAkACVAJoAnwCkAKkArgCyALcAvADBAMYAywDQANUA2wDgAOUA6wDwAPYA%2BwEBAQcBDQETARkBHwElASsBMgE4AT4BRQFMAVIBWQFgAWcBbgF1AXwBgwGLAZIBmgGhAakBsQG5AcEByQHRAdkB4QHpAfIB%2BgIDAgwCFAIdAiYCLwI4AkECSwJUAl0CZwJxAnoChAKOApgCogKsArYCwQLLAtUC4ALrAvUDAAMLAxYDIQMtAzgDQwNPA1oDZgNyA34DigOWA6IDrgO6A8cD0wPgA%2BwD%2BQQGBBMEIAQtBDsESARVBGMEcQR%2BBIwEmgSoBLYExATTBOEE8AT%2BBQ0FHAUrBToFSQVYBWcFdwWGBZYFpgW1BcUF1QXlBfYGBgYWBicGNwZIBlkGagZ7BowGnQavBsAG0QbjBvUHBwcZBysHPQdPB2EHdAeGB5kHrAe%2FB9IH5Qf4CAsIHwgyCEYIWghuCIIIlgiqCL4I0gjnCPsJEAklCToJTwlkCXkJjwmkCboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3ArzCwsLIgs5C1ELaQuAC5gLsAvIC%2BEL%2BQwSDCoMQwxcDHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakNww3eDfgOEw4uDkkOZA5%2FDpsOtg7SDu4PCQ8lD0EPXg96D5YPsw%2FPD%2BwQCRAmEEMQYRB%2BEJsQuRDXEPURExExEU8RbRGMEaoRyRHoEgcSJhJFEmQShBKjEsMS4xMDEyMTQxNjE4MTpBPFE%2BUUBhQnFEkUahSLFK0UzhTwFRIVNBVWFXgVmxW9FeAWAxYmFkkWbBaPFrIW1hb6Fx0XQRdlF4kXrhfSF%2FcYGxhAGGUYihivGNUY%2BhkgGUUZaxmRGbcZ3RoEGioaURp3Gp4axRrsGxQbOxtjG4obshvaHAIcKhxSHHscoxzMHPUdHh1HHXAdmR3DHeweFh5AHmoelB6%2BHukfEx8%2BH2kflB%2B%2FH%2BogFSBBIGwgmCDEIPAhHCFIIXUhoSHOIfsiJyJVIoIiryLdIwojOCNmI5QjwiPwJB8kTSR8JKsk2iUJJTglaCWXJccl9yYnJlcmhya3JugnGCdJJ3onqyfcKA0oPyhxKKIo1CkGKTgpaymdKdAqAio1KmgqmyrPKwIrNitpK50r0SwFLDksbiyiLNctDC1BLXYtqy3hLhYuTC6CLrcu7i8kL1ovkS%2FHL%2F4wNTBsMKQw2zESMUoxgjG6MfIyKjJjMpsy1DMNM0YzfzO4M%2FE0KzRlNJ402DUTNU01hzXCNf02NzZyNq426TckN2A3nDfXOBQ4UDiMOMg5BTlCOX85vDn5OjY6dDqyOu87LTtrO6o76DwnPGU8pDzjPSI9YT2hPeA%2BID5gPqA%2B4D8hP2E%2Foj%2FiQCNAZECmQOdBKUFqQaxB7kIwQnJCtUL3QzpDfUPARANER0SKRM5FEkVVRZpF3kYiRmdGq0bwRzVHe0fASAVIS0iRSNdJHUljSalJ8Eo3Sn1KxEsMS1NLmkviTCpMcky6TQJNSk2TTdxOJU5uTrdPAE9JT5NP3VAnUHFQu1EGUVBRm1HmUjFSfFLHUxNTX1OqU%2FZUQlSPVNtVKFV1VcJWD1ZcVqlW91dEV5JX4FgvWH1Yy1kaWWlZuFoHWlZaplr1W0VblVvlXDVchlzWXSddeF3JXhpebF69Xw9fYV%2BzYAVgV2CqYPxhT2GiYfViSWKcYvBjQ2OXY%2BtkQGSUZOllPWWSZedmPWaSZuhnPWeTZ%2BloP2iWaOxpQ2maafFqSGqfavdrT2una%2F9sV2yvbQhtYG25bhJua27Ebx5veG%2FRcCtwhnDgcTpxlXHwcktypnMBc11zuHQUdHB0zHUodYV14XY%2Bdpt2%2BHdWd7N4EXhueMx5KnmJeed6RnqlewR7Y3vCfCF8gXzhfUF9oX4BfmJ%2Bwn8jf4R%2F5YBHgKiBCoFrgc2CMIKSgvSDV4O6hB2EgITjhUeFq4YOhnKG14c7h5%2BIBIhpiM6JM4mZif6KZIrKizCLlov8jGOMyo0xjZiN%2F45mjs6PNo%2BekAaQbpDWkT%2BRqJIRknqS45NNk7aUIJSKlPSVX5XJljSWn5cKl3WX4JhMmLiZJJmQmfyaaJrVm0Kbr5wcnImc951kndKeQJ6unx2fi5%2F6oGmg2KFHobaiJqKWowajdqPmpFakx6U4pammGqaLpv2nbqfgqFKoxKk3qamqHKqPqwKrdavprFys0K1ErbiuLa6hrxavi7AAsHWw6rFgsdayS7LCszizrrQltJy1E7WKtgG2ebbwt2i34LhZuNG5SrnCuju6tbsuu6e8IbybvRW9j74KvoS%2B%2F796v%2FXAcMDswWfB48JfwtvDWMPUxFHEzsVLxcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8%2B40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1%2BDYZNjo2WzZ8dp22vvbgNwF3IrdEN2W3hzeot8p36%2FgNuC94UThzOJT4tvjY%2BPr5HPk%2FOWE5g3mlucf56noMui86Ubp0Opb6uXrcOv77IbtEe2c7ijutO9A78zwWPDl8XLx%2F%2FKM8xnzp%2FQ09ML1UPXe9m32%2B%2FeK%2BBn4qPk4%2Bcf6V%2Frn%2B3f8B%2FyY%2FSn9uv5L%2Ftz%2Fbf%2F%2F%2F%2B4ADkFkb2JlAGRAAAAAAf%2FbAIQAAgICAgICAgICAgMCAgIDBAMCAgMEBQQEBAQEBQYFBQUFBQUGBgcHCAcHBgkJCgoJCQwMDAwMDAwMDAwMDAwMDAEDAwMFBAUJBgYJDQoJCg0PDg4ODg8PDAwMDAwPDwwMDAwMDA8MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgCAAIAAwERAAIRAQMRAf%2FdAAQAQP%2FEAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4%2FPE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BCk5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0%2BPzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BDlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq%2Bv%2FaAAwDAQACEQMRAD8A7B9HTNg4bWKteOKVp7%2FjgVYcVUmxSpN92FVFvuxVSNNzUbb0Nd9%2Bm2FVBvDFVP8Ajiq3FLYHfFV4FcWSqFwJVVXAlXVTkUqoWv8AA4GSqqCu%2FhtgSvCYErgntilv09%2FDFXenXFLXo4obW1dzREZz7AnCqKj0W9l%2BzAVB7tthpFhHR%2BV7px%2B8dU%2BQJyVMbR8fk9f92SufECgw0i0dH5Ps%2FwBpGbxJJw0i0YnlPT1p%2FooNO5FcKFceWNPH%2FHon%2FAjChf8A4bsB%2FwAeyf8AAjFWj5asD1tU%2FwCBGFFKLeVtNYb2kf8AwIxWkJJ5O0tq%2FwCioPkKH8MKKS%2BXyNp7fZRl9wxxWkpn8hJv6U8in3oRihJbjyTfx1MUiyexBGFUjuPLuqQFudqXA7oQfwxQk8lpLESJYnjPcMpH68VQ5jPzGFVnE4oa47bjCq0rv0xQtK%2F7WKrSuKrSu%2BKrKVO2KGqDbck0qa%2FPArWKt%2FwxVcMVXg%2B%2BBVQHwxSqV967DAq8Hpiq4H%2B3FK8HfFVQHAq8HFV4PTtiq6uBW69PxOKurir%2FAP%2FQ7D8%2B%2BbBw2v1UxVaT1xSt%2BjAqkcVUzilSJ64VUGOKqJ%2FHxwqpnFVn%2BZxVrqfc4pX0HvilVVT1oaeOBKsq9TTftgZK6rgSrqmRZKyodsCVVU%2B%2FAlVEdcCV4jxSi4bCeb7CEjxO2NLabQaBK5Blag7qv9ckIseJkeneU3upY4LWylvLh9kjRGkYn2UVyYgxM3q2ifkr5z1NY2TRWsIXpSW7IgoPHi3xU%2BjEmI5kMbt6dpf%2FADjpdsFbVtdgtqqCY7WNpSDXcVcoOnfIHNAcrK1Jndh%2BQflC2Rfrd1fX0gHxNzWJSd9%2BIUkdfHInUdw%2FH2LwHvZPD%2BUnkS3UBNESQgg8pXdzsa%2BPvg%2FMnuDGWM9Cwjznp3lfyjGhTStKMr7JbrvKOIqpZSNv45nYc0SLI%2BwNJxyvm8UvvM1pNyFvpNtEDuKIOvjkjlHQMxjPexS5uvrJJ9FI69eIAyoytmIoHgPDAmmigxWnen7YoWmMb7UwqtMQxQpmAHthVRa2U9sUIWSxRhuoOFUtuNGt5QQ8SmvYiuKKYve%2BTbCapWH0yejJt%2BGFFMSvfJdxHU28vLwVxT8Rihi11pF7akia3YAbcwKj8MKpYY8VWGMiuKrCv0YoWFcVWFfbFVnH%2BzArQ2IJHIA7qehxVr5Yq33xVf8AhgVeDQ9e%2BKrh%2BGKqimhB8PH%2BhxVcDgVcDvXqfHFV4NMVXg%2F7eKV4OBVwbFV307Yq3Xv098Cv%2F9HsP0ZsHDa64qtOKVpGKqZ%2B7FVE4qot%2Ft4pUSfDFVJv8zhVTOKtH8e%2BKXAYpVFHhgSrKvbAlEKvSmBKJRP9vAyRCr%2FtZFkrrH%2BGBKISEueKKWPYDAlN7bR55aF%2FgU9u%2BERQZUyzSvKtxdzRw2dlLeXEhARI0LsSfAAHJiDEze6%2BWvyF8y6okc%2BomLQ7YkVFwGM1O9IgNv8AZEYJTjHr8mO5e5aD%2BR%2Fk3SQkl8k2t3C9TO3pxV8RGhB%2B9jlRznoKTw971Sw0nS9KRk0zTrawVvti3iWOtOleIFcqlOUuZZCICOd0jRpJGCIgLO7GgAG5JJ6ZHmlh2rfmD5Q0bmt1rUMkydYLeszV8KpVQR3BOWDFIo4nmOsfnxYxFo9E0iS4NPguLtggrTesaVOx%2FwArLBhHUot5Zrf5s%2BcdYEkQ1D9HWzkn0LNRFQGopz3cih6cssjCIV5zPdT3MjSzyvNI27O7FiT7k5O0Uh61wq39OKuwodTbFW6YUOp7Yq1xwq6gxQt44oWlK4VUzGMKFBoQe2KoSS2Vq7YoSy402OQEFQa9dsKKYnqHlSzueTCLg%2F8AOu2FFMHv%2FKt5b8mh%2FfIO3Q4qxea3khYpJG0bDsRTFUOyfhgVTK4qplfDFCmRTpiq3FXdNsVbH%2B2cVbr7YFXg4q3Xriq8H3xVcCd8VXg%2FhgVcDiqoDilcDgVfWuKr6mgqa06Yq%2F%2FS7DmwcN34jwxVYa9t%2FHFVhxSpsKd698CqJ6YUqTHFVFsVUjhVTNDtirqU%2BZxSuAPzrilWVelR8sCUQijbAyRKpkUopE%2FzOBkiooXchVXk3amRSyKx0Kacjmp36KMIjamT2Tyl%2BUnmPzAFew01o7atHvJv3cXavxN1pUGgqcmQI8zTDiJ5Pozy3%2BQWh2HpTa9evqUy0LWkH7uGoPQufjYH245VLOOgTwl7XpOh6RoVv9V0jToNPhO7LEoBY%2BLN1Y%2FM5TKcpcyyEQEykljhRpZpFijQVeRyFUD3J2yIBOwSTTzvXvzT8o6GHQXv6SuUqPQtfiFR4uaL91ctGA9dmPF3PGta%2FPTW7l2XR7WDTIQTxdgJpCKdyw4%2F8LlgxxHmu7ynVfNmvay7NqOq3N1y%2FYeRio9gtaAbnpk7XhY%2B0zNUkknG00sqTirf04Vb264q39GFDdRiruXhhQ3WuKt1wobBwq3ihvY4VdxB3xQ0VHX78VWlMKFhX%2FaxVTKe3TChQaIHtiqFkgB7YUJdNZhgajFDHNQ0K2ugRLEDXvTCimAaj5VlhLPankOvpt%2FA4qxCa2lhYpKhjYeOBUMV6AjpsO3viqky138MVUiuxB%2BjFC2m5xVr8cVdTFV2Kt%2F574FX1FcVXBiCGBII6YquB8Diq4HbFVwOBV4OKVQHAq8H7sVf%2F9PsPvvmwcNrfFWjTFVh8PHrilSP%2BZxVSOKqBxSpHfvhVSNKbfaqamu1NqYqs7YpbA6e2KVRR4%2FRgSrquBIRSL09sDJFohJAAqe2RSn1hpM90y0UgHtTEBN0928jfk%2FrnmMpJBafV7IMBLfTDhGOlaE7k%2BwBOSNR5sOInk%2Bs%2FKn5Q%2BV%2FLaJJc266zfqa%2BvOg9Nf9WKpH31%2BjKZZz%2FDsyEO96qAFAVQFVRRVGwAGY5Ns0u1TWNL0W3Nzql9FZRAEgyNQtTrxXqx%2BQyUYGXJBkA8O8yfnnZ2%2Fq2%2Fl6yM70ol9cGig%2BIj7%2FAEnL44YjnuxsnyeDa%2F568w%2BYnLalqLyp%2BzEtEQD2VaDLAaFDZIixBpmY7kn54LZUt5VxTTYOKrq4q3X3wobrirfLFWwcKG64VXDFDYwquGFC6mKt0%2BnChdTFDgMKrqYobphVqgxQsKV%2FjhVYY%2FbbFCi0XXbriqg8PthQgpIAdvwxVLJ7NWB%2BHChjGpaJBcqweIH3pvih55qfly4tS0kNZIxU8e4xVi7xlSQRxI2IwKh2XFVMin0YqtIxQ10FPlirQ2xVd32Fa4q2MVdXAq4HFWwdjviqoD1xVeG8MCr1Ndu5wJVAcVf%2F1OxZsHDapirR%2FV2xVYcUqZ%2B7FVBvnilSIb4qVpT4qdKVxVQOFVMj%2B3FVoH3YpX8eJYEiqmlAaj6CNsCVRR74pRCCu9MiyR8EDysqqCa4EvSfKvkrUdau4LWztHurmZqJGgJr3yQigyp9reRfyO0vRUhvPMIS%2Bu6VFgv92hI%2FaYH4iPAbe5yqecDaPzUQJ5vfI4o4Y0ihjWKKMcY40AVVA7ADYZjEk7ltApqWaKCN5ppFiijFZJHICgeJJxAJ2Ck08T85%2Fm5a6aslnoPGefcNesPhH%2Bovf5nMiGIDcsCSXzDrnmbUdZuXub%2B8kuZW6vIxPTYZYSkRYy8xbqcjbOlnKpwKuDffileGwq3yxVdXxxVcDhQuGKrhhVcPuxQuGFV4GFC4DwwoXgeHTFVwFBhQupihfTvhVsDChvjirfH6cUN8cKtFfbFDXH6cKrSgxQpNED0wqh3i9vpxQhJIR1piqXy2wbthQktzYhgQVG%2BKGEav5diuAzovCQdGGKvPL6wuLRysybV2em3%2Be2BUtK%2B2KqRWlcULKYq1T78VdirsVbrtSv0Yq2PmBtWpr2wK30ANeo2%2FzGKrgd9vuxVeO1cCVSo23Ne%2FtiqoCDTYCg3O%2B%2FfAr%2F%2FV7EM2Dhu%2FhirXGor0xSsI%2FDFVI4qpN398UqLbinhv9%2BKqJB%2F28VUiMKXU9sVXKMCVdRXAyTKztJLhwiLXfc%2BGBL6D%2FLP8ptU813MZjhaCwjI%2Bt6g6%2FAgr0FaVO%2FQb4TURckWTsH3f5T8m6L5PsktdMt19coFur9gPUlNa706CvQD6anfMTJlM%2Fc2RiAyzK2TGvMPmvSPLcDSX1wpmAqlqhBc%2FPwGWQxmXuYmVPlnzt%2Baeoa4z28UhtrMH4LeM0HzPicyABHkgC%2Bbxi51CSZmZmJJwEswEAZST1wMmw3jiq8NgSuDYqvBwqqA1%2BWKrhhVePliheMKrwMKFQDCq8DFC8DCheB7YVXgbYoXgdMKFwH4YqvphQ3xwoXBeuKt8a4UN8cVdxxQ1x3wq0V%2BnFC3h1wqsKfj3xQoPDXtiqFkh26YVQEtvWtBihKbm0BB2xQxbUdJjnVldAa4q8x1XQ5bRmeJS8f8AL4YqxtlofDAqmRiq3buae%2FXftihbt8sVdirWKu2p716Yq2PnQYFbr%2Ft4qvBwJXg4qqKcCv8A%2F9bsfTNg4bsVaxSsI%2BnAqmR1%2FHFVIjrhSpMPvxVRYHscUqZHbFXU38ffFK4L%2FbilMrGzku3AjU8K7t4%2FLIpfWn5Rfklda%2BttrGsxtY6CrAx1FHueJ3CA7gduRHyrglMQ58%2B5QCX3Bp2m2Gk2kNhptpHZWkACxQRLQCgpU%2BJ8SdzmJKRkbLaAByX3t9aadbyXd9cJa20Qq8shoPl7n2GMYmRoKSBzeAecvzpgtxLZ6Bt1BvW%2B0f8AVHbMmOIR57lrsy8nzPrHmi91OaSW4uHkZzVmYk1JwmTMRpi73LOSSa5ElnSl6hOBK8N%2BGBKoGwpVAcVVAcVVBiqqMKqi4oVAMKqij6cKFQDCqoAMUKgGFC8DCq8DphQvAGKF9P7MKrguKF4HjuMKF1DhVdTFDfHChcBirVPuxVun04UNU%2F2sVa41xQsK4VWMvfFCiyDviqGkh%2B7ChASQddsVSue2BqKYoY7e6csgYFa4q811ry%2BVZ5YFo1akdjirCXjZGKsvFl2IPXAqiQBXFVtMVap79cULcCu%2BeKuOKuHfAleCemKrwe2BV4P%2B3il%2F%2F9fslDvTem5zYOG7FXHAlYRiqwivviqkR49sUqTDwxVSZcKVOn0Yq6lASSABuSemBKJsrWS9kVVU%2BkSKCm7HBbIB9v8A5M%2FkWssNt5k83WskFuCsmmaO44NKBuHmBFQh7DqevTrCeTg5c%2FuUDi9z7HRFjVURQiIAqIooABsAAMxSb3LcxLzd520PybZNc6pcKbl0LWmnqf3spG3%2BxFf2jtk8eIy9zGUqfFfnX80NY803TtNcGK0QkW1mmyID7dyfE5lWIiosRG9y8umv5JSSzEk98rJbAEL61T1wWypcHrgSqhtv1YpVVauKaVVOKqymuKqynFVYYVVlGKqqjChVAwoVQNsKr6YUKgGKFQDCq8DCheBT28cKF4GKF4GFVwGKF4FcKF1MKrwMUN0%2FswquptihwGKup1wodT%2FaxVqmKGiu%2BFVpXFCkV7YqpMnXCqGePrt2xQgpIevfFUsnt%2BopihILyxVgarXFXm%2BuaAG5SRrxcVII%2FUcUPP5onido5AVZe2BKhT6MVWEeH3Yqt6%2B%2BBWsVa2wK3%2FmcVXDx%2B7Aq4YpVAcCv%2F9DstM2DhuxVxH9MCVv44qtI%2FtxVTI2JxSpsPamKqRUeGKVNqKCxNAN2Y7DFKlbxvfyqqqfRqOC93PiciSyAfe35IfkUdOFr5p85WQScBZdJ0SUAlagMss69iOyHev2vDITycGw5%2Fd%2B37vfyMRxe59d5itrxH8xvzm0XylHcadpM0Wp66F4%2FCwaGAmu7EVDMP5fv8MyIYa3l8mBlfJ8Q%2BYPNmp%2BYL%2B41DUrt7q6uGq8rmp8APYAbAdhtlhkkRY2bgseuQtmA4S%2B%2BBlSor1wJV1b3xSrK3TFVdTilEriqIXCquoxVEKP7cKFVRhVWXFCqBhVUGFCpTFVQDCheB%2FtYULwMKFQDFC8DCq%2BmFC7FC8DCq4DFC6mFV1PbFDYGFC6mKuphV1MUNUpXbbFXFcKFpGKrSuKFMr%2BPbCqiyfR74oQzx1xVByRVxVLJ4K9sUJBeWYdSOOKvONe0EOrPGtGWtGAxV51LHJEzRupQ9GXxGBVAjv8AjgVYR44qtpirXTw26YFbGKrh88CW8CqgxV%2F%2F0ey07ZsHDbpirqClO%2BBLjU7mpJ7nFVpHcYqsp3xSpkYpU2UAVJoBuT4Yqk5dr%2BZUjr6ANAB1c5Am2YD7x%2F5x%2FwDyQaz%2Bo%2Bd%2FNdrwkUCXQdIlUE7j4biVWBpTqg61%2BLwrGc%2BDYc%2Fu%2Fb93v5EDi9z7Id0iR5JHWOONS0kjEBVUCpJJ6AZigW2vjn82%2FwA%2BTJJdeXfKNzwtVrFe6qho0vZljPZffvmXGAx%2BZ%2B5r3l7nyTcajLcOzyOXZjUsTXAZW2AIYTV75C2QCoslSN8FpV1fFkiFbFUQrVxSiUJ2OKopMUotMKohcUIlcKqw98Kqy4oVhhVVGFCoPvwqqAYoVFwoXj5YUKgFP44ULwMKrwMULwMKF4xVcBhQvA2woXAYquA2xQ3T%2BuFW8UOp2wq3Tpt1xQ6mKuI%2FswoW0xVaRihaRiqky%2FjhVSKYoQrpWuKoOSIeGKEsmhBriqQXtmHDAiuKvMfMOhV5SxrRl3GBXnroyMVZaFTuMCqXYj8cVaIpvgVbTc%2Fhirf44Et0%2FswKuAPhXFK4YFf%2F0uzUzYOG332O3yxVvAl1PDFWiBT3xStpgVYVxSx2%2Fu%2FrEn1WFqxqaTOP2iOw9siSzAfXP%2FOOf5KjXZLbzt5jg46NYThtKsJF%2FwB6pYqMHYEbxqf%2BCO3jglLgHmeX6%2F1Jri26P0AkeOGN5ZXWKKJS0kjEKqqoqSSdgAMxQLbOT4Z%2FO%2F8APM6s1z5V8q3LR6UjFL%2FUEJDXJHVVPUIPx65kxiMfv%2B5j9XufJj3LOSSanIktgDQlr3yNsqV1fFKIRsCUUjVxSikOKoxDilFphVFp%2FtYqi0wqiUxVELhVXXChWXFVVcKFVcKFUdsKqgxQvGFCqB%2FtYULwMKrxhQvGKF4HTthQvGKrwMKF1MVXAYULgMUN0wquoPuxQ6mFW%2FxxV1MUOoMVaOFC2hxVaRihYV%2B%2FCqky9sUKLLiqGdf9rFUFLH%2BPfFCVzw1rt8sVY7fWYdWBFa4q8l8w6K0LNPEvT7QHhgVhZFKjAlaRgV1O2BXUr1wKupilunt0wK3TFX%2F%2F0%2Bz5sHDbwK2MUt70xV1PbAlqnjiqQ6xf%2FV1%2Bqwt%2B%2FkHxkdVX%2BpyMiziLeo%2FkV%2BVM%2FwCY%2FmSNLpXi8u6XSbWbpdmK78Y0J7uRT2G%2BAbDiKTfIc36sWlpbWFrb2VnAltaWsaxW8EYCqiKKAADMaUjI2W2IoUHxl%2FzkL%2BdixG58keV7yoo8Ov3se1W6GFGr07NmRGPhjf6vu%2Faw%2Bs%2BT4ia5Z2JJqT1yBLaA2svvkWVK6v74pRSP9%2BBki0OKoyPFKNTClGxj2xVGxjpiqMTCqKTt2wqiV7YoV1wqrrhVXX8cUKwwoVFwqqjChUA%2F28UKgHthQqDCqoBhQuAwoVB%2BIxQvFa%2BOFV4xQvA6fqwoXU%2FHCq4dcUL6Yq4d8KF1P9vFXU%2BnCh2Kt98UOp%2BGKtUwoW%2FL5Yq0Riq0jFCmR7YVUyK1xQoMvhviqFkTFUBLHWuKEquIag4qxbUrBZkZWWoIOBXjet6W1lOzKp9NjufDAlIadsCt0PhTArYBwJbCA1qQB1qa9t%2B1cCruIpgS3TFX%2F9Ts4zYOGu%2F28CV330xVsYq3Tv1wJQOoXkdjbvO27dIk%2FmbtgJpIFsa8uaNqfmzXrHSrCJrnUNVnWKNF8XPvkIx4i2E8IfsP%2BXHkTTfy78q6f5esFDSxKJNRu%2B81wwHqPv0Feg7DKsuTiO3IcmUI0LPMvHv%2Bchfzkj8kaY%2FljRJ1bzHqsJ9eZG%2BK0heoDDj%2B01D16D55PFHg9R59P1%2FqQfUaHLq%2FNee9kuZZJpnMkkrFndjUkk1J%2BnIk23ALVk98iypEI%2BKUWjdMUoyNsUo6PtiqPj7YpR0f%2B1iqOTCqMTtviqMTthVFJ2wqiV7fjiquuFVdcKFdcVVRhQrDChVGFCqMKr1xQqAYULxhQqAYoVAP7MKF4GFV4H9uKF1MKF48PuxVumFC7viq7Chun%2B3irdDhQ3Tr7Yq1irsUOrhQtpirWKrT%2FtYoWkdMKqZGKFJlqMVQ7L%2FZiqEdOuKEvmj9sVSe4hBrt9OKsJ1vS1uIpFKgmhwK8furV7WZ4mHQ%2FCcglD8e2BK4DAq4LilcF9sCt8Pb6cCv%2F9XtGbBw12%2F9mBK7FWxgVskKGZiAAKlj2GKXmur6idQuzwP7iL4YV8fE%2FTlUjbbEP0A%2F5xN%2FK79HadJ%2BYGr2%2FwDpl%2Bpi0RGG6RdGk6%2FtdqjpQ5LIeCFdZfd%2B1A9UvIfe%2Bhfzb%2FMvT%2Fy08rXOqTSK%2BqXCmLSbPu0hH2qUOy%2B%2FemVYsYPqlyH4plOW%2FCOb8jfMHmPUfMmrX2sapcvdXt%2FK808rkklmNT1%2BeM5cRbYxoJQsm%2FXIM6RSP0xSi0b3xSjYz0xSj4zilMIsVTGLCqOjxSjo8KoxO2KotMKopMVRK4VRC4UK64VV1xQrDChVUdMKFYYUKijCqqMUKgHTbChUH6sKF9MKF4xVUGFC8YoXAb4VXU8NsKF4BxVunbFC6n31woboMVdSpxQ3TCru3TbFWqYodhVrFC0jFWiMULCOuKrD12xVYwwoUGH44qhnXFUHIuKEumjrXFUivIAwO3zwK8z8yaTzUyotGXfIlLAAhB36jIpXBPHAlcE9sCrwvt88CruBpX7hil%2F%2F1u09c2Dhrhsa%2BGBK4D%2BwYq2P9vArFvM%2Bp%2FVYBZxNSW4H7wjsn9uQmWcRa38r%2FKM%2FnjzjpGhxIXhmmVrxgNhEpq1fnTDhhxS35MskuGNv2InvtE8h%2BWIkJS2sNHtQkUdQAFjXuT403ORjjlnmTyH6GoZRCIA3L8mPzi%2FM%2B%2B%2FMbzVdXzzOdNtWaLToDsAgP2qe%2FwDTHNkB9MeQcjFjoWeZeSrLXvlDfSJR8CUZG9aYpR8ZxSmMR6YpTGLthVMYu2KphFhSjo8VRsfbCqNTFUWmFUUm2KolPDCqJXChXWu2Kq6%2FLChWXChXX3wqqinbChUBxQqg%2FwC3hQvGFC8dcKFUVxQvFf6YVXj9WFC8E4ULhiq8YULx7YquAxQuGFV1K%2F0xQ6nXFXf5nChr%2BmKupihrt1wq12%2BeKrfpxQ0f1YqsOKFp%2B7xxVYevthVRYdcUKLD8cVQrrviqBlTFCVXEda4qxnUbUSKwp2yJS8m1awNtcMQPgY5ApCWhBQUBrT4vfftkUrxH%2BHfAlf6ft0wK7h7Yq%2F%2FX7SM2DhrhgSupiqncTx2sEs8ppHEpY%2FRgKQ8Y1G%2FkvbqWdzvI1QPAdhlBNt8RT7o%2F5xZ0CDQ9NvfNl6irc3g4WzsN1jHWlfE5sdNguB83D1MrNMY%2F5yR%2FOKbUpG8qaXdFY611B0NDQHZMr1OQY48Efi2abDfqL4xEpJzWW59K6SYskbG%2BKUfEemKUyiPTFUyhwqmcXQYpTCPthVMIziqPjwpRsZxVGRnwwqi0NcKotP8AMYoRK4VRKnFVdcKEQpwoVlwqqjthQrDFCoMKFQdsKFUYUKg8MKF4xVeMKF4%2FVhQvFMVVAMKFy7YoXjfCqoBiheB9OFV4Xtihvh7fRhVoqfDFC2lP4Yqtp44q1iho%2BGFVvz7YoW%2FRiq04oWHFVp9u2KqZxQpMK4VQzjFUJIvXFUvmSvbFUluoq12rgVgut2AljY8antkSEhgRiKMQdqZUyXiP2pgVcEwJbEZxV%2F%2FQ7V29%2FHNg4a4D%2B3Ald0264qwTzlqgRE0%2BNtz8c%2F8AxqP45VM9GyAefWMf1y%2Btrb%2Ff0iqT7E5XEWabuQfZGs%2FmBbeSvJkFhZyKtwkASKNTSrUp2zazzDHBw44%2BOT4xv9UuNSvLi9uZDJPcuXkY%2BJNc005GRsuxjGgoLJU9ciyRkb1wJTCJumFKZwnpiqZxHphVNIuuFKZRHFUxiOFUfFilHx9sKo2M4qjEOFUWh3xVFofxwqiVPhhVEKcUIlThQrqfbCqspwoV1xQqLhQrLhQqLhQqjChUGFCoMVXj3woXj%2FMYULxiq8frwoXjxxVUG%2BFCsqk%2FPChEpESdhiqMjtHbYLhQrnT5KbqcUWh5LR16riqCeMjFVIinXFVOmKrT74ULTiq2njihafliq3FCw4qsOKqRA%2BWKFBh9HvhVDOteuKoGUdf14qlk6dTgVjt9AGUimAq861G09OZmAoD2yqQZBACPp%2BGQZL%2BFeuBW%2FTxV%2F9HtXhme4a4YpU57hbWGW4duKwqXJ6dN9sBUPBtW1B7y6nuJD8UrFqeHgPozHkXIiELpl%2Btlew3Tf7pPJfmMEZUbZkWFXXfMd1rdwJJnPpx7RpXYe%2BDJlMiyhDhSRZK5TbaAiUeuKUfE3TFKaQnphVNYThVNYsKpnEcVTKM9MKplGcUo%2BM4VR0Z6YVRqHocVRiHCqMQ4qikOFUShxVEqcKEQvbCqIU4oV1woVlwoVl%2FHChWGFCoMKFQfrwoVB22wqqDFC8H6cKFQHCheOmKrxhQvHt44qqqN8KEZClSNsKGU6Xpb3TqqoSSemGmJL2HRfIXqRrJc0jUjYHr92VTzRhtzQASyj%2FA2l8OPI17mgyr815MvDLFtY8gFUeS2pKoBNB2y6GeMvJgQYvItU0aW0dlZCtDlxCgsWliKEjAlCMMCVh%2F2sULcKrTiq04oWnFVhxQsOKqZxVSYYoQzqDXbFUJIOuKpfMvXFUmuY6g4qwzVbXkGoPfISCQxj06bfeMpLNeE6e2BWym2BL%2F%2F0u1D%2FM5sHDXAYEsJ86al9Xs47JGo9yeUlP5V7fScrmWcA8YnmqSa5jkuQAlzze%2BQJbAFP1d8hbMBWSTBaUbE%2BFKaQGtMVTaE9MKpvCemFU0hOFU0iOFKYxHCqYxGmKo%2BM4VRyHFKNQ9MKo1DiqLQ74VRSHviqKQ98KEUhwqiVOKFdcKEQpwoVhhVWBwoVVwoVRhYqowqqD9WFC8eGKFQfPChePvwoXDFV4%2FDChVGKqyb%2FwBcKE2so%2BTr%2BvJBBe%2B%2BQdGSQi5kSqRitexPbK88%2BCPmWAFl7B02GwHQZrm92KuxVjet%2BWbHWInqohuCDxlA2J9xmTi1Jhsdw1Sx9z5y8y%2BX7nSbmWKaIrueJ8R2NR45n2JCxyYAsGkUg0yKUOa7YEqZwoW1xVbihadsVWHFC0%2B%2BKqZ%2BjFVI9cUKDjriqGcYqgpR13xVKp12I8MVY5fw1VqjIlLDJouEhHSuUyDILeOQZO4Yq%2F%2FT7UKZnuG2TQe2KXhXmrU%2Fruo3Dq1Y0Ppxf6q7fjmPM7t8AwOabc75SS3AJeZanrlZLYA4SZG2YCKjetMCaTGFumFU3gPTJKnEJ6eOFU2hPTCqawnCqZxHphVMojiqYRHphVHxnClHRnFUbGem%2BFUYhxVGIfDCqLQ9MVRSHChEocVRKnChEqcKFdThVXBwoVlPTChWB3wsVVd8KFQHCqoMUKg%2FDChUGFC8YVXDFCoDhQvBxVEIenthQyLSV5TR96kADJxDEvrLy1Yix0i1Ugc5VEjU3FD0pT2zB1M%2BKddycY2tP8x2x2KuxV2KsB%2FMLTILvRzdsi%2BtaGgk2B4t2r86ZmaOe5i1ZB1fLl2tJH8K%2FRmWWIS1silTP%2B3ihYT198KtVxVZihbXFVhxQsOKqZxVRYe2KEO%2BKoOQYql0y9fbFUluo6hv1YFYdfRcXr4ZXMMgguPTKWbuOKv%2F1O1jM9xEm16%2BFhpd3ODRynCP%2FWfYfdkZGgmIsvnS9nLM1T1zFkXJiGPzy7nfKiW0BBGXfKyW0Bej%2B%2BRtlSOibphSmsBwoTiA9MkFTiA9MkhNoT0wqmsJwqmcRxVMojhVHxn%2B3ClHxnFUdGcKo2M4qjEPTCqMQ4qjEPQ4VRSHFUUhwoRKHChEocKq6nFCupySFcHChVXthQqqcKFVThQqg%2F2YoVBX%2B3ChcMKF4PXChUBxVeDhQuB8fwxVXQ7jvhQn%2BlTiKeNidgQd8nFjJ9gaBex3%2BkWFxEaj0lRh4FQBvmv1EeGZ892UDYTjKWbsVdirsVee%2FmJqiWukGzVh6l0auvcKPb3OZujhzk1ZD0fL944Z2I7k0zKLEJY33nIpUycVW1%2FDFCwnFVp64ULa4qtP68ULD%2FmMVWHFVFu5xQoP8sVQj%2FLFUDKMVSm4WoIwKxfUItj45EpCRgdu42zHLY6nhir%2FAP%2FV7X0B9sz3DeZ%2Bf7%2FhFa2at15SyD8F%2FjlWQtuMPEbuWpO%2BYsi5EQkcsm%2BVSLcAhvUyslsAV42wWypMYj03yQVN4D0yQQnMB6ZJCcQnphVNoW6fhhQmkLdMKUziOFUxiOFUwiPTFUfG3TCqOjbFUbG1cKo1GxVFo2FUYh6YqikOFUUjdMKEUh6YqiVOFCIU4UK6nChWU4WKupwqqg4UKgOFCqDhQvBwoVAcKFwOFV4OKFQHxwoXVNfpxVVVsKEbBKVYEYQh6p5Q863GjMIi3qW7kerCTUH5b7HfthlCOQVJhuNw9307zXo2oqClyIHO3pykDtXqDT76Zhz0s48t%2FczGQdU%2FSeCSvCZHp14sD%2BrKDCQ5hlxDvUJtQsrdS011GgXr8QJ%2B4VOSjhnLkFMwOrENZ886bYxuto4nn6Bjso%2BXjmTj0h5zazkvk%2Bf9f12bU55JZpCxYmpPzzMJHIMQGGSyVJ365WWSFY%2FTiqw998VWE1xQtriq0nFVtcULSf8AMYVWkjFCmcVUmOKqLYoQz98CoKQbYVSyYdcCWP3sfJW8MBVjDCjkU65TMMw0e%2F68gl%2F%2F1u0OdqeOZ7iPAfOl%2FwDWdVuqNVIT6Sf7Db9eY2Q7t8Bs8zuZeormPIuREJRJJU5QS2xCkGyFtoCKjbEFKZQnpkwhOYD0yQQnNua0yQYpvC3TJKm0J6YVTSI4VTOJsKpjE3TCqPjbpiqPjbClHRtiqNjbpvhVGo2KEYjYqjEb6cKopGxVFo3TChFI2FCJQ%2B%2BFCIU4VV1PTChXU4UKynChWU4UKgPbChVBwoVAfwwoXA9MKF4OKrwcKF9cULwfwwquB3xVWV6EGuFCLinKEEGnvhBRScW%2BqzRdHI965MSY0nEfmS7QcVnYClDvkuMo4VsvmO8kqWnY1G9TtjxleFJp9RkkLFnqT75ElNJZJMWrU5FKGZ64qpk4qsJ%2FHFC0nxxVonr44oWHFVpJxQtJ%2B7wxVaThQswKpMfwxVSbCqGem%2BBCEk%2FHFUvlxSkt0tQcBVid2vCSvvlcwyCHr%2FacqZP%2F1%2Bv3s4t7e4nOwhjZz9ArmeXED5c1W5aSaV2NWZix%2BZzDmXKiGJXEm5%2FHMeRb4hLGapyiRbohteuQttpFxYQUJnCemWBBTeA9MkGKc27dMmEJvC2FU1hbphQmkLYVTKJsKplE3TCqPjbphSj426Yqjo2wqjY2xVGo2FUZG3TFUZG39uKEWjdPfCqKRsKEUjYUIlWwoRCNhQiFbChXU4UKyt03woVlNcKFUHChUB6YVVA2FCoDiheDhQuDfjhVeDihcGwquBxVeG98UKgany7YVXiSg2OKqgmPjhQ36p8cbVaZK9ScVWF8VW8sULeVaEnFVpOFC2p%2F28Var%2BOKGq%2F7eKrK4oaJ%2FDFVte%2BKFOv04qsOKqLHt2xVDtihCydMVQMo64pSi4Gx74FYtqCdTkCyCUhtgTlTJ%2F%2FQn%2FnC7%2BraHeEGhmKxD6Tv%2BAzNmdnGiN3zLfy1ZvnmFMuVEMbnepzHkW%2BIQo3OY8i3xCuo6ZC2ykRH1GTCCmMJ6ZYGJTaBumTDEpxA3TJoTeFumSQmsLYVTSJumFUyibphQmMbdMKUfG3TFUfG2FUdG2Ko2NsKo2NsVRkbf2YUIxGxVFocKotDhQikbFCJVum9MKESpySEQrYUK6nChWVu%2BFCsp%2F28KFVWwoVAcKqoPbCheD%2BGFC%2FlihdXCq4HFC%2BuFV3LFV3LFC4NhVdy%2FDFV3L3xV3P3pirfLChrlvirRP4Yoa5eGKtVxVbyG%2BFDuX4YoWkjFVpOKFpOKrSfpxVaTihSJriqmx64qoN%2FbiqFf9WKoKTeuKpXONjgVjl%2BtVORKWMlqEivQ5UWb%2F%2FRPPzHuvTsLO3BoZZGcj%2FVFB%2BvMrKdnHxjd88XstS2YUy5cQkcjVOY0y5EQ2i7V8Mxyd3IiESF26ZG2dL1FDlkSxIRsR6ZaGBTWFumWBim8DdN8kGKbQtklTWFsKE0ibpklTKJumFUwibFUwjbphVHxtiqOjbCqNjbFUajbfqwqjI2xQjUYbYVRaNhQi0bviqKRsKESrYUIhWwoRKt0ySFdWwoV1bChWDHChVU4UKgbCqoGwoVA3XFC8HCheDhVdyBxQu5bYVXcsVXcsVb5YoXBvf5YVb5Yq7l9GKu5e%2BKHcvpxVvkO%2BFWuVffFDVffFWq4oW1%2FswoarirRI8aYoariqytOmKrSa%2F1xQsJxVSY4qoMTiqHf8fDFUFJ39%2B%2BKpdN3wKkF4oo2RKWH3B4ysPHKyyf%2F9JP8zbn%2FTLWAHaKCp%2BbMf6ZkZi043hd29Scwply4hLNycxZlyYBMooeSj3pmKZbuSIolo6DpgBZkKBFMuiWshERmlMuDWUxhbplgYlNoG6ZIMU2hbpkkJrC3TJKmcTYUJlE%2FTCqYxN0wqj43xVHxt0wqjo2wqjUbpiqNjfFUajdMKEYjYqi0bChFo3TChFK2FUUjffhQiEbthQiFbChEK2SQrhsKFZWwoVVbFCqGySqgbFCoGwoXhvuwoXBsKrw23XFC7liq7lhVsHFVwbpihvl92Krg2FXcu%2FjirfLFDuX%2BYxV3Lb%2BOFWqjFDXLwOKur74oar1woaLe%2BKra4q1WpxQ1WnU4qsJpihaTiqkx%2B7FVFjiqGc4qhJOnbAqXTHriqSXXQ98iUsK1D4ZAe5qMrLJ%2F9OO%2FmPcc9cuVrtEiLT%2FAGIP8cuzHdrx8nj1w25zBmXLgFGFeTDMTIXKgGT29uaLtmHKTmRivmhoMYySQlki0OZMS0yDk2y4FrKPiO%2BWBgU1hbpkwxTSFumSQmsLdMkhM4m6YVTKJsKpjG3TCqPjfCqPjbFCOjf3wqjo2wqjI3xVGo2FCMRvHFUWjDChGI3TChEo3vhQikbCqIV8KESrYUIhW74UKythQrhskhVVvffwxQrBsKr1bChUDeGFC8N2wqvDYoXBsKF3LFV4bFW%2BWFV3LFDfLpirYbCruWKt8sUO5Yq3Wnzwq6vvihqvvirg3fFDXLan3YUNE4q4HcYoW8j%2FAExVqv4YqsJ%2FsxQtJxVSY9cVUWO36sCodztiqEkOKpfKfuxVJ7k7HIlLCtV2IPgeuQKX%2F9SB%2Be5i%2Bu6ma1pMy%2F8AA7ZZmO7DHyeYzGrHMGZcuARliheRPc5g5S5uMM8trTZdu2YEpOfGKldW5AO2ThJZRY5OnE5lQLjSCGHXMiJaSEXEemWhgUyhbpkwxTWFumSCE3hIFK5MMUxjalPDCqYRP0wqmMb4qmEb4VR8b9MKo6NsKEbG%2BKo2N8KEbG%2FTFUWjYUI2N6YVRSPthQikb3woRKNhQiUbChEq39mFUQrYUK6sO2FCsrYUKwb3woVQ2FCoG6YVVA2FC8NhQvDYqvDeOFV3LpihcG6Yq3ywq2G6%2FjihdyxVdy9%2BuKu5dcKu5e%2BKtg4odyp7DFW%2BXv0wocW64oa5Yq6v9mFDVcVar0xVrlihsEYqtY4oUicVU2OBVFj4Yqh3OKoSQ4qgJT74EpRcdD2wFWG6vTifnkCl%2F9XmHnGXnrOpt43Mv%2FEjks3NGPkwBzVswMhcuDINGi53EQ981%2BeWzn4RZesW1gaCq1%2BEHNXLI7aGNL9QtOAbvt4ZbjkwyQphV7Fxb6czsZcKYSphQ5kxLjyCohy4FrKYRN75YGKZwtuMkGKcwN0ywITFW6YqjYn6YVTGNsKEwifp%2BrCqOjf3%2BjFUfG%2BFCNjbCqNjbFCMjf78Ko2N%2BmFCMR8KopHwoRSP74UIlHwoRKPhQilbChXVsKohXO2FCsrYUK6thQqBsKFUNhVUDfLCheGxQvDYVXA%2FTXFV4bChdy%2BnFVwbCrfLFDYbFW%2BW%2BKt8u%2BFV3L6Tih3Lr2xVwbfFW%2BWFDuXh1xV3LFDXLFXE98KGq%2F7eBXE4ULgcVWsdsUKBOBVhP%2B1iqgxr7Yqh3P3YqhZDiqAlP6sCUquDsd8BVh2r%2FYbIFk%2F%2F1uSebHrquo7%2FAPHxL%2FxI4c3NGPkwmtXzX5HMxsz8tx8723Xrvms1J9Jdnphcg%2BhLLSiwI4V%2FdivcjoeuaGWV6LHgtj2sWBXkSpFR4UzKw5HGzY6eZ6nBxbNnik6zLFjkqUJzLiXFkFNdjl4LUQi42ywMCmcDbjJhiU4hbplgYpgr7D8cKo2J%2BmKpjE%2FTCqPjfphVHxvhQjo2woR0b%2FR74qjY26YUIxHwqjEetMUIyN8KEYj%2B%2BFUSj%2B%2BFCJR8khFI2FCIV8KESj4UK6thVXVsKFZWwoVVc9cKFUPhVUD%2B%2BFCoG98VXhsKF4b32xVcG%2FDChdyxVvliq7lhVsNihdy%2BjFXcvxwqu5YodyxVvl3xVuuFDq4odyp9OKu5Yody%2FHFWicKtVxQvBxVpjtihQLYFU2Pjiqix%2FDFUM7fTiqFkbr3xVASHAlK7hutcCsQ1U%2FA%2B%2BQLJ%2F9fj%2Fm001fUh4XMo%2FwCGOHNzXHyYYm75rsrm43oXlBQ2p2g8WzU6s%2Bgu10Y9YfY%2BkaLzQ0UgCAbU4khyaHfp065yGXPR%2BL3mm0lj4MM8zaYY2kpRupB3%2BzuRSu%2BbDS5bdZrcHCXiet2xV%2Bn7WbvBJ0GeO7C7mOhOZ0C4Uwl5FDmREtBCqhy0FrKYwNuPfLAxITiFu5ywMEaH3AwrSNifFUxifChMI36YVR8b9MKEbG%2F9mFUdG%2FvhQjY3%2B7CqMR8UIyN8KEaj9MKEWj4UIpH98KESr5JCKR%2FxwqiUfbrhQiFf3woV1bCqIV8KFZWwoVVbChVD9MKqgfFCoGwoXhsKrg39uKrw2FC4Niq8NirfLChvliq4N1xVvl1%2FXirfLthQ3yxVvl9OKHA%2B%2FXCrfLfFDfLFXV674q1XFDuXj9GKtcsUKgOw98KrXagxQhycCqZbFVFmxVDu2KoSRuuBKBlbriqUztsfbIlWJaoaqcgWT%2F%2FQ5B50X09c1VT2upf%2BJnDn5lGLkwmM%2FGPnmtyudjekeTX46tY7dZAKD%2FM5qdYPQXb6L6w%2FRjQLNI7a3kXZZbZSFrWik1Ph3%2FzGec55kyI831nBAQgCO4ME86aVEEeSPbnViKUHTp9ObPQZjyLq%2B1NOKsPmnzJaem1eJB5jY9d86jTTt4vVQovPL2Clds2MJOunFIZFoT2zKiXGkFNdjlwLUQi42pTLAWBTWKbYZYCwpGRyVPzw2qYRPSmFUwifp%2BrChMI36ZJCPjfFUdG%2BFCOjfphQjUfCqNjfphQjI3woRkb4UItHwoKKR8KEUj5JCJR%2Fowqikfp74UIhX98KEQr4VVlbChXD4UKwfCqqr%2B%2BKFQNhQqBsKrw2FC8Niq8NihcG%2BnCq4Niq7lX2woXcsVb5Yq3yxV3LChdyxVvl70xVcD9%2BKHct%2BuFDfLFXcv8AbxV3LwxQ1yxV3LFC5XAG%2BFVjPX5YFUi2KqbNihRZsVQrtgVCyNilAyt1xVKLhtvfIlLFNQarBfcDIFL%2FAP%2FR5T%2BYcfpeY9WXcVnZv%2BC3%2Fjk9QN2OHk8%2BjPxfTmsyOfjZ75YmMWo2UgJqsqEU%2BYzV6oXEu00pqYL9NfKpSfTtLZeQMtvtzBB5bUrUGoqD888y1O05e99YjO8MT0oIfzNYrNBL8PPjViqn%2FMHrlulyUWU4%2BJiovlfzlp%2FoiUgA8GB%2BHoKHOu0WS3ie0MPDbyi%2FtqBjTx7ZtscnS5IsQuYqE7ZmQLhyigCKZkRLSQqI2WgtZRkbdMmGJTCN8kEJhE%2BSCExifChHxvkkI%2BN%2BmFCPjfphQjY3woRsb1phVGo%2BKEYj9MKEbG%2FvkkItH6YUIpHwoRSNhQiUfChEo%2BFUSrbdcKEQr4VRCv0ySFYPihVD%2B%2BFVZWwoVA3vhQqhvuwqvDe%2BKF4fCq8Nihfy998Kth%2FemKrw3vihsNhVcGxV3LfFV3LFDYauFVwbFDuWKruXvthQ3yxV3L%2FbxV1cUO5fdirXLFWq4oWluuKrC2KqTMfHFVFmPY4FQzNiqEkb%2FaxVASt92BUouX2OApYvdNymjXr8Qyspf%2F%2FS55%2Ba8HpeZbtqUEyRv96Afwy3Ujdhh5PJ4zRs1eRz8bLtGl9OeFq04spG%2Fgc12YWC7HAaIfpl%2BXN8t3oOhzJuUUIxqak71ALe1M8z7Rhw5ZB9V0shk0kT5M11WIPGQVBLj4h2oNq%2FcBtmNiLkaYvnTz3pQMFyyxhQwalDtyAr4eGdL2dm3DpO2NPQJeB3dsHiD02IBr886GMqLyk42GD31uVLbdMzccnByRSCRKH%2BGZUS4sgpDbLgWshEI2WAtZCNjfJhCYRvkghHxv0woTCN8khHxv0woR0b%2B%2BFCOjfChGxvhQjY398KEWj%2B%2BFCOjf3woRiP0ySEUj4UIpHrTChEo%2BFUSj%2B9MKESr4UIhXwqiFb8MKFZXwoVlfphVWD4UKobChUV8VVA%2BFCoHwquDYoXBqYVXhsVXcsULg344quDV%2BjCruXXFW%2BXviheG74VcG6YoXVxVvlirfL8MKG%2BWKu5e%2FyxQ7l%2FtYq1yPjirXLFC0tiqwtgVSZvfFVB2xVDO2KoORvE1wKl8zbHfFUnuX2ORKWO19S8QeFTkCl%2F%2F9OMfnNbcNRsbmm09rxJ90Y%2F1zI1IasJeDqaNmpyB2GNkWnSUZT4ZgZA52Iv0D%2FJXWTc%2BX4LfkGaAowQbsexqDWu9O39M8%2F7aw8OW%2B99N7By%2BLpuE9Hvd3Kso7PQDm21TWm1ATTuc0sBTscUTF5b5rsVmgkNN2DJv3FK1qR1oM2ujyUU6%2FEJ47fMdxa0E8RX4oHdGB6ijGg%2B7wzrBLke94SUKsdzB9SteLMKeOZmObgZYMOuYuJO2ZsJOFOKXMKHMiJaSHKctBayEVG9MmCwR0b9MkEI%2BN%2Bm%2BSQmEcmSDFHxvhQjo5MKEbG%2FTChHRydMKEaj5JCLR%2BmFUbG%2BEMUaj4UIpHySEUj%2B%2BFCJR%2FfCqKR8KESr4UIhXwqiFfChXV%2BmFCsH6YVVg%2BFCoHwoVQ2KqgfCheHxVUDeGFVwfwxQvDf7WFVwb3xVeGxQu5YVdyxVdy%2FDFDfLFV3LChcG%2FDFW%2BWKt8sUO5YVb5Yoa5e%2BKu5Yqt5f24oW8sCqbN4YqpM3XFUOz4qh3fFUFI%2FXAqXzPQHfbAlJLqTY79MBSlFiPUupGpsqn8crUv%2F%2FUb%2BctkZNK06747wyvE23aRQw%2F4jmXqB6XHwnd8v1o2anIHYwKcWT0IzAyBzcZfXX5F64sAFvIRxEoWhrvXem3bOR7dwXuHufZnU1cT1fXzyF0%2FnDdKb0Dd6nOSD2QjRY7q6iS1lDASFxzUdAtAaEGntXMrCakGWWIMCHzdrNn9X1i7jOwlAkHIbmvwnpt92dVgnxYwXh9Vi4MxDB9Vs%2Fiai1%2Fz%2BWZ2Kbrs2NgF9bFS23Xpmfjk67JFjk0ZBO2ZUZOLKKFO2XxLUQqo1MsBayEXG%2FSmSDFHRvkwgo%2BN%2FfCGKOjfJIR8b4UI6N%2Bm%2BSQjY398KEYj4UI2OTChGxyYWKNR8khFo%2BFCJR8khFI%2BFCKV%2FfCqIV%2BmFCJV8Kq6vXChXV8Kq6vhQrK%2FTChVDYqqh8KFQPhQvDYqqBsKrw%2BKF3LCqoGxVdzxQu5YVdy8cVX8sVbDYoXBsKruWKGw2Kt8vwxQ3yxV3Lpih3LFWuWFVpbAhaWxVSLYqps3XFUOz4qhHf3wKg5H64qls0nXfAlILyWgNciUrNGXkJ5T3IUfRvkFL%2F%2F1ZV%2BZFj9e8p6kAKvalbhf9gaH8Ccz8ouLi4zRfGU3wyt7HNRlDscZRtpJQjMHIHMxl7V%2BWWrmx1ZVEnDnQg1p7HcexzSdp4uODv%2ByM%2Fh5X3bp2qx3en20xowZaP86DYr1APhnCZMRjIh9Rw5RkgJd7VzdRs8iLUEKHaOh%2BKpoKnfb4qdNhk4RLKUwDTxvznAIr21vIxWPkYpaCgAbx2I6jN%2FoJXExLyfasOGYkOXJhWo2wkj5hOorXM7HKi6vLCxbz7UbTdts2GObrMsGG3UFCfbMyEnCnFJ5EocyIlokFIGhy4FqIV0amTBYEIyN8mGJRscmSYo%2BOTpkkI6OTChHRv03yQYo2OT3woRscnvhQjI5MkhHRSe%2BFCNST3ySEYj4UIlHwoRSPhQiVfpkkIpXGFUQj4UIhHwoV1f3woV1fFVYPhQqq%2FTCqqHwoVQ%2FwBOKrw2FCpzwqu5e%2BKFQP8ATiq4NhVeGxVeHxQ4NhVeGxQu5Yqu5YquD4UN8sVbDHxxQ3yxV3LFDuXj9%2BKtcsVWlsULC2KqZbFVBnxVDuxwKhHfrviqBkfbrilLJ5OuBWOX8tFYVyBSE50iPhZRk7GQlq%2FhkVL%2FAP%2FW6zqlot7Y3tmwqt1BJEf9kpGbIi3CD4M1SB7e7nhccWjdlYHsQaHNTli7HGVG3ehGYGQOZAsz0C%2BNpfWs3LiFcciPA5gaiHFEh2GnycMgX2d5P1xfqixk8mbiRIOJYEdDv40p93XOO1mDe30HszVgRpnf19pl5NL8DgiKMsSabE1INT4VzCGOnb%2BPxDnt0Yl5hiF9YzIn2ioZBT4hQChr47Zn6WXBIOp10fEgQGARObm2UsPiX4G%2BamhGbOQ4ZOlieKLGdRtQedFp361zJxzcTLBg19bbmgzOxycDJBjFxDQnbMqMnElFLmWhy%2BJaCGlOWgsCEQjdMmCwIRkb5IFjSOjkyYYo2OTJMUdHJhQjUkySEbHJ92FCNR8KEdFJv1yQYo6N8KEWknvkkIpJMKEUj%2F7eFCJR8KESr4VRKvhQiEfpvkkIhXxVXV8KFZXwoVVc4VVVfChVD4qqB8KF4fFV4f8AtwqvD4oXhsVVA2FV3LwxQuDYquDYVXBsULg2Krg22KFwb3xVvn2wody964q3y98Va5Yoa54q0WxVTLYoUmfFVBnpXAqGd%2FfFUHI%2BKoCWTrgSlM8uxwKxm8kLuqDfkwFMgWQZzAnowRRfyIFP0DAxf%2F%2FX7O42r4Zs3CfGf5n6WdN806kAnGO5f6xF7iUcj%2BNRmv1Ed3Mwy2edxNQ5rcgc6BTy1loVIO4O2Ykw5cC%2BhvJetk21uTJTjRWX3Gc%2FrMO5el0Go2G72qDUhJGrq3w8eJBHYb7n3H%2BffNOcdF6OOexbct36sfpF2oAahutWA33PTbJxhRtEsnEKYKpNrqNxbnaKerxk%2FwAw6%2F1zZfVAHudP9GQjoVK%2BiVq0G3Sm2HGVyxthl%2Fb9dvfMzHJwMkGH3lvQnbMyEnCnFIJoiCcyYycaUUGRTLgWkhcrUywFrIRCP75YCwIRkb075JijY5PfJBijo5OmSQUbHJ0yQQjY5OmFiUaknvkkI2KTcb4Qgo%2BOTJMUYj4UIpJOmSQilfChEo%2FTfChEo%2BFUUj9MKESknTChXV%2FfCqur4UKyvhQrK%2BFVZXxQqh8Krw%2BKF4fCq%2Fniq8PhVUDYoVA2FV%2FLbY4oXBuvhiq4N2xVcHwoX8vpxVsNihdyxVvlhV3PFDfP3xVrnihotTFVpbFVJnwKpM%2BKFBnxVCO%2FhiqDkk64EpdLJ13xVJbqbY75EpSiwX61qkKdVQ8m%2BQ3yCWf8sLF%2F%2F9DtLbjxzZuC%2Bfvzt0kvBpuron2eVtOw%2FwCCT%2BOY2ojYtvwnenzTXi2avIHYQKZW8lKZhzDlwL0jyhqbQTtByID%2FABL8xmt1eOxbtNHl4TT3XTdUZkUFgGAoBTx7%2B2aXJiehw5k7S%2Bq6%2Fs%2B1d69um22V8DkDJulGsEkx3SUMkJDIOhIXqNvbbMjT9x6uNqf5w5hr1xPGsgaqspP0dO%2BS4aNI4uIWkt3HyBY%2B5Nfvy6BaJhid5APi2zLhJwpxYvdQ0J2zKhJxZxSeRKHL4lx5BD5cC0kL1amWAsCESj5MMCEXHJ0yYYlGxyZIMSjUkyTEo1H98KEbHJkkI6KTfrhDFHxyZJCMR8kEItJMLFFI5ySopHwoRKPhQilfChXR8KESsnvhVEq%2BFCur%2B%2BFCsr4VVVfFCoHwqqB8VXh%2FDChUDdMVXh8KqgbFCqGwqv5YoXBvoxVdyxVdyOKF3LcYVb5YquDYob5Yq7lih3PFWue2KtF%2FHFCwviqkz9cVUWfFUO7%2FAI4oQjydd8CUDLJt1xVK5pRvgVIL2egY1yJSi%2FLERZrm7Pf4EP4nIhSy4thYv%2F%2FR7TXNm4LEfO2jjWvLeqWQXlKIjNb%2BPqR%2FEAPnSmQnGwziaL4aukMUrqRQg5qskXYQLcD0IzDmHLgWQ6fdNBNHKpoVIzEyRsU5eOVG3tWlaiHjidW2YVHtXfNNkhu7zDk2ZTHf0IblU0qa9Mo4HLGRWa6DoQB1oNunfCI0kzsJdZ3vpSSWrmij4oj7N1p8svnGxbRjnwnhV5pgeQO%2F%2B1kIhslJI7ojcDMiLjzY5dIDXMiBcaYSCdKVOZMS40glrihy6JaJBTr75aC1EKqvlgLAhEo%2BTDAhGRydMmGJRscmSDFGJJhQjY5K5JiUfFJkggo9JPfJMUWkmFCMSTpkkItJMKEWj5JCLR8KESj4UIhXwoRKt0wqiVauFCurbjfChWV8KqivihUD4VXh8VVA%2FwDt4UKoY4qvD9MVVQ2FCqre%2FwBOKr%2BW38MKFwbFV4bFV3LvXFDuWKruW%2BFW%2BeKG%2BWKt88UNc8VaL7YoWF8VWs%2FbFVFn74qoO%2BKoZ5NsVQckmBUvll64qlNxNsflkSli1%2FPWqg%2FaNBkSkM70iH6rYW8Z2Zhzf5tviGJTPnhQ%2FwD%2F0u0Zs3BWsARQ9%2BoxS%2BKvzI0I6J5kv4ETjbyt69r4cJNwB8jUZr88KLmYZWHnqNQ5gTi5sCmkElKZiSDkxL0Hy9qJKegzbp9n3Ga%2FUY97dlpsm1M4iu6jrSo%2FjmIYudGaKS9I6k%2BwwcDMTQ11cEMsyH4kNfmO4y2A6Nc5dVYXwkQMCKHfr44OCiyGS1CWflU1G%2FXJAIMkrmcNloailE4Brl0S0yCVSr1y%2BJaJBCN1y2JaiGgafRloLUQrI%2BTBYEIpH98mGJRccnvkwwKNjkyQQjY5OmSDEphHJt1yQYo5JOmFCMST3yQYoxJOmFCNjevXJIRaP0woRSPkkIpXwoRKPTCqIWTChErJhQrLIcKFdZMVVRJhVUD4oXh8Kqiviqqr4UKofFVQNhQrK2KqgbFDfLCq8Niq7nihxb3xVwfFV3P3wodzxV3P%2B3FDueKrS%2BKrS%2Ff8MUKZf3xVRaTFUO0nXfAqFeTFUDLLt1xVLZptjvgSkd1Psd8iVSexjN%2FqcMX2kVucnyGR5lJelhwBTsBk2tvmCetK9W8MVf%2FT7PmzcF2KvFfzl8v%2FAF7SINZhSs2nN6dxQbmJzsT8m%2FXlGeNi27FKi%2BT3UoxHhmsnFz4FEQyUOYk4uVAp9Y3RglRwaU6%2B4zGyRsOVjnRZ7Beh0VlNajbMAwp2EZ2jBd7bHvg4WfGvN1yFK1wiK8ShHdFGKV%2BE7r7HuMsMbYiVIgXPYnI8LLiUXl9%2BuSAQShJGrkwwKAly0FrkEC%2B2WgtRCgTloLUQuVssBayFdX75MMCEUknTfJhiUZHJ0yYYlMInyQYFHJJkghGxv0yTFGxvkkI%2BNsIQjUkyTFEo%2FTChFK%2FvhQikfJIRKP74VRCvhQiFf3woV1fFCusnvhVWD4VVA%2FvihUD4VVQ%2BKFVXwqqhsVVVb3woVg3hiqoGxQu5e%2BFXcx44oXh8VXFqjFVvLFW%2BeKHc%2FcjFXc8UNc8KrS9fbFVhfAhSaTFVBpMVQzyYqhJJffFUvll264FSmeelcCWOX11QNv0yJSnPle3Kwy3rj4pzxjr%2FACjr95wxDGRZaHyTBvmveoO9T1%2BWKv8A%2F9TspObRwXYFQWoWcOo2V1Y3K8oLyJopB7MKYkWkbPhLzLpE%2Bi6re6fOtJLWVkJ7EdiPYjfNZlhRc7HKwkCkg5hzi5cJJhDJmLIOTEsi0%2B8KERk7Hp7ZjZIdXKxTpPFuD45TTfxKy3HvhpPE08vIdaEb4QFJXJc1FO464TFRJV9eo640ytTMlcNItRZ65MMShXyYYFDk75aC1kLOWWAtZC9XywFrIRKPU5MMCjompTJhgUYkmTDFHRyZIIR0bV75IMSj426ZIMUakmFCLSTJIRaPhYotJPfCqJR8LFEo%2BFUQr4UIhXwoRCvhVXV%2FfChVWTbCqqr4oVVf33wqrK344oVlbCqqrYoVQ%2BKqobChUD4qvD4q3WuFDfP36YquD4qtL4oa54q7n74q1zxQ0ZMVWl8VU2k98VUWkxQh3kxVCvLiqCkm674FSyabqcCUlurild8BVjUhe8uorWPdpWAGR5p5PULeNLaGKCPZIlCr9GWNRV%2BfvhV3P8emKH%2F%2F1exV%2FHNo4LVdvn4Yq6uBL5%2F%2FADo8terHb%2BYraOpWlvqFB%2FwDn9X3Zj54WLbsMq2fNLDic104udAqkb0OYk4uVApjFIRQg5SQ3Ap7Bdc1AJ%2BIbHMeUaLkxlaJE243wUytUE3vjSbd6tDUdckEWqrN740y4l%2Fq1740m2i9R1w0i1NmyQQVFjkwxKiTlgay2G3ywNZRKGmWBrKLRz2yYYFGRtkwxKPjbpXfJBiUfG9Kb5MMUZHJ74WJRiSZJCMSTChFpJkkIpX98KEUsmFCJSTChEpJhQiFk74UK6v0wqrLJhQqiTFVZZPfChXV8VVlcYUK4bCqqH7YoVQ%2BKqgfbChUD4qvD4qvD1wodyxVvnirueKFL1MVdzxVr1MVW%2BpihYZPfFVJpMVUGl%2BnFUM8uKEHJNgVASzbYEpTPcdd8CsbvbviCa5EpTLyraF2l1KVdt0t6%2F8ADH%2BGSgGEyzjl75Ywdy%2FsxVvlTFD%2FAP%2FW67Xv4ZtHBdU4qtJxSgNTsbfVdPutPukD295G0cg8K9CPcdcBFhQafDnmTRbjQtWvdMuRSS2cqGpsyndWHzGa7LCi52Odhj1aHMKcXKgUVFJXvmLIU5UTaOilKkUOQItmDSYpPyHXfvlZjTcJWrCX3wUm14k98K2uElP44aTaosuNJtf6mNJtxf3wgItYXyQCCplssDAr1y0BrKurZMNZRKE%2BO2TDAo2N6UpkwxKMjfbrkgxKMR%2FuyQYlGJJkkItJPfChGJJ0yTFFpL03%2BWFCLR8KEUj9MkhEo%2FvhQiVf3woRCvhVXV%2FffChVWTFVVX98KFZZMUK6ydMKqyy4UK6ydN8VV1fChWD4qqB8KFQP9GKrw%2BKrw%2BKG%2BeFWueKHc%2B%2BKqbPQ1xVZ6nviq0yUwKsMtO%2BFCmZPfAqk0vvXFUO83viqEkm2PtiqBlmFOuBUsmuKV3xVI7q6pXfIlLHf3uo3kVnDu0rAH2Hcn5DfABZUmnrFrBHaW8VvEPghUKPo7n55cA0kokNT%2BmKHcuu%2BFXcq7dcVf%2F%2FX6wW6ZtHBW8sVcWxVaWxV4z%2BbnlQ6npo8wWcRN1pi8bwKPtQmpqfddz8q5TmhYbcU6L5cdfDNbOLnxkpBihp2zEnFyoSRqSe%2BUENwKJSUjocSLZA0iVlyumwFVEmNJtU9T3w0trhJ74aW14kxpNr%2FAFMIC21z98mAxJXqfpyYDElVFTkwGBKqu2TDAq6t75MMSiUfJBBRaOMLEotH98kGKLSTJMUYkmSQi0kwoRaPkmKLSTChFJJ74UIpJMKESj4VRCvhQrLJhQrK%2BFVZX6YUKofFVYPhQrK%2BKolH98KEQr4UKofFVQPihUD4VX88ULg%2BKrhJ774q3zwoWc8VWs%2B3XfAqgZMVWGTauKqZlxQpNLiqg02KoZ5vA4qg5J%2FfAqXTXHv9GKpNcXNK74FY1e3lAd9%2B2RKWXeUtMaGBtRnX99cikIPZPH6f1ZZAU1zLMq9cmwbrirq4obrir%2F%2FQ6kXLGrMSQAKnegAoB9AGbVwVpbFVvKlMVWluorilSkCSI8cih0kUq6kbEHYgjAr4%2FwDzA8rN5Y1uRIkP6MviZbB%2BwH7UdfFf1ZhZ8dOXinbz91zBnFy4yaRyKDMWUXJhJFK%2BVNqsr4atbpWWTBwshJUEmNJtfzOEBeJUDHCIrxKgY9MmAx4ldQMkIoMlUGmSpja4H3wqqK2SQrK2FirK2SCCiUfJBiUUj5IIKKSTJMUYknvhQjEk6ZJiikkwoRaSZJCKSTChFI%2BFCJSTChEpJ74UK6v3woV1bCqsr4oVQ%2FbCqqr4oRCNhQiFamFVYSe%2BKFUPhVVEnviheHxVd6mFC8SYq36nv88Vb9TbFDRf3xVZ6la9sVQ7SbkVxVQaXFVIzYqotN74oQ7z%2B%2BBUG8%2FviqAluMCpVPc9d8bSkF3eUB3%2BnIkqoaHpz63qIVq%2FVIPjuH9uy%2FM4YiyiRp7IiqiqqgKqgBVHQAbAZc0rq7U7DpihrCrf0Yq7v74q%2FwD%2F0elcv9rNq4LXKn8cVcW8cVWFq9ehxVaWxVi3m3y7beaNHuNOmASahezuKbxygfCfl2ORlHiFMoyovji8s7nT7u4sL2Iw3do5jmjPiP4HNdlhRc6E7CXutNxmJOLkwk5Xp1zFlGnJjJEK%2FwDt5FmrK%2BSDFWVslS2qgjDS2qKSTQYQFJRSCg98mAxtUFe2GltUDf7WKqgOFVwwqvDYoVlb%2FaySFZX98kEIlXwsUUj%2B%2BSCEWj98kxRSSYUItJOmSYopJMKEUknvhQikkwoRSSdMkhEpJ74oRCvhVWWSmFCssmFVUSf2YoV0fChEpJhVEB%2FfFCqJPfChUEmKqgfCheJMVX%2Br74oXCTFW%2FUphVv1PfFDvUxVTeSm%2BKoWSTcGuKoV5cCqDTDxxVQefrviqEknp3xVAy3HXfAqWTXVK70wKkd1eUrvgVIazX9zHbW6mSSZgqqO5OAbpJp7boulRaRYx2yCsh%2BK4lH7Tnr9A6DLwKaCbTamFDqYocRTCrdMVdTevXxxV%2F9LowYdCSOtKZtXBWcvfFWq%2BHfFVpOKrSdqV2wqtrgV5B%2BaHks6xanXdMirqlin%2BkRKN54h%2FxsvbKsuPiDbjnwl82CjrXv3HvmunGnOjJDupU7ZjTg3xk5X98xjFyQVZWwBKIR8sDFEJVumSAQSjEFPn45MBiSrA5JFqgOK2v2ONJtcMaW14OKr%2BQp1wqvXxwhVZThQrq1MkhXV8LFFI%2BSQikfpkmKJST3woRaSdMKEUkmSQiUkwoRSSdMKEUknvhQrrJhQrrJihXVsKqyvhQrq%2BFCJWTCqsJPfFCqJPfFVUSYULxJ74qu9TsMUNhziqoJfvwobEle%2B2Kt%2BphQtMuKrDL4nFUJNJQV7YFQLzdd8VQrT9d8CoZ7j3xVAyXFK74ql011Su%2BBUluLyld8CWPXN20jcVNScir1byZ5d%2BowDUryOl5cL%2B5RhvGh%2FicuhGmqUrZ5TJsG6fq3xV1D1xQu4t2HQEkdcKuHQ7VqNj4Yq4Lir%2FAP%2FTn%2FLNs4LVaDFWiduo%2BWKtvI0js7sZHclndjUknckn3xVSr9J98VW1%2FwBrFWifpr1xV84%2FmX5HbTLiXzHpENbCduWpWyD%2B6c9ZAP5T38Mxs2K93IxZK2LyIgOtRuDmvlFzIyQjoVPt45jzg3xk0rUOUEU3goqLfc9MnEIJTGMgZaGsopThVUHb9eFVVcVXjCtrxiq%2FFNtUIII3xpbVFPjiFVRWlRhQqqckhVVumFCIR8KEQr9N8khEJJhQiUkwsUUknvkkIlJPfChFJL74UIpZemFCusnvhQiUk%2B%2FCqIWTChXWT364UK6yYqrLJhQrCTFCqJPfCqoJMUKgk71wqvEgxQu9TFW%2FUHWuFDfq4q0Zvf6MVWmXvXFCm0w8cVQ00tVO%2BKpVJPTauBUFJce%2BKUFJde%2BBUuluvfFUouLyld8FqkNxdljQb16DIpZ55I8sNdyJq9%2FH%2Fo6GtrE3%2B7GH7W%2FYdvHLIRa5y6PYwO2WtS6ncb%2B2Kup3riq7jt1%2BeKHcRTata9KYq3Tx7YVdxBqa7joPH2xV%2F9Sd1zbOC1X8MVarirWKramvWmKuYr%2BySRQdRTem%2Fc98VWE%2FRXFVKaKK4ikgmjEsMqlJI2FQVIoQRir5c89%2BSZvK1219Yo0ug3bfARubdz%2Bw3t4H6MxM2LqHKxZOhYAyhhUbjtmDKLlxkhhGAx8cpMG0SVlNMjTO0TG2KotHySESpwoVRhW1QYVXjFK8YqqDCq7FXUI6Y0tqisSNxiFVVJySFQNhQqhqYVV1c4WKuslMkhEpJ74UIpJcKESkvvhQiVkwoRCy%2B%2BFCJWSnfChELJhQrrL74VV1lwoVlk264oVRL4YVVRJ74oVRJhQqCX3xVcJcKF3q%2B%2BKt%2Btiq31sUNet74qsM3XChRaf3xVCS3HwnfAqVzT1B3xSlUtzStTgVLprrrvgVKJ72ld8CUlnuyxoDX2wKzHyf5Vl1ucXl4pXTYW%2BM9PVI%2FYX28Tk4xthKVPe4okiRI41CJGAERRQADoBlrSrcfHthVsD3xVvj4d8VXcfbFW%2BJxQ3xHhU9sVdTFX%2F%2F1Zx%2FmBm2cFon%2FbxVqtcVaqMVaJxVafHFWtzXfp1xVaT%2BGKqF3a29%2FbzWl5CtxbXClJYXFQwO2ClD5d86eSrrypdtcW6tcaFcv%2Fo9x1MJP%2B65PD2PfMTLircOXiyXswdkB3H0HMOUXKEnGPao3ysxZiSwEg5CmdohHxSjUfpkkIlTXChVGKrwcKqgxVeMKrxiq8YVXDfGlXiuFV4PTthVeDiheGwqqq2FCur4UK6vvhQiFkwsUSr4VRCye%2F04UK6ye%2BFCIWTChXWTChXWXChXWX3wqrrNihUEvvhQqCXFV%2Fq%2B%2BFDfrgbVxtWxPXFDXre%2BKtet74VWGf3xQptP74qh3uPfFUDPc%2FD1wKlUt113wKk91dd64pSOe%2B675G00lMl0ZGoNz4YFZp5Q8pXGvTi4uA0WmxNSaYbFz%2FIn8TlkY21ylT6HtraG1git7aIRQwqFjjUUAAy1qRagE9Nj70%2BWFDYHhiq4Dviq%2FjUk%2BPbFVwXtirYXw%2B7FXccVb4Yq%2FwD%2F1prXx75tnBapTFXYq1iq36MVaPXxPcYq11qa0p098UNVr%2FXFLeKqN1a299by2l3Cs9tcKUlicVBBwFIfNHnTyHdeWZXvLFXutEkOz9WgJP2X9vA5iZcVbhyceW9iwJdtxup7ZiEOUC5ogw5LkDFkJKBVhUbjwOVkNgKtG5Gx6jviEo6N8khFKcKF1cKr1cd8UqykHChVGKrhhVeBiq4YVXYquHtihuuFV4OFCoGwqqq2FCssmFCusmFCusmFCIWTChWWU%2BOFVdZffFCssvvhQrrL74UKwmG2%2BKqgmwoXib3xQ361R1pirYlA6b%2B%2BFW%2FW98UNev74ULTP74qpNce%2BKqD3HvihCvddcVSy5vKCld8CUkmvOu%2BBUlu77Y%2FFv2wWlKDLJM23TuT0wK9E8m%2BSp9bkW7u1aDS0O7nZpiOy%2B3icsjC2uU6fRFrawWkEVvbRLDDEAscaigAGXNKLA6YqvA%2FDFVwX78CrwtcVX8dvniq8LhVvjgVsKNwRXwwq7jgV%2F9eZ%2BPfNs4Lv1YVaJJ3PbbbbArX4VxVr9WFDgSOlO43oeuBVvz2xVqvv1xS4YqqDpt08MCtSRRzxPDNGssUqlZI3FVIPYg4EvAvOn5ay6cZdU8vxNNY7tcaeKs8XiU8V9uozGyYuocjHl6F5KCVNafNTmKY05QKpwWQVHXuMgQyBpQMbL0yBizBXqSPowJRaPklV61GKFhJGKVyyEfxxSiEl8cKEQr1woVA4wqvDDtiq8HthVfhQu2OKupiq7cYULwcVXq2FCqrYUKofCqsJPffChVWQ7YUKyy4oVRLhVWWX3woVRNihUE3vhVcJsULvWwq362KGjN74ULDP74qptcU74qoNc9d8UISS6HSvzxVBS3fEHfArHrq%2FAJJagwWlIZtQaQlUOC00poGl%2B0Kljt4%2FLDSCXr3k78v5Lv0tR1mMw2go0Fkdmk8C3gPbLYwapT7nu8EMcMaRRIsccYCpGoAAA6ADLWpEqMCqlPpxVeBiq8DfAqoF%2B7FV4Xpiq%2FgR1B7H6DirfHFW%2BO%2FtiruIr88Vf%2F%2FQmebdwWuu2Ku698CrThQt69sVar%2FbirifbbFWvlgVvf2xSvFaVptWhNMCqi4pVV%2F28CXl%2FnD8tbXV%2FV1HRVSz1E1aW36RTH%2FjVj45TkxiTdDIQ%2BfLyxvNNuZLa8ge2uYTSSJxQj%2BozElGnJEgViMr7HZvDIUytcYa9MBiyBWemQfDI0ytUUkbHFVXYjFVhWmNMrcDiqsrHxxVVBOFCqrEYVVlbChWVsVVRhQuwq3ihcMKtgYqu%2BnChcCcVXhj44UKgY4UKgY%2BOFVQOfHFCoH98KqgkxQvEuFC71vfCh3re%2BKtGfFC0z074VUmuPfFUPJddgcUIN7v3xVAyXXU1%2B7AqT3l8wU0PyGAlNJG5kmNXNAei4ptH6fp1zfTx21nbvPPKaKiCp%2F2skIsDJ795S%2FL620v077VQt1fijJD1jiP%2FGxGXRhTRKdvU0WlKdu2WMFcDAqqB0xSvA2wKqAYqvA2%2FDAqqB4bYqvAxVcB%2BPfFV1PbFW6AEivKh6jv9%2BKupir%2FAP%2FRmObdwHH54q4nffFVpoaU603%2B%2FFVte%2F4Yq7riq3FXeG9TgVd0J6YquXrvt3rgSqLilWGBKuvf374EpD5g8r6V5lt%2FRv4aTKP3F4m0iH2PcexyEogs4yIfOnmjyHq%2FlxmmKG70%2BvwX0QNAP8sfs%2FqzFnjIcmGQFhqSMnwvuPHK2aLUK48RgpNuMXfqMFJtr06f0wUm3FCMaTawrgpNtgHFbVlOFVdCp6%2FfhQq8QemGltcEI6YraqtcKFQA4qvAOFC6mFW8VbxQ2MKrhiq4HChcDirYbChcHwq36mKHer74Va9U4oW%2Bt7%2FTiq0z074oUmuPfFULJcnoD8ziqDkuTTr8xihBvcHuaDFUvlumaoT%2FAILsMVQgDOdtyf2jhAQSzTy35K1PXWWUKbWyr8d3IDQ%2F6g%2FaOWRhbXKdPoDQfLem6BAIrKH96w%2Fe3L7yP8z4ewy4RppMrZOgp%2FDCxVgOnh44pVQMVVAPxwKqAHAlUG3XFVQDFVQDpgVeBiq%2BmKtgYqupirXhir%2F%2F0ph3zbuA3XYigoTX329%2BvfFVvtTFWhU1%2BVdzToPfFVpxVr8MVa2264q7FV3ttgVeDvilUX9eBKsv%2BYwJVlOBKqvbAleyJKjRyIHjccWVhUEHqKYEvKvM%2FwCVlhqPqXeiMun3RqTan%2B5Y%2B38v6sqliB5NschHN4Pqmh6roVw0F%2FayWzj7JYfCw8VbocxzEhvEgULFcCtH%2BE%2BPbIpRgCP%2FAJJPfthpbcYyOo28cjSbW8AeoxpNrDF4YKTbXpnFbXAHCqqvIYqqhj4YUKob2wqqA4qv8MKHVOKrq4q3XCrdcUN1wq7FW64UNcvvxVrlirRb3woWl8VWGSmKFJpdsVUWmOKoZ5j41woQzSk4qhmYnFUO4Lmgq3thpFpjpmh6hq0ywWVs87d%2BIoqjxJ6DJCNsDKns%2Fl38ubKx4XGqlby4FCLcf3Sn3%2Fm%2FVl0YNMp29PihjjCoqiNFAAVRsAPAbZY1ogCmKqoxVVH6sVVRv17YEqq1%2BXvgVVQlSCpoV3BGxB9sVXr%2FAJjAqoPbFKoMVXjFVw7YFbxVugxVvFX%2F05eM27gNVpirjirVe%2Fh2xVaeuKtdsVdtirX8MVXdsCrxv02xSqL9%2FvgVWXAlWXx8MDJWGBKqMCqg8emKUJf6dY6nbtbahax3ULdUkWtPceH0YCAUg08b8w%2FlIrGS48v3AFan6jMfwR%2F65TLF3Nscve8fv9J1XRZjBfWstq46K6mh%2BR6H6MpMSG4EFRiugCA23semBUavpSDrxJ%2B7GltzQsN6VHYjGk2t4jBSbdxGGltsLitrgBiq8KMVXAYVX4odirdcKt4q3XChquKurirRNMKreQ8a4oWlvbFVhY4qpl%2FfChSZ%2FpxVRZ%2FDFVAsxxQpkE4VW8SdhucNItHWOjX%2BpSiK1t5J3P7KDYfM9B9OSEbYGVPUNE%2FLRV4TaxLWm%2F1SI%2F8AEn%2Fp9%2BWxg1ym9Ss9OtLCJYbO3S3iX9hAB9J8csAaiUcFp9GFC7CheDTvSvXFV4xSqjAqoMVVh49PfAqqu1MCVQYqvGKqnjgVd1IxSv8Ao%2BeKt1xVv%2BOKrq16Cmw2xV%2F%2F1Jea%2FLwzbuAtOKte%2BKur7U98VWn6B8sVa26djirq70xV2Ktg%2FwC3iq8d%2FbrgSqDtgVVT78Uqy4Eqy4Eqo%2B7AlVGBK4dvfFV2BKEvLGz1CFoL61ju4W6pIob7q9MSLUF5brf5T6ZdF5dHuDYSk7W8lXi%2Bg%2FaH45VLEDybBlI5vKdV8leYtDLNPZPJAv8Ax8Q%2FvI6eJpuPpGVGBDaJgseS5liNGU7df9rIskYtxFJ1Ar92KFTgp%2By30HGk216bDtjS26mKupireKt4VbxV1cVdXFWq%2B%2BFXVxQ1XCqw0PXfFVtadBQYqsLYULCTiqw1xpCziT2wra0pT%2BmGkWuWF3NFTDSLZHpnk%2FWNTKmK1ZYm%2FwB3SfAlPp6%2FRkhC2BmA9I0n8uLG34yajKbqQUPop8KfSepywQazN6Ba6dbWUYhtYEgjXYKgAGTAYEov0wO2SQ0V%2B7FC04UNf5jFVwxVeP8AM4qqDqMVVh1%2FjgSqDFVUdh08TgVUBxVf74Ergdq4quriq%2Bv0YqvWpBIp8Iqd%2FwBWBWwcVbxV%2F9WXfx7Zt3Aa98Va7dfkPbFWj%2FmMVa%2B7FVpxV23TFW8Vd%2BFDgVeNziqoMCVdeND41G3anev%2B1ilUBwJVl%2BW2BKqMCVQHwwJVAabjcj6cVdX6MCrsVdt9OKXca1Boa9RirGdV8n%2BXtX5Nd6dGsrf7vhHpv86r1%2BnImALISIec6n%2BUSnk%2Bk6lTwhuV%2FwCN1%2FplZxdzMZe9gl%2F5G806YWLafJPGP92QfvVP0Lv%2BGQMCGwTBY4zXVuxSaFkYbMrAqR9ByKVy3KnZgRitKgkibowriq%2F4exwq3T3xW2uOK24jFbW0OK21TFDW%2BFba4nFba4k4UW1wONLbXDxOGltrgPnjSLVI7aaUhYoixPQAVP4ZIBFsisvJmu3tCLN4kP7UvwD7jvkhAsTMM00%2F8tFHFr%2B7%2BccI%2FwCNm%2FpkxjYHIznTvK2j6dxMFkhkH%2B7ZPjb7z%2FDJiIDAyLIVgAHTbJMVT0gPkMULSoH0YVU2Hf8ADFCkcKqRxQ1irYp4b4quHbFVZcVVR0xVVB8cCV4xVUU03G3bAq4E%2FP5Yquriq6vTFK%2Bv%2BZwKvG5UAipNBvT8TirdcVXVxV%2F%2F1pd%2BvNu4C35YVargVrt8sVa8fbFDX%2BdcVcf9vFWv1eGKV2%2BKrh2wKqDx%2B84pVQe%2BBKspwJVl%2BWBKqO3vgVUHf2xSvr%2FbgSuGKt4q2MVbGKrhirdB1pvgS1wO9DiqDudNsr0cLyyhulPaSNW%2FWMaW2KXv5eeVryrCwa0Y%2FtQOy%2F8ACmo%2FDImALMTLF7v8pLB97PVZYf8AJmQOPvHHInEEjKWP3H5TazHU21%2Fa3A7VLof1H9eROIsvFCTzfl35tgrxsxMB3jlQ%2FrIweGU%2BIEtl8o%2Ba4ah9IuTTqVTl%2FwARwcEk8cUG%2Bh%2BYo9n0i6Hzgf8ApjwleIKJ0vWx10u5H%2FPF%2FwCmPCVsNjS9ZP8A0q7k%2FwDPJ%2F6Y8JWwrJoevSbJpF0T%2FwAYn%2Fph4SjiCNi8qeZpacdInH%2BsnH9dMlwFHGEzi8geZ5acrNYa93kQfqJw%2BGWJyBNoPyy1Vt7i8t4h3ALMfwAyQxI8ROrb8sbNKG61CSXxWNAv4ktkhjDE5GQ2nkfQLah%2BqG4YdDKxP4CgyQgGJmWR2%2BmWlqAttaxQAf77QL%2BoZKmNo4QAdsKFQRAdsVXhBirqAdsULCMVUmwqotihQbCqytOmxxQsxVv6aYquHthVUGBVRcVVlNfliq8H%2BzFV4NP64FXV74pXV3xVuuBV%2FLFVwOKr64pXA4Ff%2F9k%3D%22)%7Dasync%20loadDefaultFont()%7Bawait%20this.loadFontTexture(this.DEFAULT_FONT_GLYPH_SHEET)%2Cthis.fontMetrics%3Dthis.DEFAULT_FONT_METRICS%2Cthis.initFontMets()%7Dasync%20initText()%7Bthis.fontShader%3Dnew%20h(this.gl%2C%22%23version%20300%20es%5Cn%23line%20576%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnuniform%20vec2%20canvasWidthHeight%3B%5Cnuniform%20vec4%20leftTopWidthHeight%3B%5Cnuniform%20vec4%20uvLeftTopWidthHeight%3B%5Cnout%20vec2%20vUV%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ct%2F%2Fconvert%20pixel%20x%2Cy%20space%201..canvasWidth%2C1..canvasHeight%20to%20WebGL%201..-1%2C-1..1%5Cn%5Ctvec2%20frac%3B%5Cn%5Ctfrac.x%20%3D%20(leftTopWidthHeight.x%20%2B%20(pos.x%20*%20leftTopWidthHeight.z))%20%2F%20canvasWidthHeight.x%3B%20%2F%2F0..1%5Cn%5Ctfrac.y%20%3D%201.0%20-%20((leftTopWidthHeight.y%20%2B%20((1.0%20-%20pos.y)%20*%20leftTopWidthHeight.w))%20%2F%20canvasWidthHeight.y)%3B%20%2F%2F1..0%5Cn%5Ctfrac%20%3D%20(frac%20*%202.0)%20-%201.0%3B%5Cn%5Ctgl_Position%20%3D%20vec4(frac%2C%200.0%2C%201.0)%3B%5Cn%5CtvUV%20%3D%20vec2(uvLeftTopWidthHeight.x%20%2B%20(pos.x%20*%20uvLeftTopWidthHeight.z)%2C%20uvLeftTopWidthHeight.y%20%20%2B%20((1.0%20-%20pos.y)%20*%20uvLeftTopWidthHeight.w)%20)%3B%5Cn%7D%22%2C%22%23version%20300%20es%5Cn%23line%20593%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20highp%20sampler2D%20fontTexture%3B%5Cnuniform%20vec4%20fontColor%3B%5Cnuniform%20float%20screenPxRange%3B%5Cnin%20vec2%20vUV%3B%5Cnout%20vec4%20color%3B%5Cnfloat%20median(float%20r%2C%20float%20g%2C%20float%20b)%20%7B%5Cn%5Ctreturn%20max(min(r%2C%20g)%2C%20min(max(r%2C%20g)%2C%20b))%3B%5Cn%7D%5Cnvoid%20main()%20%7B%5Cn%5Ctvec3%20msd%20%3D%20texture(fontTexture%2C%20vUV).rgb%3B%5Cn%5Ctfloat%20sd%20%3D%20median(msd.r%2C%20msd.g%2C%20msd.b)%3B%5Cn%5Ctfloat%20screenPxDistance%20%3D%20screenPxRange*(sd%20-%200.5)%3B%5Cn%5Ctfloat%20opacity%20%3D%20clamp(screenPxDistance%20%2B%200.5%2C%200.0%2C%201.0)%3B%5Cn%5Ctcolor%20%3D%20vec4(fontColor.rgb%20%2C%20fontColor.a%20*%20opacity)%3B%5Cn%7D%22)%2Cthis.fontShader.use(this.gl)%2Cawait%20this.loadDefaultFont()%2Cawait%20this.loadDefaultMatCap()%2Cthis.drawLoadingText(this.loadingText)%7DmeshShaderNameToNumber(t%3D%22Phong%22)%7Bconst%20e%3Dt.toLowerCase()%3Bfor(let%20t%3D0%3Bt%3Cthis.meshShaders.length%3Bt%2B%2B)if(this.meshShaders%5Bt%5D.Name.toLowerCase()%3D%3D%3De)return%20t%7DsetMeshShader(t%2Ce%3D2)%7Blet%20i%3D0%3Bif(i%3D%22number%22%3D%3Dtypeof%20e%3Fe%3Athis.meshShaderNameToNumber(e)%2Cvoid%200%3D%3D%3Di)throw%20new%20Error(%22shaderIndex%20undefined%22)%3Bi%3DMath.min(i%2Cthis.meshShaders.length-1)%2Ci%3DMath.max(i%2C0)%3Bconst%20s%3Dthis.getMeshIndexByID(t)%3Bs%3E%3Dthis.meshes.length%3Fl.debug(%22Unable%20to%20change%20shader%20until%20mesh%20is%20loaded%20(maybe%20you%20need%20async)%22)%3A(this.meshes%5Bs%5D.meshShaderIndex%3Di%2Cthis.updateGLVolume()%2Cthis.onMeshShaderChanged(s%2Ci))%7DcreateCustomMeshShader(t%2Ce%3D%22Custom%22)%7Bif(!t)throw%20new%20Error(%22Need%20fragment%20shader%22)%3Bconst%20i%3Dthis.meshShaderNameToNumber(e)%3Bi%3E%3D0%26%26(this.gl.deleteProgram(this.meshShaders%5Bi%5D.shader.program)%2Cthis.meshShaders.splice(i%2C1))%3Bconst%20s%3Dnew%20h(this.gl%2CE%2Ct)%3Breturn%20s.use(this.gl)%2C%7BName%3Ae%2CFrag%3At%2Cshader%3As%7D%7DsetCustomMeshShader(t%3D%22%22%2Ce%3D%22Custom%22)%7Bconst%20i%3Dthis.createCustomMeshShader(t%2Ce)%3Breturn%20this.meshShaders.push(i)%2Cthis.onCustomMeshShaderAdded(t%2Ce)%2Cthis.meshShaders.length-1%7DmeshShaderNames(t%3D!0)%7Bconst%20e%3D%5B%5D%3Bfor(let%20t%3D0%3Bt%3Cthis.meshShaders.length%3Bt%2B%2B)e.push(this.meshShaders%5Bt%5D.Name)%3Breturn!0%3D%3D%3Dt%3Fe.sort()%3Ae%7DinitRenderShader(t%2Ce%3D0)%7Bt.use(this.gl)%2Cthis.gl.uniform1i(t.uniforms.volume%2C0)%2Cthis.gl.uniform1i(t.uniforms.colormap%2C1)%2Cthis.gl.uniform1i(t.uniforms.overlay%2C2)%2Cthis.gl.uniform1i(t.uniforms.drawing%2C7)%2Cthis.gl.uniform1fv(t.uniforms.renderDrawAmbientOcclusion%2C%5Bthis.renderDrawAmbientOcclusion%2C1%5D)%2Cthis.gl.uniform1f(t.uniforms.gradientAmount%2Ce)%7Dasync%20init()%7Bconst%20t%3Dthis.gl.getExtension(%22WEBGL_debug_renderer_info%22)%3Bif(t)%7Bconst%20e%3Dthis.gl.getParameter(t.UNMASKED_VENDOR_WEBGL)%2Ci%3Dthis.gl.getParameter(t.UNMASKED_RENDERER_WEBGL)%3Bl.info(%22renderer%20vendor%3A%20%22%2Ce)%2Cl.info(%22renderer%3A%20%22%2Ci)%7Delse%20l.info(%22debug_renderer_info%20unavailable%22)%3Bconst%20e%3Dthis.gl.getParameter(this.gl.RENDERER)%3Bl.info(%22firefox%20renderer%3A%20%22%2Ce)%2Cthis.gl.clearDepth(0)%2Cthis.gl.enable(this.gl.CULL_FACE)%2Cthis.gl.cullFace(this.gl.FRONT)%2Cthis.gl.enable(this.gl.BLEND)%2Cthis.gl.blendFunc(this.gl.SRC_ALPHA%2Cthis.gl.ONE_MINUS_SRC_ALPHA)%2Cthis.volumeTexture%3Dthis.rgbaTex(this.volumeTexture%2CSi%2C%5B2%2C2%2C2%2C2%5D%2C!0)%2Cthis.overlayTexture%3Dthis.rgbaTex(this.overlayTexture%2CUi%2C%5B2%2C2%2C2%2C2%5D%2C!0)%2Cthis.drawTexture%3Dthis.r8Tex(this.drawTexture%2CRi%2C%5B2%2C2%2C2%2C2%5D%2C!0)%3Bconst%20i%3Dthis.gl%3Bthis.cuboidVertexBuffer%3Di.createBuffer()%2Ci.bindBuffer(i.ARRAY_BUFFER%2Cthis.cuboidVertexBuffer)%2Ci.bufferData(i.ARRAY_BUFFER%2Cnew%20Float32Array(%5B1%2C1%2C0%2C1%2C0%2C0%2C0%2C1%2C0%2C0%2C0%2C0%5D)%2Ci.STATIC_DRAW)%2Cthis.genericVAO%3Di.createVertexArray()%2Ci.bindVertexArray(this.genericVAO)%2Ci.bindBuffer(i.ARRAY_BUFFER%2Cthis.cuboidVertexBuffer)%2Ci.enableVertexAttribArray(0)%2Ci.vertexAttribPointer(0%2C3%2Ci.FLOAT%2C!1%2C0%2C0)%2Ci.bindVertexArray(this.unusedVAO)%2Cthis.pickingMeshShader%3Dnew%20h(i%2CE%2C%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnout%20vec4%20color%3B%5Cnvec4%20packFloatToVec4i(const%20float%20value)%20%7B%5Cn%5Ctconst%20vec4%20bitSh%20%3D%20vec4(256.0*256.0*256.0%2C%20256.0*256.0%2C%20256.0%2C%201.0)%3B%5Cn%5Ctconst%20vec4%20bitMsk%20%3D%20vec4(0.0%2C%201.0%2F256.0%2C%201.0%2F256.0%2C%201.0%2F256.0)%3B%5Cn%5Ctvec4%20res%20%3D%20fract(value%20*%20bitSh)%3B%5Cn%5Ctres%20-%3D%20res.xxyz%20*%20bitMsk%3B%5Cn%5Ctreturn%20res%3B%5Cn%7D%5Cnvoid%20main()%20%7B%5Cn%5Ctcolor%20%3D%20packFloatToVec4i(gl_FragCoord.z)%3B%5Cn%7D%22)%2Cthis.pickingMeshShader.use(i)%2Cthis.pickingImageShader%3Dnew%20h(i%2Cc%2CB)%2Cthis.pickingImageShader.use(i)%2Ci.uniform1i(this.pickingImageShader.uniforms.volume%2C0)%2Ci.uniform1i(this.pickingImageShader.uniforms.colormap%2C1)%2Ci.uniform1i(this.pickingImageShader.uniforms.overlay%2C2)%2Ci.uniform1i(this.pickingImageShader.uniforms.drawing%2C7)%2Cthis.sliceMMShader%3Dnew%20h(i%2Cv%2CC)%2Cthis.sliceMMShader.use(i)%2Ci.uniform1i(this.sliceMMShader.uniforms.volume%2C0)%2Ci.uniform1i(this.sliceMMShader.uniforms.colormap%2C1)%2Ci.uniform1i(this.sliceMMShader.uniforms.overlay%2C2)%2Ci.uniform1i(this.sliceMMShader.uniforms.drawing%2C7)%2Ci.uniform1f(this.sliceMMShader.uniforms.drawOpacity%2Cthis.drawOpacity)%2Cthis.sliceV1Shader%3Dnew%20h(i%2Cv%2Cb)%2Cthis.sliceV1Shader.use(i)%2Ci.uniform1i(this.sliceV1Shader.uniforms.volume%2C0)%2Ci.uniform1i(this.sliceV1Shader.uniforms.colormap%2C1)%2Ci.uniform1i(this.sliceV1Shader.uniforms.overlay%2C2)%2Ci.uniform1i(this.sliceV1Shader.uniforms.drawing%2C7)%2Ci.uniform1f(this.sliceV1Shader.uniforms.drawOpacity%2Cthis.drawOpacity)%2Cthis.orientCubeShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cn%2F%2F%20an%20attribute%20is%20an%20input%20(in)%20to%20a%20vertex%20shader.%5Cn%2F%2F%20It%20will%20receive%20data%20from%20a%20buffer%5Cnlayout(location%3D0)%20%20in%20vec3%20a_position%3B%5Cnlayout(location%3D1)%20%20in%20vec3%20a_color%3B%5Cn%2F%2F%20A%20matrix%20to%20transform%20the%20positions%20by%5Cnuniform%20mat4%20u_matrix%3B%5Cnout%20vec3%20vColor%3B%5Cn%2F%2F%20all%20shaders%20have%20a%20main%20function%5Cnvoid%20main()%20%7B%5Cn%5Ct%2F%2F%20Multiply%20the%20position%20by%20the%20matrix.%5Cn%5Ctvec4%20pos%20%3D%20vec4(a_position%2C%201.0)%3B%5Cn%5Ctgl_Position%20%3D%20u_matrix%20*%20vec4(pos)%3B%5Cn%5CtvColor%20%3D%20a_color%3B%5Cn%7D%5Cn%22%2C%22%23version%20300%20es%5Cnprecision%20highp%20float%3B%5Cnuniform%20vec4%20u_color%3B%5Cnin%20vec3%20vColor%3B%5Cnout%20vec4%20outColor%3B%5Cnvoid%20main()%20%7B%5Cn%5CtoutColor%20%3D%20vec4(vColor%2C%201.0)%3B%5Cn%7D%22)%2Cthis.orientCubeShaderVAO%3Di.createVertexArray()%2Ci.bindVertexArray(this.orientCubeShaderVAO)%3Bconst%20s%3Di.createBuffer()%3Bi.enableVertexAttribArray(0)%2Ci.enableVertexAttribArray(1)%2Ci.bindBuffer(i.ARRAY_BUFFER%2Cs)%2Ci.bufferData(i.ARRAY_BUFFER%2CR%2Ci.STATIC_DRAW)%2Ci.vertexAttribPointer(0%2C3%2Ci.FLOAT%2C!1%2C24%2C0)%2Ci.enableVertexAttribArray(1)%2Ci.vertexAttribPointer(1%2C3%2Ci.FLOAT%2C!1%2C24%2C12)%2Ci.bindVertexArray(this.unusedVAO)%2Cthis.rectShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cn%23line%20520%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnuniform%20vec2%20canvasWidthHeight%3B%5Cnuniform%20vec4%20leftTopWidthHeight%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ct%2F%2Fconvert%20pixel%20x%2Cy%20space%201..canvasWidth%2C1..canvasHeight%20to%20WebGL%201..-1%2C-1..1%5Cn%5Ctvec2%20frac%3B%5Cn%5Ctfrac.x%20%3D%20(leftTopWidthHeight.x%20%2B%20(pos.x%20*%20leftTopWidthHeight.z))%20%2F%20canvasWidthHeight.x%3B%20%2F%2F0..1%5Cn%5Ctfrac.y%20%3D%201.0%20-%20((leftTopWidthHeight.y%20%2B%20((1.0%20-%20pos.y)%20*%20leftTopWidthHeight.w))%20%2F%20canvasWidthHeight.y)%3B%20%2F%2F1..0%5Cn%5Ctfrac%20%3D%20(frac%20*%202.0)%20-%201.0%3B%5Cn%5Ctgl_Position%20%3D%20vec4(frac%2C%200.0%2C%201.0)%3B%5Cn%7D%22%2Cy)%2Cthis.rectShader.use(i)%2Cthis.lineShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cn%23line%20534%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnuniform%20vec2%20canvasWidthHeight%3B%5Cnuniform%20float%20thickness%3B%5Cnuniform%20vec4%20startXYendXY%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ctvec2%20posXY%20%3D%20mix(startXYendXY.xy%2C%20startXYendXY.zw%2C%20pos.x)%3B%5Cn%5Ctvec2%20dir%20%3D%20normalize(startXYendXY.xy%20-%20startXYendXY.zw)%3B%5Cn%5CtposXY%20%2B%3D%20vec2(-dir.y%2C%20dir.x)%20*%20thickness%20*%20(pos.y%20-%200.5)%3B%5Cn%5CtposXY.x%20%3D%20(posXY.x)%20%2F%20canvasWidthHeight.x%3B%20%2F%2F0..1%5Cn%5CtposXY.y%20%3D%201.0%20-%20(posXY.y%20%2F%20canvasWidthHeight.y)%3B%20%2F%2F1..0%5Cn%5Ctgl_Position%20%3D%20vec4((posXY%20*%202.0)%20-%201.0%2C%200.0%2C%201.0)%3B%5Cn%7D%22%2Cy)%2Cthis.lineShader.use(i)%2Cthis.line3DShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cn%23line%20534%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnuniform%20vec2%20canvasWidthHeight%3B%5Cnuniform%20float%20thickness%3B%5Cnuniform%20vec2%20startXY%3B%5Cnuniform%20vec3%20endXYZ%3B%20%2F%2F%20transformed%20XYZ%20point%5Cnvoid%20main(void)%20%7B%5Ct%5Cn%5Ctvec2%20posXY%20%3D%20mix(startXY.xy%2C%20endXYZ.xy%2C%20pos.x)%3B%5Cn%5Ctvec2%20startDiff%20%3D%20endXYZ.xy%20-%20startXY.xy%3B%5Cn%5Ctfloat%20startDistance%20%3D%20length(startDiff)%3B%5Cn%5Ctvec2%20diff%20%3D%20endXYZ.xy%20-%20posXY%3B%5Cn%5Ctfloat%20currentDistance%20%3D%20length(diff)%3B%5Cn%5Ctvec2%20dir%20%3D%20normalize(startXY.xy%20-%20endXYZ.xy)%3B%5Cn%5CtposXY%20%2B%3D%20vec2(-dir.y%2C%20dir.x)%20*%20thickness%20*%20(pos.y%20-%200.5)%3B%5Cn%5CtposXY.x%20%3D%20(posXY.x)%20%2F%20canvasWidthHeight.x%3B%20%2F%2F0..1%5Cn%5CtposXY.y%20%3D%201.0%20-%20(posXY.y%20%2F%20canvasWidthHeight.y)%3B%20%2F%2F1..0%5Ct%5Cn%5Ctfloat%20z%20%3D%20endXYZ.z%20*%20(%201.0%20-%20abs(currentDistance%2FstartDistance))%3B%20%5Cn%5Ctgl_Position%20%3D%20vec4((posXY%20*%202.0)%20-%201.0%2C%20z%2C%201.0)%3B%5Cn%7D%22%2Cy)%2Cthis.line3DShader.use(i)%2Cthis.circleShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnuniform%20vec2%20canvasWidthHeight%3B%5Cnuniform%20vec4%20leftTopWidthHeight%3B%5Cnuniform%20vec4%20uvLeftTopWidthHeight%3B%5Cnout%20vec2%20vUV%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ct%2F%2Fconvert%20pixel%20x%2Cy%20space%201..canvasWidth%2C1..canvasHeight%20to%20WebGL%201..-1%2C-1..1%5Cn%5Ctvec2%20frac%3B%5Cn%5Ctfrac.x%20%3D%20(leftTopWidthHeight.x%20%2B%20(pos.x%20*%20leftTopWidthHeight.z))%20%2F%20canvasWidthHeight.x%3B%20%2F%2F0..1%5Cn%5Ctfrac.y%20%3D%201.0%20-%20((leftTopWidthHeight.y%20%2B%20((1.0%20-%20pos.y)%20*%20leftTopWidthHeight.w))%20%2F%20canvasWidthHeight.y)%3B%20%2F%2F1..0%5Cn%5Ctfrac%20%3D%20(frac%20*%202.0)%20-%201.0%3B%5Cn%5Ctgl_Position%20%3D%20vec4(frac%2C%200.0%2C%201.0)%3B%5Cn%5CtvUV%20%3D%20pos.xy%3B%5Cn%7D%22%2C%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20vec4%20circleColor%3B%5Cnuniform%20float%20fillPercent%3B%5Cnin%20vec2%20vUV%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ct%2F*%20Check%20if%20the%20pixel%20is%20inside%20the%20circle%5Cn%5Ct%5Ct%20and%20color%20it%20with%20a%20gradient.%20Otherwise%2C%20color%20it%20%5Cn%5Ct%5Ct%20transparent%20%20%20*%2F%5Cn%5Ctfloat%20distance%20%3D%20length(vUV-vec2(0.5%2C0.5))%3B%5Cn%5Ctif%20(%20distance%20%3C%200.5%20%26%26%20distance%20%3E%3D%20(1.0%20-%20fillPercent)%20%2F%202.0)%7B%5Cn%5Ct%5Ct%5Ctcolor%20%3D%20vec4(circleColor.r%2CcircleColor.g%2CcircleColor.b%2CcircleColor.a)%20%3B%5Ct%5Ct%5Ct%5Cn%5Ct%7Delse%7B%5Cn%5Ct%5Ct%5Ctcolor%20%3D%20vec4(0.0%2C0.0%2C0.0%2C0.0)%3B%5Cn%5Ct%7D%5Cn%7D%5Cn%22)%2Cthis.circleShader.use(i)%2Cthis.renderVolumeShader%3Dnew%20h(i%2Cc%2Cg)%2Cthis.initRenderShader(this.renderVolumeShader)%2Cthis.renderSliceShader%3Dnew%20h(i%2Cc%2Cf)%2Cthis.initRenderShader(this.renderSliceShader)%2Cthis.renderGradientShader%3Dnew%20h(i%2Cc%2Cp)%2Cthis.initRenderShader(this.renderGradientShader%2C.3)%2Ci.uniform1i(this.renderGradientShader.uniforms.matCap%2C5)%2Ci.uniform1i(this.renderGradientShader.uniforms.gradient%2C6)%2Cthis.renderShader%3Dthis.renderVolumeShader%2Cthis.colorbarShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cn%23line%20490%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnuniform%20vec2%20canvasWidthHeight%3B%5Cnuniform%20vec4%20leftTopWidthHeight%3B%5Cnout%20vec2%20vColor%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ct%2F%2Fconvert%20pixel%20x%2Cy%20space%201..canvasWidth%2C1..canvasHeight%20to%20WebGL%201..-1%2C-1..1%5Cn%5Ctvec2%20frac%3B%5Cn%5Ctfrac.x%20%3D%20(leftTopWidthHeight.x%20%2B%20(pos.x%20*%20leftTopWidthHeight.z))%20%2F%20canvasWidthHeight.x%3B%20%2F%2F0..1%5Cn%5Ctfrac.y%20%3D%201.0%20-%20((leftTopWidthHeight.y%20%2B%20((1.0%20-%20pos.y)%20*%20leftTopWidthHeight.w))%20%2F%20canvasWidthHeight.y)%3B%20%2F%2F1..0%5Cn%5Ctfrac%20%3D%20(frac%20*%202.0)%20-%201.0%3B%5Cn%5Ctgl_Position%20%3D%20vec4(frac%2C%200.0%2C%201.0)%3B%5Cn%5CtvColor%20%3D%20pos.xy%3B%5Cn%7D%22%2C%22%23version%20300%20es%5Cn%23line%20506%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20highp%20sampler2D%20colormap%3B%5Cnuniform%20float%20layer%3B%5Cnin%20vec2%20vColor%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctfloat%20nlayer%20%3D%20float(textureSize(colormap%2C%200).y)%3B%5Cn%5Ctfloat%20fmap%20%3D%20(0.5%20%2B%20layer)%20%2F%20nlayer%3B%5Cn%5Ctcolor%20%3D%20vec4(texture(colormap%2C%20vec2(vColor.x%2C%20fmap)).rgb%2C%201.0)%3B%5Cn%7D%22)%2Cthis.colorbarShader.use(i)%2Ci.uniform1i(this.colorbarShader.uniforms.colormap%2C1)%2Cthis.blurShader%3Dnew%20h(i%2CU%2C%22%23version%20300%20es%5Cn%23line%20298%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec2%20TexCoord%3B%5Cnout%20vec4%20FragColor%3B%5Cnuniform%20float%20coordZ%3B%5Cnuniform%20float%20dX%3B%5Cnuniform%20float%20dY%3B%5Cnuniform%20float%20dZ%3B%5Cnuniform%20highp%20sampler3D%20intensityVol%3B%5Cnvoid%20main(void)%20%7B%5Cn%20vec3%20vx%20%3D%20vec3(TexCoord.xy%2C%20coordZ)%3B%5Cn%20vec4%20samp%20%3D%20texture(intensityVol%2Cvx%2Bvec3(%2BdX%2C%2BdY%2C%2BdZ))%3B%5Cn%20samp%20%2B%3D%20texture(intensityVol%2Cvx%2Bvec3(%2BdX%2C%2BdY%2C-dZ))%3B%5Cn%20samp%20%2B%3D%20texture(intensityVol%2Cvx%2Bvec3(%2BdX%2C-dY%2C%2BdZ))%3B%5Cn%20samp%20%2B%3D%20texture(intensityVol%2Cvx%2Bvec3(%2BdX%2C-dY%2C-dZ))%3B%5Cn%20samp%20%2B%3D%20texture(intensityVol%2Cvx%2Bvec3(-dX%2C%2BdY%2C%2BdZ))%3B%5Cn%20samp%20%2B%3D%20texture(intensityVol%2Cvx%2Bvec3(-dX%2C%2BdY%2C-dZ))%3B%5Cn%20samp%20%2B%3D%20texture(intensityVol%2Cvx%2Bvec3(-dX%2C-dY%2C%2BdZ))%3B%5Cn%20samp%20%2B%3D%20texture(intensityVol%2Cvx%2Bvec3(-dX%2C-dY%2C-dZ))%3B%5Cn%20FragColor%20%3D%20samp*0.125%3B%5Cn%7D%22)%2Cthis.sobelShader%3Dnew%20h(i%2CU%2C%22%23version%20300%20es%5Cn%23line%20323%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec2%20TexCoord%3B%5Cnout%20vec4%20FragColor%3B%5Cnuniform%20float%20coordZ%3B%5Cnuniform%20float%20dX%3B%5Cnuniform%20float%20dY%3B%5Cnuniform%20float%20dZ%3B%5Cnuniform%20highp%20sampler3D%20intensityVol%3B%5Cnvoid%20main(void)%20%7B%5Cn%20%20vec3%20vx%20%3D%20vec3(TexCoord.xy%2C%20coordZ)%3B%5Cn%20%20%2F%2FNeighboring%20voxels%20'T'op%2F'B'ottom%2C%20'A'nterior%2F'P'osterior%2C%20'R'ight%2F'L'eft%5Cn%20%20float%20TAR%20%3D%20texture(intensityVol%2Cvx%2Bvec3(%2BdX%2C%2BdY%2C%2BdZ)).r%3B%5Cn%20%20float%20TAL%20%3D%20texture(intensityVol%2Cvx%2Bvec3(%2BdX%2C%2BdY%2C-dZ)).r%3B%5Cn%20%20float%20TPR%20%3D%20texture(intensityVol%2Cvx%2Bvec3(%2BdX%2C-dY%2C%2BdZ)).r%3B%5Cn%20%20float%20TPL%20%3D%20texture(intensityVol%2Cvx%2Bvec3(%2BdX%2C-dY%2C-dZ)).r%3B%5Cn%20%20float%20BAR%20%3D%20texture(intensityVol%2Cvx%2Bvec3(-dX%2C%2BdY%2C%2BdZ)).r%3B%5Cn%20%20float%20BAL%20%3D%20texture(intensityVol%2Cvx%2Bvec3(-dX%2C%2BdY%2C-dZ)).r%3B%5Cn%20%20float%20BPR%20%3D%20texture(intensityVol%2Cvx%2Bvec3(-dX%2C-dY%2C%2BdZ)).r%3B%5Cn%20%20float%20BPL%20%3D%20texture(intensityVol%2Cvx%2Bvec3(-dX%2C-dY%2C-dZ)).r%3B%5Cn%20%20vec4%20gradientSample%20%3D%20vec4%20(0.0%2C%200.0%2C%200.0%2C%200.0)%3B%5Cn%20%20gradientSample.r%20%3D%20%20%20BAR%2BBAL%2BBPR%2BBPL%20-TAR-TAL-TPR-TPL%3B%5Cn%20%20gradientSample.g%20%3D%20%20TPR%2BTPL%2BBPR%2BBPL%20-TAR-TAL-BAR-BAL%3B%5Cn%20%20gradientSample.b%20%3D%20%20TAL%2BTPL%2BBAL%2BBPL%20-TAR-TPR-BAR-BPR%3B%5Cn%20%20gradientSample.a%20%3D%20(abs(gradientSample.r)%2Babs(gradientSample.g)%2Babs(gradientSample.b))*0.29%3B%5Cn%20%20gradientSample.rgb%20%3D%20normalize(gradientSample.rgb)%3B%5Cn%20%20gradientSample.rgb%20%3D%20%20(gradientSample.rgb%20*%200.5)%2B0.5%3B%5Cn%20%20FragColor%20%3D%20gradientSample%3B%5Cn%7D%22)%2Cthis.growCutShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cn%23line%20808%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec3%20vPos%3B%5Cnout%20vec2%20TexCoord%3B%5Cnvoid%20main()%20%7B%5Cn%5CtTexCoord%20%3D%20vPos.xy%3B%5Cn%5Ctgl_Position%20%3D%20vec4((vPos.x%20-%200.5)%20*%202.0%2C%20(vPos.y%20-%200.5)%20*%202.0%2C%200.0%2C%201.0)%3B%5Cn%7D%22%2C%22%23version%20300%20es%5Cn%23line%20829%5Cn%5Ctprecision%20highp%20float%3B%5Cn%5Ctprecision%20highp%20int%3B%5Cn%5Ctprecision%20highp%20isampler3D%3B%5Cn%5Ctlayout(location%20%3D%200)%20out%20int%20label%3B%5Cn%5Ctlayout(location%20%3D%201)%20out%20int%20strength%3B%5Cn%5Ctin%20vec2%20TexCoord%3B%5Cn%5Ctuniform%20int%20finalPass%3B%5Cn%5Ctuniform%20float%20coordZ%3B%5Cn%5Ctuniform%20lowp%20sampler3D%20in3D%3B%5Cn%5Ctuniform%20highp%20isampler3D%20backTex%3B%20%2F%2F%20background%5Cn%5Ctuniform%20highp%20isampler3D%20labelTex%3B%20%2F%2F%20label%5Cn%5Ctuniform%20highp%20isampler3D%20strengthTex%3B%20%2F%2F%20strength%5Cnvoid%20main(void)%20%7B%5Cn%5Ctvec3%20interpolatedTextureCoordinate%20%3D%20vec3(TexCoord.xy%2C%20coordZ)%3B%5Cn%5Ctivec3%20size%20%3D%20textureSize(backTex%2C%200)%3B%5Cn%5Ctivec3%20texelIndex%20%3D%20ivec3(floor(interpolatedTextureCoordinate%20*%20vec3(size)))%3B%5Cn%5Ctint%20background%20%3D%20texelFetch(backTex%2C%20texelIndex%2C%200).r%3B%5Cn%5Ctlabel%20%3D%20texelFetch(labelTex%2C%20texelIndex%2C%200).r%3B%5Cn%5Ctstrength%20%3D%20texelFetch(strengthTex%2C%20texelIndex%2C%200).r%3B%5Cn%5Ctfor%20(int%20k%20%3D%20-1%3B%20k%20%3C%3D%201%3B%20k%2B%2B)%20%7B%5Cn%5Ct%5Ctfor%20(int%20j%20%3D%20-1%3B%20j%20%3C%3D%201%3B%20j%2B%2B)%20%7B%5Cn%5Ct%5Ct%5Ctfor%20(int%20i%20%3D%20-1%3B%20i%20%3C%3D%201%3B%20i%2B%2B)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ctif%20(i%20!%3D%200%20%26%26%20j%20!%3D%200%20%26%26%20k%20!%3D%200)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctivec3%20neighborIndex%20%3D%20texelIndex%20%2B%20ivec3(i%2Cj%2Ck)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctint%20neighborBackground%20%3D%20texelFetch(backTex%2C%20neighborIndex%2C%200).r%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctint%20neighborStrength%20%3D%20texelFetch(strengthTex%2C%20neighborIndex%2C%200).r%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctint%20strengthCost%20%3D%20abs(neighborBackground%20-%20background)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctint%20takeoverStrength%20%3D%20neighborStrength%20-%20strengthCost%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctif%20(takeoverStrength%20%3E%20strength)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Ctstrength%20%3D%20takeoverStrength%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Ctlabel%20%3D%20texelFetch(labelTex%2C%20neighborIndex%2C%200).r%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%7D%5Cn%5Ct%7D%5Cn%5Ctif%20(finalPass%20%3C%201)%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ctint%20ok%20%3D%201%3B%5Cn%5Ctivec4%20labelCount%20%3D%20ivec4(0%2C0%2C0%2C0)%3B%5Cn%5Ctfor%20(int%20k%20%3D%20-1%3B%20k%20%3C%3D%201%3B%20k%2B%2B)%5Cn%5Ct%5Ctfor%20(int%20j%20%3D%20-1%3B%20j%20%3C%3D%201%3B%20j%2B%2B)%5Cn%5Ct%5Ct%5Ctfor%20(int%20i%20%3D%20-1%3B%20i%20%3C%3D%201%3B%20i%2B%2B)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ctivec3%20neighborIndex%20%3D%20texelIndex%20%2B%20ivec3(i%2Cj%2Ck)%3B%5Cn%5Ct%5Ct%5Ct%5Ctint%20ilabel%20%3D%20texelFetch(labelTex%2C%20neighborIndex%2C%200).r%3B%5Cn%5Ct%5Ct%5Ct%5Ctif%20((ilabel%20%3C%200)%20%7C%7C%20(ilabel%20%3E%203))%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctok%20%3D%200%3B%5Cn%5Ct%5Ct%5Ct%5Ctelse%5Cn%5Ct%5Ct%5Ct%5Ct%5CtlabelCount%5Bilabel%5D%2B%2B%3B%5Cn%5Ct%5Ct%5Ct%7D%5Cn%5Ctif%20(ok%20!%3D%201)%20%7B%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ct%7D%5Cn%5Ctint%20maxIdx%20%3D%200%3B%5Cn%5Ctfor%20(int%20i%20%3D%201%3B%20i%20%3C%204%3B%20i%2B%2B)%20%7B%5Cn%5Ct%5Ctif%20(labelCount%5Bi%5D%20%3E%20labelCount%5BmaxIdx%5D)%5Cn%5Ct%5Ct%5CtmaxIdx%20%3D%20i%3B%5Cn%5Ct%7D%5Cn%5Ctlabel%20%3D%20maxIdx%3B%5Cn%7D%22)%2Cthis.passThroughShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cn%23line%201359%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec3%20vPos%3B%5Cnout%20vec2%20TexCoord%3B%5Cnvoid%20main()%20%7B%5Cn%5CtTexCoord%20%3D%20vPos.xy%3B%5Cn%5Ctvec2%20viewCoord%20%3D%20(vPos.xy%20-%200.5)%20*%202.0%3B%5Cn%5Ctgl_Position%20%3D%20vec4((vPos.xy%20-%200.5)%20*%202.0%2C%200.0%2C%201.0)%3B%5Cn%7D%22%2C%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec2%20TexCoord%3B%5Cnout%20vec4%20FragColor%3B%5Cnuniform%20float%20coordZ%3B%5Cnuniform%20lowp%20sampler3D%20in3D%3B%5Cnvoid%20main(void)%20%7B%5Cn%20FragColor%20%3D%20texture(in3D%2C%20vec3(TexCoord.xy%2C%20coordZ))%3B%5Cn%7D%22)%2Cthis.orientShaderAtlasU%3Dnew%20h(i%2CI%2CM.concat(V))%2Cthis.orientShaderAtlasI%3Dnew%20h(i%2CI%2CD.concat(V))%2Cthis.orientShaderU%3Dnew%20h(i%2CI%2CM.concat(T))%2Cthis.orientShaderI%3Dnew%20h(i%2CI%2CD.concat(T))%2Cthis.orientShaderF%3Dnew%20h(i%2CI%2CF.concat(T))%2Cthis.orientShaderRGBU%3Dnew%20h(i%2CI%2CM.concat(%22%23line%20773%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec2%20TexCoord%3B%5Cnout%20vec4%20FragColor%3B%5Cnuniform%20float%20coordZ%3B%5Cnuniform%20float%20layer%3B%5Cnuniform%20float%20scl_slope%3B%5Cnuniform%20float%20scl_inter%3B%5Cnuniform%20float%20cal_max%3B%5Cnuniform%20float%20cal_min%3B%5Cnuniform%20highp%20sampler2D%20colormap%3B%5Cnuniform%20lowp%20sampler3D%20blend3D%3B%5Cnuniform%20float%20opacity%3B%5Cnuniform%20mat4%20mtx%3B%5Cnuniform%20bool%20hasAlpha%3B%5Cnuniform%20int%20modulation%3B%5Cnuniform%20highp%20sampler3D%20modulationVol%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ctvec4%20vx%20%3D%20vec4(TexCoord.xy%2C%20coordZ%2C%201.0)%20*%20mtx%3B%5Cn%5Ctuvec4%20aColor%20%3D%20texture(intensityVol%2C%20vx.xyz)%3B%5Cn%5CtFragColor%20%3D%20vec4(float(aColor.r)%20%2F%20255.0%2C%20float(aColor.g)%20%2F%20255.0%2C%20float(aColor.b)%20%2F%20255.0%2C%20float(aColor.a)%20%2F%20255.0)%3B%5Cn%5Ctif%20(modulation%20%3D%3D%201)%5Cn%5Ct%5CtFragColor.rgb%20*%3D%20texture(modulationVol%2C%20vx.xyz).r%3B%5Cn%5Ctif%20(!hasAlpha)%20%7B%5Cn%5Ct%5CtFragColor.a%20%3D%20(FragColor.r%20*%200.21%20%2B%20FragColor.g%20*%200.72%20%2B%20FragColor.b%20*%200.07)%3B%5Cn%5Ct%5Ct%2F%2Fnext%20line%3A%20we%20could%20binarize%20alpha%2C%20but%20see%20rendering%20of%20visible%20human%5Cn%5Ct%5Ct%2F%2FFragColor.a%20%3D%20step(0.01%2C%20FragColor.a)%3B%5Cn%5Ct%7D%5Cn%5Ctif%20(modulation%20%3D%3D%202)%5Cn%5Ct%5CtFragColor.a%20%3D%20texture(modulationVol%2C%20vx.xyz).r%3B%5Cn%5CtFragColor.a%20*%3D%20opacity%3B%5Cn%7D%22))%2Cthis.surfaceShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnuniform%20mat4%20mvpMtx%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ctgl_Position%20%3D%20mvpMtx%20*%20vec4(pos%2C%201.0)%3B%5Cn%7D%22%2C%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20vec4%20surfaceColor%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctcolor%20%3D%20surfaceColor%3B%5Cn%7D%22)%2Cthis.surfaceShader.use(i)%2Cthis.fiberShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnlayout(location%3D1)%20in%20vec4%20clr%3B%5Cnout%20vec4%20vClr%3B%5Cnuniform%20mat4%20mvpMtx%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ctgl_Position%20%3D%20mvpMtx%20*%20vec4(pos%2C%201.0)%3B%5Cn%5CtvClr%20%3D%20clr%3B%5Cn%7D%22%2C%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec4%20vClr%3B%5Cnout%20vec4%20color%3B%5Cnuniform%20float%20opacity%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctcolor%20%3D%20vec4(vClr.rgb%2C%20opacity)%3B%5Cn%7D%22)%2Cthis.pickingImageShader.use(i)%3Bfor(let%20t%3D0%3Bt%3Cthis.meshShaders.length%3Bt%2B%2B)%7Bconst%20e%3Dthis.meshShaders%5Bt%5D%3B%22Flat%22%3D%3D%3De.Name%3Fe.shader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnlayout(location%3D1)%20in%20vec4%20norm%3B%5Cnlayout(location%3D2)%20in%20vec4%20clr%3B%5Cnuniform%20mat4%20mvpMtx%3B%5Cn%2F%2Funiform%20mat4%20modelMtx%3B%5Cnuniform%20mat4%20normMtx%3B%5Cnout%20vec4%20vClr%3B%5Cnflat%20out%20vec3%20vN%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ctgl_Position%20%3D%20mvpMtx%20*%20vec4(pos%2C%201.0)%3B%5Cn%5CtvN%20%3D%20normalize((normMtx%20*%20vec4(norm.xyz%2C1.0)).xyz)%3B%5Cn%5Ct%2F%2FvV%20%3D%20-vec3(modelMtx*vec4(pos%2C1.0))%3B%5Cn%5CtvClr%20%3D%20clr%3B%5Cn%7D%22%2CS)%3Ae.shader%3Dnew%20h(i%2CE%2Ce.Frag)%2Ce.shader.use(i)%2Ce.shader.isMatcap%3D%22Matcap%22%3D%3D%3De.Name%2Ce.shader.isMatcap%26%26i.uniform1i(e.shader.uniforms.matCap%2C5)%7Dreturn%20this.bmpShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cn%23line%20549%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnuniform%20vec2%20canvasWidthHeight%3B%5Cnuniform%20vec4%20leftTopWidthHeight%3B%5Cnout%20vec2%20vUV%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ct%2F%2Fconvert%20pixel%20x%2Cy%20space%201..canvasWidth%2C1..canvasHeight%20to%20WebGL%201..-1%2C-1..1%5Cn%5Ctvec2%20frac%3B%5Cn%5Ctfrac.x%20%3D%20(leftTopWidthHeight.x%20%2B%20(pos.x%20*%20leftTopWidthHeight.z))%20%2F%20canvasWidthHeight.x%3B%20%2F%2F0..1%5Cn%5Ctfrac.y%20%3D%201.0%20-%20((leftTopWidthHeight.y%20%2B%20((1.0%20-%20pos.y)%20*%20leftTopWidthHeight.w))%20%2F%20canvasWidthHeight.y)%3B%20%2F%2F1..0%5Cn%5Ctfrac%20%3D%20(frac%20*%202.0)%20-%201.0%3B%5Cn%5Ctgl_Position%20%3D%20vec4(frac%2C%200.0%2C%201.0)%3B%5Cn%5CtvUV%20%3D%20vec2(pos.x%2C%201.0%20-%20pos.y)%3B%5Cn%7D%22%2C%22%23version%20300%20es%5Cn%23line%20565%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20highp%20sampler2D%20bmpTexture%3B%5Cnin%20vec2%20vUV%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctcolor%20%3D%20texture(bmpTexture%2C%20vUV)%3B%5Cn%7D%22)%2Cawait%20this.initText()%2Cthis.opts.thumbnail.length%3E0%26%26(await%20this.loadBmpTexture(this.opts.thumbnail)%2Cthis.thumbnailVisible%3D!0)%2Cthis.updateGLVolume()%2Cthis.initialized%3D!0%2Cthis.resizeListener()%2Cthis.drawScene()%2Cthis%7DgradientGL(t)%7Bconst%20e%3Dthis.gl%2Ci%3D%5B0%2C0%2C0%2C0%2C1%2C0%2C1%2C0%2C0%2C1%2C1%2C0%5D%2Cs%3De.createVertexArray()%3Be.bindVertexArray(s)%3Bconst%20r%3De.createBuffer()%3Be.bindBuffer(e.ARRAY_BUFFER%2Cr)%2Ce.bufferData(e.ARRAY_BUFFER%2Cnew%20Float32Array(i)%2Ce.STATIC_DRAW)%2Ce.enableVertexAttribArray(0)%2Ce.vertexAttribPointer(0%2C3%2Ce.FLOAT%2C!1%2C0%2C0)%3Bconst%20n%3De.createFramebuffer()%3Be.bindFramebuffer(e.FRAMEBUFFER%2Cn)%2Ce.disable(e.CULL_FACE)%2Ce.viewport(0%2C0%2Ct.dims%5B1%5D%2Ct.dims%5B2%5D)%2Ce.disable(e.BLEND)%3Bconst%20a%3Dthis.rgbaTex(null%2C33992%2Ct.dims)%2Co%3Dthis.blurShader%3Bo.use(e)%2Ce.activeTexture(Si)%2Ce.bindTexture(e.TEXTURE_3D%2Cthis.volumeTexture)%3Be.uniform1i(o.uniforms.intensityVol%2C0)%2Ce.uniform1f(o.uniforms.dX%2C.7%2Ft.dims%5B1%5D)%2Ce.uniform1f(o.uniforms.dY%2C.7%2Ft.dims%5B2%5D)%2Ce.uniform1f(o.uniforms.dZ%2C.7%2Ft.dims%5B3%5D)%2Ce.bindVertexArray(s)%3Bfor(let%20s%3D0%3Bs%3Ct.dims%5B3%5D-1%3Bs%2B%2B)%7Bconst%20r%3D1%2Ft.dims%5B3%5D*(s%2B.5)%3Be.uniform1f(o.uniforms.coordZ%2Cr)%2Ce.framebufferTextureLayer(e.FRAMEBUFFER%2Ce.COLOR_ATTACHMENT0%2Ca%2C0%2Cs)%2Ce.clear(e.DEPTH_BUFFER_BIT)%2Ce.drawArrays(e.TRIANGLE_STRIP%2C0%2Ci.length%2F3)%7Dconst%20l%3Dthis.sobelShader%3Bl.use(e)%2Ce.activeTexture(33992)%2Ce.bindTexture(e.TEXTURE_3D%2Ca)%2Ce.uniform1i(l.uniforms.intensityVol%2C8)%3Be.uniform1f(l.uniforms.dX%2C.7%2Ft.dims%5B1%5D)%2Ce.uniform1f(l.uniforms.dY%2C.7%2Ft.dims%5B2%5D)%2Ce.uniform1f(l.uniforms.dZ%2C.7%2Ft.dims%5B3%5D)%2Ce.uniform1f(l.uniforms.coordZ%2C.5)%2Ce.bindVertexArray(s)%2Ce.activeTexture(Si)%2Cnull!%3D%3Dthis.gradientTexture%26%26e.deleteTexture(this.gradientTexture)%2Cthis.gradientTexture%3Dthis.rgbaTex(this.gradientTexture%2C33990%2Ct.dims)%3Bfor(let%20s%3D0%3Bs%3Ct.dims%5B3%5D-1%3Bs%2B%2B)%7Bconst%20r%3D1%2Ft.dims%5B3%5D*(s%2B.5)%3Be.uniform1f(l.uniforms.coordZ%2Cr)%2Ce.framebufferTextureLayer(e.FRAMEBUFFER%2Ce.COLOR_ATTACHMENT0%2Cthis.gradientTexture%2C0%2Cs)%2Ce.clear(e.DEPTH_BUFFER_BIT)%2Ce.drawArrays(e.TRIANGLE_STRIP%2C0%2Ci.length%2F3)%7De.deleteFramebuffer(n)%2Ce.deleteTexture(a)%2Ce.deleteBuffer(r)%2Ce.bindFramebuffer(e.FRAMEBUFFER%2Cnull)%7DupdateGLVolume()%7Blet%20t%3D0%3Bconst%20e%3Dthis.volumes.length%3Bthis.refreshColormaps()%3Bfor(let%20i%3D0%3Bi%3Ce%3Bi%2B%2B)this.volumes%5Bi%5D.toRAS%26%26(this.refreshLayers(this.volumes%5Bi%5D%2Ct)%2Ct%2B%2B)%3Bif(this.furthestVertexFromOrigin%3D0%2Ce%3E0%26%26(this.furthestVertexFromOrigin%3Dthis.volumeObject3D.furthestVertexFromOrigin)%2Cthis.meshes)for(let%20t%3D0%3Bt%3Cthis.meshes.length%3Bt%2B%2B)this.furthestVertexFromOrigin%3DMath.max(this.furthestVertexFromOrigin%2Cthis.meshes%5Bt%5D.furthestVertexFromOrigin)%3Bthis.onVolumeUpdated%26%26this.onVolumeUpdated()%2Cthis.drawScene()%7DgetDescriptives(t%3D0%2Ce%3D%5B%5D%2Ci%3D!1)%7Bconst%20s%3Dthis.volumes%5Bt%5D.hdr%3Blet%20r%3Ds.scl_slope%3BisNaN(r)%26%26(r%3D1)%3Blet%20n%3Ds.scl_inter%3BisNaN(n)%26%26(n%3D1)%3Bconst%20a%3Dthis.volumes%5Bt%5D.img%2Co%3Da.length%2Ch%3Dnew%20Float32Array(o)%3Bfor(let%20t%3D0%3Bt%3Co%3Bt%2B%2B)h%5Bt%5D%3Da%5Bt%5D*r%2Bn%3Bconst%20c%3Dnew%20Uint8Array(o)%3Bfor(let%20t%3D0%3Bt%3Co%3Bt%2B%2B)c%5Bt%5D%3D1%3Bif(e.length%3E0)for(let%20t%3D0%3Bt%3Ce.length%3Bt%2B%2B)%7Bconst%20i%3Dthis.volumes%5Be%5Bt%5D%5D.img%3Bif(i.length%3D%3D%3Do)for(let%20t%3D0%3Bt%3Co%3Bt%2B%2B)(0%3D%3D%3Di%5Bt%5D%7C%7CisNaN(i%5Bt%5D))%26%26(c%5Bt%5D%3D0)%3Belse%20l.debug(%22Mask%20resolution%20does%20not%20match%20image.%20Skipping%20masking%20layer%20%22%2Be%5Bt%5D)%7Delse%20if(e.length%3C1%26%26i)for(let%20t%3D0%3Bt%3Co%3Bt%2B%2B)(0%3D%3D%3Dthis.drawBitmap%5Bt%5D%7C%7CisNaN(this.drawBitmap%5Bt%5D))%26%26(c%5Bt%5D%3D0)%3Blet%20d%3D0%2Cm%3D0%2Cu%3D0%2CA%3DNumber.NEGATIVE_INFINITY%2Cf%3DNumber.POSITIVE_INFINITY%2Cg%3D0%2Cp%3D0%2Cv%3D0%3Bfor(let%20t%3D0%3Bt%3Co%3Bt%2B%2B)%7Bif(c%5Bt%5D%3C1)continue%3Bconst%20e%3Dh%5Bt%5D%3Bd%2B%2B%3Blet%20i%3Dm%2B(e-m)%2Fd%3Bu%2B%3D(e-m)*(e-i)%2Cm%3Di%2C0!%3D%3De%26%26(g%2B%2B%2Ci%3Dp%2B(e-p)%2Fg%2Cv%2B%3D(e-p)*(e-i)%2Cp%3Di%2Cf%3DMath.min(e%2CA)%2CA%3DMath.max(e%2CA))%7Dconst%20x%3DMath.sqrt(u%2F(d-1))%2Cw%3DMath.sqrt(v%2F(g-1))%2CC%3Df%2Cb%3DA%3Breturn%20d!%3D%3Dg%26%26(f%3DMath.min(0%2CA)%2CA%3DMath.max(0%2CA))%2C%7Bmean%3Am%2Cstdev%3Ax%2Cnvox%3Ad%2CvolumeMM3%3Ad*s.pixDims%5B1%5D*s.pixDims%5B2%5D*s.pixDims%5B3%5D%2CvolumeML%3Ad*s.pixDims%5B1%5D*s.pixDims%5B2%5D*s.pixDims%5B3%5D*.001%2Cmin%3Af%2Cmax%3AA%2CmeanNot0%3Ap%2CstdevNot0%3Aw%2CnvoxNot0%3Ag%2CminNot0%3AC%2CmaxNot0%3Ab%2Ccal_min%3Athis.volumes%5Bt%5D.cal_min%2Ccal_max%3Athis.volumes%5Bt%5D.cal_max%2Crobust_min%3Athis.volumes%5Bt%5D.robust_min%2Crobust_max%3Athis.volumes%5Bt%5D.robust_max%7D%7DrefreshLayers(t%2Ce)%7Bif(this.refreshColormaps()%2Cthis.volumes.length%3C1)return%3Bconst%20s%3Dt.hdr%3Blet%20n%3Dt.img%3Bt.frame4D%3E0%26%26t.frame4D%3Ct.nFrame4D%26%26(n%3Dt.img.slice(t.frame4D*t.nVox3D%2C(t.frame4D%2B1)*t.nVox3D))%3Bconst%20a%3Dt.opacity%3Bif(e%3E1%26%260%3D%3D%3Da)return%3Blet%20o%3Dnull%3Bif(!this.back)throw%20new%20Error(%22back%20undefined%22)%3Bthis.gl.bindVertexArray(this.unusedVAO)%2Cthis.crosshairs3D%26%26(this.crosshairs3D.mm%5B0%5D%3DNaN)%3Blet%20h%3Di.clone(t.toRAS)%3Bif(0%3D%3D%3De)%7Bthis.volumeObject3D%3Dt.toNiivueObject3D(this.VOLUME_ID%2Cthis.gl)%2Ci.invert(h%2Ch)%2Cthis.back.matRAS%3Dt.matRAS%2Cthis.back.dims%3Dt.dimsRAS%2Cthis.back.pixDims%3Dt.pixDimsRAS%2Co%3Dthis.rgbaTex(this.volumeTexture%2CSi%2Ct.dimsRAS)%3Bconst%7BvolScale%3Ae%2Cvox%3As%7D%3Dthis.sliceScale(!0)%3Bif(this.volScale%3De%2Cthis.vox%3Ds%2Cthis.volumeObject3D.scale%3De%2C!this.renderShader)throw%20new%20Error(%22renderShader%20undefined%22)%3Bthis.renderShader.use(this.gl)%2Cthis.gl.uniform3fv(this.renderShader.uniforms.texVox%2Cs)%2Cthis.gl.uniform3fv(this.renderShader.uniforms.volScale%2Ce)%3Bconst%20r%3Dthis.pickingImageShader%3Br.use(this.gl)%2Cthis.gl.uniform1i(r.uniforms.volume%2C0)%2Cthis.gl.uniform1i(r.uniforms.colormap%2C1)%2Cthis.gl.uniform1i(r.uniforms.overlay%2C2)%2Cthis.gl.uniform3fv(r.uniforms.volScale%2Ce)%2Cl.debug(this.volumeObject3D)%7Delse%7Bvoid%200%3D%3D%3Dthis.back%3F.dims%26%26l.error(%22Fatal%20error%3A%20Unable%20to%20render%20overlay%3A%20background%20dimensions%20not%20defined!%22)%3Bconst%20s%3Dthis.mm2frac(t.mm000%2C0%2C!0)%3Blet%20n%3Dthis.mm2frac(t.mm100%2C0%2C!0)%2Ca%3Dthis.mm2frac(t.mm010%2C0%2C!0)%2Cc%3Dthis.mm2frac(t.mm001%2C0%2C!0)%3Bn%3Dr.subtract(n%2Cn%2Cs)%2Ca%3Dr.subtract(a%2Ca%2Cs)%2Cc%3Dr.subtract(c%2Cc%2Cs)%2Ch%3Di.fromValues(n%5B0%5D%2Ca%5B0%5D%2Cc%5B0%5D%2Cs%5B0%5D%2Cn%5B1%5D%2Ca%5B1%5D%2Cc%5B1%5D%2Cs%5B1%5D%2Cn%5B2%5D%2Ca%5B2%5D%2Cc%5B2%5D%2Cs%5B2%5D%2C0%2C0%2C0%2C1)%2Ci.invert(h%2Ch)%2C1%3D%3D%3De%3F(o%3Dthis.rgbaTex(this.overlayTexture%2CUi%2Cthis.back.dims)%2Cthis.overlayTexture%3Do%2Cthis.overlayTextureID%3Do)%3Ao%3Dthis.overlayTextureID%7Dconst%20c%3Dthis.gl.createFramebuffer()%3Bthis.gl.bindFramebuffer(this.gl.FRAMEBUFFER%2Cc)%2Cthis.gl.disable(this.gl.CULL_FACE)%2Cthis.gl.viewport(0%2C0%2Cthis.back.dims%5B1%5D%2Cthis.back.dims%5B2%5D)%2Cthis.gl.disable(this.gl.BLEND)%3Bconst%20d%3Dthis.gl.createTexture()%3Bthis.gl.activeTexture(33993)%2Cthis.gl.bindTexture(this.gl.TEXTURE_3D%2Cd)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_MIN_FILTER%2Cthis.gl.NEAREST)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_MAG_FILTER%2Cthis.gl.NEAREST)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_R%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_S%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_T%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT%2C1)%3Blet%20m%3Dthis.orientShaderU%3Bif(!s)throw%20new%20Error(%22hdr%20undefined%22)%3Bif(!n)throw%20new%20Error(%22img%20undefined%22)%3Bif(2%3D%3D%3Ds.datatypeCode)1002%3D%3D%3Ds.intent_code%26%26(m%3Dthis.orientShaderAtlasU)%2Cthis.gl.texStorage3D(this.gl.TEXTURE_3D%2C1%2Cthis.gl.R8UI%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D)%2Cthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D%2Cthis.gl.RED_INTEGER%2Cthis.gl.UNSIGNED_BYTE%2Cn)%3Belse%20if(4%3D%3D%3Ds.datatypeCode)m%3Dthis.orientShaderI%2C1002%3D%3D%3Ds.intent_code%26%26(m%3Dthis.orientShaderAtlasI)%2Cthis.gl.texStorage3D(this.gl.TEXTURE_3D%2C1%2Cthis.gl.R16I%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D)%2Cthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D%2Cthis.gl.RED_INTEGER%2Cthis.gl.SHORT%2Cn)%3Belse%20if(16%3D%3D%3Ds.datatypeCode)this.gl.texStorage3D(this.gl.TEXTURE_3D%2C1%2Cthis.gl.R32F%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D)%2Cthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D%2Cthis.gl.RED%2Cthis.gl.FLOAT%2Cn)%2Cm%3Dthis.orientShaderF%3Belse%20if(64%3D%3D%3Ds.datatypeCode)%7Blet%20t%3Dnew%20Float32Array%3Bt%3DFloat32Array.from(n)%2Cthis.gl.texStorage3D(this.gl.TEXTURE_3D%2C1%2Cthis.gl.R32F%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D)%2Cthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D%2Cthis.gl.RED%2Cthis.gl.FLOAT%2Ct)%2Cm%3Dthis.orientShaderF%7Delse%20128%3D%3D%3Ds.datatypeCode%3F(m%3Dthis.orientShaderRGBU%2Cm.use(this.gl)%2Cthis.gl.uniform1i(m.uniforms.hasAlpha%2C0)%2Cthis.gl.texStorage3D(this.gl.TEXTURE_3D%2C1%2Cthis.gl.RGB8UI%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D)%2Cthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D%2Cthis.gl.RGB_INTEGER%2Cthis.gl.UNSIGNED_BYTE%2Cn))%3A512%3D%3D%3Ds.datatypeCode%3F(1002%3D%3D%3Ds.intent_code%26%26(m%3Dthis.orientShaderAtlasU)%2Cthis.gl.texStorage3D(this.gl.TEXTURE_3D%2C1%2Cthis.gl.R16UI%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D)%2Cthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D%2Cthis.gl.RED_INTEGER%2Cthis.gl.UNSIGNED_SHORT%2Cn))%3A2304%3D%3D%3Ds.datatypeCode%26%26(m%3Dthis.orientShaderRGBU%2Cm.use(this.gl)%2Cthis.gl.uniform1i(m.uniforms.hasAlpha%2C1)%2Cthis.gl.texStorage3D(this.gl.TEXTURE_3D%2C1%2Cthis.gl.RGBA8UI%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D)%2Cthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D%2Cthis.gl.RGBA_INTEGER%2Cthis.gl.UNSIGNED_BYTE%2Cn))%3Bvoid%200%3D%3D%3Dt.global_min%26%26t.calMinMax()%3Blet%20u%3Dnull%3Bthis.gl.bindVertexArray(this.genericVAO)%3Bif(e%3E1)%7Bif(!this.back.dims)throw%20new%20Error(%22back.dims%20undefined%22)%3Bu%3Dthis.rgbaTex(u%2CNi%2Cthis.back.dims)%2Cthis.gl.bindTexture(this.gl.TEXTURE_3D%2Cu)%3Bconst%20t%3Dthis.passThroughShader%3Bt.use(this.gl)%2Cthis.gl.uniform1i(t.uniforms.in3D%2C2)%3Bfor(let%20e%3D0%3Be%3Cthis.back.dims%5B3%5D%3Be%2B%2B)%7Bconst%20i%3D1%2Fthis.back.dims%5B3%5D*(e%2B.5)%3Bthis.gl.uniform1f(t.uniforms.coordZ%2Ci)%2Cthis.gl.framebufferTextureLayer(this.gl.FRAMEBUFFER%2Cthis.gl.COLOR_ATTACHMENT0%2Cu%2C0%2Ce)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%7D%7Delse%20u%3Dthis.rgbaTex(u%2CNi%2C%5B2%2C2%2C2%2C2%5D)%3Bm.use(this.gl)%2Cthis.gl.activeTexture(Bi)%3Blet%20A%3Dnull%3Bif(null!%3D%3Dt.colormapLabel%26%26t.colormapLabel.lut.length%3E7)%7Bconst%20e%3Dt.colormapLabel.max-t.colormapLabel.min%2B1%3BA%3Dthis.createColormapTexture(A%2C1%2Ce)%2Cthis.gl.texSubImage2D(this.gl.TEXTURE_2D%2C0%2C0%2C0%2Ce%2C1%2Cthis.gl.RGBA%2Cthis.gl.UNSIGNED_BYTE%2Ct.colormapLabel.lut)%2Cthis.gl.uniform1f(m.uniforms.cal_min%2Ct.colormapLabel.min-.5)%2Cthis.gl.uniform1f(m.uniforms.cal_max%2Ct.colormapLabel.max%2B.5)%2Cthis.gl.bindTexture(this.gl.TEXTURE_2D%2CA)%7Delse%20this.gl.bindTexture(this.gl.TEXTURE_2D%2Cthis.colormapTexture)%2Cthis.gl.uniform1f(m.uniforms.cal_min%2Ct.cal_min)%2Cthis.gl.uniform1f(m.uniforms.cal_max%2Ct.cal_max)%3Bthis.gl.uniform1i(m.uniforms.isAlphaThreshold%2Ct.alphaThreshold)%2Cthis.gl.uniform1i(m.uniforms.isAdditiveBlend%2Cthis.opts.isAdditiveBlend%3F1%3A0)%3Blet%20f%3DNumber.POSITIVE_INFINITY%2Cg%3DNumber.NEGATIVE_INFINITY%3Bif(t.colormapNegative.length%3E0%26%26(f%3DMath.min(-t.cal_min%2C-t.cal_max)%2Cg%3DMath.max(-t.cal_min%2C-t.cal_max)%2CisFinite(t.cal_minNeg)%26%26isFinite(t.cal_maxNeg)%26%26(f%3DMath.min(t.cal_minNeg%2Ct.cal_maxNeg)%2Cg%3DMath.max(t.cal_minNeg%2Ct.cal_maxNeg)))%2C!m)throw%20new%20Error(%22orientShader%20undefined%22)%3Bthis.gl.uniform1f(m.uniforms.layer%3F%3Fnull%2Ce)%2Cthis.gl.uniform1f(m.uniforms.cal_minNeg%3F%3Fnull%2Cf)%2Cthis.gl.uniform1f(m.uniforms.cal_maxNeg%3F%3Fnull%2Cg)%2Cthis.gl.bindTexture(this.gl.TEXTURE_3D%2Cd)%2Cthis.gl.uniform1i(m.uniforms.intensityVol%3F%3Fnull%2C9)%2Cthis.gl.uniform1i(m.uniforms.blend3D%3F%3Fnull%2C10)%2Cthis.gl.uniform1i(m.uniforms.colormap%3F%3Fnull%2C1)%2Cthis.gl.uniform1f(m.uniforms.scl_inter%3F%3Fnull%2Cs.scl_inter)%2Cthis.gl.uniform1f(m.uniforms.scl_slope%3F%3Fnull%2Cs.scl_slope)%2Cthis.gl.uniform1f(m.uniforms.opacity%3F%3Fnull%2Ca)%2Cthis.gl.uniform1i(m.uniforms.modulationVol%3F%3Fnull%2C7)%3Blet%20p%3Dnull%3Bif(null!%3D%3Dt.modulationImage%26%26t.modulationImage%3E%3D0%26%26t.modulationImage%3Cthis.volumes.length)%7Bl.debug(%22modulating%22%2Cthis.volumes)%3Bconst%20e%3Dthis.volumes%5Bt.modulationImage%5D.hdr%3Bif(e.dims%5B1%5D%3D%3D%3Ds.dims%5B1%5D%26%26e.dims%5B2%5D%3D%3D%3Ds.dims%5B2%5D%26%26e.dims%5B3%5D%3D%3D%3Ds.dims%5B3%5D)%7Bt.modulateAlpha%3F(this.gl.uniform1i(m.uniforms.modulation%2C2)%2Cthis.gl.uniform1f(m.uniforms.opacity%2C1))%3Athis.gl.uniform1i(m.uniforms.modulation%2C1)%2Cp%3Dthis.r8Tex(p%2Cthis.gl.TEXTURE7%2Cs.dims%2C!0)%2Cthis.gl.activeTexture(this.gl.TEXTURE7)%2Cthis.gl.bindTexture(this.gl.TEXTURE_3D%2Cp)%3Bconst%20i%3Ds.dims%5B1%5D*s.dims%5B2%5D*s.dims%5B3%5D%2Cr%3Dnew%20Uint8Array(i)%2Cn%3Dthis.volumes%5Bt.modulationImage%5D.cal_min%2Ca%3D1%2F(this.volumes%5Bt.modulationImage%5D.cal_max-n)%2Co%3Dthis.volumes%5Bt.modulationImage%5D.img.buffer%3Blet%20h%3Dnew%20Uint8Array(o)%3Bswitch(e.datatypeCode)%7Bcase%204%3Ah%3Dnew%20Int16Array(o)%3Bbreak%3Bcase%2016%3Ah%3Dnew%20Float32Array(o)%3Bbreak%3Bcase%2064%3Ah%3Dnew%20Float64Array(o)%3Bbreak%3Bcase%20128%3Ah%3Dnew%20Uint8Array(o)%3Bbreak%3Bcase%20512%3Ah%3Dnew%20Uint16Array(o)%7Dl.debug(this.volumes%5Bt.modulationImage%5D)%3Bconst%20c%3Dthis.volumes%5Bt.modulationImage%5D.colormapNegative.length%3E0%3Blet%20d%3Dthis.volumes%5Bt.modulationImage%5D.cal_min%2Cu%3Dthis.volumes%5Bt.modulationImage%5D.cal_max%3BisFinite(this.volumes%5Bt.modulationImage%5D.cal_minNeg)%26%26isFinite(this.volumes%5Bt.modulationImage%5D.cal_maxNeg)%26%26(d%3Dthis.volumes%5Bt.modulationImage%5D.cal_minNeg%2Cu%3Dthis.volumes%5Bt.modulationImage%5D.cal_minNeg)%2Cd%3DMath.abs(d)%2Cu%3DMath.abs(u)%2Cd%3Eu%26%26(%5Bd%2Cu%5D%3D%5Bu%2Cd%5D)%3Bconst%20A%3D1%2F(u-d)%3Blet%20f%3DMath.abs(t.modulateAlpha)%3Bf%3DMath.max(f%2C1)%3Bconst%20g%3Dthis.volumes%5Bt.modulationImage%5D.frame4D*i%3Bfor(let%20t%3D0%3Bt%3Ci%3Bt%2B%2B)%7Bconst%20i%3Dh%5Bt%2Bg%5D*e.scl_slope%2Be.scl_inter%3Blet%20s%3D(i-n)*a%3Bc%26%26i%3C0%26%26(s%3D(Math.abs(i)-d)*A)%2Cs%3DMath.min(Math.max(s%2C0)%2C1)%2Cs%3D255*Math.pow(s%2Cf)%2Cr%5Bt%5D%3Ds%7Dthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D%2Cthis.gl.RED%2Cthis.gl.UNSIGNED_BYTE%2Cr)%7Delse%20l.debug(%22Modulation%20image%20dimensions%20do%20not%20match%20target%22)%7Delse%20this.gl.uniform1i(m.uniforms.modulation%2C0)%3Bif(this.gl.uniformMatrix4fv(m.uniforms.mtx%2C!1%2Ch)%2C!this.back.dims)throw%20new%20Error(%22back.dims%20undefined%22)%3Blet%20v%3D0%3B1002%3D%3D%3Ds.intent_code%26%26(v%3Dthis.opts.atlasOutline)%2Cthis.gl.uniform4fv(m.uniforms.xyzaFrac%2C%5B1%2Fthis.back.dims%5B1%5D%2C1%2Fthis.back.dims%5B2%5D%2C1%2Fthis.back.dims%5B3%5D%2Cv%5D)%2Cl.debug(%22back%20dims%3A%20%22%2Cthis.back.dims)%3Bfor(let%20t%3D0%3Bt%3Cthis.back.dims%5B3%5D%3Bt%2B%2B)%7Bconst%20e%3D1%2Fthis.back.dims%5B3%5D*(t%2B.5)%3Bthis.gl.uniform1f(m.uniforms.coordZ%2Ce)%2Cthis.gl.framebufferTextureLayer(this.gl.FRAMEBUFFER%2Cthis.gl.COLOR_ATTACHMENT0%2Co%2C0%2Ct)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%7Dif(this.gl.bindVertexArray(this.unusedVAO)%2Cthis.gl.deleteTexture(d)%2Cthis.gl.deleteTexture(p)%2Cthis.gl.deleteTexture(u)%2Cthis.gl.viewport(0%2C0%2Cthis.gl.canvas.width%2Cthis.gl.canvas.height)%2Cthis.gl.bindFramebuffer(this.gl.FRAMEBUFFER%2Cnull)%2Cthis.gl.deleteFramebuffer(c)%2C0%3D%3D%3De%26%26(this.volumeTexture%3Do%2Cthis.gradientTextureAmount%3E0%3Fthis.gradientGL(s)%3A(null!%3D%3Dthis.gradientTexture%26%26this.gl.deleteTexture(this.gradientTexture)%2Cthis.gradientTexture%3Dnull))%2C!this.renderShader)throw%20new%20Error(%22renderShader%20undefined%22)%3Bthis.renderShader.use(this.gl)%3Bconst%20x%3Dthis.sliceScale(!0)%2Cw%3Dx.vox%2CC%3Dx.volScale%3Bif(this.gl.uniform1f(this.renderShader.uniforms.overlays%2Cthis.overlays)%2Cthis.gl.uniform4fv(this.renderShader.uniforms.clipPlaneColor%2Cthis.opts.clipPlaneColor)%2Cthis.gl.uniform1f(this.renderShader.uniforms.clipThick%2Cthis.opts.clipThick)%2Cthis.gl.uniform3fv(this.renderShader.uniforms.clipLo%2Cthis.opts.clipVolumeLow)%2Cthis.gl.uniform3fv(this.renderShader.uniforms.clipHi%2Cthis.opts.clipVolumeHigh)%2Cthis.gl.uniform1f(this.renderShader.uniforms.backOpacity%2Cthis.volumes%5B0%5D.opacity)%2Cthis.gl.uniform1f(this.renderShader.uniforms.renderOverlayBlend%2Cthis.opts.renderOverlayBlend)%2Cthis.gl.uniform4fv(this.renderShader.uniforms.clipPlane%2Cthis.scene.clipPlane)%2Cthis.gl.uniform3fv(this.renderShader.uniforms.texVox%2Cw)%2Cthis.gl.uniform3fv(this.renderShader.uniforms.volScale%2CC)%2C!this.pickingImageShader)throw%20new%20Error(%22pickingImageShader%20undefined%22)%3Bthis.pickingImageShader.use(this.gl)%2Cthis.gl.uniform1f(this.pickingImageShader.uniforms.overlays%2Cthis.overlays.length)%2Cthis.gl.uniform3fv(this.pickingImageShader.uniforms.texVox%2Cw)%2Cthis.gl.uniform3fv(this.pickingImageShader.uniforms.clipLo%2Cthis.opts.clipVolumeLow)%2Cthis.gl.uniform3fv(this.pickingImageShader.uniforms.clipHi%2Cthis.opts.clipVolumeHigh)%3Blet%20b%3Dthis.sliceMMShader%3Bif(this.opts.isV1SliceShader%26%26(b%3Dthis.sliceV1Shader)%2C!b)throw%20new%20Error(%22slice%20shader%20undefined%22)%3Bb.use(this.gl)%2Cthis.gl.uniform1f(b.uniforms.overlays%2Cthis.overlays.length)%2Cthis.gl.uniform1f(b.uniforms.drawOpacity%2Cthis.drawOpacity)%2Cnull!%3D%3DA%26%26(this.gl.deleteTexture(A)%2Cthis.gl.activeTexture(Bi)%2Cthis.gl.bindTexture(this.gl.TEXTURE_2D%2Cthis.colormapTexture))%2Cthis.gl.uniform1i(b.uniforms.drawing%2C7)%2Cthis.gl.activeTexture(Ri)%2Cthis.gl.bindTexture(this.gl.TEXTURE_3D%2Cthis.drawTexture)%2Cthis.updateInterpolation(e)%7Dcolormaps()%7Breturn%20se.colormaps()%7DaddColormap(t%2Ce)%7Bse.addColormap(t%2Ce)%7DsetColormap(t%2Ce)%7Bconst%20i%3Dthis.getVolumeIndexByID(t)%3Bthis.volumes%5Bi%5D.colormap%3De%2Cthis.updateGLVolume()%7Didx(t%2Ce%2Ci%2Cs)%7Breturn%20i*s%5B0%5D*s%5B1%5D%2Be*s%5B0%5D%2Bt%7Dcheck_previous_slice(t%2Ce%2Ci%2Cs%2Cr%2Cn%2Ca%2Co)%7Bconst%20l%3Dnew%20Uint32Array(27)%3Blet%20h%3D0%3Bif(!r)return%200%3Bconst%20c%3Dt%5Bthis.idx(i%2Cs%2Cr%2Cn)%5D%3Bif(a%3E%3D6)%7Bconst%20a%3Dthis.idx(i%2Cs%2Cr-1%2Cn)%3Bc%3D%3D%3Dt%5Ba%5D%26%26(l%5Bh%2B%2B%5D%3De%5Ba%5D)%7Dif(a%3E%3D18)%7Bif(i)%7Bconst%20a%3Dthis.idx(i-1%2Cs%2Cr-1%2Cn)%3Bc%3D%3D%3Dt%5Ba%5D%26%26(l%5Bh%2B%2B%5D%3De%5Ba%5D)%7Dif(s)%7Bconst%20a%3Dthis.idx(i%2Cs-1%2Cr-1%2Cn)%3Bc%3D%3D%3Dt%5Ba%5D%26%26(l%5Bh%2B%2B%5D%3De%5Ba%5D)%7Dif(i%3Cn%5B0%5D-1)%7Bconst%20a%3Dthis.idx(i%2B1%2Cs%2Cr-1%2Cn)%3Bc%3D%3D%3Dt%5Ba%5D%26%26(l%5Bh%2B%2B%5D%3De%5Ba%5D)%7Dif(s%3Cn%5B1%5D-1)%7Bconst%20a%3Dthis.idx(i%2Cs%2B1%2Cr-1%2Cn)%3Bc%3D%3D%3Dt%5Ba%5D%26%26(l%5Bh%2B%2B%5D%3De%5Ba%5D)%7D%7Dif(26%3D%3D%3Da)%7Bif(i%26%26s)%7Bconst%20a%3Dthis.idx(i-1%2Cs-1%2Cr-1%2Cn)%3Bc%3D%3D%3Dt%5Ba%5D%26%26(l%5Bh%2B%2B%5D%3De%5Ba%5D)%7Dif(i%3Cn%5B0%5D-1%26%26s)%7Bconst%20a%3Dthis.idx(i%2B1%2Cs-1%2Cr-1%2Cn)%3Bc%3D%3D%3Dt%5Ba%5D%26%26(l%5Bh%2B%2B%5D%3De%5Ba%5D)%7Dif(i%26%26s%3Cn%5B1%5D-1)%7Bconst%20a%3Dthis.idx(i-1%2Cs%2B1%2Cr-1%2Cn)%3Bc%3D%3D%3Dt%5Ba%5D%26%26(l%5Bh%2B%2B%5D%3De%5Ba%5D)%7Dif(i%3Cn%5B0%5D-1%26%26s%3Cn%5B1%5D-1)%7Bconst%20a%3Dthis.idx(i%2B1%2Cs%2B1%2Cr-1%2Cn)%3Bc%3D%3D%3Dt%5Ba%5D%26%26(l%5Bh%2B%2B%5D%3De%5Ba%5D)%7D%7Dreturn%20h%3F(this.fill_tratab(o%2Cl%2Ch)%2Cl%5B0%5D)%3A0%7Ddo_initial_labelling(t%2Ce%2Ci)%7Blet%20s%3D1%3Blet%20r%3D8192%2Cn%3Dnew%20Uint32Array(r).fill(0)%3Bconst%20a%3Dnew%20Uint32Array(e%5B0%5D*e%5B1%5D*e%5B2%5D).fill(0)%2Co%3Dnew%20Uint32Array(27)%3Bfor(let%20l%3D0%3Bl%3Ce%5B2%5D%3Bl%2B%2B)for(let%20h%3D0%3Bh%3Ce%5B1%5D%3Bh%2B%2B)for(let%20c%3D0%3Bc%3Ce%5B0%5D%3Bc%2B%2B)%7Blet%20d%3D0%3Bconst%20m%3Dt%5Bthis.idx(c%2Ch%2Cl%2Ce)%5D%3Bif(0!%3D%3Dm)%7Bif(o%5B0%5D%3Dthis.check_previous_slice(t%2Ca%2Cc%2Ch%2Cl%2Ce%2Ci%2Cn)%2Co%5B0%5D%26%26(d%2B%3D1)%2Ci%3E%3D6)%7Bif(c)%7Bconst%20i%3Dthis.idx(c-1%2Ch%2Cl%2Ce)%3Bm%3D%3D%3Dt%5Bi%5D%26%26(o%5Bd%2B%2B%5D%3Da%5Bi%5D)%7Dif(h)%7Bconst%20i%3Dthis.idx(c%2Ch-1%2Cl%2Ce)%3Bm%3D%3D%3Dt%5Bi%5D%26%26(o%5Bd%2B%2B%5D%3Da%5Bi%5D)%7D%7Dif(i%3E%3D18)%7Bif(h%26%26c)%7Bconst%20i%3Dthis.idx(c-1%2Ch-1%2Cl%2Ce)%3Bm%3D%3D%3Dt%5Bi%5D%26%26(o%5Bd%2B%2B%5D%3Da%5Bi%5D)%7Dif(h%26%26c%3Ce%5B0%5D-1)%7Bconst%20i%3Dthis.idx(c%2B1%2Ch-1%2Cl%2Ce)%3Bm%3D%3D%3Dt%5Bi%5D%26%26(o%5Bd%2B%2B%5D%3Da%5Bi%5D)%7D%7Dif(d)a%5Bthis.idx(c%2Ch%2Cl%2Ce)%5D%3Do%5B0%5D%2Cthis.fill_tratab(n%2Co%2Cd)%3Belse%7Bif(a%5Bthis.idx(c%2Ch%2Cl%2Ce)%5D%3Ds%2Cs%3E%3Dr)%7Br%2B%3D8192%3Bconst%20t%3Dnew%20Uint32Array(r)%3Bt.set(n)%2Cn%3Dt%7Dn%5Bs-1%5D%3Ds%2Cs%2B%2B%7D%7D%7Dfor(let%20t%3D0%3Bt%3Cs-1%3Bt%2B%2B)%7Blet%20e%3Dt%3Bfor(%3Bn%5Be%5D!%3D%3De%2B1%3B)e%3Dn%5Be%5D-1%3Bn%5Bt%5D%3De%2B1%7Dreturn%5Bs-1%2Cn%2Ca%5D%7Dfill_tratab(t%2Ce%2Ci)%7Blet%20s%3D0%3Bconst%20r%3Dnew%20Uint32Array(i%2B5).fill(0)%3Blet%20n%3D2147483647%3Bfor(let%20a%3D0%3Ba%3Ci%3Ba%2B%2B)%7Blet%20i%3De%5Ba%5D%3Bfor(s%3D0%3Bt%5Bi-1%5D!%3D%3Di%3B)if(i%3Dt%5Bi-1%5D%2Cs%2B%2B%2Cs%3E100)%7Bl.info(%22%5CnOoh%20no!!%22)%3Bbreak%7Dr%5Ba%5D%3Di%2Cn%3DMath.min(n%2Ci)%7Dfor(let%20e%3D0%3Be%3Ci%3Be%2B%2B)t%5Br%5Be%5D-1%5D%3Dn%7Dtranslate_labels(t%2Ce%2Ci%2Cs)%7Bconst%20r%3De%5B0%5D*e%5B1%5D*e%5B2%5D%3Blet%20n%3D0%3Bconst%20a%3Dnew%20Uint32Array(r).fill(0)%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)n%3DMath.max(n%2Ci%5Bt%5D)%3Bconst%20o%3Dnew%20Uint32Array(n).fill(0)%3Blet%20l%3D0%3Bfor(let%20e%3D0%3Be%3Cr%3Be%2B%2B)t%5Be%5D%26%26(o%5Bi%5Bt%5Be%5D-1%5D-1%5D%7C%7C(l%2B%3D1%2Co%5Bi%5Bt%5Be%5D-1%5D-1%5D%3Dl)%2Ca%5Be%5D%3Do%5Bi%5Bt%5Be%5D-1%5D-1%5D)%3Breturn%5Bl%2Ca%5D%7Dlargest_original_cluster_labels(t%2Ce%2Ci)%7Bconst%20s%3Dt.length%2Cr%3Dnew%20Uint32Array(e%2B1).fill(0)%2Cn%3Dnew%20Uint32Array(e%2B1).fill(0)%3Bfor(let%20e%3D0%3Be%3Cs%3Be%2B%2B)%7Bconst%20s%3Dt%5Be%5D%2Ca%3Di%5Be%5D%3Br%5Ba%5D%3Ds%2Cn%5Ba%5D%2B%2B%7Dlet%20a%3D0%3Bfor(let%20t%3D0%3Bt%3Ce%2B1%3Bt%2B%2B)%7Bconst%20i%3Dr%5Bt%5D%3Ba%3DMath.max(a%2Ci)%3Bfor(let%20s%3D0%3Bs%3Ce%2B1%3Bs%2B%2B)s!%3D%3Dt%26%26i%3D%3D%3Dr%5Bs%5D%26%26(n%5Bt%5D%3Cn%5Bs%5D%7C%7Cn%5Bt%5D%3D%3D%3Dn%5Bs%5D%26%26t%3Cs)%26%26(r%5Bt%5D%3D0)%7Dconst%20o%3Dnew%20Uint32Array(s).fill(0)%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)o%5Bt%5D%3Dr%5Bi%5Bt%5D%5D%3Breturn%5Ba%2Co%5D%7Dbwlabel(t%2Ce%2Ci%3D26%2Cs%3D!1%2Cr%3D!1)%7Bconst%20n%3DDate.now()%2Ca%3De%5B0%5D*e%5B1%5D*e%5B2%5D%2Co%3Dnew%20Uint32Array(a).fill(0)%3Bif(!%5B6%2C18%2C26%5D.includes(i))return%20l.info(%22bwlabel%3A%20conn%20must%20be%206%2C%2018%20or%2026.%22)%2C%5B0%2Co%5D%3Bif(e%5B0%5D%3C2%7C%7Ce%5B1%5D%3C2%7C%7Ce%5B2%5D%3C1)return%20l.info(%22bwlabel%3A%20img%20must%20be%202%20or%203-dimensional%22)%2C%5B0%2Co%5D%3Bif(s)for(let%20e%3D0%3Be%3Ca%3Be%2B%2B)0!%3D%3Dt%5Be%5D%26%26(o%5Be%5D%3D1)%3Belse%20o.set(t)%3Blet%5Bh%2Cc%2Cd%5D%3Dthis.do_initial_labelling(o%2Ce%2Ci)%3Bvoid%200%3D%3D%3Dc%26%26(c%3Dnew%20Uint32Array)%3Bconst%5Bm%2Cu%5D%3Dthis.translate_labels(d%2Ce%2Cc%2Ch)%3Bif(l.info(i%2B%22%20neighbor%20clustering%20into%20%22%2Bm%2B%22%20regions%20in%20%22%2B(Date.now()-n)%2B%22ms%22)%2Cr)%7Bconst%5Bt%2Ce%5D%3Dthis.largest_original_cluster_labels(o%2Cm%2Cu)%3Breturn%5Bt%2Ce%5D%7Dreturn%5Bm%2Cu%5D%7Dasync%20createConnectedLabelImage(t%2Ce%3D26%2Ci%3D!1%2Cs%3D!1)%7Bconst%20r%3Dthis.getVolumeIndexByID(t)%2Cn%3DUint32Array.from(this.volumes%5Br%5D.dims%3F.slice(1%2C4)%3F%3F%5B%5D)%2Ca%3DUint32Array.from(this.volumes%5Br%5D.img%3F.slice()%3F%3F%5B%5D)%2C%5Bo%2Cl%5D%3Dthis.bwlabel(a%2Cn%2Ce%2Ci%2Cs)%2Ch%3Dthis.volumes%5Br%5D.clone()%3Bh.opacity%3D.5%2Ch.colormap%3D%22random%22%3Bfor(let%20t%3D0%3Bt%3Ch.img.length%3Bt%2B%2B)h.img%5Bt%5D%3Dl%5Bt%5D%3Breturn%20h.cal_min%3D0%2Ch.cal_max%3Do%2Ch%7Dasync%20scalecropUint8(t%2Ce%3D0%2Ci%3D255%2Cs%2Cr)%7Bconst%20n%3Dt.length%2Ca%3Dnew%20Uint8Array(n)%3Bfor(let%20o%3D0%3Bo%3Cn%3Bo%2B%2B)%7Blet%20n%3Dt%5Bo%5D%3Bn%3De%2Br*(n-s)%2Cn%3DMath.max(n%2Ce)%2Cn%3DMath.min(n%2Ci)%2Ca%5Bo%5D%3Dn%7Dreturn%20a%7Dasync%20scalecropFloat32(t%2Ce%3D0%2Ci%3D1%2Cs%2Cr)%7Bconst%20n%3Dt.length%2Ca%3Dnew%20Float32Array(n)%3Bfor(let%20o%3D0%3Bo%3Cn%3Bo%2B%2B)%7Blet%20n%3Dt%5Bo%5D%3Bn%3De%2Br*(n-s)%2Cn%3DMath.max(n%2Ce)%2Cn%3DMath.min(n%2Ci)%2Ca%5Bo%5D%3Dn%7Dreturn%20a%7DgetScale(t%2Ce%3D0%2Ci%3D255%2Cs%3D0%2Cr%3D.999)%7Blet%20n%3Dt.global_min%2Ca%3Dt.global_max%3Bif(2%3D%3D%3Dt.hdr.datatypeCode)return%5Bn%2C1%5D%3Bif((!isFinite(s)%7C%7C!isFinite(r))%26%26isFinite(t.cal_min)%26%26isFinite(t.cal_max)%26%26t.cal_max%3Et.cal_min)%7Bn%3Dt.cal_min%2Ca%3Dt.cal_max%3Bconst%20s%3D(i-e)%2F(a-n)%3Breturn%20l.info(%22%20Robust%20Rescale%3A%20%20min%3A%20%22%2Bn%2B%22%20%20max%3A%20%22%2Ba%2B%22%20scale%3A%20%22%2Bs)%2Cconsole.log(%22Robust%20Rescale%3A%20%20min%3A%20%22%2Bn%2B%22%20%20max%3A%20%22%2Ba%2B%22%20scale%3A%20%22%2Bs)%2C%5Bn%2Cs%5D%7Dconst%20o%3Dt.img%2Ch%3Dt.hdr.dims%5B1%5D*t.hdr.dims%5B2%5D*t.hdr.dims%5B3%5D%3Bif(1!%3D%3Dt.hdr.scl_slope%7C%7C0!%3D%3Dt.hdr.scl_inter)%7Bconst%20e%3Dt.img%2Ci%3Dnew%20Float32Array(t.img.length)%3Bfor(let%20s%3D0%3Bs%3Ch%3Bs%2B%2B)i%5Bs%5D%3De%5Bs%5D*t.hdr.scl_slope%2Bt.hdr.scl_inter%7Dif(n%3C0%26%26l.warn(%22WARNING%3A%20Input%20image%20has%20value(s)%20below%200.0%20!%22)%2Cl.info(%22%20Input%3A%20%20%20%20min%3A%20%22%2Bn%2B%22%20%20max%3A%20%22%2Ba)%2C0%3D%3D%3Ds%26%261%3D%3D%3Dr)return%5Bn%2C1%5D%3Blet%20c%3D0%3Bfor(let%20t%3D0%3Bt%3Ch%3Bt%2B%2B)Math.abs(o%5Bt%5D)%3E%3D1e-15%26%26c%2B%2B%3Bconst%20d%3D1e3%2Cm%3D(a-n)%2Fd%2Cu%3Dnew%20Array(d).fill(0)%3Bfor(let%20t%3D0%3Bt%3Ch%3Bt%2B%2B)%7Bconst%20e%3Do%5Bt%5D%3Blet%20i%3DMath.floor((e-n)%2Fm)%3Bi%3DMath.min(i%2C999)%2Cu%5Bi%5D%2B%2B%7Dconst%20A%3Dnew%20Array(d).fill(0)%3BA%5B0%5D%3Du%5B0%5D%3Bfor(let%20t%3D1%3Bt%3Cd%3Bt%2B%2B)A%5Bt%5D%3DA%5Bt-1%5D%2Bu%5Bt%5D%3Blet%20f%3DMath.floor(s*h)%2Cg%3D0%3Bfor(%3Bg%3Cd%26%26!(A%5Bg%5D%3E%3Df)%3B)g%2B%2B%3Bconst%20p%3Dn%3Bfor(n%3Dg*m%2Bp%2Cf%3Dh-Math.floor((1-r)*c)%2Cg%3D0%3Bg%3C999%26%26!(A%5Bg%2B1%5D%3E%3Df)%3B)g%2B%2B%3Ba%3Dg*m%2Bp%3Blet%20v%3D1%3Breturn%20n!%3D%3Da%26%26(v%3D(i-e)%2F(a-n))%2Cl.info(%22%20Rescale%3A%20%20min%3A%20%22%2Bn%2B%22%20%20max%3A%20%22%2Ba%2B%22%20scale%3A%20%22%2Bv)%2C%5Bn%2Cv%5D%7DconformVox2Vox(t%2Ce%2Cs%3D256%2Ca%3D1%2Co%3D!1)%7Bconst%20l%3De.flat()%2Ch%3Di.fromValues(l%5B0%5D%2Cl%5B1%5D%2Cl%5B2%5D%2Cl%5B3%5D%2Cl%5B4%5D%2Cl%5B5%5D%2Cl%5B6%5D%2Cl%5B7%5D%2Cl%5B8%5D%2Cl%5B9%5D%2Cl%5B10%5D%2Cl%5B11%5D%2Cl%5B12%5D%2Cl%5B13%5D%2Cl%5B14%5D%2Cl%5B15%5D)%2Cc%3Dn.fromValues(t%5B1%5D%2F2%2Ct%5B2%5D%2F2%2Ct%5B3%5D%2F2%2C1)%2Cd%3Dn.create()%2Cm%3Di.create()%3Bi.transpose(m%2Ch)%2Cn.transformMat4(d%2Cc%2Cm)%3Bconst%20u%3Dr.fromValues(d%5B0%5D%2Cd%5B1%5D%2Cd%5B2%5D)%2CA%3Dr.fromValues(a%2Ca%2Ca)%3Blet%20f%3Di.fromValues(-1%2C0%2C0%2C0%2C0%2C0%2C1%2C0%2C0%2C-1%2C0%2C0%2C0%2C0%2C0%2C1)%3Bo%26%26(f%3Di.fromValues(1%2C0%2C0%2C0%2C0%2C1%2C0%2C0%2C0%2C0%2C1%2C0%2C0%2C0%2C0%2C1))%2Ci.transpose(f%2Cf)%3Bconst%20g%3Dn.fromValues(s%2Cs%2Cs%2C1)%2Cp%3Di.create()%3Bi.scale(p%2Cf%2CA)%3Bconst%20v%3Dn.fromValues(g%5B0%5D%2Cg%5B1%5D%2Cg%5B2%5D%2C1)%3Bn.transformMat4(v%2Cv%2Cp)%2Cn.scale(v%2Cv%2C.5)%3Bconst%20x%3Dr.create()%3Br.subtract(x%2Cu%2Cr.fromValues(v%5B0%5D%2Cv%5B1%5D%2Cv%5B2%5D))%3Bconst%20w%3Di.create()%3Bi.transpose(w%2Cp)%2Cw%5B3%5D%3Dx%5B0%5D%2Cw%5B7%5D%3Dx%5B1%5D%2Cw%5B11%5D%3Dx%5B2%5D%3Bconst%20C%3Di.create()%3Bi.invert(C%2Cw)%3Bconst%20b%3Di.create()%3Bi.mul(b%2Ch%2CC)%3Bconst%20y%3Di.create()%3Breturn%20i.invert(y%2Cb)%2C%5Bw%2Cb%2Cy%5D%7Dasync%20createNiftiArray(t%3D%5B256%2C256%2C256%5D%2Ce%3D%5B1%2C1%2C1%5D%2Ci%3D%5B1%2C0%2C0%2C-128%2C0%2C1%2C0%2C-128%2C0%2C0%2C1%2C-128%2C0%2C0%2C0%2C1%5D%2Cs%3D2%2Cr%3Dnew%20Uint8Array)%7Breturn%20await%20Ze.createNiftiArray(t%2Ce%2Ci%2Cs%2Cr)%7Dasync%20niftiArray2NVImage(t%3Dnew%20Uint8Array)%7Breturn%20await%20Ze.loadFromUrl(%7Burl%3At%7D)%7Dasync%20loadFromUrl(t)%7Breturn%20await%20Ze.loadFromUrl(%7Burl%3At%7D)%7Dasync%20conform(t%2Ce%3D!1%2Ci%3D!0%2Cs%3D!1%2Cr%3D!1)%7Bconst%20n%3D256%2Ca%3Dthis.conformVox2Vox(t.hdr.dims%2Ct.hdr.affine.flat()%2Cn%2C1%2Ce)%2Co%3Da%5B0%5D%2Cl%3Da%5B2%5D%2Ch%3Dnew%20Float32Array(16777216)%2Cc%3Dnew%20Float32Array(t.img)%2Cd%3Dt.hdr.dims%5B1%5D*t.hdr.dims%5B2%5D*t.hdr.dims%5B3%5D%3Bif(1!%3D%3Dt.hdr.scl_slope%7C%7C0!%3D%3Dt.hdr.scl_inter)for(let%20e%3D0%3Be%3Cd%3Be%2B%2B)c%5Be%5D%3Dc%5Be%5D*t.hdr.scl_slope%2Bt.hdr.scl_inter%3Bconst%20m%3Dt.hdr.dims%5B1%5D%2Cu%3Dt.hdr.dims%5B2%5D%2CA%3Dt.hdr.dims%5B3%5D%2Cf%3Dm*u%3Blet%20g%3D-1%3Bfunction%20p(t%2Ce%2Ci)%7Breturn%20t%2Be*m%2Bi*f%7Dconst%20v%3Dl%5B0%5D%2Cx%3Dl%5B4%5D%2Cw%3Dl%5B8%5D%3Bif(i)for(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)for(let%20e%3D0%3Be%3Cn%3Be%2B%2B)%7Bconst%20i%3De*l%5B1%5D%2Bt*l%5B2%5D%2Bl%5B3%5D%2Cs%3De*l%5B5%5D%2Bt*l%5B6%5D%2Bl%5B7%5D%2Cr%3De*l%5B9%5D%2Bt*l%5B10%5D%2Bl%5B11%5D%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)%7Bconst%20e%3Dt*v%2Bi%2Cn%3Dt*x%2Bs%2Ca%3Dt*w%2Br%2Co%3DMath.floor(e)%2Cl%3DMath.floor(n)%2Cd%3DMath.floor(a)%3Bif(g%2B%2B%2Co%3C0%7C%7Cl%3C0%7C%7Cd%3C0)continue%3Bconst%20C%3DMath.ceil(e)%2Cb%3DMath.ceil(n)%2Cy%3DMath.ceil(a)%3Bif(C%3E%3Dm%7C%7Cb%3E%3Du%7C%7Cy%3E%3DA)continue%3Bconst%20I%3De-o%2CM%3Dn-l%2CD%3Da-d%2CF%3D1-I%2CV%3D1-M%2CT%3D1-D%2CE%3Dp(o%2Cl%2Cd)%3Blet%20S%3D0%3BS%2B%3Dc%5BE%5D*F*V*T%2CS%2B%3Dc%5BE%2Bf%5D*F*V*D%2CS%2B%3Dc%5BE%2Bm%5D*F*M*T%2CS%2B%3Dc%5BE%2Bm%2Bf%5D*F*M*D%2CS%2B%3Dc%5BE%2B1%5D*I*V*T%2CS%2B%3Dc%5BE%2B1%2Bf%5D*I*V*D%2CS%2B%3Dc%5BE%2B1%2Bm%5D*I*M*T%2CS%2B%3Dc%5BE%2B1%2Bm%2Bf%5D*I*M*D%2Ch%5Bg%5D%3DS%7D%7Delse%20for(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)for(let%20e%3D0%3Be%3Cn%3Be%2B%2B)%7Bconst%20i%3De*l%5B1%5D%2Bt*l%5B2%5D%2Bl%5B3%5D%2Cs%3De*l%5B5%5D%2Bt*l%5B6%5D%2Bl%5B7%5D%2Cr%3De*l%5B9%5D%2Bt*l%5B10%5D%2Bl%5B11%5D%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)%7Bconst%20e%3DMath.round(t*v%2Bi)%2Cn%3DMath.round(t*x%2Bs)%2Ca%3DMath.round(t*w%2Br)%3Bg%2B%2B%2Ce%3C0%7C%7Cn%3C0%7C%7Ca%3C0%7C%7C(e%3E%3Dm%7C%7Cn%3E%3Du%7C%7Ca%3E%3DA%7C%7C(h%5Bg%5D%3Dc%5Bp(e%2Cn%2Ca)%5D))%7D%7Dlet%20C%3D0%3Br%26%26(C%3DNaN)%3Blet%20b%3Dnew%20Uint8Array%3Bif(s)%7Bconst%20e%3Dawait%20this.getScale(t%2C0%2C1%2CC)%2Ci%3Dawait%20this.scalecropFloat32(h%2C0%2C1%2Ce%5B0%5D%2Ce%5B1%5D)%3Bb%3Dawait%20this.createNiftiArray(%5Bn%2Cn%2Cn%5D%2C%5B1%2C1%2C1%5D%2CArray.from(o)%2C16%2Cnew%20Uint8Array(i.buffer))%7Delse%7Bconst%20e%3Dawait%20this.getScale(t%2C0%2C255%2CC)%2Ci%3Dawait%20this.scalecropUint8(h%2C0%2C255%2Ce%5B0%5D%2Ce%5B1%5D)%3Bb%3Dawait%20this.createNiftiArray(%5Bn%2Cn%2Cn%5D%2C%5B1%2C1%2C1%5D%2CArray.from(o)%2C2%2Ci)%7Dreturn%20await%20this.niftiArray2NVImage(b)%7DsetRenderDrawAmbientOcclusion(t)%7Bif(!this.renderShader)throw%20new%20Error(%22renderShader%20undefined%22)%3Bthis.renderDrawAmbientOcclusion%3Dt%2Cthis.renderShader.use(this.gl)%2Cthis.gl.uniform1fv(this.renderShader.uniforms.renderDrawAmbientOcclusion%2C%5Bthis.renderDrawAmbientOcclusion%2C1%5D)%2Cthis.drawScene()%7DsetColorMap(t%2Ce)%7Bthis.setColormap(t%2Ce)%7DsetColormapNegative(t%2Ce)%7Bconst%20i%3Dthis.getVolumeIndexByID(t)%3Bthis.volumes%5Bi%5D.colormapNegative%3De%2Cthis.updateGLVolume()%7DsetModulationImage(t%2Ce%2Ci%3D0)%7Bconst%20s%3Dthis.getVolumeIndexByID(t)%3Blet%20r%3Dnull%3Be.length%3E0%26%26(r%3Dthis.getVolumeIndexByID(e))%2Cthis.volumes%5Bs%5D.modulationImage%3Dr%2Cthis.volumes%5Bs%5D.modulateAlpha%3Di%2Cthis.updateGLVolume()%7DsetGamma(t%3D1)%7Bthis.scene.gamma%3Dt%2Cse.gamma%3Dt%2Cthis.updateGLVolume()%7Dasync%20loadDeferred4DVolumes(t)%7Bconst%20e%3Dthis.getVolumeIndexByID(t)%2Ci%3Dthis.volumes%5Be%5D%3Bif(i.nTotalFrame4D%3C%3Di.nFrame4D)return%3Blet%20s%3Bs%3Di.fileObject%3Fawait%20Ze.loadFromFile(%7Bfile%3Ai.fileObject%7D)%3Aawait%20Ze.loadFromUrl(%7Burl%3Ai.url%7D)%2Cs%26%26(i.img%3Ds.img.slice()%2Ci.nTotalFrame4D%3Ds.nTotalFrame4D%2Ci.nFrame4D%3Ds.nFrame4D%2Cthis.updateGLVolume())%7DsetFrame4D(t%2Ce)%7Bconst%20i%3Dthis.getVolumeIndexByID(t)%2Cs%3Dthis.volumes%5Bi%5D%3Be%3Es.nFrame4D-1%26%26(e%3Ds.nFrame4D-1)%2Ce%3C0%26%26(e%3D0)%2Ce!%3D%3Ds.frame4D%26%26(s.frame4D%3De%2Cthis.updateGLVolume()%2Cthis.onFrameChange(s%2Ce)%2Cthis.createOnLocationChange())%7DgetFrame4D(t)%7Bconst%20e%3Dthis.getVolumeIndexByID(t)%3Breturn%20this.volumes%5Be%5D.frame4D%7DcolormapFromKey(t)%7Breturn%20se.colormapFromKey(t)%7Dcolormap(t%3D%22%22%2Ce%3D!1)%7Breturn%20se.colormap(t%2Ce)%7DcreateColormapTexture(t%3Dnull%2Ce%3D0%2Ci%3D256)%7Breturn%20null!%3D%3Dt%26%26this.gl.deleteTexture(t)%2Ce%3C1%7C%7Ci%3C1%3Fnull%3A(t%3Dthis.gl.createTexture()%2Cthis.gl.activeTexture(Bi)%2Cthis.gl.bindTexture(this.gl.TEXTURE_2D%2Ct)%2Cthis.gl.texStorage2D(this.gl.TEXTURE_2D%2C1%2Cthis.gl.RGBA8%2Ci%2Ce)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_MIN_FILTER%2Cthis.gl.LINEAR)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_MAG_FILTER%2Cthis.gl.LINEAR)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_WRAP_R%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_WRAP_S%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT%2C1)%2Ct)%7DaddColormapList(t%3D%22%22%2Ce%3DNaN%2Ci%3DNaN%2Cs%3D!1%2Cr%3D!1%2Cn%3D!0%2Ca%3D!1)%7Bt.length%3C1%26%26(n%3D!1)%2Cthis.colormapLists.push(%7Bname%3At%2Cmin%3Ae%2Cmax%3Ai%2CalphaThreshold%3As%2Cnegative%3Ar%2Cvisible%3An%2Cinvert%3Aa%7D)%7DrefreshColormaps()%7Bif(this.colormapLists%3D%5B%5D%2Cthis.volumes.length%3C1%26%26this.meshes.length%3C1)return%3Bconst%20t%3Dthis.volumes.length%3Bif(t%3E0)for(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bconst%20t%3Dthis.volumes%5Be%5D%2Ci%3Dxi(t.cal_min%2Ct.cal_max%2Ct.cal_minNeg%2Ct.cal_maxNeg)%3Bthis.addColormapList(t.colormapNegative%2Ci%5B0%5D%2Ci%5B1%5D%2Cvoid%200!%3D%3Dt.alphaThreshold%2C!0%2Ct.colorbarVisible%2Ct.colormapInvert)%2Cthis.addColormapList(t.colormap%2Ct.cal_min%2Ct.cal_max%2Cvoid%200!%3D%3Dt.alphaThreshold%2C!1%2Ct.colorbarVisible%2Ct.colormapInvert)%7Dconst%20e%3Dthis.meshes.length%3Bif(e%3E0)for(let%20t%3D0%3Bt%3Ce%3Bt%2B%2B)%7Bconst%20e%3Dthis.meshes%5Bt%5D%3Bif(!e.colorbarVisible)continue%3Bconst%20i%3De.layers.length%3Bif(%22edgeColormap%22in%20e%26%26%22edges%22in%20e%26%26void%200!%3D%3De.edges)%7Bconst%20t%3Dxi(e.edgeMin%2Ce.edgeMax%2CNaN%2CNaN)%3Bthis.addColormapList(e.edgeColormapNegative%2Ct%5B0%5D%2Ct%5B1%5D%2C!1%2C!0%2C!0%2Ce.colormapInvert)%2Cthis.addColormapList(e.edgeColormap%2Ce.edgeMin%2Ce.edgeMax%2C!1%2C!1%2C!0%2Ce.colormapInvert)%7Dif(!(i%3C1))for(let%20e%3D0%3Be%3Ci%3Be%2B%2B)%7Bconst%20i%3Dthis.meshes%5Bt%5D.layers%5Be%5D%3Bif(!i.colorbarVisible)continue%3Bif(i.colormap.length%3C1)continue%3Bconst%20s%3Dxi(i.cal_min%2Ci.cal_max%2Ci.cal_minNeg%2Ci.cal_maxNeg)%3Bthis.addColormapList(i.colormapNegative%2Cs%5B0%5D%2Cs%5B1%5D%2Ci.alphaThreshold%2C!0%2C!0%2Ci.colormapInvert)%2Cthis.addColormapList(i.colormap%2Ci.cal_min%2Ci.cal_max%2Ci.alphaThreshold%2C!1%2C!0%2Ci.colormapInvert)%7D%7Dconst%20i%3Dthis.colormapLists.length%3Bif(i%3C1)return%3Bthis.colormapTexture%3Dthis.createColormapTexture(this.colormapTexture%2Ci%2B1)%3Blet%20s%3Dnew%20Uint8ClampedArray%3Bfunction%20r(t)%7Bconst%20e%3Dnew%20Uint8ClampedArray(s.length%2Bt.length)%3Be.set(s)%2Ce.set(t%2Cs.length)%2Cs%3De%7Dfor(let%20t%3D0%3Bt%3Ci%3Bt%2B%2B)r(Array.from(this.colormap(this.colormapLists%5Bt%5D.name%2Cthis.colormapLists%5Bt%5D.invert)))%3Breturn%20r(Array.from(this.drawLut.lut))%2Cthis.gl.texSubImage2D(this.gl.TEXTURE_2D%2C0%2C0%2C0%2C256%2Ci%2B1%2Cthis.gl.RGBA%2Cthis.gl.UNSIGNED_BYTE%2Cs)%2Cthis%7DsliceScale(t%3D!1)%7Blet%20e%3Dthis.screenFieldOfViewMM(0)%3Bt%26%26(e%3Dthis.screenFieldOfViewVox(0))%3Bconst%20i%3DMath.max(e%5B0%5D%2CMath.max(e%5B1%5D%2Ce%5B2%5D))%2Cs%3D%5Be%5B0%5D%2Fi%2Ce%5B1%5D%2Fi%2Ce%5B2%5D%2Fi%5D%3Bif(!this.back%3F.dims)throw%20new%20Error(%22back.dims%20undefined%22)%3Breturn%7BvolScale%3As%2Cvox%3A%5Bthis.back.dims%5B1%5D%2Cthis.back.dims%5B2%5D%2Cthis.back.dims%5B3%5D%5D%2ClongestAxis%3Ai%2CdimsMM%3Ae%7D%7DtileIndex(t%2Ce)%7Bfor(let%20i%3D0%3Bi%3Cthis.screenSlices.length%3Bi%2B%2B)%7Bconst%20s%3Dthis.screenSlices%5Bi%5D.leftTopWidthHeight%3Bif(t%3Es%5B0%5D%26%26e%3Es%5B1%5D%26%26t%3Cs%5B0%5D%2Bs%5B2%5D%26%26e%3Cs%5B1%5D%2Bs%5B3%5D)return%20i%7Dreturn-1%7DinRenderTile(t%2Ce)%7Bconst%20i%3Dthis.tileIndex(t%2Ce)%3Breturn%20i%3E%3D0%26%264%3D%3D%3Dthis.screenSlices%5Bi%5D.axCorSag%3Fi%3A-1%7DsliceScroll3D(t%3D0)%7Bif(0!%3D%3Dt)%7Bif(this.volumes.length%3E0%26%26this.scene.clipPlaneDepthAziElev%5B0%5D%3C1.8)%7Bconst%20e%3Dthis.scene.clipPlaneDepthAziElev.slice()%3Breturn%20t%3E0%26%26(e%5B0%5D%3DMath.min(1.5%2Ce%5B0%5D%2B.025))%2Ct%3C0%26%26(e%5B0%5D%3DMath.max(-1.5%2Ce%5B0%5D-.025))%2Ce%5B0%5D!%3D%3Dthis.scene.clipPlaneDepthAziElev%5B0%5D%3F(this.scene.clipPlaneDepthAziElev%3De%2Cthis.setClipPlane(this.scene.clipPlaneDepthAziElev))%3Avoid%200%7Dt%3E0%26%26(this.scene.volScaleMultiplier%3DMath.min(2%2C1.1*this.scene.volScaleMultiplier))%2Ct%3C0%26%26(this.scene.volScaleMultiplier%3DMath.max(.5%2C.9*this.scene.volScaleMultiplier))%2Cthis.drawScene()%7D%7DdeleteThumbnail()%7Bthis.bmpTexture%26%26(this.gl.deleteTexture(this.bmpTexture)%2Cthis.bmpTexture%3Dnull%2Cthis.thumbnailVisible%3D!1)%7DinGraphTile(t%2Ce)%7Bif(this.graph.opacity%3C%3D0%7C%7Cthis.volumes.length%3C1%7C%7Cthis.volumes%5B0%5D.nFrame4D%3C1%7C%7C!this.graph.plotLTWH)return!1%3Bif(this.graph.plotLTWH%5B2%5D%3C1%7C%7Cthis.graph.plotLTWH%5B3%5D%3C1)return!1%3Bconst%20i%3D%5B(t-this.graph.LTWH%5B0%5D)%2Fthis.graph.LTWH%5B2%5D%2C(e-this.graph.LTWH%5B1%5D)%2Fthis.graph.LTWH%5B3%5D%5D%3Breturn%20i%5B0%5D%3E0%26%26i%5B1%5D%3E0%26%26i%5B0%5D%3C%3D1%26%26i%5B1%5D%3C%3D1%7DmouseClick(t%2Ce%2Ci%3D0%2Cs%3D!0)%7Bif(t*%3Dthis.uiData.dpr%2Ce*%3Dthis.uiData.dpr%2Cthis.canvas.focus()%2Cthis.thumbnailVisible)return%20this.thumbnailVisible%3D!1%2Cvoid%20Promise.all(%5Bthis.loadVolumes(this.deferredVolumes)%2Cthis.loadMeshes(this.deferredMeshes)%5D).catch((t%3D%3E%7Bthrow%20t%7D))%3Bif(this.inGraphTile(t%2Ce))%7Bif(!this.graph.plotLTWH)throw%20new%20Error(%22plotLTWH%20undefined%22)%3Bconst%20i%3D%5B(t-this.graph.plotLTWH%5B0%5D)%2Fthis.graph.plotLTWH%5B2%5D%2C(e-this.graph.plotLTWH%5B1%5D)%2Fthis.graph.plotLTWH%5B3%5D%5D%3Bif(i%5B0%5D%3E0%26%26i%5B1%5D%3E0%26%26i%5B0%5D%3C%3D1%26%26i%5B1%5D%3C%3D1)%7Bconst%20t%3DMath.round(i%5B0%5D*(this.volumes%5B0%5D.nFrame4D-1))%3Breturn%20void%20this.setFrame4D(this.volumes%5B0%5D.id%2Ct)%7Di%5B0%5D%3E.5%26%26i%5B1%5D%3E1%26%26this.loadDeferred4DVolumes(this.volumes%5B0%5D.id).catch((t%3D%3E%7Bthrow%20t%7D))%7Delse%7Bif(this.inRenderTile(t%2Ce)%3E%3D0)return%20this.sliceScroll3D(i)%2Cvoid%20this.drawScene()%3Bif(!(this.screenSlices.length%3C1%7C%7Cthis.gl.canvas.height%3C1%7C%7Cthis.gl.canvas.width%3C1))for(let%20n%3D0%3Bn%3Cthis.screenSlices.length%3Bn%2B%2B)%7Bconst%20a%3Dthis.screenSlices%5Bn%5D.axCorSag%3Bif(this.drawPenAxCorSag%3E%3D0%26%26this.drawPenAxCorSag!%3D%3Da)continue%3Bif(a%3E2)continue%3Bconst%20o%3Dthis.screenXY2TextureFrac(t%2Ce%2Cn%2C!1)%3Bif(!(o%5B0%5D%3C0))%7Bif(!s)return%20this.scene.crosshairPos%5B2-a%5D%3Di%2Cvoid%20this.drawScene()%3Bif(0!%3D%3Di)%7Blet%20t%3D1%3Bi%3C0%26%26(t%3D-1)%3Bconst%20e%3D%5B0%2C0%2C0%5D%3Breturn%20e%5B2-a%5D%3Dt%2Cthis.moveCrosshairInVox(e%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D)%2Cthis.drawScene()%2Cvoid%20this.createOnLocationChange(a)%7Dif(this.opts.isForceMouseClickToVoxelCenters%3Fthis.scene.crosshairPos%3Dr.clone(this.vox2frac(this.frac2vox(o)))%3Athis.scene.crosshairPos%3Dr.clone(o)%2Cthis.opts.drawingEnabled)%7Bconst%20t%3Dthis.frac2vox(this.scene.crosshairPos)%2Ce%3Dthis.frac2mm(this.scene.crosshairPos)%3Bif(this.opts.clickToSegment)%7Bconst%20i%3Dthis.opts.clickToSegmentRadius%2Cs%3Dthis.opts.clickToSegmentSteps%2Cr%3Dthis.opts.clickToSegmentBright%3FNumber.POSITIVE_INFINITY%3ANumber.NEGATIVE_INFINITY%3Bthis.drawPenFillPts%3D%5B%5D%2Cthis.drawPenAxCorSag%3Da%3Bfor(let%20n%3D1%3Bn%3C%3Ds%3Bn%2B%2B)%7Bconst%20a%3Dn%2Fs*2*Math.PI%2Co%3De%5B0%5D%2Bi*Math.cos(a)%2Cl%3De%5B1%5D%2Bi*Math.sin(a)%2Ch%3De%5B2%5D%2Cc%3Dthis.back.mm2vox(%5Bo%2Cl%2Ch%5D)%5B0%5D%2Cd%3Dthis.back.mm2vox(%5Bo%2Cl%2Ch%5D)%5B1%5D%2Cm%3Dthis.back.mm2vox(%5Bo%2Cl%2Ch%5D)%5B2%5D%3Bthis.drawPt(c%2Cd%2Cm%2Cthis.opts.penValue)%2Cthis.drawPenFillPts.push(%5Bc%2Cd%2Ct%5B2%5D%5D)%2Cn%3D%3D%3Ds%26%26this.drawFloodFill(%5Bc%2Cd%2Ct%5B2%5D%5D%2C0%2Cr%2CNaN%2CNaN%2Cthis.opts.floodFillNeighbors)%7Dthis.drawScene()%2Cthis.createOnLocationChange(a)%3Bconst%20n%3Dthis.getDescriptives(0%2C%5B%5D%2C!0)%3Breturn%20void%20this.onClickToSegment(%7BmL%3An.volumeML%2Cmm3%3An.volumeMM3%7D)%7Dif(!isFinite(this.opts.penValue)%7C%7Cthis.opts.penValue%3C0%7C%7CObject.is(this.opts.penValue%2C-0))return%20void(isFinite(this.opts.penValue)%3Fthis.drawFloodFill(t%2CMath.abs(this.opts.penValue)%2Cthis.opts.penValue%2CNaN%2CNaN%2Cthis.opts.floodFillNeighbors)%3Athis.drawFloodFill(t%2C0%2Cthis.opts.penValue%2CNaN%2CNaN%2Cthis.opts.floodFillNeighbors))%3Bif(isNaN(this.drawPenLocation%5B0%5D))this.drawPenAxCorSag%3Da%2Cthis.drawPenFillPts%3D%5B%5D%2Cthis.drawPt(...t%2Cthis.opts.penValue)%3Belse%7Bif(t%5B0%5D%3D%3D%3Dthis.drawPenLocation%5B0%5D%26%26t%5B1%5D%3D%3D%3Dthis.drawPenLocation%5B1%5D%26%26t%5B2%5D%3D%3D%3Dthis.drawPenLocation%5B2%5D)return%3Bthis.drawPenLine(t%2Cthis.drawPenLocation%2Cthis.opts.penValue)%7Dthis.drawPenLocation%3Dt%2Cthis.opts.isFilledPen%26%26this.drawPenFillPts.push(t)%2Cthis.refreshDrawing(!1)%7Dreturn%20this.drawScene()%2Cvoid%20this.createOnLocationChange(a)%7D%7D%7D%7DdrawRuler()%7Blet%20t%3D%5B%5D%2Ce%3D%5B%5D%3Bfor(let%20i%3D0%3Bi%3Cthis.screenSlices.length%3Bi%2B%2B)if(4!%3D%3Dthis.screenSlices%5Bi%5D.axCorSag%26%26this.screenSlices%5Bi%5D.fovMM.length%3E1)%7Be%3Dthis.screenSlices%5Bi%5D.leftTopWidthHeight%2Ct%3Dthis.screenSlices%5Bi%5D.fovMM%3Bbreak%7Dif(e.length%3C4)return%3Bconst%20i%3D100%2Ft%5B0%5D*e%5B2%5D%2Cs%3De%5B0%5D%2B.5*e%5B2%5D-.5*i%2Cr%3De%5B1%5D%2Be%5B3%5D-2*this.opts.rulerWidth%2Cn%3D%5Bs%2Cr%2Cs%2Bi%2Cr%5D%3Bthis.drawRuler10cm(n)%7DdrawRuler10cm(t)%7Bif(!this.lineShader)throw%20new%20Error(%22lineShader%20undefined%22)%3Bthis.gl.bindVertexArray(this.genericVAO)%2Cthis.lineShader.use(this.gl)%2Cthis.gl.uniform4fv(this.lineShader.uniforms.lineColor%2Cthis.opts.rulerColor)%2Cthis.gl.uniform2fv(this.lineShader.uniforms.canvasWidthHeight%2C%5Bthis.gl.canvas.width%2Cthis.gl.canvas.height%5D)%2Cthis.gl.uniform1f(this.lineShader.uniforms.thickness%2Cthis.opts.rulerWidth)%2Cthis.gl.uniform4fv(this.lineShader.uniforms.startXYendXY%2Ct)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%3Bconst%20e%3D-.1*(t%5B0%5D-t%5B2%5D)%2Ci%3Dt%5B1%5D%2Cs%3Di-2*this.opts.rulerWidth%2Cr%3Di-4*this.opts.rulerWidth%3Bfor(let%20n%3D0%3Bn%3C11%3Bn%2B%2B)%7Bconst%20a%3Dt%5B0%5D%2Bn*e%2Co%3D%5Ba%2Ci%2Ca%2Cs%5D%3Bn%255%3D%3D0%26%26(o%5B3%5D%3Dr)%2Cthis.gl.uniform4fv(this.lineShader.uniforms.startXYendXY%2Co)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%7Dthis.gl.bindVertexArray(this.unusedVAO)%7DscreenXY2mm(t%2Ce%2Ci%3D-1)%7Blet%20s%3Bfor(let%20r%3D0%3Br%3Cthis.screenSlices.length%3Br%2B%2B)%7Blet%20a%3Dr%3Bi%3E%3D0%26%26(a%3Di)%3Bif(this.screenSlices%5Ba%5D.axCorSag%3E2)continue%3Bconst%20o%3Dthis.screenSlices%5Ba%5D.leftTopWidthHeight%3Bif(t%3Co%5B0%5D%7C%7Ce%3Co%5B1%5D%7C%7Ct%3Eo%5B0%5D%2Bo%5B2%5D%7C%7Ce%3Eo%5B1%5D%2Bo%5B3%5D)continue%3Bif(s%3Dthis.screenXY2TextureFrac(t%2Ce%2Ca%2C!1)%2Cs%5B0%5D%3C0)continue%3Bconst%20l%3Dthis.frac2mm(s)%3Breturn%20n.fromValues(l%5B0%5D%2Cl%5B1%5D%2Cl%5B2%5D%2Ca)%7Dreturn%20n.fromValues(NaN%2CNaN%2CNaN%2CNaN)%7DdragForPanZoom(t)%7Bconst%20e%3Dthis.screenXY2mm(t%5B2%5D%2Ct%5B3%5D)%3Bif(isNaN(e%5B0%5D))return%3Bconst%20i%3Dthis.screenXY2mm(t%5B0%5D%2Ct%5B1%5D%2Ce%5B3%5D)%3Bif(isNaN(i%5B0%5D)%7C%7CisNaN(e%5B0%5D)%7C%7CisNaN(e%5B3%5D))return%3Bconst%20s%3Dn.create()%2Cr%3Dthis.uiData.pan2DxyzmmAtMouseDown%5B3%5D%3Bn.sub(s%2Ce%2Ci)%2Cthis.scene.pan2Dxyzmm%5B0%5D%3Dthis.uiData.pan2DxyzmmAtMouseDown%5B0%5D%2Br*s%5B0%5D%2Cthis.scene.pan2Dxyzmm%5B1%5D%3Dthis.uiData.pan2DxyzmmAtMouseDown%5B1%5D%2Br*s%5B1%5D%2Cthis.scene.pan2Dxyzmm%5B2%5D%3Dthis.uiData.pan2DxyzmmAtMouseDown%5B2%5D%2Br*s%5B2%5D%2Cthis.canvas.focus()%7DdragForCenterButton(t)%7Bthis.dragForPanZoom(t)%7DdragForSlicer3D(t)%7Blet%20e%3Dthis.uiData.pan2DxyzmmAtMouseDown%5B3%5D%3Be%2B%3D.01*(t%5B3%5D-t%5B1%5D)%2Ce%3DMath.max(e%2C.1)%2Ce%3DMath.min(e%2C10)%3Bconst%20i%3Dthis.scene.pan2Dxyzmm%5B3%5D-e%3Bthis.opts.yoke3Dto2DZoom%26%26(this.scene.volScaleMultiplier%3De)%2Cthis.scene.pan2Dxyzmm%5B3%5D%3De%3Bconst%20s%3Dthis.frac2mm(this.scene.crosshairPos)%3Bthis.scene.pan2Dxyzmm%5B0%5D%2B%3Di*s%5B0%5D%2Cthis.scene.pan2Dxyzmm%5B1%5D%2B%3Di*s%5B1%5D%2Cthis.scene.pan2Dxyzmm%5B2%5D%2B%3Di*s%5B2%5D%7DdrawMeasurementTool(t)%7Bconst%20e%3Dthis.gl%3Bif(e.bindVertexArray(this.genericVAO)%2Ce.depthFunc(e.ALWAYS)%2Ce.enable(e.BLEND)%2Ce.blendFunc(e.SRC_ALPHA%2Ce.ONE_MINUS_SRC_ALPHA)%2C!this.lineShader)throw%20new%20Error(%22lineShader%20undefined%22)%3Bthis.lineShader.use(this.gl)%2Ce.uniform4fv(this.lineShader.uniforms.lineColor%2Cthis.opts.rulerColor)%2Ce.uniform2fv(this.lineShader.uniforms.canvasWidthHeight%2C%5Be.canvas.width%2Ce.canvas.height%5D)%2Ce.uniform1f(this.lineShader.uniforms.thickness%2Cthis.opts.rulerWidth)%2Ce.uniform4fv(this.lineShader.uniforms.startXYendXY%2Ct)%2Ce.drawArrays(e.TRIANGLE_STRIP%2C0%2C4)%3Bconst%20i%3Dthis.opts.rulerColor%3Bi%5B3%5D%3D1%2Ce.uniform4fv(this.lineShader.uniforms.lineColor%2Ci)%3Bconst%20s%3Dthis.opts.rulerWidth%3Be.uniform1f(this.lineShader.uniforms.thickness%2C2*s)%3Blet%20n%3D%5Bt%5B0%5D%2Ct%5B1%5D-s%2Ct%5B0%5D%2Ct%5B1%5D%2Bs%5D%3Be.uniform4fv(this.lineShader.uniforms.startXYendXY%2Cn)%2Ce.drawArrays(e.TRIANGLE_STRIP%2C0%2C4)%2Cn%3D%5Bt%5B2%5D%2Ct%5B3%5D-s%2Ct%5B2%5D%2Ct%5B3%5D%2Bs%5D%2Ce.uniform4fv(this.lineShader.uniforms.startXYendXY%2Cn)%2Ce.drawArrays(e.TRIANGLE_STRIP%2C0%2C4)%3Blet%20a%3Dthis.canvasPos2frac(%5Bt%5B0%5D%2Ct%5B1%5D%5D)%2Co%3Dthis.canvasPos2frac(%5Bt%5B2%5D%2Ct%5B3%5D%5D)%3Bif(a%5B0%5D%3E%3D0%26%26o%5B0%5D%3E%3D0)%7Bconst%20e%3Dthis.frac2mm(a)%3Ba%3Dr.fromValues(e%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D)%3Bconst%20s%3Dthis.frac2mm(o)%3Bo%3Dr.fromValues(s%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D)%3Bconst%20n%3Dr.create()%3Br.sub(n%2Ca%2Co)%3Bconst%20l%3Dr.len(n)%3Blet%20h%3D2%3Bl%3E9%26%26(h%3D1)%2Cl%3E99%26%26(h%3D0)%3Bconst%20c%3Dl.toFixed(h)%3Bthis.drawTextBetween(t%2Cc%2C1%2Ci)%7De.bindVertexArray(this.unusedVAO)%7DdrawRect(t%2Ce%3D%5B1%2C0%2C0%2C-1%5D)%7Bif(e%5B3%5D%3C0%26%26(e%3Dthis.opts.crosshairColor)%2C!this.rectShader)throw%20new%20Error(%22rectShader%20undefined%22)%3Bthis.rectShader.use(this.gl)%2Cthis.gl.enable(this.gl.BLEND)%2Cthis.gl.uniform4fv(this.rectShader.uniforms.lineColor%2Ce)%2Cthis.gl.uniform2fv(this.rectShader.uniforms.canvasWidthHeight%2C%5Bthis.gl.canvas.width%2Cthis.gl.canvas.height%5D)%2Cthis.gl.uniform4f(this.rectShader.uniforms.leftTopWidthHeight%2Ct%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2Ct%5B3%5D)%2Cthis.gl.bindVertexArray(this.genericVAO)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%2Cthis.gl.bindVertexArray(this.unusedVAO)%7DdrawCircle(t%2Ce%3Dthis.opts.fontColor%2Ci%3D1)%7Bif(!this.circleShader)throw%20new%20Error(%22circleShader%20undefined%22)%3Bthis.circleShader.use(this.gl)%2Cthis.gl.enable(this.gl.BLEND)%2Cthis.gl.uniform4fv(this.circleShader.uniforms.circleColor%2Ce)%2Cthis.gl.uniform2fv(this.circleShader.uniforms.canvasWidthHeight%2C%5Bthis.gl.canvas.width%2Cthis.gl.canvas.height%5D)%2Cthis.gl.uniform4f(this.circleShader.uniforms.leftTopWidthHeight%2Ct%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2Ct%5B3%5D)%2Cthis.gl.uniform1f(this.circleShader.uniforms.fillPercent%2Ci)%2Cthis.gl.uniform4fv(this.circleShader.uniforms.circleColor%2Ce)%2Cthis.gl.bindVertexArray(this.genericVAO)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%2Cthis.gl.bindVertexArray(this.unusedVAO)%7DdrawSelectionBox(t)%7Bthis.drawRect(t%2Cthis.opts.selectionBoxColor)%7DeffectiveCanvasHeight()%7Breturn%20this.gl.canvas.height-this.colorbarHeight%7DeffectiveCanvasWidth()%7Breturn%20this.gl.canvas.width-this.getLegendPanelWidth()%7DgetAllLabels()%7Bconst%20t%3Dthis.meshes.filter((t%3D%3E%22connectome%22%3D%3D%3Dt.type)).flatMap((t%3D%3Et.nodes)).map((t%3D%3Et.label)).filter((t%3D%3Evoid%200!%3D%3Dt))%3Breturn%5B...this.document.labels%2C...t%5D%7DgetConnectomeLabels()%7Bconst%20t%3Dthis.meshes.filter((t%3D%3E%22connectome%22%3D%3D%3Dt.type)).flatMap((t%3D%3Et.nodes)).map((t%3D%3Et.label)).filter((t%3D%3Evoid%200!%3D%3Dt))%2Ce%3Dthis.document.labels.filter((t%3D%3Enull%3D%3Dt.anchor%7C%7C0%3D%3D%3Dt.anchor))%2Ci%3Dnew%20Set(t)%3Bfor(const%20t%20of%20e)i.add(t)%3Breturn%20Array.from(i)%7DgetBulletMarginWidth()%7Blet%20t%3D0%3Bconst%20e%3Dthis.getConnectomeLabels()%3Bif(0%3D%3D%3De.length)return%200%3Bconst%20i%3D1%3D%3D%3De.length%3Fe%5B0%5D.style.bulletScale%3Ae.reduce(((t%2Ce)%3D%3Et.style.bulletScale%3Ee.style.bulletScale%3Ft%3Ae)).style.bulletScale%2Cs%3D1%3D%3D%3De.length%3Fe%5B0%5D%3Ae.reduce(((t%2Ce)%3D%3E%7Bconst%20i%3Dthis.opts.textHeight*this.gl.canvas.height*t.style.textScale%2Cs%3Dthis.opts.textHeight*this.gl.canvas.height*e.style.textScale%3Breturn%20this.textHeight(i%2Ct.text)%3Ethis.textHeight(s%2Ce.text)%3Ft%3Ae%7D))%2Cr%3Dthis.opts.textHeight*this.gl.canvas.height*s.style.textScale%3Breturn%20t%3Dthis.textHeight(r%2Cs.text)*i%2Ct%2B%3Dr%2Ct%7DgetLegendPanelWidth()%7Bconst%20t%3Dthis.getConnectomeLabels()%3Bif(!this.opts.showLegend%7C%7C0%3D%3D%3Dt.length)return%200%3Bconst%20e%3Dthis.opts.textHeight*this.gl.canvas.height*1%3Blet%20i%3D0%3Bconst%20s%3Dt.reduce(((t%2Ce)%3D%3E%7Bconst%20i%3Dthis.opts.textHeight*this.gl.canvas.height*t.style.textScale%2Cs%3Dthis.opts.textHeight*this.gl.canvas.height*e.style.textScale%3Breturn%20this.textWidth(i%2Ct.text)%3Ethis.textWidth(s%2Ce.text)%3Ft%3Ae%7D))%2Cr%3Dthis.opts.textHeight*this.gl.canvas.height*s.style.textScale%2Cn%3Dthis.textWidth(r%2Cs.text)%2Ca%3Dthis.getBulletMarginWidth()%3Breturn%20n%26%26(i%3Da%2Bn%2Ci%2B%3D2*e)%2Ci%3E%3Dthis.gl.canvas.width%3F0%3Ai%7DgetLegendPanelHeight()%7Bconst%20t%3Dthis.getConnectomeLabels()%3Blet%20e%3D0%3Bconst%20i%3Dthis.opts.textHeight*this.gl.canvas.height*1%3Bfor(const%20i%20of%20t)%7Bconst%20t%3Dthis.opts.textHeight*this.gl.canvas.height*i.style.textScale%3Be%2B%3Dthis.textHeight(t%2Ci.text)%7Dreturn%20e%26%26(e%2B%3Di%2F2*(t.length%2B1))%2Ce%7DreserveColorbarPanel()%7Blet%20t%3DMath.max(this.opts.textHeight%2C.01)%3Bt*%3DMath.min(this.gl.canvas.height%2Cthis.gl.canvas.width)%3Bconst%20e%3D3*t%2Ci%3D%5B0%2Cthis.gl.canvas.height-e%2Cthis.gl.canvas.width%2Ce%5D%3Breturn%20this.colorbarHeight%3Di%5B3%5D%2B1%2Ci%7DdrawColorbarCore(t%3D0%2Ce%3D%5B0%2C0%2C0%2C0%5D%2Ci%3D!1%2Cs%3D0%2Cr%3D1%2Cn)%7Bif(e%5B2%5D%3C%3D0%7C%7Ce%5B3%5D%3C%3D0)return%3Blet%20a%3DMath.max(this.opts.textHeight%2C.01)%3Ba*%3DMath.min(this.gl.canvas.height%2Cthis.gl.canvas.width)%3Blet%20o%3Da%3Bconst%20l%3D3*a%3Blet%20h%3Da%3Bif(e%5B3%5D%3Cl)%7Bif(e%5B3%5D%3C3)return%3Bo%3D1%2Ch%3De%5B3%5D-2%7Dthis.gl.disable(this.gl.DEPTH_TEST)%2Cthis.colorbarHeight%3De%5B3%5D%2B1%3Bconst%20c%3D%5Be%5B0%5D%2Bo%2Ce%5B1%5D%2Ce%5B2%5D-2*o%2Ch%5D%2Cd%3D%5Bc%5B0%5D-1%2Cc%5B1%5D-1%2Cc%5B2%5D%2B2%2Cc%5B3%5D%2B2%5D%3Bif(this.drawRect(d%2Cthis.opts.crosshairColor)%2C!this.colorbarShader)throw%20new%20Error(%22colorbarShader%20undefined%22)%3Bthis.colorbarShader.use(this.gl)%2Cthis.gl.activeTexture(Bi)%2Cthis.gl.bindTexture(this.gl.TEXTURE_2D%2Cthis.colormapTexture)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_MIN_FILTER%2Cthis.gl.NEAREST)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_MAG_FILTER%2Cthis.gl.NEAREST)%3Bconst%20m%3Dt%3Bif(this.gl.uniform1f(this.colorbarShader.uniforms.layer%2Cm)%2Cthis.gl.uniform2fv(this.colorbarShader.uniforms.canvasWidthHeight%2C%5Bthis.gl.canvas.width%2Cthis.gl.canvas.height%5D)%2Cthis.gl.disable(this.gl.CULL_FACE)%2Ci)%7Bconst%20t%3D%5Bc%5B0%5D%2Bc%5B2%5D%2Cc%5B1%5D%2C-c%5B2%5D%2Cc%5B3%5D%5D%3Bthis.gl.uniform4fv(this.colorbarShader.uniforms.leftTopWidthHeight%2Ct)%7Delse%20this.gl.uniform4fv(this.colorbarShader.uniforms.leftTopWidthHeight%2Cc)%3Bthis.gl.bindVertexArray(this.genericVAO)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%2Cthis.gl.bindVertexArray(this.unusedVAO)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_MIN_FILTER%2Cthis.gl.LINEAR)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_MAG_FILTER%2Cthis.gl.LINEAR)%3Blet%20u%3D0%3Bif(n%26%26r%3C0%26%26i%3F(u%3Dr%2Cr%3D0)%3An%26%26s%3E0%26%26(u%3Ds%2Cs%3D0)%2Cs%3D%3D%3Dr%7C%7Ca%3C1)return%3Bconst%20A%3DMath.abs(r-s)%3Blet%5Bf%2Cg%5D%3Dpi(s%2Cr)%3Bg%3Cs%26%26(g%2B%3Df)%3Blet%20p%3Dg%3Bconst%20v%3D%5B0%2Cc%5B1%5D%2Bc%5B3%5D-.5*a%2C2%2C.75*a%5D%2Cx%3Dv%5B1%5D%2Bv%5B3%5D%3Bfor(%3Bp%3C%3Dr%3B)%7Bv%5B0%5D%3Dc%5B0%5D%2B(p-s)%2FA*c%5B2%5D%2Cthis.drawRect(v)%3Bconst%20t%3D(1*p).toFixed(6).replace(%2F%5C.%3F0*%24%2F%2C%22%22)%3Bthis.drawTextBelow(%5Bv%5B0%5D%2Cx%5D%2Ct)%2Cp%2B%3Df%7Dif(0!%3D%3Du)%7Bconst%20t%3D%5Bc%5B0%5D%2B(u-s)%2FA*c%5B2%5D%2Cc%5B1%5D-.25*c%5B3%5D%2C2%2C1.5*c%5B3%5D%5D%3Bthis.drawRect(t)%7D%7DdrawColorbar()%7Bconst%20t%3Dthis.colormapLists%2Ce%3Dt.length%3Bif(e%3C1)return%3Blet%20i%3D0%3Bfor(let%20s%3D0%3Bs%3Ce%3Bs%2B%2B)t%5Bs%5D.visible%26%26i%2B%2B%3Bif(i%3C1)return%3Blet%20s%3Dthis.reserveColorbarPanel()%2Cr%3DMath.max(this.opts.textHeight%2C.01)%3Br*%3DMath.min(this.gl.canvas.height%2Cthis.gl.canvas.width)%3Bconst%20n%3D3*r%3Blet%20a%3Ds%5B2%5D%2Fi%3B(s%5B2%5D%3C%3D0%7C%7Cs%5B3%5D%3C%3D0)%26%26(a%3Dthis.gl.canvas.width%2Fi%2Cs%3D%5B0%2Cthis.gl.canvas.height-n%2Ca%2Cn%5D)%2Cs%5B2%5D%3Da%3Bfor(let%20i%3D0%3Bi%3Ce%3Bi%2B%2B)t%5Bi%5D.visible%26%26(this.drawColorbarCore(i%2Cs%2Ct%5Bi%5D.negative%2Ct%5Bi%5D.min%2Ct%5Bi%5D.max%2Ct%5Bi%5D.alphaThreshold)%2Cs%5B0%5D%2B%3Da)%7DtextWidth(t%2Ce)%7Bif(!e)return%200%3Blet%20i%3D0%3Bconst%20s%3D(new%20TextEncoder).encode(e)%3Bfor(let%20r%3D0%3Br%3Ce.length%3Br%2B%2B)i%2B%3Dt*this.fontMets.mets%5Bs%5Br%5D%5D.xadv%3Breturn%20i%7DtextHeight(t%2Ce)%7Bif(!e)return%200%3Bconst%20i%3Dnew%20Set(Array.from(e))%2Cs%3D(new%20TextEncoder).encode(Array.from(i).join(%22%22))%3Breturn%20t*Object.values(this.fontMets.mets).filter(((t%2Ce)%3D%3Es.includes(e))).reduce(((t%2Ce)%3D%3Et.lbwh%5B3%5D%3Ee.lbwh%5B3%5D%3Ft%3Ae)).lbwh%5B3%5D%7DdrawChar(t%2Ce%2Ci)%7Bif(!this.fontShader)throw%20new%20Error(%22fontShader%20undefined%22)%3Bconst%20s%3Dthis.fontMets.mets%5Bi%5D%2Cr%3Dt%5B0%5D%2Be*s.lbwh%5B0%5D%2Cn%3D-e*s.lbwh%5B1%5D%2Ca%3De*s.lbwh%5B2%5D%2Co%3De*s.lbwh%5B3%5D%2Cl%3Dt%5B1%5D%2B(n-o)%2Be%3Breturn%20this.gl.uniform4f(this.fontShader.uniforms.leftTopWidthHeight%2Cr%2Cl%2Ca%2Co)%2Cthis.gl.uniform4fv(this.fontShader.uniforms.uvLeftTopWidthHeight%2Cs.uv_lbwh)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%2Ce*s.xadv%7DdrawLoadingText(t)%7Bif(!this.canvas)throw%20new%20Error(%22canvas%20undefined%22)%3Bthis.gl.viewport(0%2C0%2Cthis.gl.canvas.width%2Cthis.gl.canvas.height)%2Cthis.gl.enable(this.gl.CULL_FACE)%2Cthis.gl.enable(this.gl.BLEND)%2Cthis.drawTextBelow(%5Bthis.canvas.width%2F2%2Cthis.canvas.height%2F2%5D%2Ct%2C3)%7DdrawText(t%2Ce%2Ci%3D1%2Cs%3Dnull)%7Bif(this.opts.textHeight%3C%3D0)return%3Bif(!this.fontShader)throw%20new%20Error(%22fontShader%20undefined%22)%3Bthis.fontShader.use(this.gl)%3Bconst%20r%3Dthis.opts.textHeight*Math.min(this.gl.canvas.height%2Cthis.gl.canvas.width)*i%3Bthis.gl.enable(this.gl.BLEND)%2Cthis.gl.uniform2f(this.fontShader.uniforms.canvasWidthHeight%2Cthis.gl.canvas.width%2Cthis.gl.canvas.height)%2Cnull%3D%3D%3Ds%26%26(s%3Dthis.opts.fontColor)%2Cthis.gl.uniform4fv(this.fontShader.uniforms.fontColor%2Cs)%3Blet%20n%3Dr%2Fthis.fontMets.size*this.fontMets.distanceRange%3Bn%3DMath.max(n%2C1)%2Cthis.gl.uniform1f(this.fontShader.uniforms.screenPxRange%2Cn)%3Bconst%20a%3D(new%20TextEncoder).encode(e)%3Bthis.gl.bindVertexArray(this.genericVAO)%3Bfor(let%20i%3D0%3Bi%3Ce.length%3Bi%2B%2B)t%5B0%5D%2B%3Dthis.drawChar(t%2Cr%2Ca%5Bi%5D)%3Bthis.gl.bindVertexArray(this.unusedVAO)%7DdrawTextRight(t%2Ce%2Ci%3D1%2Cs%3Dnull)%7Bthis.opts.textHeight%3C%3D0%7C%7C(t%5B1%5D-%3D.5*this.opts.textHeight*this.gl.canvas.height%2Cthis.drawText(t%2Ce%2Ci%2Cs))%7DdrawTextLeft(t%2Ce%2Ci%3D1%2Cs%3Dnull)%7Bif(this.opts.textHeight%3C%3D0)return%3Bconst%20r%3Dthis.opts.textHeight*this.gl.canvas.height*i%3Bt%5B0%5D-%3Dthis.textWidth(r%2Ce)%2Ct%5B1%5D-%3D.5*r%2Cthis.drawText(t%2Ce%2Ci%2Cs)%7DdrawTextRightBelow(t%2Ce%2Ci%3D1%2Cs%3Dnull)%7Bthis.opts.textHeight%3C%3D0%7C%7Cthis.drawText(t%2Ce%2Ci%2Cs)%7DdrawTextBetween(t%2Ce%2Ci%3D1%2Cs%3Dnull)%7Bif(this.opts.textHeight%3C%3D0)return%3Bconst%20r%3D%5B.5*(t%5B0%5D%2Bt%5B2%5D)%2C.5*(t%5B1%5D%2Bt%5B3%5D)%5D%2Cn%3Dthis.opts.textHeight*this.gl.canvas.height*i%2Ca%3Dthis.textWidth(n%2Ce)%3Br%5B0%5D-%3D.5*a%2Cr%5B1%5D-%3D.5*n%3Bconst%20o%3D%5Br%5B0%5D-1%2Cr%5B1%5D-1%2Ca%2B2%2Cn%2B2%5D%3Blet%20l%3Ds%3Bnull%3D%3D%3Dl%26%26(l%3Dthis.opts.crosshairColor)%2Cl%3Dl%26%26l%5B0%5D%2Bl%5B1%5D%2Bl%5B2%5D%3E.8%3F%5B0%2C0%2C0%2C.5%5D%3A%5B1%2C1%2C1%2C.5%5D%2Cthis.drawRect(o%2Cl)%2Cthis.drawText(r%2Ce%2Ci%2Cs)%7DdrawTextBelow(t%2Ce%2Ci%3D1%2Cs%3Dnull)%7Bif(this.opts.textHeight%3C%3D0)return%3Bif(!this.canvas)throw%20new%20Error(%22canvas%20undefined%22)%3Blet%20r%3Dthis.opts.textHeight*this.gl.canvas.height*i%2Cn%3Dthis.textWidth(r%2Ce)%3Bn%3Ethis.canvas.width%26%26(i*%3D(this.canvas.width-2)%2Fn%2Cr%3Dthis.opts.textHeight*this.gl.canvas.height*i%2Cn%3Dthis.textWidth(r%2Ce))%2Ct%5B0%5D-%3D.5*this.textWidth(r%2Ce)%2Ct%5B0%5D%3DMath.max(t%5B0%5D%2C1)%2Ct%5B0%5D%3DMath.min(t%5B0%5D%2Cthis.canvas.width-n-1)%2Cthis.drawText(t%2Ce%2Ci%2Cs)%7DupdateInterpolation(t%2Ce%3D!1)%7Blet%20i%3Dthis.gl.LINEAR%3B!e%26%26this.opts.isNearestInterpolation%26%26(i%3Dthis.gl.NEAREST)%2C0%3D%3D%3Dt%3Fthis.gl.activeTexture(Si)%3Athis.gl.activeTexture(Ui)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_MIN_FILTER%2Ci)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_MAG_FILTER%2Ci)%7DsetAtlasOutline(t)%7Bthis.opts.atlasOutline%3Dt%2Cthis.updateGLVolume()%2Cthis.drawScene()%7DsetInterpolation(t)%7Bthis.opts.isNearestInterpolation%3Dt%3Bconst%20e%3Dthis.volumes.length%3Bif(!(e%3C1))%7Bfor(let%20t%3D0%3Bt%3Ce%3Bt%2B%2B)this.updateInterpolation(t)%3Bthis.drawScene()%7D%7DcalculateMvpMatrix2D(t%2Ce%2Cs%2Cn%3D1%2F0%2Ca%3D0%2Co%3D0%2Cl%3D0%2Ch)%7Bthis.gl.viewport(t%5B0%5D%2Cthis.gl.canvas.height-(t%5B1%5D%2Bt%5B3%5D)%2Ct%5B2%5D%2Ct%5B3%5D)%3Blet%20c%3De%5B0%5D%2Cd%3Ds%5B0%5D%2Cm%3D%5Bc%2Ce%5B1%5D%5D%2Cu%3D%5Bd-c%2Cs%5B1%5D-e%5B1%5D%5D%3Bh%26%26(m%3D%5Bs%5B0%5D%2Ce%5B1%5D%5D%2Cu%3D%5Be%5B0%5D-s%5B0%5D%2Cs%5B1%5D-e%5B1%5D%5D%2Cc%3D-s%5B0%5D%2Cd%3D-e%5B0%5D)%3Bconst%20A%3D2*Math.max(Math.abs(e%5B2%5D)%2CMath.abs(s%5B2%5D))%2Cf%3Di.create()%3Blet%20g%3D.01%2Cp%3D8*A%3Bif(n!%3D%3D1%2F0)%7Blet%20t%3Dh%3B0!%3D%3Dl%7C%7C0!%3D%3Do%26%26180!%3D%3Do%7C%7C(t%3D!t)%3Blet%20e%3D1.8*A-a%3Bt%7C%7C(e%3D1.8*A%2Ba)%2Cg%3De-n%2Cp%3De%2Bn%7Di.ortho(f%2Cc%2Cd%2Ce%5B1%5D%2Cs%5B1%5D%2Cg%2Cp)%3Bconst%20v%3Di.create()%3Bv%5B0%5D%3D-1%3Bconst%20x%3Dr.fromValues(0%2C0%2C1.8*-A)%3Bi.translate(v%2Cv%2Cx)%2Ci.rotateX(v%2Cv%2Cvi(270-l))%2Ci.rotateZ(v%2Cv%2Cvi(o-180))%3Bconst%20w%3Di.create()%3Bi.invert(w%2Cv)%3Bconst%20C%3Di.create()%3Bi.transpose(C%2Cw)%3Bconst%20b%3Di.create()%3Breturn%20i.multiply(b%2Cf%2Cv)%2C%7BmodelViewProjectionMatrix%3Ab%2CmodelMatrix%3Av%2CnormalMatrix%3AC%2CleftTopMM%3Am%2CfovMM%3Au%7D%7DswizzleVec3MM(t%2Ce)%7Breturn%201%3D%3D%3De%3Ft%3Dwi(t%2C%5B0%2C2%2C1%5D)%3A2%3D%3D%3De%26%26(t%3Dwi(t%2C%5B1%2C2%2C0%5D))%2Ct%7DscreenFieldOfViewVox(t%3D0)%7Bconst%20e%3Dr.clone(this.volumeObject3D.fieldOfViewDeObliqueMM)%3Breturn%20this.swizzleVec3MM(e%2Ct)%7DscreenFieldOfViewMM(t%3D0%2Ce%3D!1)%7Bif(!e%26%26!this.opts.isSliceMM)return%20this.screenFieldOfViewVox(t)%3Bconst%20i%3Dthis.volumeObject3D.extentsMin%2Cs%3Dthis.volumeObject3D.extentsMax%3Blet%20n%3Dr.fromValues(i%5B0%5D%2Ci%5B1%5D%2Ci%5B2%5D)%2Ca%3Dr.fromValues(s%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D)%3Bn%3Dthis.swizzleVec3MM(n%2Ct)%2Ca%3Dthis.swizzleVec3MM(a%2Ct)%3Bconst%20o%3Dr.create()%3Breturn%20r.subtract(o%2Ca%2Cn)%2Co%7DscreenFieldOfViewExtendedVox(t%3D0)%7Bconst%20e%3Dthis.volumes%5B0%5D.extentsMinOrtho%2Cs%3Dthis.volumes%5B0%5D.extentsMaxOrtho%3Blet%20n%3Dr.fromValues(e%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D)%2Ca%3Dr.fromValues(s%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D)%3Bconst%20o%3Di.create()%3Bn%3Dthis.swizzleVec3MM(n%2Ct)%2Ca%3Dthis.swizzleVec3MM(a%2Ct)%3Bconst%20l%3Dr.create()%3Breturn%20r.subtract(l%2Ca%2Cn)%2C%7BmnMM%3An%2CmxMM%3Aa%2Crotation%3Ao%2CfovMM%3Al%7D%7DscreenFieldOfViewExtendedMM(t%3D0)%7Bif(!this.volumeObject3D)throw%20new%20Error(%22volumeObject3D%20undefined%22)%3Bconst%20e%3Dthis.volumeObject3D.extentsMin%2Cs%3Dthis.volumeObject3D.extentsMax%3Blet%20n%3Dr.fromValues(e%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D)%2Ca%3Dr.fromValues(s%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D)%3Bconst%20o%3Di.create()%3Bn%3Dthis.swizzleVec3MM(n%2Ct)%2Ca%3Dthis.swizzleVec3MM(a%2Ct)%3Bconst%20l%3Dr.create()%3Breturn%20r.subtract(l%2Ca%2Cn)%2C%7BmnMM%3An%2CmxMM%3Aa%2Crotation%3Ao%2CfovMM%3Al%7D%7DdrawSliceOrientationText(t%2Ce%2Ci%3D%5BNaN%2CNaN%5D)%7Bthis.gl.viewport(0%2C0%2Cthis.gl.canvas.width%2Cthis.gl.canvas.height)%3Blet%20s%3D%22S%22%3B0%3D%3D%3De%26%26(s%3D%22A%22)%3Blet%20r%3Dthis.opts.isRadiologicalConvention%3F%22R%22%3A%22L%22%3Bif(2%3D%3D%3De%26%26(r%3Dthis.opts.sagittalNoseLeft%3F%22A%22%3A%22P%22)%2Cthis.opts.isCornerOrientationText)return%20void%20this.drawTextRightBelow(%5Bt%5B0%5D%2Ct%5B1%5D%5D%2Cr%2Bs)%3Blet%20n%3D!0%2Ca%3D!0%3Bif(!isNaN(i%5B0%5D))%7Bconst%20e%3Dthis.opts.textHeight*this.gl.canvas.height%2B2%3Bi%5B1%5D%3Ee%26%26(this.drawTextBelow(%5Bt%5B0%5D%2B.5*t%5B2%5D%2Ct%5B1%5D%2Bi%5B1%5D-e%5D%2Cs)%2Cn%3D!1)%3Bconst%20o%3Dthis.textWidth(e%2Cr)%2B2%3Bi%5B0%5D%3Eo%26%26(this.drawTextRight(%5Bt%5B0%5D%2Bi%5B0%5D-o%2Ct%5B1%5D%2B.5*t%5B3%5D%5D%2Cr)%2Ca%3D!1)%7Dn%26%26this.drawTextBelow(%5Bt%5B0%5D%2B.5*t%5B2%5D%2Ct%5B1%5D%5D%2Cs)%2Ca%26%26this.drawTextRight(%5Bt%5B0%5D%2Ct%5B1%5D%2B.5*t%5B3%5D%5D%2Cr)%7DxyMM2xyzMM(t%2Ce)%7Blet%20i%3D2%3B1%3D%3D%3Dt%26%26(i%3D1)%2C2%3D%3D%3Dt%26%26(i%3D0)%3Blet%20s%3D%5B0%2C0%2C0%5D%2Cn%3D%5B1%2C1%2C0%5D%2Ca%3D%5B1%2C0%2C1%5D%3Bs%5Bi%5D%3De%2Cn%5Bi%5D%3De%2Ca%5Bi%5D%3De%2Cs%3Dthis.frac2mm(s)%2Cn%3Dthis.frac2mm(n)%2Ca%3Dthis.frac2mm(a)%2Cs%3Dthis.swizzleVec3MM(r.fromValues(s%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D)%2Ct)%2Cn%3Dthis.swizzleVec3MM(r.fromValues(n%5B0%5D%2Cn%5B1%5D%2Cn%5B2%5D)%2Ct)%2Ca%3Dthis.swizzleVec3MM(r.fromValues(a%5B0%5D%2Ca%5B1%5D%2Ca%5B2%5D)%2Ct)%3Bconst%20o%3D(n%5B0%5D-s%5B0%5D)*(a%5B1%5D-s%5B1%5D)-(a%5B0%5D-s%5B0%5D)*(n%5B1%5D-s%5B1%5D)%3Blet%20l%3D(n%5B0%5D-s%5B0%5D)*(a%5B2%5D-s%5B2%5D)-(a%5B0%5D-s%5B0%5D)*(n%5B2%5D-s%5B2%5D)%3Bl%2F%3Do%3Blet%20h%3D(n%5B1%5D-s%5B1%5D)*(a%5B2%5D-s%5B2%5D)-(a%5B1%5D-s%5B1%5D)*(n%5B2%5D-s%5B2%5D)%3Bh%2F%3Do%3Bconst%20c%3D%5B0%2C0%2C0%2C0%2C0%5D%3Breturn%20c%5B0%5D%3Ds%5B0%5D%2Cc%5B1%5D%3Ds%5B1%5D%2Cc%5B2%5D%3Ds%5B2%5D%2Cc%5B3%5D%3Dh%2Cc%5B4%5D%3Dl%2Cc%7Ddraw2DMain(t%2Ce%2Cs%3DNaN)%7Blet%20n%3Dthis.volumes%5B0%5D.frac2mm.slice()%2Ca%3Dthis.screenFieldOfViewExtendedMM(e)%2Co%3Di.create()%3Bthis.opts.isSliceMM%7C%7C(n%3Dthis.volumes%5B0%5D.frac2mmOrtho.slice()%2Co%3Di.clone(this.volumes%5B0%5D.mm2ortho)%2Ca%3Dthis.screenFieldOfViewExtendedVox(e))%3Blet%20l%3Dthis.opts.isRadiologicalConvention%26%26e%3C2%3Bs%3D%3D%3D1%2F0%7C%7Cs%3D%3D%3D-1%2F0%3F(l%3Ds!%3D%3D1%2F0%2C1%3D%3D%3De%26%26(l%3D!l))%3Athis.opts.sagittalNoseLeft%26%262%3D%3D%3De%26%26(l%3D!l)%3Blet%20h%3D0%2Cc%3D0%3B2%3D%3D%3De%3Fc%3Dl%3F90%3A-90%3A1%3D%3D%3De%3Fc%3Dl%3F180%3A0%3A(c%3Dl%3F180%3A0%2Ch%3Dl%3F-90%3A90)%3Bconst%20d%3Dthis.gl%3Blet%20m%3D!1%3Bif(0%3D%3D%3Dt%5B2%5D%7C%7C0%3D%3D%3Dt%5B3%5D)%7Bm%3D!0%3Bconst%20e%3Dd.canvas.width%2Fa.fovMM%5B0%5D%2Ci%3Dd.canvas.height%2Fa.fovMM%5B1%5D%2Cs%3DMath.min(e%2Ci)%2Cr%3De%2Fs%2Cn%3Di%2Fs%3Ba.fovMM%5B0%5D*%3Dr%2Ca.fovMM%5B1%5D*%3Dn%3Blet%20o%3D.5*(a.mnMM%5B0%5D%2Ba.mxMM%5B0%5D)%3Ba.mnMM%5B0%5D%3Do-.5*a.fovMM%5B0%5D%2Ca.mxMM%5B0%5D%3Do%2B.5*a.fovMM%5B0%5D%2Co%3D.5*(a.mnMM%5B1%5D%2Ba.mxMM%5B1%5D)%2Ca.mnMM%5B1%5D%3Do-.5*a.fovMM%5B1%5D%2Ca.mxMM%5B1%5D%3Do%2B.5*a.fovMM%5B1%5D%2Ct%3D%5B0%2C0%2Cd.canvas.width%2Cd.canvas.height%5D%7Dif(isNaN(s))%7Bconst%20t%3Dthis.scene.pan2Dxyzmm%2Ci%3Dthis.swizzleVec3MM(r.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D)%2Ce)%2Cs%3Dthis.scene.pan2Dxyzmm%5B3%5D%3Ba.mnMM%5B0%5D-%3Di%5B0%5D%2Ca.mxMM%5B0%5D-%3Di%5B0%5D%2Ca.mnMM%5B1%5D-%3Di%5B1%5D%2Ca.mxMM%5B1%5D-%3Di%5B1%5D%2Ca.mnMM%5B0%5D%2F%3Ds%2Ca.mxMM%5B0%5D%2F%3Ds%2Ca.mnMM%5B1%5D%2F%3Ds%2Ca.mxMM%5B1%5D%2F%3Ds%7Dlet%20u%3D2%3B1%3D%3D%3De%26%26(u%3D1)%2C2%3D%3D%3De%26%26(u%3D0)%3Blet%20A%3Dthis.scene.crosshairPos%5Bu%5D%2Cf%3Dthis.frac2mm(this.scene.crosshairPos)%3Bif(!isNaN(s)%26%26s!%3D%3D1%2F0%26%26s!%3D%3D-1%2F0)%7Bf%3Dthis.frac2mm(%5B.5%2C.5%2C.5%5D)%2Cf%5Bu%5D%3Ds%3BA%3Dthis.mm2frac(f)%5Bu%5D%7Dconst%20g%3Df%5Bu%5D%3Bd.clear(d.DEPTH_BUFFER_BIT)%3Blet%20p%3Dthis.calculateMvpMatrix2D(t%2Ca.mnMM%2Ca.mxMM%2C1%2F0%2C0%2Cc%2Ch%2Cl)%3Bif(s%3D%3D%3D1%2F0%7C%7Cs%3D%3D%3D-1%2F0)%7Bconst%20i%3Dt.slice()%3Bthis.draw3D(t%2Cp.modelViewProjectionMatrix%2Cp.modelMatrix%2Cp.normalMatrix%2Cc%2Ch)%3Bconst%20s%3Dthis.screenSlices%5Bthis.screenSlices.length-1%5D%3Breturn%20s.leftTopWidthHeight%3Di%2Cs.axCorSag%3De%2Cs.sliceFrac%3D1%2F0%2Cs.AxyzMxy%3Dthis.xyMM2xyzMM(e%2CA)%2Cs.leftTopMM%3Dp.leftTopMM%2Cvoid(s.fovMM%3Dp.fovMM)%7Dd.enable(d.DEPTH_TEST)%2Cd.blendFunc(d.SRC_ALPHA%2Cd.ONE_MINUS_SRC_ALPHA)%2Cd.disable(d.BLEND)%2Cd.depthFunc(d.GREATER)%2Cd.disable(d.CULL_FACE)%3Blet%20v%3Dthis.sliceMMShader%3Bif(this.opts.isV1SliceShader%26%26(v%3Dthis.sliceV1Shader)%2C!v)throw%20new%20Error(%22slice%20Shader%20undefined%22)%3Bif(v.use(this.gl)%2Cd.uniform1f(v.uniforms.overlayOutlineWidth%2Cthis.overlayOutlineWidth)%2Cd.uniform1f(v.uniforms.overlayAlphaShader%2Cthis.overlayAlphaShader)%2Cd.uniform1i(v.uniforms.isAlphaClipDark%2Cthis.isAlphaClipDark%3F1%3A0)%2Cd.uniform1i(v.uniforms.backgroundMasksOverlays%2Cthis.backgroundMasksOverlays)%2Cd.uniform1f(v.uniforms.drawOpacity%2Cthis.drawOpacity)%2Cd.enable(d.BLEND)%2Cd.blendFunc(d.SRC_ALPHA%2Cd.ONE_MINUS_SRC_ALPHA)%2Cd.uniform1f(v.uniforms.opacity%2Cthis.volumes%5B0%5D.opacity)%2Cd.uniform1i(v.uniforms.axCorSag%2Ce)%2Cd.uniform1f(v.uniforms.slice%2CA)%2Cd.uniformMatrix4fv(v.uniforms.frac2mm%2C!1%2Cn)%2Cd.uniformMatrix4fv(v.uniforms.mvpMtx%2C!1%2Cp.modelViewProjectionMatrix.slice())%2Cd.bindVertexArray(this.genericVAO)%2Cd.drawArrays(d.TRIANGLE_STRIP%2C0%2C4)%2Cd.bindVertexArray(this.unusedVAO)%2Cthis.screenSlices.push(%7BleftTopWidthHeight%3At%2CaxCorSag%3Ae%2CsliceFrac%3AA%2CAxyzMxy%3Athis.xyMM2xyzMM(e%2CA)%2CleftTopMM%3Ap.leftTopMM%2Cscreen2frac%3A%5B%5D%2CfovMM%3Ap.fovMM%7D)%2CisNaN(s)%26%26this.drawCrosshairs3D(!0%2C1%2Cp.modelViewProjectionMatrix%2C!0%2Cthis.opts.isSliceMM)%2Cthis.opts.meshThicknessOn2D%3E0)%7Bthis.opts.meshThicknessOn2D!%3D%3D1%2F0%26%26(p%3Dthis.calculateMvpMatrix2D(t%2Ca.mnMM%2Ca.mxMM%2Cthis.opts.meshThicknessOn2D%2Cg%2Cc%2Ch%2Cl))%3Bconst%20e%3Di.clone(p.modelViewProjectionMatrix)%3Bi.multiply(e%2Ce%2Co)%2Cthis.drawMesh3D(!0%2C1%2Ce%2Cp.modelMatrix%2Cp.normalMatrix)%7DisNaN(s)%26%26this.drawCrosshairs3D(!1%2C.15%2Cp.modelViewProjectionMatrix%2C!0%2Cthis.opts.isSliceMM)%2Cm%26%26this.drawSliceOrientationText(t%2Ce)%2Cthis.readyForSync%3D!0%7Ddraw2D(t%2Ce%2Ci%3DNaN%2Cs%3D%5BNaN%2CNaN%5D)%7Bconst%20r%3D%5BNaN%2CNaN%5D%3Bif(isNaN(s%5B0%5D))this.draw2DMain(t%2Ce%2Ci)%3Belse%7Bconst%20n%3Dt.slice()%3Br%5B0%5D%3DMath.floor(.5*(n%5B2%5D-s%5B0%5D))%2Cr%5B1%5D%3DMath.floor(.5*(n%5B3%5D-s%5B1%5D))%2Cn%5B0%5D%2B%3Dr%5B0%5D%2Cn%5B1%5D%2B%3Dr%5B1%5D%2Cn%5B2%5D%3Ds%5B0%5D%2Cn%5B3%5D%3Ds%5B1%5D%2Cthis.draw2DMain(n%2Ce%2Ci)%7Di!%3D%3D1%2F0%26%26i!%3D%3D-1%2F0%26%264!%3D%3De%26%260!%3D%3Dt%5B2%5D%26%260!%3D%3Dt%5B3%5D%26%26this.drawSliceOrientationText(t%2Ce%2Cr)%7DcalculateMvpMatrix(t%2Ce%3D%5B0%2C0%2C0%2C0%5D%2Cs%2Cn)%7B0!%3D%3De%5B2%5D%26%260!%3D%3De%5B3%5D%7C%7C(e%3D%5B0%2C0%2Cthis.gl.canvas.width%2Cthis.gl.canvas.height%5D)%3Bconst%20a%3De%5B2%5D%2Fe%5B3%5D%3Blet%20o%3Dthis.furthestFromPivot%3Bconst%20l%3Dthis.pivot3D%2Ch%3Di.create()%3Bo%3D.8*o%2Fthis.scene.volScaleMultiplier%2Ca%3C1%3Fi.ortho(h%2C-o%2Co%2C-o%2Fa%2Co%2Fa%2C.01*o%2C8*o)%3Ai.ortho(h%2C-o*a%2Co*a%2C-o%2Co%2C.01*o%2C8*o)%3Bconst%20c%3Di.create()%3Bc%5B0%5D%3D-1%3Bconst%20d%3Dr.fromValues(0%2C0%2C1.8*-o)%3Bi.translate(c%2Cc%2Cd)%2Cthis.position%26%26i.translate(c%2Cc%2Cthis.position)%2Ci.rotateX(c%2Cc%2Cvi(270-n))%2Ci.rotateZ(c%2Cc%2Cvi(s-180))%2Ci.translate(c%2Cc%2C%5B-l%5B0%5D%2C-l%5B1%5D%2C-l%5B2%5D%5D)%3Bconst%20m%3Di.create()%3Bi.invert(m%2Cc)%3Bconst%20u%3Di.create()%3Bi.transpose(u%2Cm)%3Bconst%20A%3Di.create()%3Breturn%20i.multiply(A%2Ch%2Cc)%2C%5BA%2Cc%2Cu%5D%7DcalculateModelMatrix(t%2Ce)%7Bif(!this.back)throw%20new%20Error(%22back%20undefined%22)%3Bconst%20s%3Di.create()%3Bif(s%5B0%5D%3D-1%2Ci.rotateX(s%2Cs%2Cvi(270-e))%2Ci.rotateZ(s%2Cs%2Cvi(t-180))%2Cthis.back.obliqueRAS)%7Bconst%20t%3Di.clone(this.back.obliqueRAS)%3Bi.multiply(s%2Cs%2Ct)%7Dreturn%20s%7DcalculateRayDirection(t%2Ce)%7Bconst%20s%3Dthis.calculateModelMatrix(t%2Ce)%2Ca%3Di.fromValues(1%2C0%2C0%2C0%2C0%2C-1%2C0%2C0%2C0%2C0%2C-1%2C0%2C0%2C0%2C0%2C1)%2Co%3Di.create()%3Bi.multiply(o%2Ca%2Cs)%3Bconst%20l%3Di.create()%3Bi.invert(l%2Co)%3Bconst%20h%3Dn.fromValues(0%2C0%2C-1%2C1)%3Bn.transformMat4(h%2Ch%2Cl)%3Bconst%20c%3Dr.fromValues(h%5B0%5D%2Ch%5B1%5D%2Ch%5B2%5D)%3Br.normalize(c%2Cc)%3Bconst%20d%3D5e-5%3Breturn%20Math.abs(c%5B0%5D)%3Cd%26%26(c%5B0%5D%3Dd)%2CMath.abs(c%5B1%5D)%3Cd%26%26(c%5B1%5D%3Dd)%2CMath.abs(c%5B2%5D)%3Cd%26%26(c%5B2%5D%3Dd)%2Cc%7DsceneExtentsMinMax(t%3D!0)%7Blet%20e%3Dr.fromValues(0%2C0%2C0)%2Ci%3Dr.fromValues(0%2C0%2C0)%3Bif(this.volumes.length%3E0)%7Bif(!this.volumeObject3D)throw%20new%20Error(%22volumeObject3D%20undefined%22)%3Be%3Dr.fromValues(this.volumeObject3D.extentsMin%5B0%5D%2Cthis.volumeObject3D.extentsMin%5B1%5D%2Cthis.volumeObject3D.extentsMin%5B2%5D)%2Ci%3Dr.fromValues(this.volumeObject3D.extentsMax%5B0%5D%2Cthis.volumeObject3D.extentsMax%5B1%5D%2Cthis.volumeObject3D.extentsMax%5B2%5D)%2Ct%7C%7C(e%3Dr.fromValues(this.volumes%5B0%5D.extentsMinOrtho%5B0%5D%2Cthis.volumes%5B0%5D.extentsMinOrtho%5B1%5D%2Cthis.volumes%5B0%5D.extentsMinOrtho%5B2%5D)%2Ci%3Dr.fromValues(this.volumes%5B0%5D.extentsMaxOrtho%5B0%5D%2Cthis.volumes%5B0%5D.extentsMaxOrtho%5B1%5D%2Cthis.volumes%5B0%5D.extentsMaxOrtho%5B2%5D))%7Dif(this.meshes.length%3E0)%7Bif(this.volumes.length%3C1)%7Bconst%20t%3Dthis.meshes%5B0%5D.extentsMin%2Cs%3Dthis.meshes%5B0%5D.extentsMax%3Be%3Dr.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D)%2Ci%3Dr.fromValues(s%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D)%7Dfor(let%20t%3D0%3Bt%3Cthis.meshes.length%3Bt%2B%2B)%7Bconst%20s%3Dthis.meshes%5Bt%5D.extentsMin%2Cn%3Dthis.meshes%5Bt%5D.extentsMax%2Ca%3Dr.fromValues(s%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D)%3Br.min(e%2Ce%2Ca)%3Bconst%20o%3Dr.fromValues(n%5B0%5D%2Cn%5B1%5D%2Cn%5B2%5D)%3Br.max(i%2Ci%2Co)%7D%7Dconst%20s%3Dr.create()%3Breturn%20r.subtract(s%2Ci%2Ce)%2C%5Be%2Ci%2Cs%5D%7DsetPivot3D()%7Bconst%5Bt%2Ce%5D%3Dthis.sceneExtentsMinMax()%2Ci%3Dr.create()%3Br.add(i%2Ct%2Ce)%2Cr.scale(i%2Ci%2C.5)%2Cthis.pivot3D%3D%5Bi%5B0%5D%2Ci%5B1%5D%2Ci%5B2%5D%5D%2Cr.subtract(i%2Ce%2Ct)%2Cthis.extentsMin%3Dt%2Cthis.extentsMax%3De%2Cthis.furthestFromPivot%3D.5*r.length(i)%7DgetMaxVols()%7Bif(this.volumes.length%3C1)return%200%3Blet%20t%3D0%3Bfor(let%20e%3D0%3Be%3Cthis.volumes.length%3Be%2B%2B)t%3DMath.max(t%2Cthis.volumes%5Be%5D.nFrame4D)%3Breturn%20t%7DdetectPartialllyLoaded4D()%7Bif(this.volumes.length%3C1)return!1%3Bfor(let%20t%3D0%3Bt%3Cthis.volumes.length%3Bt%2B%2B)if(this.volumes%5Bt%5D.nFrame4D%3Cthis.volumes%5Bt%5D.hdr.dims%5B4%5D)return!0%3Breturn!1%7DdrawGraph()%7Bif(this.getMaxVols()%3C2)return%3Bconst%20t%3Dthis.graph%3Blet%20e%3D0%3Bif(this.graph.autoSizeMultiplanar%26%263%3D%3D%3Dthis.opts.sliceType)for(let%20i%3D0%3Bi%3Cthis.screenSlices.length%3Bi%2B%2B)%7Bconst%20s%3Dthis.screenSlices%5Bi%5D.axCorSag%3Bif(0%3D%3D%3Ds%26%26(e%3Dthis.screenSlices%5Bi%5D.leftTopWidthHeight%5B1%5D)%2C2!%3D%3Ds)continue%3Bconst%20r%3Dthis.screenSlices%5Bi%5D.leftTopWidthHeight.slice()%3Br%5B1%5D%3D%3D%3De%3F(t.LTWH%5B0%5D%3Dr%5B0%5D%2Br%5B2%5D%2Ct.LTWH%5B1%5D%3Dr%5B1%5D)%3A(t.LTWH%5B0%5D%3Dr%5B0%5D%2Ct.LTWH%5B1%5D%3Dr%5B1%5D%2Br%5B3%5D)%2Ct.LTWH%5B2%5D%3Dr%5B2%5D%2Ct.LTWH%5B3%5D%3Dr%5B2%5D%7Dif(t.opacity%3C%3D0%7C%7Ct.LTWH%5B2%5D%3C%3D5%7C%7Ct.LTWH%5B3%5D%3C%3D5)return%3Bif(t.LTWH%5B0%5D%2Bt.LTWH%5B2%5D%3Ethis.gl.canvas.width)return%3Bif(t.LTWH%5B1%5D%2Bt.LTWH%5B3%5D%3Ethis.gl.canvas.height)return%3Bt.backColor%3D%5B.15%2C.15%2C.15%2Ct.opacity%5D%2Ct.lineColor%3D%5B1%2C1%2C1%2C1%5D%2Cthis.opts.backColor%5B0%5D%2Bthis.opts.backColor%5B1%5D%2Bthis.opts.backColor%5B2%5D%3E1.5%26%26(t.backColor%3D%5B.95%2C.95%2C.95%2Ct.opacity%5D%2Ct.lineColor%3D%5B0%2C0%2C0%2C1%5D)%2Ct.textColor%3Dt.lineColor.slice()%2Ct.lineThickness%3D4%2Ct.lineAlpha%3D1%2Ct.lines%3D%5B%5D%3Bconst%20i%3D%5B%5D%3Bif(t.vols.length%3C1)null!%3Dthis.volumes%5B0%5D%26%26i.push(0)%3Belse%20for(let%20e%3D0%3Be%3Ct.vols.length%3Be%2B%2B)%7Bconst%20s%3Dt.vols%5Be%5D%3Bif(null%3D%3Dthis.volumes%5Bs%5D)continue%3Bthis.volumes%5Bs%5D.nFrame4D%3C2%7C%7Ci.push(s)%7Dif(i.length%3C1)return%3Bconst%20s%3Dthis.volumes%5Bi%5B0%5D%5D.nFrame4D%3Bif(this.graph.selectedColumn%3Dthis.volumes%5Bi%5B0%5D%5D.frame4D%2Cs%3C2)return%20void%20l.debug(%22Unable%20to%20generate%20a%20graph%3A%20Selected%20volume%20is%203D%20not%204D%22)%3Bfor(let%20e%3D0%3Be%3Ci.length%3Be%2B%2B)%7Bt.lines%5Be%5D%3D%5B%5D%3Bconst%20r%3Dthis.frac2vox(this.scene.crosshairPos)%2Cn%3Dthis.volumes%5Bi%5Be%5D%5D%3Blet%20a%3Dn.nFrame4D%3Ba%3DMath.min(a%2Cs)%3Bfor(let%20i%3D0%3Bi%3Ca%3Bi%2B%2B)%7Bconst%20s%3Dn.getValue(r%5B0%5D%2Cr%5B1%5D%2Cr%5B2%5D%2Ci)%3Bt.lines%5Be%5D.push(s)%7D%7Dt.lineRGB%3D%5B%5B1%2C0%2C0%5D%2C%5B0%2C.7%2C0%5D%2C%5B0%2C0%2C1%5D%2C%5B1%2C1%2C0%5D%2C%5B1%2C0%2C1%5D%2C%5B0%2C1%2C1%5D%2C%5B1%2C1%2C1%5D%2C%5B0%2C0%2C0%5D%5D%3Blet%20r%3Dt.lines%5B0%5D%5B0%5D%2Cn%3Dt.lines%5B0%5D%5B0%5D%3Bfor(let%20e%3D0%3Be%3Ct.lines.length%3Be%2B%2B)for(let%20i%3D0%3Bi%3Ct.lines%5Be%5D.length%3Bi%2B%2B)%7Bconst%20s%3Dt.lines%5Be%5D%5Bi%5D%3Br%3DMath.min(s%2Cr)%2Cn%3DMath.max(s%2Cn)%7Dif(t.normalizeValues%26%26n%3Er)%7Bconst%20e%3Dn-r%3Bfor(let%20i%3D0%3Bi%3Ct.lines.length%3Bi%2B%2B)for(let%20s%3D0%3Bs%3Ct.lines%5Bi%5D.length%3Bs%2B%2B)%7Bconst%20n%3Dt.lines%5Bi%5D%5Bs%5D%3Bt.lines%5Bi%5D%5Bs%5D%3D(n-r)%2Fe%7Dr%3D0%2Cn%3D1%7Dr%3E%3Dn%26%26(n%3Dr%2B1)%2Cthis.drawRect(t.LTWH%2Ct.backColor)%3Bconst%5Ba%2Co%2Ch%5D%3Dpi(r%2Cn)%2Cc%3DMath.max(0%2C-1*Math.floor(Math.log(a)%2FMath.log(10)))%3Bfunction%20d(t)%7Breturn%20t.toFixed(6).replace(%2F%5C.%3F0*%24%2F%2C%22%22)%7Dr%3DMath.min(o%2Cr)%2Cn%3DMath.max(h%2Cn)%3Bconst%20m%3DMath.min(t.LTWH%5B2%5D%2Ct.LTWH%5B3%5D)%2F(this.fontMets.size*this.uiData.dpr)*.07%3Blet%20u%3Dthis.opts.textHeight*this.gl.canvas.height*m%3Bu%3C16%26%26(u%3D0)%3Blet%20A%3D0%2Cf%3Do%3Bif(u%3E0)for(%3Bf%3C%3Dn%3B)%7Bconst%20t%3Df.toFixed(c)%2Ce%3Dthis.textWidth(u%2Ct)%3BA%3DMath.max(e%2CA)%2Cf%2B%3Da%7Dconst%20g%3D.05%2Cp%3DMath.abs(t.LTWH%5B2%5D)%2Cv%3DMath.abs(t.LTWH%5B3%5D)%2Cx%3D%5Bt.LTWH%5B0%5D%2Bg*p%2BA%2Ct.LTWH%5B1%5D%2Bg*v%2Ct.LTWH%5B2%5D-A-.1*p%2Ct.LTWH%5B3%5D-u-.1*v%5D%3Bthis.graph.LTWH%3Dt.LTWH%2Cthis.graph.plotLTWH%3Dx%2Cthis.drawRect(x%2Cthis.opts.backColor)%3Bconst%20w%3Dx%5B3%5D%2F(n-r)%2CC%3Dx%5B2%5D%2F(t.lines%5B0%5D.length-1)%2Cb%3Dx%5B1%5D%2Bx%5B3%5D%3Bf%3Do%2B.5*a%3Bconst%20y%3Dt.lineColor.slice()%3Bfor(y%5B3%5D%3D.25*t.lineColor%5B3%5D%3Bf%3C%3Dn%3B)%7Bconst%20e%3Db-(f-r)*w%3Bthis.drawLine(%5Bx%5B0%5D%2Ce%2Cx%5B0%5D%2Bx%5B2%5D%2Ce%5D%2C.5*t.lineThickness%2Cy)%2Cf%2B%3Da%7Df%3Do%3Bconst%20I%3D.5*t.lineThickness%3Bfor(%3Bf%3C%3Dn%3B)%7Bconst%20e%3Db-(f-r)*w%3Bthis.drawLine(%5Bx%5B0%5D-I%2Ce%2Cx%5B0%5D%2Bx%5B2%5D%2Bt.lineThickness%2Ce%5D%2Ct.lineThickness%2Ct.lineColor)%3Bconst%20i%3Df.toFixed(c)%3Bu%3E0%26%26this.drawTextLeft(%5Bx%5B0%5D-6%2Ce%5D%2Ci%2Cm%2Ct.textColor)%2Cf%2B%3Da%7Dlet%20M%3D1%3Bfor(%3Bt.lines%5B0%5D.length%2FM%3E20%3B)M*%3D5%3Bfor(let%20e%3D0%3Be%3Ct.lines%5B0%5D.length%3Be%2B%3DM)%7Bconst%20i%3De*C%2Bx%5B0%5D%3Blet%20s%3Dt.lineThickness%3Bif(e%252%3D%3D1)s*%3D.5%2Cthis.drawLine(%5Bi%2Cx%5B1%5D%2Ci%2Cx%5B1%5D%2Bx%5B3%5D%5D%2Cs%2Cy)%3Belse%7Bconst%20r%3Dd(e)%3Bu%3E0%26%26this.drawTextBelow(%5Bi%2C2%2Bx%5B1%5D%2Bx%5B3%5D%5D%2Cr%2Cm%2Ct.textColor)%2Cthis.drawLine(%5Bi%2Cx%5B1%5D%2Ci%2Cx%5B1%5D%2Bx%5B3%5D%5D%2Cs%2Ct.lineColor)%7D%7Dfor(let%20e%3D0%3Be%3Ct.lines.length%3Be%2B%2B)%7Blet%20i%3D%5B1%2C0%2C0%2Ct.lineAlpha%5D%3Be%3Ct.lineRGB.length%26%26(i%3D%5Bt.lineRGB%5Be%5D%5B0%5D%2Ct.lineRGB%5Be%5D%5B1%5D%2Ct.lineRGB%5Be%5D%5B2%5D%2Ct.lineAlpha%5D)%3Bfor(let%20s%3D1%3Bs%3Ct.lines%5Be%5D.length%3Bs%2B%2B)%7Bconst%20n%3D(s-1)*C%2Ca%3Ds*C%2Co%3D(t.lines%5Be%5D%5Bs-1%5D-r)*w%2Cl%3D(t.lines%5Be%5D%5Bs%5D-r)*w%2Ch%3D%5Bx%5B0%5D%2Bn%2Cx%5B1%5D%2Bx%5B3%5D-o%2Cx%5B0%5D%2Ba%2Cx%5B1%5D%2Bx%5B3%5D-l%5D%3Bthis.drawLine(h%2Ct.lineThickness%2Ci)%7D%7Dif(t.selectedColumn%3E%3D0%26%26t.selectedColumn%3Ct.lines%5B0%5D.length)%7Bconst%20e%3Dt.selectedColumn*C%2Bx%5B0%5D%3Bthis.drawLine(%5Be%2Cx%5B1%5D%2Ce%2Cx%5B1%5D%2Bx%5B3%5D%5D%2Ct.lineThickness%2C%5Bt.lineRGB%5B3%5D%5B0%5D%2Ct.lineRGB%5B3%5D%5B1%5D%2Ct.lineRGB%5B3%5D%5B2%5D%2C1%5D)%7Dthis.detectPartialllyLoaded4D()%26%26this.drawTextBelow(%5Bx%5B0%5D%2Bx%5B2%5D%2Cx%5B1%5D%2Bx%5B3%5D%2B.5*u%5D%2C%22...%22%2Cm%2Ct.textColor)%7DdepthPicker(t%2Ce)%7Bif(!this.uiData.mouseDepthPicker)return%3Bthis.uiData.mouseDepthPicker%3D!1%3Bconst%20i%3Dthis.gl%2Cs%3Dthis.mousePos%5B0%5D*t%5B2%5D%2Ft%5B2%5D%2Cr%3Di.canvas.height-this.mousePos%5B1%5D*t%5B3%5D%2Ft%5B3%5D-1%2Cn%3Dnew%20Uint8Array(4)%3Bif(i.readPixels(s%2Cr%2C1%2C1%2Ci.RGBA%2Ci.UNSIGNED_BYTE%2Cn)%2Cthis.selectedObjectId%3Dn%5B3%5D%2Cthis.selectedObjectId%3D%3D%3Dthis.VOLUME_ID)return%20void(this.scene.crosshairPos%3Dnew%20Float32Array(n.slice(0%2C3)).map((t%3D%3Et%2F255)))%3Bconst%20a%3Dfunction(t)%7Bconst%20e%3D%5B1%2F16777216%2C1%2F65536%2C1%2F256%2C1%5D%3Breturn(t%5B0%5D*e%5B0%5D%2Bt%5B1%5D*e%5B1%5D%2Bt%5B2%5D*e%5B2%5D%2Bt%5B3%5D*e%5B3%5D)%2F255%7D(n)%3Bif(a%3E1)return%3Bconst%20o%3Dfunction(t%2Ce%2Ci%2Cs)%7Bconst%20r%3DAi.fromValues(t%2Ce%2Ci%2C1)%2Cn%3Dmi.clone(s)%3Bmi.invert(n%2Cn)%2Cr%5B0%5D%3D2*r%5B0%5D-1%2Cr%5B1%5D%3D2*r%5B1%5D-1%2Cr%5B2%5D%3D2*r%5B2%5D-1%3Bconst%20a%3DAi.create()%3Breturn%20Ai.transformMat4(a%2Cr%2Cn)%2C0%3D%3D%3Da%5B3%5D%7C%7C(a%5B0%5D%2F%3Da%5B3%5D%2Ca%5B1%5D%2F%3Da%5B3%5D%2Ca%5B2%5D%2F%3Da%5B3%5D)%2Ca%7D((this.mousePos%5B0%5D-t%5B0%5D)%2Ft%5B2%5D%2C(i.canvas.height-this.mousePos%5B1%5D-t%5B1%5D)%2Ft%5B3%5D%2Ca%2Ce)%2Cl%3Dthis.mm2frac(o%2C0%2C!0)%3Bl%5B0%5D%3C0%7C%7Cl%5B0%5D%3E1%7C%7Cl%5B1%5D%3C0%7C%7Cl%5B1%5D%3E1%7C%7Cl%5B2%5D%3C0%7C%7Cl%5B2%5D%3E1%7C%7C(this.scene.crosshairPos%3Dthis.mm2frac(o%2C0%2C!0))%7DdrawImage3D(t%2Ce%2Cs)%7Bif(0%3D%3D%3Dthis.volumes.length)return%3Bconst%20r%3Dthis.gl%2Cn%3Dthis.calculateRayDirection(e%2Cs)%2Ca%3Dthis.volumeObject3D%3Bif(a)%7Br.enable(r.BLEND)%2Cr.blendFunc(r.SRC_ALPHA%2Cr.ONE_MINUS_SRC_ALPHA)%2Cr.enable(r.CULL_FACE)%2Cr.cullFace(r.FRONT)%3Blet%20o%3Dthis.renderShader%3Bif(this.uiData.mouseDepthPicker%26%26(o%3Dthis.pickingImageShader)%2Co.use(this.gl)%2Cr.uniform1i(o.uniforms.backgroundMasksOverlays%2Cthis.backgroundMasksOverlays)%2Cthis.gradientTextureAmount%3E0)%7Br.activeTexture(33990)%2Cr.bindTexture(r.TEXTURE_3D%2Cthis.gradientTexture)%3Bconst%20t%3Dthis.calculateModelMatrix(e%2Cs)%2Cn%3Di.create()%3Bi.invert(n%2Ct)%3Bconst%20a%3Di.create()%3Bi.transpose(a%2Cn)%2Cr.uniformMatrix4fv(o.uniforms.normMtx%2C!1%2Ca)%7Dthis.drawBitmap%26%26this.drawBitmap.length%3E8%3Fr.uniform2f(o.uniforms.renderDrawAmbientOcclusionXY%2Cthis.renderDrawAmbientOcclusion%2Cthis.drawOpacity)%3Ar.uniform2f(o.uniforms.renderDrawAmbientOcclusionXY%2Cthis.renderDrawAmbientOcclusion%2C0)%2Cr.uniformMatrix4fv(o.uniforms.mvpMtx%2C!1%2Ct)%2Cr.uniformMatrix4fv(o.uniforms.matRAS%2C!1%2Cthis.back.matRAS)%2Cr.uniform3fv(o.uniforms.rayDir%2Cn)%2Cthis.gradientTextureAmount%3C0%3Fr.uniform4fv(o.uniforms.clipPlane%2C%5Bthis.scene.crosshairPos%5B0%5D%2Cthis.scene.crosshairPos%5B1%5D%2Cthis.scene.crosshairPos%5B2%5D%2C30%5D)%3Ar.uniform4fv(o.uniforms.clipPlane%2Cthis.scene.clipPlane)%2Cr.uniform1f(o.uniforms.drawOpacity%2C1)%2Cr.bindVertexArray(a.vao)%2Cr.drawElements(a.mode%2Ca.indexCount%2Cr.UNSIGNED_SHORT%2C0)%2Cr.bindVertexArray(this.unusedVAO)%7D%7DdrawOrientationCube(t%2Ce%3D0%2Cs%3D0)%7Bif(!this.opts.isOrientCube)return%3Bconst%20r%3D.05*Math.min(t%5B2%5D%2Ct%5B3%5D)%3Bif(r%3C5)return%3Bconst%20n%3Dthis.gl%3Bn.enable(n.CULL_FACE)%2Cn.cullFace(n.BACK)%2Cthis.orientCubeShader.use(this.gl)%2Cn.bindVertexArray(this.orientCubeShaderVAO)%3Bconst%20a%3Di.create()%2Co%3Di.create()%3Bi.ortho(o%2C0%2Cn.canvas.width%2C0%2Cn.canvas.height%2C-10*r%2C10*r)%3Blet%20l%3D0%3B0%3D%3D%3Dt%5B1%5D%26%26(l%3Dn.canvas.height-this.effectiveCanvasHeight())%2Ci.translate(a%2Ca%2C%5B1.8*r%2Bt%5B0%5D%2Cl%2B1.8*r%2Bt%5B1%5D%2C0%5D)%2Ci.scale(a%2Ca%2C%5Br%2Cr%2Cr%5D)%2Ci.rotateX(a%2Ca%2Cvi(270-s))%2Ci.rotateZ(a%2Ca%2Cvi(-e))%3Bconst%20h%3Di.create()%3Bi.multiply(h%2Co%2Ca)%2Cn.uniformMatrix4fv(this.orientCubeShader.uniforms.u_matrix%2C!1%2Ch)%2Cn.drawArrays(n.TRIANGLE_STRIP%2C0%2C168)%2Cn.bindVertexArray(this.unusedVAO)%2Cthis.gl.disable(this.gl.CULL_FACE)%7DcreateOnLocationChange(t%3DNaN)%7Bconst%5Be%2Ci%2Cs%5D%3Dthis.sceneExtentsMinMax(!0)%2Cr%3DMath.max(Math.max(s%5B0%5D%2Cs%5B1%5D)%2Cs%5B2%5D)%3Blet%20n%3D(a%3D.001*r%2CMath.max(0%2C-Math.ceil(Math.log10(Math.abs(a)))))%3Bvar%20a%3Bconst%20o%3Dthis.frac2mm(this.scene.crosshairPos%2C0%2C!0)%3Bfunction%20l(t%2Ce%3D0)%7Breturn%20parseFloat(t.toFixed(e))%7Dlet%20h%3Dl(o%5B0%5D%2Cn)%2B%22%C3%97%22%2Bl(o%5B1%5D%2Cn)%2B%22%C3%97%22%2Bl(o%5B2%5D%2Cn)%3Bif(this.volumes.length%3E0%26%26this.volumes%5B0%5D.nFrame4D%3E0%26%26(h%2B%3D%22%C3%97%22%2Bl(this.volumes%5B0%5D.frame4D))%2Cthis.volumes.length%3E0)%7Blet%20t%3D%22%20%3D%20%22%3Bfor(let%20e%3D0%3Be%3Cthis.volumes.length%3Be%2B%2B)%7Bconst%20i%3Dthis.volumes%5Be%5D.mm2vox(o)%3Blet%20s%3Dthis.volumes%5Be%5D.getValue(i%5B0%5D%2Ci%5B1%5D%2Ci%5B2%5D%2Cthis.volumes%5Be%5D.frame4D)%3Bif(n%3D3%2Cnull!%3D%3Dthis.volumes%5Be%5D.colormapLabel)%7Bconst%20i%3DMath.round(s)%3Bi%3E%3D0%26%26i%3Cthis.volumes%5Be%5D.colormapLabel.labels.length%3Ft%2B%3Dthis.volumes%5Be%5D.colormapLabel.labels%5Bi%5D%3At%2B%3D%22undefined(%22%2Bl(s%2Cn)%2B%22)%22%7Delse%20t%2B%3Dl(s%2Cn)%3Bthis.volumes%5Be%5D.imaginary%26%26(s%3Dthis.volumes%5Be%5D.getValue(i%5B0%5D%2Ci%5B1%5D%2Ci%5B2%5D%2Cthis.volumes%5Be%5D.frame4D%2C!0)%2Cs%3E%3D0%26%26(t%2B%3D%22%2B%22)%2Ct%2B%3Dl(s%2Cn))%2Ct%2B%3D%22%20%20%20%22%7Dh%2B%3Dt%3Bconst%20e%3Dthis.back.dimsRAS%2Ci%3De%5B1%5D*e%5B2%5D*e%5B3%5D%3Bif(this.drawBitmap%26%26this.drawBitmap.length%3D%3D%3Di)%7Bconst%20t%3Dthis.frac2vox(this.scene.crosshairPos)%2Ci%3Dt%5B0%5D%2Bt%5B1%5D*e%5B1%5D%2Bt%5B2%5D*e%5B1%5D*e%5B2%5D%3Bh%2B%3D%22%20%22%2Bthis.drawLut.labels%5Bthis.drawBitmap%5Bi%5D%5D%7D%7Dconst%20c%3D%7Bmm%3Athis.frac2mm(this.scene.crosshairPos%2C0%2C!0)%2CaxCorSag%3At%2Cvox%3Athis.frac2vox(this.scene.crosshairPos)%2Cfrac%3Athis.scene.crosshairPos%2Cxy%3A%5Bthis.mousePos%5B0%5D%2Cthis.mousePos%5B1%5D%5D%2Cvalues%3Athis.volumes.map((t%3D%3E%7Bconst%20e%3Dthis.frac2mm(this.scene.crosshairPos%2C0%2C!0)%2Ci%3Dt.mm2vox(e)%2Cs%3Dt.getValue(i%5B0%5D%2Ci%5B1%5D%2Ci%5B2%5D%2Ct.frame4D)%3Breturn%7Bname%3At.name%2Cvalue%3As%2Cid%3At.id%2Cmm%3Ae%2Cvox%3Ai%7D%7D))%2Cstring%3Ah%7D%3Bthis.onLocationChange(c)%7DaddLabel(t%2Ce%2Ci%2Cs%2Cr)%7Bconst%20n%3D%7BtextColor%3Athis.opts.legendTextColor%2CtextScale%3A1%2CtextAlignment%3A%22left%22%2ClineWidth%3A0%2ClineColor%3Athis.opts.legendTextColor%2ClineTerminator%3A%22none%22%2CbulletScale%3A0%2CbulletColor%3Athis.opts.legendTextColor%7D%2Ca%3De%3F%7B...n%2C...e%7D%3A%7B...n%7D%2Co%3Dnew%20li(t%2C%7B...a%7D%2Ci%2Cs%2Cr)%3Breturn%20this.document.labels.push(o)%2Co%7DcalculateScreenPoint(t%2Ce%2Ci)%7Bconst%20s%3Dn.create()%3Breturn%20n.transformMat4(s%2C%5B...t%2C1%5D%2Ce)%2C0!%3D%3Ds%5B3%5D%26%26(s%5B0%5D%3D.5*(s%5B0%5D%2Fs%5B3%5D%2B1)*i%5B2%5D%2Cs%5B1%5D%3D.5*(1-s%5B1%5D%2Fs%5B3%5D)*i%5B3%5D%2Cs%5B2%5D%2F%3Ds%5B3%5D%2Cs%5B0%5D%2B%3Di%5B0%5D%2Cs%5B1%5D%2B%3Di%5B1%5D)%2Cs%7DgetLabelAtPoint(t)%7Bconst%20e%3Dthis.opts.textHeight*Math.min(this.gl.canvas.height%2Cthis.gl.canvas.width)*1%2Ci%3Dthis.opts.textHeight*this.gl.canvas.height*1%3Bfor(const%20e%20of%20this.document.labels)%7Bif(null%3D%3De.anchor%7C%7C0%3D%3D%3De.anchor)continue%3Bconst%20s%3Dthis.opts.textHeight*this.gl.canvas.height*e.style.textScale%2Cr%3Dthis.textHeight(s%2Ce.text)%2Cn%3Dthis.textWidth(s%2Ce.text)%3Bif(!(1%26e.anchor%26%26t%5B0%5D%3En))%7Bif(2%26e.anchor)%7Bif(t%5B0%5D%3C(this.gl.canvas.width-n)%2F2)continue%3Bif(t%5B0%5D%3E(this.gl.canvas.width%2Bn)%2F2)continue%7Dif(!(4%26e.anchor%26%26t%5B0%5D%3Cthis.gl.canvas.width-n))%7Bif(8%26e.anchor)%7Bif(t%5B1%5D%3Ci%2F2)continue%3Bif(t%5B1%5D%3Er%2Bi%2F2)continue%7Dif(16%26e.anchor)%7Bif(t%5B1%5D%3C(this.gl.canvas.height-r-i)%2F2)continue%3Bif(t%5B1%5D%3E(this.gl.canvas.height%2Br-i%2F2)%2F2)continue%7Dif(32%26e.anchor)%7Bif(t%5B1%5D%3Cthis.gl.canvas.height-r-i)continue%3Bif(t%5B1%5D%3Ethis.gl.canvas.height-i%2F2)continue%7Dreturn%20e%7D%7D%7Dl.debug(%22screenPoint%22%2Ct)%3Bconst%20s%3Dthis.getLegendPanelHeight()%2Cr%3Dthis.getLegendPanelWidth()%2Cn%3Dthis.gl.canvas.width-r%3Blet%20a%3D(this.canvas.height-s)%2F2%3Bif(l.debug(%22panelrect%22%2Cn%2Ca%2Cn%2Br%2Ca%2Bs)%2Ct%5B0%5D%3Cn%7C%7Ct%5B1%5D%3Ca%7C%7Ct%5B0%5D%3En%2Br%7C%7Ct%5B1%5D%3Ea%2Bs)return%20null%3Bconst%20o%3Dthis.getConnectomeLabels()%3Bfor(const%20i%20of%20o)%7Bconst%20s%3Dthis.opts.textHeight*this.gl.canvas.height*i.style.textScale%2Cr%3Dthis.textHeight(s%2Ci.text)%3Bif(t%5B1%5D%3E%3Da%26%26t%5B1%5D%3C%3Da%2Br%2Be%2F2)return%20i%3Ba%2B%3Dr%2Ca%2B%3De%2F2%7Dreturn%20null%7DdrawLabelLine(t%2Ce%2Ci%2Cs%2Cr%3D!1)%7Bconst%20n%3DArray.isArray(t.points)%26%26Array.isArray(t.points%5B0%5D)%3Ft.points%3A%5Bt.points%5D%3Bfor(const%20a%20of%20n)%7Bconst%20n%3Dthis.calculateScreenPoint(a%2Ci%2Cs)%3Br%3Fthis.drawDottedLine(%5B...e%2Cn%5B0%5D%2Cn%5B1%5D%5D%2Ct.style.lineWidth%2Ct.style.lineColor)%3Athis.draw3DLine(e%2C%5Bn%5B0%5D%2Cn%5B1%5D%2Cn%5B2%5D%5D%2Ct.style.lineWidth%2Ct.style.lineColor)%7D%7Ddraw3DLabel(t%2Ce%2Ci%2Cs%2Cr%2Cn%2Ca)%7Bconst%20o%3Dt.text%2Cl%3De%5B0%5D%2Ch%3De%5B1%5D%2Cc%3Dthis.opts.textHeight*Math.min(this.gl.canvas.height%2Cthis.gl.canvas.width)*1%2Cd%3Dthis.textHeight(t.style.textScale%2Co)*c%3Bif(t.style.lineWidth%3E0%26%26Array.isArray(t.points)%26%26this.drawLabelLine(t%2C%5Bl%2Ch%2Bd%5D%2Ci%2Cs%2Ca)%2Ct.style.bulletScale)%7Bconst%20e%3Dt.style.bulletScale*d%2Ci%3Dh%2B(d-e)%2F2%2Be%2F2%2Cs%3Dl%2B(r-e)%2F2%3Bthis.drawCircle(%5Bs%2Ci%2Ce%2Ce%5D%2Ct.style.bulletColor)%7Dlet%20m%3Dl%3Bif(n)if(%22left%22!%3D%3Dt.style.textAlignment)%7Bconst%20e%3Dthis.textWidth(t.style.textScale%2Ct.text)*c%3Bif(%22right%22%3D%3D%3Dt.style.textAlignment)m%3Dl%2Bn-1.5*c-e%3Belse%7Bm%2B%3D(n-(r%7C%7Cc)-e)%2F2%7D%7Delse%20m%2B%3Dr%3Bthis.drawText(%5Bm%2Ch%5D%2Co%2Ct.style.textScale%2Ct.style.textColor)%7Ddraw3DLabels(t%2Ce%2Ci%3D!1)%7Bconst%20s%3Dthis.getConnectomeLabels()%3Bif(!this.opts.showLegend%7C%7C0%3D%3D%3Ds.length)return%3Bif(!this.canvas)throw%20new%20Error(%22canvas%20undefined%22)%3Bconst%20r%3Dthis.gl%3Br.disable(r.CULL_FACE)%2Cr.viewport(0%2C0%2Cthis.canvas.width%2Cthis.canvas.height)%3Bconst%20n%3Dthis.opts.textHeight*Math.min(this.gl.canvas.height%2Cthis.gl.canvas.width)*1%2Ca%3Dthis.getBulletMarginWidth()%2Co%3Dthis.getLegendPanelHeight()%2Cl%3Dthis.getLegendPanelWidth()%2Ch%3Dr.canvas.width-l%3Blet%20c%3D(this.canvas.height-o)%2F2%3Bthis.drawRect(%5Br.canvas.width-l%2Cc%2Cl-n%2Co%5D%2Cthis.opts.legendBackgroundColor)%3Bconst%20d%3Dr.getParameter(r.BLEND)%2Cm%3Dr.getParameter(r.DEPTH_FUNC)%3Bi%7C%7C(r.disable(r.BLEND)%2Cr.depthFunc(r.GREATER))%3Bfor(const%20r%20of%20s)%7Bthis.draw3DLabel(r%2C%5Bh%2Cc%5D%2Ct%2Ce%2Ca%2Cl%2Ci)%3Bconst%20s%3Dthis.opts.textHeight*this.gl.canvas.height*r.style.textScale%3Bc%2B%3Dthis.textHeight(s%2Cr.text)%2Cc%2B%3Dn%2F2%7Di%7C%7C(r.depthFunc(m)%2Cd%26%26r.enable(r.BLEND))%7DdrawAnchoredLabels()%7Bconst%20t%3Dthis.opts.textHeight*Math.min(this.gl.canvas.height%2Cthis.gl.canvas.width)*1%2Ce%3Dthis.document.labels.filter((t%3D%3Enull!%3Dt.anchor%26%260!%3D%3Dt.anchor))%3Bfor(const%20i%20of%20e)%7Bconst%20e%3Di.text%2Cs%3Dthis.textHeight(i.style.textScale%2Ce)*t%2Cr%3Dthis.textWidth(i.style.textScale%2Ce)*t%3Blet%20n%2Ca%3Bconst%20o%3D1%2Cl%3Dthis.opts.textHeight*this.gl.canvas.height*o%2Ch%3Dl%3Blet%20c%3Dl%2F4%2Cd%3D0%2Cm%3D0%3B1%26i.anchor%26%26(n%3D0)%2C4%26i.anchor%26%26(n%3Dthis.canvas.width-r%2Cd-%3Dl%2F4)%2C2%26i.anchor%26%26(n%3D(this.canvas.width-r)%2F2%2Cd-%3Dl%2F4%2Cc%2B%3Dl%2F4)%2C8%26i.anchor%26%26(a%3D0)%2C16%26i.anchor%26%26(a%3D(this.canvas.height-s-l)%2F2%2Cm-%3Dl%2F4)%2C32%26i.anchor%26%26(a%3Dthis.canvas.height-s-l%2Cm-%3Dl%2F4)%2Cthis.drawRect(%5Bn%2Bd%2Ca%2Bm%2Cr%2Bc%2Cs%2Bh%5D%2Ci.style.backgroundColor)%2Cthis.draw3DLabel(i%2C%5Bn%2Ca%5D)%7D%7Ddraw3D(t%3D%5B0%2C0%2C0%2C0%5D%2Ce%3Dnull%2Ci%3Dnull%2Cs%3Dnull%2Cr%3Dnull%2Cn%3D0)%7Bconst%20a%3Dnull!%3D%3Dr%3Bthis.setPivot3D()%2Ca%7C%7C(r%3Dthis.scene.renderAzimuth%2Cn%3Dthis.scene.renderElevation)%3Bconst%20o%3Dthis.gl%3Bnull%3D%3D%3De%26%26(%5Be%2Ci%2Cs%5D%3Dthis.calculateMvpMatrix(null%2Ct%2Cr%2Cn))%3Blet%20l%3D%5B...t%5D%3Bif(0%3D%3D%3Dt%5B2%5D%7C%7C0%3D%3D%3Dt%5B3%5D%3F(t%3D%5B0%2C0%2Co.canvas.width%2Co.canvas.height%5D%2Cl%3D%5B...t%5D%2Cthis.screenSlices.push(%7BleftTopWidthHeight%3At%2CaxCorSag%3A4%2CsliceFrac%3A0%2CAxyzMxy%3A%5B%5D%2CleftTopMM%3A%5B%5D%2CfovMM%3A%5BCi(i)%2C0%5D%7D))%3A(this.screenSlices.push(%7BleftTopWidthHeight%3At.slice()%2CaxCorSag%3A4%2CsliceFrac%3A0%2CAxyzMxy%3A%5B%5D%2CleftTopMM%3A%5B%5D%2CfovMM%3A%5BCi(i)%2C0%5D%7D)%2Ct%5B1%5D%3Do.canvas.height-t%5B3%5D-t%5B1%5D)%2Co.enable(o.DEPTH_TEST)%2Co.depthFunc(o.ALWAYS)%2Co.depthMask(!0)%2Co.clearDepth(0)%2Cthis.draw3DLabels(e%2Cl%2C!1)%2Co.viewport(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2Ct%5B3%5D)%2Cthis.volumes.length%3E0%26%26(this.updateInterpolation(0%2C!0)%2Cthis.updateInterpolation(1%2C!0)%2Cthis.drawImage3D(e%2Cr%2Cn))%2Cthis.updateInterpolation(0)%2Cthis.updateInterpolation(1)%2Ca%7C%7Cthis.drawCrosshairs3D(!0%2C1%2Ce)%2Cthis.drawMesh3D(!0%2C1%2Ce%2Ci%2Cs)%2Cthis.uiData.mouseDepthPicker)return%20this.depthPicker(t%2Ce)%2Cthis.createOnLocationChange()%2Cvoid%20this.draw3D(t%2Ce%2Ci%2Cs%2Cr%2Cn)%3Bthis.opts.meshXRay%3E0%26%26this.drawMesh3D(!1%2Cthis.opts.meshXRay%2Ce%2Ci%2Cs)%2Cthis.draw3DLabels(e%2Cl%2C!1)%2Co.viewport(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2Ct%5B3%5D)%2Ca%7C%7Cthis.drawCrosshairs3D(!1%2C.15%2Ce)%2Co.viewport(0%2C0%2Co.canvas.width%2Co.canvas.height)%2Cthis.drawOrientationCube(t%2Cr%2Cn)%3Bconst%20h%3D%22azimuth%3A%20%22%2Bthis.scene.renderAzimuth.toFixed(0)%2B%22%20elevation%3A%20%22%2Bthis.scene.renderElevation.toFixed(0)%3Breturn%20this.readyForSync%3D!0%2Cthis.sync()%2Cthis.draw3DLabels(e%2Cl%2C!0)%2Ch%7DdrawMesh3D(t%3D!0%2Ce%3D1%2Ci%2Cs%2Cr)%7Bif(this.meshes.length%3C1)return%3Bconst%20n%3Dthis.gl%3Bi%7C%7C(%5Bi%2Cs%2Cr%5D%3Dthis.calculateMvpMatrix(this.volumeObject3D%2Cvoid%200%2Cthis.scene.renderAzimuth%2Cthis.scene.renderElevation))%2Cn.enable(n.DEPTH_TEST)%2Cn.blendFunc(n.SRC_ALPHA%2Cn.ONE_MINUS_SRC_ALPHA)%2Cn.disable(n.BLEND)%2Cn.depthFunc(n.GREATER)%2Cn.disable(n.CULL_FACE)%2Ct%3F(n.disable(n.BLEND)%2Cn.depthFunc(n.GREATER))%3A(n.enable(n.BLEND)%2Cn.depthFunc(n.ALWAYS)%2Cn.enable(n.CULL_FACE))%2Cn.cullFace(n.BACK)%3Blet%20a%3Dthis.meshShaders%5B0%5D.shader%2Co%3D!1%3Bfor(let%20t%3D0%3Bt%3Cthis.meshes.length%3Bt%2B%2B)!1!%3D%3Dthis.meshes%5Bt%5D.visible%26%26(a%3Dthis.meshShaders%5Bthis.meshes%5Bt%5D.meshShaderIndex%5D.shader%2Cthis.uiData.mouseDepthPicker%26%26(a%3Dthis.pickingMeshShader)%2Ca.use(this.gl)%2Cn.uniformMatrix4fv(a.uniforms.mvpMtx%2C!1%2Ci)%2Cn.uniformMatrix4fv(a.uniforms.normMtx%2C!1%2Cr)%2Cn.uniform1f(a.uniforms.opacity%2Ce)%2Cthis.meshes%5Bt%5D.indexCount%3C3%7C%7C(this.meshes%5Bt%5D.offsetPt0%26%26(this.meshes%5Bt%5D.fiberSides%3C3%7C%7Cthis.meshes%5Bt%5D.fiberRadius%3C%3D0)%3Fo%3D!0%3A(a.isMatcap%26%26(n.activeTexture(33989)%2Cn.bindTexture(n.TEXTURE_2D%2Cthis.matCapTexture))%2Cn.bindVertexArray(this.meshes%5Bt%5D.vao)%2Cn.drawElements(n.TRIANGLES%2Cthis.meshes%5Bt%5D.indexCount%2Cn.UNSIGNED_INT%2C0)%2Cn.bindVertexArray(this.unusedVAO))))%3Bif(!o)return%20n.enable(n.BLEND)%2Cvoid%20n.depthFunc(n.ALWAYS)%3Ba%3Dthis.fiberShader%2Ca.use(this.gl)%2Cn.uniformMatrix4fv(a.uniforms.mvpMtx%2C!1%2Ci)%2Cn.uniform1f(a.uniforms.opacity%2Ce)%3Bfor(let%20t%3D0%3Bt%3Cthis.meshes.length%3Bt%2B%2B)this.meshes%5Bt%5D.indexCount%3C3%7C%7Cthis.meshes%5Bt%5D.offsetPt0%26%26(this.meshes%5Bt%5D.fiberSides%3E%3D3%26%26this.meshes%5Bt%5D.fiberRadius%3E0%7C%7C(n.bindVertexArray(this.meshes%5Bt%5D.vaoFiber)%2Cn.drawElements(n.LINE_STRIP%2Cthis.meshes%5Bt%5D.indexCount%2Cn.UNSIGNED_INT%2C0)%2Cn.bindVertexArray(this.unusedVAO)))%3Bn.enable(n.BLEND)%2Cn.depthFunc(n.ALWAYS)%2Cthis.readyForSync%3D!0%7DdrawCrosshairs3D(t%3D!0%2Ce%3D1%2Ci%3Dnull%2Cs%3D!1%2Cr%3D!0)%7Bif(!this.opts.show3Dcrosshair%26%26!s)return%3Bif(this.opts.crosshairWidth%3C%3D0%26%26s)return%3Bconst%20n%3Dthis.gl%2Ca%3Dthis.frac2mm(this.scene.crosshairPos%2C0%2Cr)%3Bif(null%3D%3D%3Dthis.crosshairs3D%7C%7Cthis.crosshairs3D.mm%5B0%5D!%3D%3Da%5B0%5D%7C%7Cthis.crosshairs3D.mm%5B1%5D!%3D%3Da%5B1%5D%7C%7Cthis.crosshairs3D.mm%5B2%5D!%3D%3Da%5B2%5D)%7Bnull!%3D%3Dthis.crosshairs3D%26%26(n.deleteBuffer(this.crosshairs3D.indexBuffer)%2Cn.deleteBuffer(this.crosshairs3D.vertexBuffer))%3Bconst%5Bt%2Ce%2Ci%5D%3Dthis.sceneExtentsMinMax(r)%3Blet%20s%3D1%3Bif(this.volumes.length%3E0)%7Bif(!this.back)throw%20new%20Error(%22back%20undefined%22)%3Bs%3D.5*Math.min(Math.min(this.back.pixDims%5B1%5D%2Cthis.back.pixDims%5B2%5D)%2Cthis.back.pixDims%5B3%5D)%7Delse(i%5B0%5D%3C50%7C%7Ci%5B0%5D%3E1e3)%26%26(s%3D.02*i%5B0%5D)%3Bs*%3Dthis.opts.crosshairWidth%2Cthis.crosshairs3D%3Dk.generateCrosshairs(this.gl%2C1%2Ca%2Ct%2Ce%2Cs%2C20%2Cthis.opts.crosshairGap)%2Cthis.crosshairs3D.mm%3Da%7Dif(!this.surfaceShader)throw%20new%20Error(%22surfaceShader%20undefined%22)%3Bconst%20o%3Dthis.surfaceShader%3Bo.use(this.gl)%2Cnull%3D%3Di%26%26(%5Bi%5D%3Dthis.calculateMvpMatrix(this.crosshairs3D%2Cvoid%200%2Cthis.scene.renderAzimuth%2Cthis.scene.renderElevation))%2Cn.uniformMatrix4fv(o.uniforms.mvpMtx%2C!1%2Ci)%2Cn.bindBuffer(n.ELEMENT_ARRAY_BUFFER%2Cthis.crosshairs3D.indexBuffer)%2Cn.enable(n.DEPTH_TEST)%3Bconst%20l%3D%5B...this.opts.crosshairColor%5D%3Bt%3F(n.disable(n.BLEND)%2Cn.depthFunc(n.GREATER))%3A(n.enable(n.BLEND)%2Cn.blendFunc(n.SRC_ALPHA%2Cn.ONE_MINUS_SRC_ALPHA)%2Cn.depthFunc(n.ALWAYS))%2Cl%5B3%5D%3De%2Cn.uniform4fv(o.uniforms.surfaceColor%2Cl)%2Cn.bindVertexArray(this.crosshairs3D.vao)%2Cn.drawElements(n.TRIANGLES%2Cthis.crosshairs3D.indexCount%2Cn.UNSIGNED_INT%2C0)%2Cn.bindVertexArray(this.unusedVAO)%7Dmm2frac(t%2Ce%3D0%2Ci%3D!1)%7Bif(this.volumes.length%3C1)%7Bconst%20e%3Dr.fromValues(.1%2C.5%2C.5)%2C%5Bi%2Cs%2Cn%5D%3Dthis.sceneExtentsMinMax()%3Breturn%20e%5B0%5D%3D(t%5B0%5D-i%5B0%5D)%2Fn%5B0%5D%2Ce%5B1%5D%3D(t%5B1%5D-i%5B1%5D)%2Fn%5B1%5D%2Ce%5B2%5D%3D(t%5B2%5D-i%5B2%5D)%2Fn%5B2%5D%2CisFinite(e)%7C%7C(isFinite(e%5B0%5D)%7C%7C(e%5B0%5D%3D.5)%2CisFinite(e%5B1%5D)%7C%7C(e%5B1%5D%3D.5)%2CisFinite(e%5B2%5D)%7C%7C(e%5B2%5D%3D.5)%2Cthis.meshes.length%3C1%26%26l.error(%22mm2frac()%20not%20finite%3A%20objects%20not%20(yet)%20loaded.%22))%2Ce%7Dreturn%20this.volumes%5Be%5D.convertMM2Frac(t%2Ci%7C%7Cthis.opts.isSliceMM)%7Dvox2frac(t%2Ce%3D0)%7Breturn%20this.volumes%5Be%5D.convertVox2Frac(t)%7Dfrac2vox(t%2Ce%3D0)%7Breturn%20this.volumes.length%3C%3De%3F%5B0%2C0%2C0%5D%3Athis.volumes%5Be%5D.convertFrac2Vox(t)%7DmoveCrosshairInVox(t%2Ce%2Ci)%7Bconst%20s%3Dthis.frac2vox(this.scene.crosshairPos)%3Bs%5B0%5D%2B%3Dt%2Cs%5B1%5D%2B%3De%2Cs%5B2%5D%2B%3Di%2Cs%5B0%5D%3Dbi(s%5B0%5D%2C0%2Cthis.volumes%5B0%5D.dimsRAS%5B1%5D-1)%2Cs%5B1%5D%3Dbi(s%5B1%5D%2C0%2Cthis.volumes%5B0%5D.dimsRAS%5B2%5D-1)%2Cs%5B2%5D%3Dbi(s%5B2%5D%2C0%2Cthis.volumes%5B0%5D.dimsRAS%5B3%5D-1)%2Cthis.scene.crosshairPos%3Dthis.vox2frac(s)%2Cthis.createOnLocationChange()%2Cthis.drawScene()%7Dfrac2mm(t%2Ce%3D0%2Ci%3D!1)%7Bconst%20s%3Dn.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2C1)%3Bif(this.volumes.length%3E0)return%20this.volumes%5Be%5D.convertFrac2MM(t%2Ci%7C%7Cthis.opts.isSliceMM)%3B%7Bconst%5Be%2Ci%5D%3Dthis.sceneExtentsMinMax()%2Cr%3D(t%2Ce%2Ci)%3D%3Et*(1-i)%2Be*i%3Bs%5B0%5D%3Dr(e%5B0%5D%2Ci%5B0%5D%2Ct%5B0%5D)%2Cs%5B1%5D%3Dr(e%5B1%5D%2Ci%5B1%5D%2Ct%5B1%5D)%2Cs%5B2%5D%3Dr(e%5B2%5D%2Ci%5B2%5D%2Ct%5B2%5D)%7Dreturn%20s%7DscreenXY2TextureFrac(t%2Ce%2Ci%2Cs%3D!0)%7Bconst%20n%3Dr.fromValues(-1%2C-1%2C-1)%2Ca%3Dthis.screenSlices%5Bi%5D.axCorSag%3Bif(a%3E2)return%20n%3Bconst%20o%3Dthis.screenSlices%5Bi%5D.leftTopWidthHeight.slice()%3Blet%20l%3D!1%3Bo%5B2%5D%3C0%26%26(l%3D!0%2Co%5B0%5D%2B%3Do%5B2%5D%2Co%5B2%5D%3D-o%5B2%5D)%3Blet%20h%3D(t-o%5B0%5D)%2Fo%5B2%5D%3Bl%26%26(h%3D1-h)%3Bconst%20c%3D1-(e-o%5B1%5D)%2Fo%5B3%5D%3Bif(h%3C0%7C%7Ch%3E1%7C%7Cc%3C0%7C%7Cc%3E1)return%20n%3Bif(this.screenSlices%5Bi%5D.AxyzMxy.length%3C4)return%20n%3Blet%20d%3Dr.fromValues(0%2C0%2C0)%3Bd%5B0%5D%3Dthis.screenSlices%5Bi%5D.leftTopMM%5B0%5D%2Bh*this.screenSlices%5Bi%5D.fovMM%5B0%5D%2Cd%5B1%5D%3Dthis.screenSlices%5Bi%5D.leftTopMM%5B1%5D%2Bc*this.screenSlices%5Bi%5D.fovMM%5B1%5D%3Bconst%20m%3Dthis.screenSlices%5Bi%5D.AxyzMxy%3Bd%5B2%5D%3Dm%5B2%5D%2Bm%5B4%5D*(d%5B1%5D-m%5B1%5D)-m%5B3%5D*(d%5B0%5D-m%5B0%5D)%2C1%3D%3D%3Da%26%26(d%3Dwi(d%2C%5B0%2C2%2C1%5D))%2C2%3D%3D%3Da%26%26(d%3Dwi(d%2C%5B2%2C0%2C1%5D))%3Bconst%20u%3Dthis.mm2frac(d)%3Breturn%20s%26%26(u%5B0%5D%3C0%7C%7Cu%5B0%5D%3E1%7C%7Cu%5B1%5D%3C0%7C%7Cu%5B1%5D%3E1%7C%7Cu%5B2%5D%3C0%7C%7Cu%5B2%5D%3E1)%3Fn%3Au%7DcanvasPos2frac(t)%7Bfor(let%20e%3D0%3Be%3Cthis.screenSlices.length%3Be%2B%2B)%7Bconst%20i%3Dthis.screenXY2TextureFrac(t%5B0%5D%2Ct%5B1%5D%2Ce)%3Bif(i%5B0%5D%3E%3D0)return%20i%7Dreturn%5B-1%2C-1%2C-1%5D%7DscaleSlice(t%2Ce%2Ci%3D0%2Cs%3D0)%7Bconst%20r%3Dthis.effectiveCanvasWidth()-i%2Cn%3Dthis.effectiveCanvasHeight()-s%3Blet%20a%3Dr%2Ft%3Be*a%3En%26%26(a%3Dn%2Fe)%3Bconst%20o%3Dt*a%2Cl%3De*a%3Breturn%5B.5*(r-o)%2C.5*(n-l)%2Co%2Cl%2Ca%5D%7DdrawThumbnail()%7Bif(!this.bmpShader)throw%20new%20Error(%22bmpShader%20undefined%22)%3Bthis.bmpShader.use(this.gl)%2Cthis.gl.uniform2f(this.bmpShader.uniforms.canvasWidthHeight%2Cthis.gl.canvas.width%2Cthis.gl.canvas.height)%3Blet%20t%3Dthis.gl.canvas.height%2Ce%3Dthis.gl.canvas.height*this.bmpTextureWH%3Be%3Ethis.gl.canvas.width%26%26(t%3Dthis.gl.canvas.width%2Fthis.bmpTextureWH%2Ce%3Dthis.gl.canvas.width)%2Cthis.gl.uniform4f(this.bmpShader.uniforms.leftTopWidthHeight%2C0%2C0%2Ce%2Ct)%2Cthis.gl.bindVertexArray(this.genericVAO)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%2Cthis.gl.bindVertexArray(this.unusedVAO)%7DdrawLine(t%2Ce%3D1%2Ci%3D%5B1%2C0%2C0%2C-1%5D)%7Bif(this.gl.bindVertexArray(this.genericVAO)%2C!this.lineShader)throw%20new%20Error(%22lineShader%20undefined%22)%3Bthis.lineShader.use(this.gl)%2Ci%5B3%5D%3C0%26%26(i%3Dthis.opts.crosshairColor)%2Cthis.gl.uniform4fv(this.lineShader.uniforms.lineColor%2Ci)%2Cthis.gl.uniform2fv(this.lineShader.uniforms.canvasWidthHeight%2C%5Bthis.gl.canvas.width%2Cthis.gl.canvas.height%5D)%2Cthis.gl.uniform1f(this.lineShader.uniforms.thickness%2Ce)%2Cthis.gl.uniform4fv(this.lineShader.uniforms.startXYendXY%2Ct)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%2Cthis.gl.bindVertexArray(this.unusedVAO)%7Ddraw3DLine(t%2Ce%2Ci%3D1%2Cs%3D%5B1%2C0%2C0%2C-1%5D)%7Bif(this.gl.bindVertexArray(this.genericVAO)%2C!this.line3DShader)throw%20new%20Error(%22line3DShader%20undefined%22)%3Bthis.line3DShader.use(this.gl)%2Cs%5B3%5D%3C0%26%26(s%3Dthis.opts.crosshairColor)%2Cthis.gl.uniform4fv(this.line3DShader.uniforms.lineColor%2Cs)%2Cthis.gl.uniform2fv(this.line3DShader.uniforms.canvasWidthHeight%2C%5Bthis.gl.canvas.width%2Cthis.gl.canvas.height%5D)%2Cthis.gl.uniform1f(this.line3DShader.uniforms.thickness%2Ci)%2Cthis.gl.uniform2fv(this.line3DShader.uniforms.startXY%2Ct)%2Cthis.gl.uniform3fv(this.line3DShader.uniforms.endXYZ%2Ce)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%2Cthis.gl.bindVertexArray(this.unusedVAO)%7DdrawDottedLine(t%2Ce%3D1%2Ci%3D%5B1%2C0%2C0%2C-1%5D)%7Bif(this.gl.bindVertexArray(this.genericVAO)%2C!this.lineShader)throw%20new%20Error(%22lineShader%20undefined%22)%3Bthis.lineShader.use(this.gl)%3Bconst%20r%3Di%5B3%5D%3C0%3F%5B...this.opts.crosshairColor%5D%3A%5B...i%5D%3Br%5B3%5D%3D.3%3Bconst%20n%3Ds.fromValues(t%5B2%5D-t%5B0%5D%2Ct%5B3%5D-t%5B1%5D)%2Ca%3Ds.length(n)%3Bs.normalize(n%2Cn)%3Bconst%20o%3Dthis.opts.textHeight*Math.min(this.gl.canvas.height%2Cthis.gl.canvas.width)*1%3Bs.scale(n%2Cn%2Co%2F2)%3Bconst%20l%3Ds.length(n)%3Blet%20h%3DMath.floor(a%2Fl)%3Ba%25l%26%26h%2B%2B%3Bconst%20c%3D%5Bt%5B0%5D%2Ct%5B1%5D%5D%3Bthis.gl.uniform4fv(this.lineShader.uniforms.lineColor%2Cr)%2Cthis.gl.uniform2fv(this.lineShader.uniforms.canvasWidthHeight%2C%5Bthis.gl.canvas.width%2Cthis.gl.canvas.height%5D)%2Cthis.gl.uniform1f(this.lineShader.uniforms.thickness%2Ce)%3Bfor(let%20t%3D0%3Bt%3Ch-1%3Bt%2B%2B)%7Bif(t%252)%7Bc%5B0%5D%2B%3Dn%5B0%5D%2Cc%5B1%5D%2B%3Dn%5B1%5D%3Bcontinue%7Dconst%20e%3D%5Bc%5B0%5D%2Cc%5B1%5D%2Cc%5B0%5D%2Bn%5B0%5D%2Cc%5B1%5D%2Bn%5B1%5D%5D%3Bthis.gl.uniform4fv(this.lineShader.uniforms.startXYendXY%2Ce)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%2Cc%5B0%5D%2B%3Dn%5B0%5D%2Cc%5B1%5D%2B%3Dn%5B1%5D%7Dthis.gl.bindVertexArray(this.unusedVAO)%7DdrawGraphLine(t%2Ce%3D%5B1%2C0%2C0%2C.5%5D%2Ci%3D2)%7Bthis.drawLine(t%2Ci%2Ce)%7DdrawCrossLinesMM(t%2Ce%2Ci%2Cr%2Cn)%7Bif(t%3C0%7C%7Cthis.screenSlices.length%3C%3Dt)return%3Bconst%20a%3Dthis.screenSlices%5Bt%5D%3Blet%20o%3Da.sliceFrac%3Bo%3D%3D%3D1%2F0%26%26l.warn(%22Rendering%20approximate%20cross%20lines%20in%20world%20view%20mode%22)%2Co%3D%3D%3D1%2F0%26%26(o%3D.5)%3Blet%20h%3Dr.slice()%2Cc%3Dn.slice()%3Bconst%20d%3DMath.max(1%2Cthis.opts.crosshairWidth)%3Bfunction%20m(t)%7Bconst%20e%3Ds.fromValues(0%2C0)%3Breturn%20e%5B0%5D%3Da.leftTopWidthHeight%5B0%5D%2B(t%5B0%5D-a.leftTopMM%5B0%5D)%2Fa.fovMM%5B0%5D*a.leftTopWidthHeight%5B2%5D%2Ce%5B1%5D%3Da.leftTopWidthHeight%5B1%5D%2Ba.leftTopWidthHeight%5B3%5D-(t%5B1%5D-a.leftTopMM%5B1%5D)%2Fa.fovMM%5B1%5D*a.leftTopWidthHeight%5B3%5D%2Ce%7Dif(1%3D%3D%3De%26%26(h%3Di.slice())%2C2%3D%3D%3De%26%26(h%3Di.slice()%2Cc%3Dr.slice())%2Ch.length%3E0%26%260%3D%3D%3De)%7Bconst%20t%3Do%2Ce%3D1%3Bfor(let%20i%3D0%3Bi%3Ch.length%3Bi%2B%2B)%7Bconst%20s%3Dthis.frac2mm(%5B.5%2C.5%2C.5%5D)%3Bs%5Be%5D%3Dh%5Bi%5D%3Blet%20r%3Dthis.mm2frac(s)%3Br%3Dr%5Be%5D%3Blet%20n%3Dthis.frac2mm(%5B0%2Cr%2Ct%5D)%3Bn%3Dwi(n%2C%5B0%2C1%2C2%5D)%3Blet%20a%3Dthis.frac2mm(%5B1%2Cr%2Ct%5D)%3Ba%3Dwi(a%2C%5B0%2C1%2C2%5D)%2Cn%3Dm(n)%2Ca%3Dm(a)%2Cthis.drawLine(%5Bn%5B0%5D%2Cn%5B1%5D%2Ca%5B0%5D%2Ca%5B1%5D%5D%2Cd)%7D%7Dif(h.length%3E0%26%261%3D%3D%3De)%7Bconst%20t%3Do%2Ce%3D2%3Bfor(let%20i%3D0%3Bi%3Ch.length%3Bi%2B%2B)%7Bconst%20s%3Dthis.frac2mm(%5B.5%2C.5%2C.5%5D)%3Bs%5Be%5D%3Dh%5Bi%5D%3Blet%20r%3Dthis.mm2frac(s)%3Br%3Dr%5Be%5D%3Blet%20n%3Dthis.frac2mm(%5B0%2Ct%2Cr%5D)%3Bn%3Dwi(n%2C%5B0%2C2%2C1%5D)%3Blet%20a%3Dthis.frac2mm(%5B1%2Ct%2Cr%5D)%3Ba%3Dwi(a%2C%5B0%2C2%2C1%5D)%2Cn%3Dm(n)%2Ca%3Dm(a)%2Cthis.drawLine(%5Bn%5B0%5D%2Cn%5B1%5D%2Ca%5B0%5D%2Ca%5B1%5D%5D%2Cd)%7D%7Dif(h.length%3E0%26%262%3D%3D%3De)%7Bconst%20t%3Do%2Ce%3D2%3Bfor(let%20i%3D0%3Bi%3Ch.length%3Bi%2B%2B)%7Bconst%20s%3Dthis.frac2mm(%5B.5%2C.5%2C.5%5D)%3Bs%5Be%5D%3Dh%5Bi%5D%3Blet%20r%3Dthis.mm2frac(s)%3Br%3Dr%5Be%5D%3Blet%20n%3Dthis.frac2mm(%5Bt%2C0%2Cr%5D)%3Bn%3Dwi(n%2C%5B1%2C2%2C0%5D)%3Blet%20a%3Dthis.frac2mm(%5Bt%2C1%2Cr%5D)%3Ba%3Dwi(a%2C%5B1%2C2%2C0%5D)%2Cn%3Dm(n)%2Ca%3Dm(a)%2Cthis.drawLine(%5Bn%5B0%5D%2Cn%5B1%5D%2Ca%5B0%5D%2Ca%5B1%5D%5D%2Cd)%7D%7Dif(c.length%3E0%26%260%3D%3D%3De)%7Bconst%20t%3Do%2Ce%3D0%3Bfor(let%20i%3D0%3Bi%3Cc.length%3Bi%2B%2B)%7Bconst%20s%3Dthis.frac2mm(%5B.5%2C.5%2C.5%5D)%3Bs%5Be%5D%3Dc%5Bi%5D%3Blet%20r%3Dthis.mm2frac(s)%3Br%3Dr%5Be%5D%3Blet%20n%3Dthis.frac2mm(%5Br%2C0%2Ct%5D)%3Bn%3Dwi(n%2C%5B0%2C1%2C2%5D)%3Blet%20a%3Dthis.frac2mm(%5Br%2C1%2Ct%5D)%3Ba%3Dwi(a%2C%5B0%2C1%2C2%5D)%2Cn%3Dm(n)%2Ca%3Dm(a)%2Cthis.drawLine(%5Bn%5B0%5D%2Cn%5B1%5D%2Ca%5B0%5D%2Ca%5B1%5D%5D%2Cd)%7D%7Dif(c.length%3E0%26%261%3D%3D%3De)%7Bconst%20t%3Do%2Ce%3D0%3Bfor(let%20i%3D0%3Bi%3Cc.length%3Bi%2B%2B)%7Bconst%20s%3Dthis.frac2mm(%5B.5%2C.5%2C.5%5D)%3Bs%5Be%5D%3Dc%5Bi%5D%3Blet%20r%3Dthis.mm2frac(s)%3Br%3Dr%5Be%5D%3Blet%20n%3Dthis.frac2mm(%5Br%2Ct%2C0%5D)%3Bn%3Dwi(n%2C%5B0%2C2%2C1%5D)%3Blet%20a%3Dthis.frac2mm(%5Br%2Ct%2C1%5D)%3Ba%3Dwi(a%2C%5B0%2C2%2C1%5D)%2Cn%3Dm(n)%2Ca%3Dm(a)%2Cthis.drawLine(%5Bn%5B0%5D%2Cn%5B1%5D%2Ca%5B0%5D%2Ca%5B1%5D%5D%2Cd)%7D%7Dif(c.length%3E0%26%262%3D%3D%3De)%7Bconst%20t%3Do%2Ce%3D1%3Bfor(let%20i%3D0%3Bi%3Cc.length%3Bi%2B%2B)%7Bconst%20s%3Dthis.frac2mm(%5B.5%2C.5%2C.5%5D)%3Bs%5Be%5D%3Dc%5Bi%5D%3Blet%20r%3Dthis.mm2frac(s)%3Br%3Dr%5Be%5D%3Blet%20n%3Dthis.frac2mm(%5Bt%2Cr%2C0%5D)%3Bn%3Dwi(n%2C%5B1%2C2%2C0%5D)%3Blet%20a%3Dthis.frac2mm(%5Bt%2Cr%2C1%5D)%3Ba%3Dwi(a%2C%5B1%2C2%2C0%5D)%2Cn%3Dm(n)%2Ca%3Dm(a)%2Cthis.drawLine(%5Bn%5B0%5D%2Cn%5B1%5D%2Ca%5B0%5D%2Ca%5B1%5D%5D%2Cd)%7D%7D%7DdrawCrossLines(t%2Ce%2Ci%2Cs%2Cr)%7Bif(t%3C0%7C%7Cthis.screenSlices.length%3C%3Dt)return%3Bif(this.opts.isSliceMM)return%20this.drawCrossLinesMM(t%2Ce%2Ci%2Cs%2Cr)%3Bif(this.screenSlices%5Bt%5D.sliceFrac%3D%3D%3D1%2F0)return%20this.drawCrossLinesMM(t%2Ce%2Ci%2Cs%2Cr)%3Bconst%20n%3Dthis.screenSlices%5Bt%5D%3Blet%20a%3Ds.slice()%2Co%3Dr.slice()%3Bif(1%3D%3D%3De%26%26(a%3Di.slice())%2C2%3D%3D%3De%26%26(a%3Di.slice()%2Co%3Ds.slice())%2Ca.length%3E0)%7Bconst%20t%3Dn.leftTopWidthHeight.slice()%3Blet%20i%3D2%3B0%3D%3D%3De%26%26(i%3D1)%3Bconst%20s%3Dthis.frac2mm(%5B.5%2C.5%2C.5%5D)%3Bfor(let%20e%3D0%3Be%3Ca.length%3Be%2B%2B)%7Bs%5Bi%5D%3Da%5Be%5D%3Bconst%20r%3Dthis.mm2frac(s)%3Bthis.drawRect(%5Bt%5B0%5D%2Ct%5B1%5D%2Bt%5B3%5D-r%5Bi%5D*t%5B3%5D%2Ct%5B2%5D%2C1%5D)%7D%7Dif(o.length%3E0)%7Bconst%20t%3Dn.leftTopWidthHeight.slice()%2Ci%3Dn.fovMM%5B0%5D%3C0%3Blet%20s%3D0%3B2%3D%3D%3De%26%26(s%3D1)%3Bconst%20r%3Dthis.frac2mm(%5B.5%2C.5%2C.5%5D)%3Bfor(let%20e%3D0%3Be%3Co.length%3Be%2B%2B)%7Br%5Bs%5D%3Do%5Be%5D%3Bconst%20n%3Dthis.mm2frac(r)%3Bi%3Fthis.drawRect(%5Bt%5B0%5D%2B(t%5B2%5D-n%5Bs%5D*t%5B2%5D)%2Ct%5B1%5D%2C1%2Ct%5B3%5D%5D)%3Athis.drawRect(%5Bt%5B0%5D%2Bn%5Bs%5D*t%5B2%5D%2Ct%5B1%5D%2C1%2Ct%5B3%5D%5D)%7D%7D%7DdrawMosaic(t)%7Bif(0%3D%3D%3Dthis.volumes.length)return%20void%20l.debug(%22Unable%20to%20draw%20mosaic%20until%20voxel-based%20image%20is%20loaded%22)%3Bthis.screenSlices%3D%5B%5D%3Bconst%20e%3Dthis.screenFieldOfViewMM(0%2C!0)%2Ci%3Dthis.screenFieldOfViewMM(0)%2Cs%3D%5B%5D%2Cr%3D%5B%5D%2Cn%3D%5B%5D%2Ca%3D(t%3Dt.replaceAll(%22%3B%22%2C%22%20%3B%22).trim()).split(%2F%5Cs%2B%2F)%3Blet%20o%3D1%3Bconst%20h%3Dthis.opts.textHeight%3Blet%20c%3D0%2Cd%3D0%3Bfor(let%20t%3D0%3Bt%3C2%3Bt%2B%2B)%7Blet%20l%3D!1%2Cm%3D!1%3Bl%3D!1%3Blet%20u%3D0%2CA%3D0%2Cf%3D0%2Cg%3D0%2Cp%3D!1%2Cv%3D0%3Bfor(let%20x%3D0%3Bx%3Ca.length%3Bx%2B%2B)%7Bconst%20w%3Da%5Bx%5D%3Bif(w.includes(%22X%22))%7Bm%3D!0%3Bcontinue%7Dif(w.includes(%22L%22))%7Bp%3D!w.includes(%22-%22)%3Bcontinue%7Dif(w.includes(%22V%22)%7C%7Cw.includes(%22H%22))%7Bx%2B%2B%3Bcontinue%7Dw.includes(%22A%22)%26%26(v%3D0)%2Cw.includes(%22C%22)%26%26(v%3D1)%2Cw.includes(%22S%22)%26%26(v%3D2)%2Cw.includes(%22R%22)%26%26(l%3D!0)%2Cw.includes(%22%3B%22)%26%26(f%2B%3Du%2Cg%3DMath.max(g%2CA)%2Cu%3D0%2CA%3D0)%3Bconst%20C%3DparseFloat(w)%3Bif(isNaN(C))continue%3Blet%20b%3D0%2Cy%3D0%2CI%3Di%3Bif(l%26%26(I%3De)%2Cb%3D2%3D%3D%3Dv%3FI%5B1%5D%3AI%5B0%5D%2Cy%3D0%3D%3D%3Dv%3FI%5B1%5D%3AI%5B2%5D%2C0%3D%3D%3Dt)l%7C%7C(0%3D%3D%3Dv%26%26s.push(C)%2C1%3D%3D%3Dv%26%26r.push(C)%2C2%3D%3D%3Dv%26%26n.push(C))%3Belse%7Bconst%20t%3D%5Bc%2Bo*A%2Cd%2Bo*f%2Co*b%2Co*y%5D%3Bif(this.opts.textHeight%3Dp%3Fh%3A0%2Cl)%7Blet%20e%3DC%3C0%3F-1%2F0%3A1%2F0%3BObject.is(C%2C-0)%26%26(e%3D-1%2F0)%2Cthis.draw2D(t%2Cv%2Ce)%7Delse%20this.draw2D(t%2Cv%2CC)%3Bm%26%26this.drawCrossLines(this.screenSlices.length-1%2Cv%2Cs%2Cr%2Cn)%2Cl%3D!1%2Cm%3D!1%7DA%2B%3Db%2Cu%3DMath.max(u%2Cy)%7Dif(f%2B%3Du%2Cg%3DMath.max(g%2CA)%2Cg%3C%3D0%7C%7Cf%3C%3D0)break%3Bconst%20x%3Dthis.gl.canvas.width%2Fg%2Cw%3Dthis.effectiveCanvasHeight()%2Ff%3Bo%3DMath.min(x%2Cw)%2Cthis.opts.centerMosaic%26%26(c%3DMath.floor(.5*(this.gl.canvas.width-g*o))%2Cd%3DMath.floor(.5*(this.effectiveCanvasHeight()-f*o)))%7Dthis.opts.textHeight%3Dh%7DdrawSceneCore()%7Bif(!this.initialized)return%3Bif(this.colorbarHeight%3D0%2Cthis.gl.clearColor(this.opts.backColor%5B0%5D%2Cthis.opts.backColor%5B1%5D%2Cthis.opts.backColor%5B2%5D%2Cthis.opts.backColor%5B3%5D)%2Cthis.gl.clear(this.gl.COLOR_BUFFER_BIT%7Cthis.gl.DEPTH_BUFFER_BIT)%2Cthis.bmpTexture%26%26this.thumbnailVisible)return%20void%20this.drawThumbnail()%3Blet%20t%3D%22%22%3Bif(0%3D%3D%3Dthis.volumes.length%7C%7Cvoid%200%3D%3D%3Dthis.volumes%5B0%5D.dims)return%20this.meshes.length%3E0%3F(this.screenSlices%3D%5B%5D%2Cthis.opts.sliceType%3D4%2Cthis.draw3D()%2Cvoid(this.opts.isColorbar%26%26this.drawColorbar()))%3Avoid%20this.drawLoadingText(this.loadingText)%3Bif(null%3D%3D%3Dthis.back)return%3Bif(this.uiData.isDragging%26%26this.scene.clipPlaneDepthAziElev%5B0%5D%3C1.8%26%26this.inRenderTile(this.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D)%3E%3D0)%7Bconst%20t%3Dthis.uiData.dragStart%5B0%5D-this.uiData.dragEnd%5B0%5D%2Ce%3Dthis.uiData.dragStart%5B1%5D-this.uiData.dragEnd%5B1%5D%2Ci%3Dthis.uiData.dragClipPlaneStartDepthAziElev.slice()%3Bif(i%5B1%5D-%3Dt%2Ci%5B1%5D%3Di%5B1%5D%25360%2Ci%5B2%5D%2B%3De%2Ci%5B1%5D!%3D%3Dthis.scene.clipPlaneDepthAziElev%5B1%5D%7C%7Ci%5B2%5D!%3D%3Dthis.scene.clipPlaneDepthAziElev%5B2%5D)return%20this.scene.clipPlaneDepthAziElev%3Di%2Cthis.setClipPlane(this.scene.clipPlaneDepthAziElev)%7Dif(this.sliceMosaicString.length%3C1%26%264%3D%3D%3Dthis.opts.sliceType)return%20this.opts.isColorbar%26%26this.reserveColorbarPanel()%2Cthis.screenSlices%3D%5B%5D%2Cthis.draw3D()%2Cvoid(this.opts.isColorbar%26%26this.drawColorbar())%3Bthis.opts.isColorbar%26%26this.reserveColorbarPanel()%3Bconst%20e%3Dthis.getMaxVols()%2Ci%3D3%3D%3D%3Dthis.opts.sliceType%26%26e%3E1%26%26this.graph.autoSizeMultiplanar%26%26this.graph.opacity%3E0%3Bif(this.sliceMosaicString.length%3E0)this.drawMosaic(this.sliceMosaicString)%3Belse%20if(this.gl.viewport(0%2C0%2Cthis.gl.canvas.width%2Cthis.gl.canvas.height)%2Cthis.screenSlices%3D%5B%5D%2C0%3D%3D%3Dthis.opts.sliceType)this.draw2D(%5B0%2C0%2C0%2C0%5D%2C0)%3Belse%20if(1%3D%3D%3Dthis.opts.sliceType)this.draw2D(%5B0%2C0%2C0%2C0%5D%2C1)%3Belse%20if(2%3D%3D%3Dthis.opts.sliceType)this.draw2D(%5B0%2C0%2C0%2C0%5D%2C2)%3Belse%7Blet%20t%3D!1%3Bthis.opts.multiplanarForceRender%3F(t%3D!0%2Cthis.opts.multiplanarForceRender%3Fthis.opts.multiplanarShowRender%3D1%3Athis.opts.multiplanarShowRender%3D2%2Cdelete%20this.opts.multiplanarForceRender)%3A1%3D%3D%3Dthis.opts.multiplanarShowRender%26%26(t%3D!0)%3Bconst%20s%3DisFinite(this.drawPenLocation%5B0%5D)%26%26this.opts.drawingEnabled%2C%7BvolScale%3Ar%7D%3Dthis.sliceScale()%2Cn%3Dr.slice()%3Bthis.opts.multiplanarEqualSize%26%26(r%5B0%5D%3D1%2Cr%5B1%5D%3D1%2Cr%5B2%5D%3D1)%2C%22number%22!%3Dtypeof%20this.opts.multiplanarPadPixels%26%26l.debug(%22multiplanarPadPixels%20must%20be%20numeric%22)%3Bconst%20a%3DparseFloat(%60%24%7Bthis.opts.multiplanarPadPixels%7D%60)%2Co%3Dthis.scaleSlice(r%5B0%5D%2Br%5B1%5D%2Cr%5B1%5D%2Br%5B2%5D%2C1*a%2C1*a)%2Ch%3DMath.max(Math.max(r%5B1%5D%2Cr%5B2%5D)%2Cr%5B0%5D)%2Cc%3Dthis.scaleSlice(r%5B0%5D%2Br%5B0%5D%2Br%5B1%5D%2CMath.max(r%5B1%5D%2Cr%5B2%5D)%2C2*a)%2Cd%3Dthis.scaleSlice(r%5B0%5D%2Br%5B0%5D%2Br%5B1%5D%2Bh%2CMath.max(r%5B1%5D%2Cr%5B2%5D)%2C3*a)%2Cm%3Dthis.scaleSlice(h%2Cr%5B1%5D%2Br%5B2%5D%2Br%5B2%5D%2C0%2C2*a)%2Cu%3Dthis.scaleSlice(h%2Cr%5B1%5D%2Br%5B2%5D%2Br%5B2%5D%2Bh%2C0%2C3*a)%3Blet%20A%3D!s%26%26(e%3C2%7C%7C!i)%2Cf%3D!1%2Cg%3D!1%2Cp%3D!1%3B1%3D%3D%3Dthis.opts.multiplanarLayout%3Ff%3D!0%3A2%3D%3D%3Dthis.opts.multiplanarLayout%3Fg%3D!0%3A3%3D%3D%3Dthis.opts.multiplanarLayout%3Fp%3D!0%3Am%5B4%5D%3Ec%5B4%5D%26%26m%5B4%5D%3Eo%5B4%5D%3Ff%3D!0%3Ac%5B4%5D%3Eo%5B4%5D%3Fp%3D!0%3Ag%3D!0%3Blet%20v%3Do%3Bf%3F(v%3Dm%2Ct%7C%7C2%3D%3D%3Dthis.opts.multiplanarShowRender%26%26u%5B4%5D%3E%3Dm%5B4%5D%3Fv%3Du%3AA%3D!1)%3Ap%26%26(v%3Dc%2Ct%7C%7C2%3D%3D%3Dthis.opts.multiplanarShowRender%26%26d%5B4%5D%3E%3Dc%5B4%5D%3Fv%3Dd%3AA%3D!1)%3Bconst%20x%3Dr%5B0%5D*v%5B4%5D%2Cw%3Dr%5B1%5D*v%5B4%5D%2CC%3Dr%5B2%5D*v%5B4%5D%2Cb%3Dn%5B0%5D*v%5B4%5D%2Cy%3Dn%5B1%5D*v%5B4%5D%2CI%3Dn%5B2%5D*v%5B4%5D%3Bif(f)%7Bif(this.draw2D(%5Bv%5B0%5D%2Cv%5B1%5D%2Cx%2Cw%5D%2C0%2CNaN%2C%5Bb%2Cy%5D)%2Cthis.draw2D(%5Bv%5B0%5D%2Cv%5B1%5D%2Bw%2Ba%2Cx%2CC%5D%2C1%2CNaN%2C%5Bb%2CI%5D)%2Cthis.draw2D(%5Bv%5B0%5D%2Cv%5B1%5D%2Bw%2Ba%2BC%2Ba%2Cw%2CC%5D%2C2%2CNaN%2C%5By%2CI%5D)%2CA)%7Bconst%20t%3Dh*v%5B4%5D%3Bthis.draw3D(%5Bv%5B0%5D%2Cv%5B1%5D%2Bw%2BC%2BC%2B3*a%2Ct%2Ct%5D)%7D%7Delse%20if(p)%7Bif(this.draw2D(%5Bv%5B0%5D%2Cv%5B1%5D%2Cx%2Cw%5D%2C0%2CNaN%2C%5Bb%2Cy%5D)%2Cthis.draw2D(%5Bv%5B0%5D%2Bx%2Ba%2Cv%5B1%5D%2Cx%2CC%5D%2C1%2CNaN%2C%5Bb%2CI%5D)%2Cthis.draw2D(%5Bv%5B0%5D%2Bx%2Bx%2B2*a%2Cv%5B1%5D%2Cw%2CC%5D%2C2%2CNaN%2C%5By%2CI%5D)%2CA)%7Bconst%20t%3Dh*v%5B4%5D%3Bthis.draw3D(%5Bv%5B0%5D%2Bx%2Bx%2Bw%2B3*a%2Cv%5B1%5D%2Ct%2Ct%5D)%7D%7Delse%20g%26%26(t%7C%7C(A%3D!1)%2C2%3D%3D%3Dthis.opts.multiplanarShowRender%26%26(A%3D!0)%2Cthis.draw2D(%5Bv%5B0%5D%2Cv%5B1%5D%2BC%2Ba%2Cx%2Cw%5D%2C0%2CNaN%2C%5Bb%2Cy%5D)%2Cthis.draw2D(%5Bv%5B0%5D%2Cv%5B1%5D%2Cx%2CC%5D%2C1%2CNaN%2C%5Bb%2CI%5D)%2Cthis.draw2D(%5Bv%5B0%5D%2Bx%2Ba%2Cv%5B1%5D%2Cw%2CC%5D%2C2%2CNaN%2C%5By%2CI%5D)%2CA%26%26this.draw3D(%5Bv%5B0%5D%2Bx%2Ba%2Cv%5B1%5D%2BC%2Ba%2Cw%2Cw%5D))%7Dif(this.opts.isRuler%26%26this.drawRuler()%2Cthis.opts.isColorbar%26%26this.drawColorbar()%2Ci%26%26this.drawGraph()%2Cthis.uiData.isDragging)%7Bif(this.uiData.mouseButtonCenterDown)return%20void%20this.dragForCenterButton(%5Bthis.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D%2Cthis.uiData.dragEnd%5B0%5D%2Cthis.uiData.dragEnd%5B1%5D%5D)%3Bif(4%3D%3D%3Dthis.opts.dragMode)return%20void%20this.dragForSlicer3D(%5Bthis.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D%2Cthis.uiData.dragEnd%5B0%5D%2Cthis.uiData.dragEnd%5B1%5D%5D)%3Bif(3%3D%3D%3Dthis.opts.dragMode)return%20void%20this.dragForPanZoom(%5Bthis.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D%2Cthis.uiData.dragEnd%5B0%5D%2Cthis.uiData.dragEnd%5B1%5D%5D)%3Bif(this.inRenderTile(this.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D)%3E%3D0)return%3Bif(2%3D%3D%3Dthis.opts.dragMode)return%20void%20this.drawMeasurementTool(%5Bthis.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D%2Cthis.uiData.dragEnd%5B0%5D%2Cthis.uiData.dragEnd%5B1%5D%5D)%3Bconst%20t%3DMath.abs(this.uiData.dragStart%5B0%5D-this.uiData.dragEnd%5B0%5D)%2Ce%3DMath.abs(this.uiData.dragStart%5B1%5D-this.uiData.dragEnd%5B1%5D)%3Bthis.drawSelectionBox(%5BMath.min(this.uiData.dragStart%5B0%5D%2Cthis.uiData.dragEnd%5B0%5D)%2CMath.min(this.uiData.dragStart%5B1%5D%2Cthis.uiData.dragEnd%5B1%5D)%2Ct%2Ce%5D)%7Dif(this.opts.clickToSegment)%7Bconst%20t%3Dthis.mousePos%5B0%5D%2Ce%3Dthis.mousePos%5B1%5D%2Ci%3Dthis.tileIndex(t%2Ce)%3Bif(i%3E-1)%7Bconst%20s%3Dthis.screenSlices%5Bi%5D.fovMM%2Cr%3Dthis.screenSlices%5Bi%5D.leftTopWidthHeight%5B2%5D%2Fs%5B0%5D%2Cn%3Dthis.opts.crosshairColor%2Ca%3D%5Bn%5B0%5D%2Cn%5B1%5D%2Cn%5B2%5D%2C.4%5D%2Co%3Dthis.opts.clickToSegmentRadius*r%3Bthis.drawCircle(%5Bt-o%2Ce-o%2C2*o%2C2*o%5D%2Ca%2C1)%7D%7Dconst%20s%3Dthis.frac2mm(%5Bthis.scene.crosshairPos%5B0%5D%2Cthis.scene.crosshairPos%5B1%5D%2Cthis.scene.crosshairPos%5B2%5D%5D)%3Breturn%20t%3Ds%5B0%5D.toFixed(2)%2B%22%C3%97%22%2Bs%5B1%5D.toFixed(2)%2B%22%C3%97%22%2Bs%5B2%5D.toFixed(2)%2Cthis.readyForSync%3D!0%2Cthis.sync()%2Cthis.drawAnchoredLabels()%2Ct%7DdrawScene()%7Bif(this.isBusy)return%20void(this.needsRefresh%3D!0)%3Bthis.isBusy%3D!1%2Cthis.needsRefresh%3D!1%3Blet%20t%3Dthis.drawSceneCore()%3Breturn%20null!%3D%3Dthis._gl%26%26this.gl.finish()%2Cthis.needsRefresh%26%26(t%3Dthis.drawScene())%2Ct%7Dget%20gl()%7Bif(!this._gl)throw%20new%20Error(%22unable%20to%20get%20WebGL%20context.%20Maybe%20the%20browser%20doesn't%20support%20WebGL2.%22)%3Breturn%20this._gl%7Dset%20gl(t)%7Bthis._gl%3Dt%7D%7D%3Bexport%7Bei%20as%20DEFAULT_OPTIONS%2Cti%20as%20DRAG_MODE%2Cii%20as%20INITIAL_SCENE_DATA%2Cai%20as%20LabelAnchorPoint%2Cni%20as%20LabelLineTerminator%2Cri%20as%20LabelTextAlignment%2C%24e%20as%20MULTIPLANAR_TYPE%2CTi%20as%20NVController%2Csi%20as%20NVDocument%2CZe%20as%20NVImage%2Cze%20as%20NVImageFromUrlOptions%2Cli%20as%20NVLabel3D%2Coi%20as%20NVLabel3DStyle%2CDe%20as%20NVMesh%2CMe%20as%20NVMeshFromUrlOptions%2CIe%20as%20NVMeshLayerDefaults%2Cye%20as%20NVMeshLoaders%2Cae%20as%20NVMeshUtilities%2CCe%20as%20NVUtilities%2CLi%20as%20Niivue%2C_e%20as%20SHOW_RENDER%2CJe%20as%20SLICE_TYPE%2Cse%20as%20cmapper%2Cie%20as%20colortables%7D%3B"
1
+ export const esm = "var%20t%3DObject.defineProperty%2Ce%3D(e%2Ci%2Cs)%3D%3E((e%2Ci%2Cs)%3D%3Ei%20in%20e%3Ft(e%2Ci%2C%7Benumerable%3A!0%2Cconfigurable%3A!0%2Cwritable%3A!0%2Cvalue%3As%7D)%3Ae%5Bi%5D%3Ds)(e%2C%22symbol%22!%3Dtypeof%20i%3Fi%2B%22%22%3Ai%2Cs)%3Bimport%7Bmat4%20as%20i%2Cvec2%20as%20s%2Cvec3%20as%20n%2Cvec4%20as%20r%7Dfrom%22gl-matrix%22%3Bvar%20a%3D%220.44.2-dev.4%22%2Co%3Dclass%20t%7Bconstructor(%7Bname%3At%3D%22niivue%22%2Clevel%3Ai%3D%22info%22%7D%3D%7B%7D)%7Be(this%2C%22level%22)%2Ce(this%2C%22name%22)%2Cthis.name%3D%60%24%7Bt%7D%60%2Cthis.level%3Di%7Ddebug(...e)%7Bt.levels%5Bthis.level%5D%3Et.levels.debug%7C%7Cconsole.debug(%60%24%7Bthis.name%7D-debug%60%2C...e)%7Dinfo(...e)%7Bt.levels%5Bthis.level%5D%3Et.levels.info%7C%7Cconsole.info(%60%24%7Bthis.name%7D-info%60%2C...e)%7Dwarn(...e)%7Bt.levels%5Bthis.level%5D%3Et.levels.warn%7C%7Cconsole.warn(%60%24%7Bthis.name%7D-warn%60%2C...e)%7Derror(...e)%7Bt.levels%5Bthis.level%5D%3Et.levels.error%7C%7Cconsole.error(%60%24%7Bthis.name%7D-error%60%2C...e)%7Dfatal(...e)%7Bt.levels%5Bthis.level%5D%3Et.levels.fatal%7C%7Cconsole.error(%60%24%7Bthis.name%7D-fatal%60%2C...e)%7DsetLogLevel(t)%7Bthis.level%3Dt%7DsetName(t)%7Bthis.name%3Dt%7D%7D%3Be(o%2C%22levels%22%2C%7Bdebug%3A0%2Cinfo%3A1%2Cwarn%3A2%2Cerror%3A3%2Cfatal%3A4%2Csilent%3A1%2F0%7D)%3Bvar%20l%3Dnew%20o(%7Bname%3A%22niivue%22%2Clevel%3A%22info%22%7D)%2Ch%3Dclass%7Bconstructor(t%2Ci%2Cs)%7Be(this%2C%22program%22)%2Ce(this%2C%22uniforms%22%2C%7B%7D)%2Ce(this%2C%22isMatcap%22)%2Cthis.program%3Dfunction(t%2Ce%2Ci)%7Bconst%20s%3Dt.createShader(t.VERTEX_SHADER)%3Bt.shaderSource(s%2Ce)%2Ct.compileShader(s)%3Bconst%20n%3Dt.createShader(t.FRAGMENT_SHADER)%3Bt.shaderSource(n%2Ci)%2Ct.compileShader(n)%3Bconst%20r%3Dt.createProgram()%3Bif(t.attachShader(r%2Cs)%2Ct.attachShader(r%2Cn)%2Ct.linkProgram(r)%2C!t.getProgramParameter(r%2Ct.LINK_STATUS))throw%20l.error(t.getProgramInfoLog(r))%2Cnew%20Error(%22Shader%20failed%20to%20link%2C%20see%20console%20for%20log%22)%3Breturn%20r%7D(t%2Ci%2Cs)%3Bconst%20n%3D%2Funiform%5B%5E%3B%5D%2B%5B%20%5D(%5Cw%2B)%3B%2Fg%2Cr%3D%2Funiform%5B%5E%3B%5D%2B%5B%20%5D(%5Cw%2B)%3B%2F%2Ca%3Di.match(n)%2Co%3Ds.match(n)%3Ba%26%26a.forEach((t%3D%3E%7Bconst%20e%3Dt.match(r)%3Bthis.uniforms%5Be%5B1%5D%5D%3D-1%7D))%2Co%26%26o.forEach((t%3D%3E%7Bconst%20e%3Dt.match(r)%3Bthis.uniforms%5Be%5B1%5D%5D%3D-1%7D))%3Bfor(const%20e%20in%20this.uniforms)this.uniforms%5Be%5D%3Dt.getUniformLocation(this.program%2Ce)%7Duse(t)%7Bt.useProgram(this.program)%7D%7D%2Cc%3D%22%23version%20300%20es%5Cn%23line%204%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnlayout(location%3D1)%20in%20vec3%20texCoords%3B%5Cnuniform%20mat4%20mvpMtx%3B%5Cnout%20vec3%20vColor%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ctgl_Position%20%3D%20mvpMtx%20*%20vec4(pos%2C%201.0)%3B%5Cn%5CtvColor%20%3D%20texCoords%3B%5Cn%7D%22%2Cd%3D%22%5Cn%5Ctvec4%20drawColor(float%20scalar%2C%20float%20drawOpacity)%20%7B%5Cn%5Ct%5Ctfloat%20nlayer%20%3D%20float(textureSize(colormap%2C%200).y)%3B%5Cn%5Ct%5Ctfloat%20layer%20%3D%20(nlayer%20-%200.5)%20%2F%20nlayer%3B%5Cn%5Ct%5Ctvec4%20dcolor%20%3D%20texture(colormap%2C%20vec2((scalar%20*%20255.0)%2F256.0%20%2B%200.5%2F256.0%2C%20layer)).rgba%3B%5Cn%5Ct%5Ctdcolor.a%20*%3D%20drawOpacity%3B%5Cn%5Ct%5Ctreturn%20dcolor%3B%5Cn%7D%22%2Cm%3D%22vec3%20GetBackPosition(vec3%20startPositionTex)%20%7B%5Cn%5Ctvec3%20startPosition%20%3D%20startPositionTex%20*%20volScale%3B%5Cn%5Ctvec3%20invR%20%3D%201.0%20%2F%20rayDir%3B%5Cn%5Ctvec3%20tbot%20%3D%20invR%20*%20(vec3(0.0)-startPosition)%3B%5Cn%5Ctvec3%20ttop%20%3D%20invR%20*%20(volScale-startPosition)%3B%5Cn%5Ctvec3%20tmax%20%3D%20max(ttop%2C%20tbot)%3B%5Cn%5Ctvec2%20t%20%3D%20min(tmax.xx%2C%20tmax.yz)%3B%5Cn%5Ctvec3%20endPosition%20%3D%20startPosition%20%2B%20(rayDir%20*%20min(t.x%2C%20t.y))%3B%5Cn%5Ct%2F%2Fconvert%20world%20position%20back%20to%20texture%20position%3A%5Cn%5CtendPosition%20%3D%20endPosition%20%2F%20volScale%3B%5Cn%5Ctreturn%20endPosition%3B%5Cn%7D%5Cn%5Cnvec4%20applyClip%20(vec3%20dir%2C%20inout%20vec4%20samplePos%2C%20inout%20float%20len%2C%20inout%20bool%20isClip)%20%7B%5Cn%5Ctfloat%20cdot%20%3D%20dot(dir%2CclipPlane.xyz)%3B%5Cn%5CtisClip%20%3D%20false%3B%5Cn%5Ctif%20%20((clipPlane.a%20%3E%201.0)%20%7C%7C%20(cdot%20%3D%3D%200.0))%20return%20samplePos%3B%5Cn%5Ctbool%20frontface%20%3D%20(cdot%20%3E%200.0)%3B%5Cn%5Ctfloat%20dis%20%3D%20(-clipPlane.a%20-%20dot(clipPlane.xyz%2C%20samplePos.xyz-0.5))%20%2F%20cdot%3B%5Cn%5Ctfloat%20thick%20%3D%20clipThick%3B%5Cn%5Ctif%20(thick%20%3C%3D%200.0)%20thick%20%3D%202.0%3B%5Cn%5Ctfloat%20%20disBackFace%20%3D%20(-(clipPlane.a-thick)%20-%20dot(clipPlane.xyz%2C%20samplePos.xyz-0.5))%20%2F%20cdot%3B%5Cn%5Ctif%20(((frontface)%20%26%26%20(dis%20%3E%3D%20len))%20%7C%7C%20((!frontface)%20%26%26%20(dis%20%3C%3D%200.0)))%20%7B%5Cn%5Ct%5CtsamplePos.a%20%3D%20len%20%2B%201.0%3B%5Cn%5Ct%5Ctreturn%20samplePos%3B%5Cn%5Ct%7D%5Cn%5Ctif%20(frontface)%20%7B%5Cn%5Ct%5Ctdis%20%3D%20max(0.0%2C%20dis)%3B%5Cn%5Ct%5CtsamplePos%20%3D%20vec4(samplePos.xyz%2Bdir%20*%20dis%2C%20dis)%3B%5Cn%5Ct%5Ctif%20(dis%20%3E%200.0)%20isClip%20%3D%20true%3B%5Cn%5Ct%5Ctlen%20%3D%20min(disBackFace%2C%20len)%3B%5Cn%5Ct%7D%5Cn%5Ctif%20(!frontface)%20%7B%5Cn%5Ct%5Ctlen%20%3D%20min(dis%2C%20len)%3B%5Cn%5Ct%5CtdisBackFace%20%3D%20max(0.0%2C%20disBackFace)%3B%5Cn%5Ct%5Ctif%20(len%20%3D%3D%20dis)%20isClip%20%3D%20true%3B%5Cn%5Ct%5CtsamplePos%20%3D%20vec4(samplePos.xyz%2Bdir%20*%20disBackFace%2C%20disBackFace)%3B%5Cn%5Ct%7D%5Cn%5Ctreturn%20samplePos%3B%5Cn%7D%5Cn%5Cnvoid%20clipVolume(inout%20vec3%20startPos%2C%20inout%20vec3%20backPos%2C%20int%20dim%2C%20float%20frac%2C%20bool%20isLo)%20%7B%5Cn%5Ctvec3%20dir%20%3D%20backPos%20-%20startPos%3B%5Cn%5Ctfloat%20len%20%3D%20length(dir)%3B%5Cn%5Ctdir%20%3D%20normalize(dir)%3B%5Cn%5Ct%2F%2F%20Discard%20if%20both%20startPos%20and%20backPos%20are%20outside%20the%20clipping%20plane%5Cn%5Ctif%20(isLo%20%26%26%20startPos%5Bdim%5D%20%3C%20frac%20%26%26%20backPos%5Bdim%5D%20%3C%20frac)%20%7B%5Cn%5Ct%5Ctdiscard%3B%5Cn%5Ct%7D%5Cn%5Ctif%20(!isLo%20%26%26%20startPos%5Bdim%5D%20%3E%20frac%20%26%26%20backPos%5Bdim%5D%20%3E%20frac)%20%7B%5Cn%5Ct%5Ctdiscard%3B%5Cn%5Ct%7D%5Cn%5Ctvec4%20plane%20%3D%20vec4(0.0%2C%200.0%2C%200.0%2C%200.5%20-%20frac)%3B%5Cn%5Ctplane%5Bdim%5D%20%3D%201.0%3B%5Cn%5Ctfloat%20cdot%20%3D%20dot(dir%2C%20plane.xyz)%3B%5Cn%5Ctfloat%20dis%20%3D%20(-plane.w%20-%20dot(plane.xyz%2C%20startPos%20-%20vec3(0.5)))%20%2F%20cdot%3B%5Cn%5Ct%2F%2F%20Adjust%20startPos%20or%20backPos%20based%20on%20the%20intersection%20with%20the%20plane%5Cn%5Ctbool%20isFrontFace%20%3D%20(cdot%20%3E%200.0)%3B%5Cn%5Ctif%20(!isLo)%5Cn%5Ct%5CtisFrontFace%20%3D%20!isFrontFace%3B%5Cn%5Ctif%20(dis%20%3E%200.0)%20%7B%5Cn%5Ct%5Ctif%20(isFrontFace)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ctif%20(dis%20%3C%3D%20len)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5CtstartPos%20%3D%20startPos%20%2B%20dir%20*%20dis%3B%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%7D%20else%20%7B%5Cn%5Ct%5Ct%5Ctif%20(dis%20%3C%20len)%20%7B%5Cn%5Ct%5Ct%5Ct%5CtbackPos%20%3D%20startPos%20%2B%20dir%20*%20dis%3B%5Cn%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%7D%5Cn%5Ct%7D%5Cn%7D%5Cn%5Cnvoid%20clipVolumeStart%20(inout%20vec3%20startPos%2C%20inout%20vec3%20backPos)%20%7B%5Cn%5Ct%2F%2F%20vec3%20clipLo%20%3D%20vec3(0.1%2C%200.2%2C%200.4)%3B%5Cn%5Ct%2F%2F%20vec3%20clipHi%20%3D%20vec3(0.8%2C%200.7%2C%200.7)%3B%5Cn%5Ctfor%20(int%20i%20%3D%200%3B%20i%20%3C%203%3B%20i%2B%2B)%20%7B%5Cn%5Ct%5Ctif%20(clipLo%5Bi%5D%20%3E%200.0)%5Cn%5Ct%5Ct%5CtclipVolume(startPos%2C%20backPos%2C%20i%2C%20clipLo%5Bi%5D%2C%20true)%3B%5Cn%5Ct%7D%5Cn%5Ctfor%20(int%20i%20%3D%200%3B%20i%20%3C%203%3B%20i%2B%2B)%20%7B%5Cn%5Ct%5Ctif%20(clipHi%5Bi%5D%20%3C%201.0)%5Cn%5Ct%5Ct%5CtclipVolume(startPos%2C%20backPos%2C%20i%2C%20clipHi%5Bi%5D%2C%20false)%3B%5Cn%5Ct%7D%5Cn%7D%5Cn%5Cnfloat%20frac2ndc(vec3%20frac)%20%7B%5Cn%2F%2Fhttps%3A%2F%2Fstackoverflow.com%2Fquestions%2F7777913%2Fhow-to-render-depth-linearly-in-modern-opengl-with-gl-fragcoord-z-in-fragment-sh%5Cn%5Ctvec4%20pos%20%3D%20vec4(frac.xyz%2C%201.0)%3B%20%2F%2Ffraction%5Cn%5Ctvec4%20dim%20%3D%20vec4(vec3(textureSize(volume%2C%200))%2C%201.0)%3B%5Cn%5Ctpos%20%3D%20pos%20*%20dim%3B%5Cn%5Ctvec4%20shim%20%3D%20vec4(-0.5%2C%20-0.5%2C%20-0.5%2C%200.0)%3B%5Cn%5Ctpos%20%2B%3D%20shim%3B%5Cn%5Ctvec4%20mm%20%3D%20transpose(matRAS)%20*%20pos%3B%5Cn%5Ctfloat%20z_ndc%20%3D%20(mvpMtx%20*%20vec4(mm.xyz%2C%201.0)).z%3B%5Cn%5Ctreturn%20(z_ndc%20%2B%201.0)%20%2F%202.0%3B%5Cn%7D%22%2Bd%2Cu%3D%22void%20main()%20%7B%5Cn%5Ctif%20(fColor.x%20%3E%202.0)%20%7B%5Cn%5Ct%5CtfColor%20%3D%20vec4(1.0%2C%200.0%2C%200.0%2C%200.5)%3B%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ct%7D%5Cn%5CtfColor%20%3D%20vec4(0.0%2C0.0%2C0.0%2C0.0)%3B%5Cn%5Ctvec4%20clipPlaneColorX%20%3D%20clipPlaneColor%3B%5Cn%5Ct%2F%2Fif%20(clipPlaneColor.a%20%3C%200.0)%5Cn%5Ct%2F%2F%5CtclipPlaneColorX.a%20%3D%20-%201.0%3B%5Cn%5Ctbool%20isColorPlaneInVolume%20%3D%20false%3B%5Cn%5Ctif%20(clipPlaneColorX.a%20%3C%200.0)%20%7B%5Cn%5Ct%5CtisColorPlaneInVolume%20%3D%20true%3B%5Cn%5Ct%5CtclipPlaneColorX.a%20%3D%200.0%3B%5Cn%5Ct%7D%5Cn%5Ct%2F%2FfColor%20%3D%20vec4(vColor.rgb%2C%201.0)%3B%20return%3B%5Cn%5Ctvec3%20start%20%3D%20vColor%3B%5Cn%5Ctgl_FragDepth%20%3D%200.0%3B%5Cn%5Ctvec3%20backPosition%20%3D%20GetBackPosition(start)%3B%5Cn%5Ct%2F%2F%20fColor%20%3D%20vec4(backPosition%2C%201.0)%3B%20return%3B%5Cn%5Ctvec3%20dir%20%3D%20normalize(backPosition%20-%20start)%3B%5Cn%5CtclipVolumeStart(start%2C%20backPosition)%3B%5Cn%5Ctdir%20%3D%20normalize(dir)%3B%5Cn%5Ctfloat%20len%20%3D%20length(backPosition%20-%20start)%3B%5Cn%5Ctfloat%20lenVox%20%3D%20length((texVox%20*%20start)%20-%20(texVox%20*%20backPosition))%3B%5Cn%5Ctif%20((lenVox%20%3C%200.5)%20%7C%7C%20(len%20%3E%203.0))%20%7B%20%2F%2Flength%20limit%20for%20parallel%20rays%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ct%7D%5Cn%5Ctfloat%20sliceSize%20%3D%20len%20%2F%20lenVox%3B%20%2F%2Fe.g.%20if%20ray%20length%20is%201.0%20and%20traverses%2050%20voxels%2C%20each%20voxel%20is%200.02%20in%20unit%20cube%5Cn%5Ctfloat%20stepSize%20%3D%20sliceSize%3B%20%2F%2Fquality%3A%20larger%20step%20is%20faster%20traversal%2C%20but%20fewer%20samples%5Cn%5Ctfloat%20opacityCorrection%20%3D%20stepSize%2FsliceSize%3B%5Cn%5Ctvec4%20deltaDir%20%3D%20vec4(dir.xyz%20*%20stepSize%2C%20stepSize)%3B%5Cn%5Ctvec4%20samplePos%20%3D%20vec4(start.xyz%2C%200.0)%3B%20%2F%2Fray%20position%5Cn%5Ctfloat%20lenNoClip%20%3D%20len%3B%5Cn%5Ctbool%20isClip%20%3D%20false%3B%5Cn%5Ctvec4%20clipPos%20%3D%20applyClip(dir%2C%20samplePos%2C%20len%2C%20isClip)%3B%5Cn%5Ct%2F%2Fif%20((clipPos.a%20!%3D%20samplePos.a)%20%26%26%20(len%20%3C%203.0))%20%7B%5Cn%5Ct%2F%2Fstart%3A%20OPTIONAL%20fast%20pass%3A%20rapid%20traversal%20until%20first%20hit%5Cn%5Ctfloat%20stepSizeFast%20%3D%20sliceSize%20*%201.9%3B%5Cn%5Ctvec4%20deltaDirFast%20%3D%20vec4(dir.xyz%20*%20stepSizeFast%2C%20stepSizeFast)%3B%5Cn%5Ctwhile%20(samplePos.a%20%3C%3D%20len)%20%7B%5Cn%5Ct%5Ctfloat%20val%20%3D%20texture(volume%2C%20samplePos.xyz).a%3B%5Cn%5Ct%5Ctif%20(val%20%3E%200.01)%5Cn%5Ct%5Ct%5Ctbreak%3B%5Cn%5Ct%5CtsamplePos%20%2B%3D%20deltaDirFast%3B%20%2F%2Fadvance%20ray%20position%5Cn%5Ct%7D%5Cn%5Ctfloat%20drawOpacityA%20%3D%20renderDrawAmbientOcclusionXY.y%3B%5Cn%5Ctif%20((samplePos.a%20%3E%3D%20len)%20%26%26%20(((overlays%20%3C%201.0)%20%26%26%20(drawOpacityA%20%3C%3D%200.0)%20)%20%7C%7C%20(backgroundMasksOverlays%20%3E%200)))%20%20%7B%5Cn%5Ct%5Ctif%20(isClip)%5Cn%5Ct%5Ct%5CtfColor%20%2B%3D%20clipPlaneColorX%3B%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ct%7D%5Cn%5CtfColor%20%3D%20vec4(1.0%2C%201.0%2C%201.0%2C%201.0)%3B%5Cn%5Ct%2F%2Fgl_FragDepth%20%3D%20frac2ndc(samplePos.xyz)%3B%20%2F%2Fcrude%20due%20to%20fast%20pass%20resolution%5Cn%5CtsamplePos%20-%3D%20deltaDirFast%3B%5Cn%5Ctif%20(samplePos.a%20%3C%200.0)%5Cn%5Ct%5Ctvec4%20samplePos%20%3D%20vec4(start.xyz%2C%200.0)%3B%20%2F%2Fray%20position%5Cn%5Ct%2F%2Fend%3A%20fast%20pass%5Cn%5Ctvec4%20colAcc%20%3D%20vec4(0.0%2C0.0%2C0.0%2C0.0)%3B%5Cn%5Ctvec4%20firstHit%20%3D%20vec4(0.0%2C0.0%2C0.0%2C2.0%20*%20lenNoClip)%3B%5Cn%5Ctconst%20float%20earlyTermination%20%3D%200.95%3B%5Cn%5Ctfloat%20backNearest%20%3D%20len%3B%20%2F%2Fassume%20no%20hit%5Cn%5Ctfloat%20ran%20%3D%20fract(sin(gl_FragCoord.x%20*%2012.9898%20%2B%20gl_FragCoord.y%20*%2078.233)%20*%2043758.5453)%3B%5Cn%5CtsamplePos%20%2B%3D%20deltaDir%20*%20ran%3B%20%2F%2Fjitter%20ray%5Cn%22%2CA%3D%22%5Cn%5Ctif%20(firstHit.a%20%3C%20len)%5Cn%5Ct%5Ctgl_FragDepth%20%3D%20frac2ndc(firstHit.xyz)%3B%5Cn%5CtcolAcc.a%20%3D%20(colAcc.a%20%2F%20earlyTermination)%20*%20backOpacity%3B%5Cn%5CtfColor%20%3D%20colAcc%3B%5Cn%5Ct%2F%2Fif%20(isClip)%20%2F%2FCR%5Cn%5Ctif%20((isColorPlaneInVolume)%20%26%26%20(clipPos.a%20!%3D%20samplePos.a)%20%26%26%20(abs(firstHit.a%20-%20clipPos.a)%20%3C%20deltaDir.a))%5Cn%5Ct%5CtfColor.rgb%20%3D%20mix(fColor.rgb%2C%20clipPlaneColorX.rgb%2C%20abs(clipPlaneColor.a))%3B%5Cn%5Ct%5Ct%2F%2FfColor.rgb%20%3D%20mix(fColor.rgb%2C%20clipPlaneColorX.rgb%2C%20clipPlaneColorX.a%20*%200.65)%3B%5Cn%5Ctfloat%20renderDrawAmbientOcclusionX%20%3D%20renderDrawAmbientOcclusionXY.x%3B%5Cn%5Ctfloat%20drawOpacity%20%3D%20renderDrawAmbientOcclusionXY.y%3B%5Cn%5Ctif%20((overlays%20%3C%201.0)%20%26%26%20(drawOpacity%20%3C%3D%200.0))%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ct%2F%2Foverlay%20pass%5Cn%5Ctlen%20%3D%20lenNoClip%3B%5Cn%5CtsamplePos%20%3D%20vec4(start.xyz%2C%200.0)%3B%20%2F%2Fray%20position%5Cn%5Ct%2F%2Fstart%3A%20OPTIONAL%20fast%20pass%3A%20rapid%20traversal%20until%20first%20hit%5Cn%5CtstepSizeFast%20%3D%20sliceSize%20*%201.0%3B%5Cn%5CtdeltaDirFast%20%3D%20vec4(dir.xyz%20*%20stepSizeFast%2C%20stepSizeFast)%3B%5Cn%5Ctwhile%20(samplePos.a%20%3C%3D%20len)%20%7B%5Cn%5Ct%5Ctfloat%20val%20%3D%20texture(overlay%2C%20samplePos.xyz).a%3B%5Cn%5Ct%5Ctif%20(drawOpacity%20%3E%200.0)%5Cn%5Ct%5Ct%5Ctval%20%3D%20max(val%2C%20texture(drawing%2C%20samplePos.xyz).r)%3B%5Cn%5Ct%5Ctif%20(val%20%3E%200.001)%5Cn%5Ct%5Ct%5Ctbreak%3B%5Cn%5Ct%5CtsamplePos%20%2B%3D%20deltaDirFast%3B%20%2F%2Fadvance%20ray%20position%5Cn%5Ct%7D%5Cn%5Ctif%20(samplePos.a%20%3E%3D%20len)%20%7B%5Cn%5Ct%5Ctif%20(isClip%20%26%26%20(fColor.a%20%3D%3D%200.0))%5Cn%5Ct%5Ct%5Ct%5CtfColor%20%2B%3D%20clipPlaneColorX%3B%5Cn%5Ct%5Ct%5Ctreturn%3B%5Cn%5Ct%7D%5Cn%5CtsamplePos%20-%3D%20deltaDirFast%3B%5Cn%5Ctif%20(samplePos.a%20%3C%200.0)%5Cn%5Ct%5Ctvec4%20samplePos%20%3D%20vec4(start.xyz%2C%200.0)%3B%20%2F%2Fray%20position%5Cn%5Ct%2F%2Fend%3A%20fast%20pass%5Cn%5Ctfloat%20overFarthest%20%3D%20len%3B%5Cn%5CtcolAcc%20%3D%20vec4(0.0%2C%200.0%2C%200.0%2C%200.0)%3B%5Cn%5Cn%5CtsamplePos%20%2B%3D%20deltaDir%20*%20ran%3B%20%2F%2Fjitter%20ray%5Cn%5Ctvec4%20overFirstHit%20%3D%20vec4(0.0%2C0.0%2C0.0%2C2.0%20*%20len)%3B%5Cn%5Ctif%20(backgroundMasksOverlays%20%3E%200)%5Cn%5Ct%5CtsamplePos%20%3D%20firstHit%3B%5Cn%5Ctbool%20firstDraw%20%3D%20true%3B%5Cn%5Ctwhile%20(samplePos.a%20%3C%3D%20len)%20%7B%5Cn%5Ct%5Ctvec4%20colorSample%20%3D%20texture(overlay%2C%20samplePos.xyz)%3B%5Cn%5Ct%5Ctif%20((colorSample.a%20%3C%200.01)%20%26%26%20(drawOpacity%20%3E%200.0))%20%7B%5Cn%5Ct%5Ct%5Ctfloat%20val%20%3D%20texture(drawing%2C%20samplePos.xyz).r%3B%5Cn%5Ct%5Ct%5Ctvec4%20draw%20%3D%20drawColor(val%2C%20drawOpacity)%3B%5Cn%5Ct%5Ct%5Ctif%20((draw.a%20%3E%200.0)%20%26%26%20(firstDraw))%20%7B%5Cn%5Ct%5Ct%5Ct%5CtfirstDraw%20%3D%20false%3B%5Cn%5Ct%5Ct%5Ct%5Ctfloat%20sum%20%3D%200.0%3B%5Cn%5Ct%5Ct%5Ct%5Ctconst%20float%20mn%20%3D%201.0%20%2F%20256.0%3B%5Cn%5Ct%5Ct%5Ct%5Ctconst%20float%20sampleRadius%20%3D%201.1%3B%5Cn%5Ct%5Ct%5Ct%5Ctfloat%20dx%20%3D%20sliceSize%20*%20sampleRadius%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20center%20%3D%20samplePos.xyz%3B%5Cn%5Ct%5Ct%5Ct%5Ct%2F%2Fsix%20neighbors%20that%20share%20a%20face%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(0.0%2C0.0%2C%2Bdx)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(0.0%2C0.0%2C-dx)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(0.0%2C%2Bdx%2C0.0)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(0.0%2C-dx%2C0.0)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(%2Bdx%2C0.0%2C0.0)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(-dx%2C0.0%2C0.0)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%2F%2Ffloat%20proportion%20%3D%20(sum%20%2F%20mn)%20%2F%206.0%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cn%5Ct%5Ct%5Ct%5Ct%2F%2F12%20neighbors%20that%20share%20an%20edge%5Cn%5Ct%5Ct%5Ct%5Ctdx%20%3D%20sliceSize%20*%20sampleRadius%20*%20sqrt(2.0)%20*%200.5%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(0.0%2C%2Bdx%2C%2Bdx)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(%2Bdx%2C0.0%2C%2Bdx)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(%2Bdx%2C%2Bdx%2C0.0)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(0.0%2C-dx%2C-dx)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(-dx%2C0.0%2C-dx)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(-dx%2C-dx%2C0.0)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(0.0%2C%2Bdx%2C-dx)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(%2Bdx%2C0.0%2C-dx)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(%2Bdx%2C-dx%2C0.0)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(0.0%2C-dx%2C%2Bdx)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(-dx%2C0.0%2C%2Bdx)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctsum%20%2B%3D%20min(texture(drawing%2C%20center.xyz%20%2B%20cross(vec3(-dx%2C%2Bdx%2C0.0)%2C%20dir)).r%2C%20mn)%3B%5Cn%5Ct%5Ct%5Ct%5Ctfloat%20proportion%20%3D%20(sum%20%2F%20mn)%20%2F%2018.0%3B%20%2F%2Fproportion%20of%20six%20neighbors%20is%20non-zero%5Cn%5Ct%5Ct%5Ct%5Ct%5Cn%5Ct%5Ct%5Ct%5Ct%2F%2Fa%20high%20proportion%20of%20hits%20means%20crevice%5Cn%5Ct%5Ct%5Ct%5Ct%2F%2Fsince%20the%20AO%20term%20adds%20shadows%20that%20darken%20most%20voxels%2C%20it%20will%20result%20in%20dark%20surfaces%5Cn%5Ct%5Ct%5Ct%5Ct%2F%2Fthe%20term%20brighten%20adds%20a%20little%20illumination%20to%20balance%20this%5Cn%5Ct%5Ct%5Ct%5Ct%2F%2F%20without%20brighten%2C%20only%20the%20most%20extreme%20ridges%20will%20not%20be%20darker%5Cn%5Ct%5Ct%5Ct%5Ctconst%20float%20brighten%20%3D%201.2%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20ao%20%3D%20draw.rgb%20*%20(1.0%20-%20proportion)%20*%20brighten%3B%5Cn%5Ct%5Ct%5Ct%5Ctdraw.rgb%20%3D%20mix%20(draw.rgb%2C%20ao%20%2C%20renderDrawAmbientOcclusionX)%3B%5Cn%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5CtcolorSample%20%3D%20draw%3B%5Cn%5Ct%5Ct%7D%5Cn%5Ct%5CtsamplePos%20%2B%3D%20deltaDir%3B%20%2F%2Fadvance%20ray%20position%5Cn%5Ct%5Ctif%20(colorSample.a%20%3E%3D%200.01)%20%7B%5Cn%5Ct%5Ct%5Ctif%20(overFirstHit.a%20%3E%20len)%5Cn%5Ct%5Ct%5Ct%5CtoverFirstHit%20%3D%20samplePos%3B%5Cn%5Ct%5Ct%5CtcolorSample.a%20*%3D%20renderOverlayBlend%3B%5Cn%5Ct%5Ct%5CtcolorSample.a%20%3D%201.0-pow((1.0%20-%20colorSample.a)%2C%20opacityCorrection)%3B%5Cn%5Ct%5Ct%5CtcolorSample.rgb%20*%3D%20colorSample.a%3B%5Cn%5Ct%5Ct%5CtcolAcc%3D%20(1.0%20-%20colAcc.a)%20*%20colorSample%20%2B%20colAcc%3B%5Cn%5Ct%5Ct%5CtoverFarthest%20%3D%20samplePos.a%3B%5Cn%5Ct%5Ct%5Ctif%20(%20colAcc.a%20%3E%20earlyTermination%20)%5Cn%5Ct%5Ct%5Ct%5Ctbreak%3B%5Cn%5Ct%5Ct%7D%5Cn%5Ct%7D%5Cn%5Ct%2F%2Fif%20(samplePos.a%20%3E%3D%20len)%20%7B%5Cn%5Ctif%20(colAcc.a%20%3C%3D%200.0)%20%7B%5Cn%5Ct%5Ctif%20(isClip%20%26%26%20(fColor.a%20%3D%3D%200.0))%5Cn%5Ct%5Ct%5CtfColor%20%2B%3D%20clipPlaneColorX%3B%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ct%7D%5Cn%5Ctif%20(overFirstHit.a%20%3C%20firstHit.a)%5Cn%5Ct%5Ctgl_FragDepth%20%3D%20frac2ndc(overFirstHit.xyz)%3B%5Cn%5Ctfloat%20overMix%20%3D%20colAcc.a%3B%5Cn%5Ctfloat%20overlayDepth%20%3D%200.3%3B%5Cn%5Ctif%20(fColor.a%20%3C%3D%200.0)%5Cn%5Ct%5CtoverMix%20%3D%201.0%3B%5Cn%5Ctelse%20if%20(((overFarthest)%20%3E%20backNearest))%20%7B%5Cn%5Ct%5Ctfloat%20dx%20%3D%20(overFarthest%20-%20backNearest)%2F1.73%3B%5Cn%5Ct%5Ctdx%20%3D%20fColor.a%20*%20pow(dx%2C%20overlayDepth)%3B%5Cn%5Ct%5CtoverMix%20*%3D%201.0%20-%20dx%3B%5Cn%5Ct%7D%5Cn%5CtfColor.rgb%20%3D%20mix(fColor.rgb%2C%20colAcc.rgb%2C%20overMix)%3B%5Cn%5CtfColor.a%20%3D%20max(fColor.a%2C%20colAcc.a)%3B%5Cn%7D%22%2Cf%3D%22%23version%20300%20es%5Cn%23line%20215%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20vec3%20rayDir%3B%5Cnuniform%20vec3%20texVox%3B%5Cnuniform%20int%20backgroundMasksOverlays%3B%5Cnuniform%20vec3%20volScale%3B%5Cnuniform%20vec4%20clipPlane%3B%5Cnuniform%20highp%20sampler3D%20volume%2C%20overlay%3B%5Cnuniform%20float%20overlays%3B%5Cnuniform%20float%20clipThick%3B%5Cnuniform%20vec3%20clipLo%3B%5Cnuniform%20vec3%20clipHi%3B%5Cnuniform%20float%20backOpacity%3B%5Cnuniform%20mat4%20mvpMtx%3B%5Cnuniform%20mat4%20matRAS%3B%5Cnuniform%20vec4%20clipPlaneColor%3B%5Cnuniform%20float%20renderOverlayBlend%3B%5Cnuniform%20highp%20sampler3D%20drawing%3B%5Cnuniform%20highp%20sampler2D%20colormap%3B%5Cnuniform%20vec2%20renderDrawAmbientOcclusionXY%3B%5Cnin%20vec3%20vColor%3B%5Cnout%20vec4%20fColor%3B%5Cn%22%2Bm%2B%22%5Cn%5Ctvoid%20main()%20%7B%5Cn%5Ctvec3%20start%20%3D%20vColor%3B%5Cn%5Ctgl_FragDepth%20%3D%200.0%3B%5Cn%5Ctvec3%20backPosition%20%3D%20GetBackPosition(start)%3B%5Cn%5Ctvec3%20dir%20%3D%20normalize(backPosition%20-%20start)%3B%5Cn%5CtclipVolumeStart(start%2C%20backPosition)%3B%5Cn%5Ctfloat%20len%20%3D%20length(backPosition%20-%20start)%3B%5Cn%5Ctfloat%20lenVox%20%3D%20length((texVox%20*%20start)%20-%20(texVox%20*%20backPosition))%3B%5Cn%5Ctif%20((lenVox%20%3C%200.5)%20%7C%7C%20(len%20%3E%203.0))%20%7B%20%2F%2Flength%20limit%20for%20parallel%20rays%5Cn%5Ct%5CtfColor%20%3D%20vec4(0.0%2C0.0%2C0.0%2C0.0)%3B%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ct%7D%5Cn%5Ctfloat%20sliceSize%20%3D%20len%20%2F%20lenVox%3B%20%2F%2Fe.g.%20if%20ray%20length%20is%201.0%20and%20traverses%2050%20voxels%2C%20each%20voxel%20is%200.02%20in%20unit%20cube%5Cn%5Ctfloat%20stepSize%20%3D%20sliceSize%3B%20%2F%2Fquality%3A%20larger%20step%20is%20faster%20traversal%2C%20but%20fewer%20samples%5Cn%5Ctfloat%20opacityCorrection%20%3D%20stepSize%2FsliceSize%3B%5Cn%5Ctvec4%20deltaDir%20%3D%20vec4(dir.xyz%20*%20stepSize%2C%20stepSize)%3B%5Cn%5Ctvec4%20samplePos%20%3D%20vec4(start.xyz%2C%200.0)%3B%20%2F%2Fray%20position%5Cn%5Ctvec4%20colAcc%20%3D%20vec4(0.0%2C0.0%2C0.0%2C0.0)%3B%5Cn%5Ctvec4%20firstHit%20%3D%20vec4(0.0%2C0.0%2C0.0%2C2.0%20*%20len)%3B%5Cn%5Ctconst%20float%20earlyTermination%20%3D%200.95%3B%5Cn%5Ctfloat%20backNearest%20%3D%20len%3B%20%2F%2Fassume%20no%20hit%5Cn%5Ctfloat%20dis%20%3D%20len%3B%5Cn%5Ct%2F%2Fcheck%20if%20axial%20plane%20is%20closest%5Cn%5Ctvec4%20aClip%20%3D%20vec4(0.0%2C%200.0%2C%201.0%2C%20(1.0-%20clipPlane.z)%20-%200.5)%3B%5Cn%5Ctfloat%20adis%20%3D%20(-aClip.a%20-%20dot(aClip.xyz%2C%20samplePos.xyz-0.5))%20%2F%20dot(dir%2CaClip.xyz)%3B%5Cn%5Ctif%20(adis%20%3E%200.0)%5Cn%5Ct%5Ctdis%20%3D%20min(adis%2C%20dis)%3B%5Cn%5Ct%2F%2Fcheck%20of%20coronal%20plane%20is%20closest%5Cn%5Ctvec4%20cClip%20%3D%20vec4(0.0%2C%201.0%2C%200.0%2C%20(1.0-%20clipPlane.y)%20-%200.5)%3B%5Cn%5Ctfloat%20cdis%20%3D%20(-cClip.a%20-%20dot(cClip.xyz%2C%20samplePos.xyz-0.5))%20%2F%20dot(dir%2CcClip.xyz)%3B%5Cn%5Ctif%20(cdis%20%3E%200.0)%5Cn%5Ct%5Ctdis%20%3D%20min(cdis%2C%20dis)%3B%5Cn%5Ct%2F%2Fcheck%20if%20coronal%20slice%20is%20closest%5Cn%5Ctvec4%20sClip%20%3D%20vec4(1.0%2C%200.0%2C%200.0%2C%20(1.0-%20clipPlane.x)%20-%200.5)%3B%5Cn%5Ctfloat%20sdis%20%3D%20(-sClip.a%20-%20dot(sClip.xyz%2C%20samplePos.xyz-0.5))%20%2F%20dot(dir%2CsClip.xyz)%3B%5Cn%5Ctif%20(sdis%20%3E%200.0)%5Cn%5Ct%5Ctdis%20%3D%20min(sdis%2C%20dis)%3B%5Cn%5Ctif%20((dis%20%3E%200.0)%20%26%26%20(dis%20%3C%20len))%20%7B%5Cn%5Ct%5CtsamplePos%20%3D%20vec4(samplePos.xyz%2Bdir%20*%20dis%2C%20dis)%3B%5Cn%5Ct%5CtcolAcc%20%3D%20texture(volume%2C%20samplePos.xyz)%3B%5Cn%5Ct%5CtcolAcc.a%20%3D%20earlyTermination%3B%5Cn%5Ct%5CtfirstHit%20%3D%20samplePos%3B%5Cn%5Ct%5CtbackNearest%20%3D%20min(backNearest%2C%20samplePos.a)%3B%5Cn%5Ct%7D%5Cn%5Ct%2F%2Fthe%20following%20are%20only%20used%20by%20overlays%5Cn%5Ctvec4%20clipPlaneColorX%20%3D%20clipPlaneColor%3B%5Cn%5Ctbool%20isColorPlaneInVolume%20%3D%20false%3B%5Cn%5Ctfloat%20lenNoClip%20%3D%20len%3B%5Cn%5Ctbool%20isClip%20%3D%20false%3B%5Cn%5Ctvec4%20clipPos%20%3D%20applyClip(dir%2C%20samplePos%2C%20len%2C%20isClip)%3B%5Cn%5Ctfloat%20stepSizeFast%20%3D%20sliceSize%20*%201.9%3B%5Cn%5Ctvec4%20deltaDirFast%20%3D%20vec4(dir.xyz%20*%20stepSizeFast%2C%20stepSizeFast)%3B%5Cn%5Ctif%20(samplePos.a%20%3C%200.0)%5Cn%5Ct%5Ctvec4%20samplePos%20%3D%20vec4(start.xyz%2C%200.0)%3B%20%2F%2Fray%20position%5Cn%5Ctfloat%20ran%20%3D%20fract(sin(gl_FragCoord.x%20*%2012.9898%20%2B%20gl_FragCoord.y%20*%2078.233)%20*%2043758.5453)%3B%5Cn%5CtsamplePos%20%2B%3D%20deltaDir%20*%20ran%3B%20%2F%2Fjitter%20ray%5Cn%22%2BA%2Cg%3D%22%23version%20300%20es%5Cn%23line%20215%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20vec3%20rayDir%3B%5Cnuniform%20vec3%20texVox%3B%5Cnuniform%20int%20backgroundMasksOverlays%3B%5Cnuniform%20vec3%20volScale%3B%5Cnuniform%20vec4%20clipPlane%3B%5Cnuniform%20highp%20sampler3D%20volume%2C%20overlay%3B%5Cnuniform%20float%20overlays%3B%5Cnuniform%20float%20clipThick%3B%5Cnuniform%20vec3%20clipLo%3B%5Cnuniform%20vec3%20clipHi%3B%5Cnuniform%20float%20backOpacity%3B%5Cnuniform%20mat4%20mvpMtx%3B%5Cnuniform%20mat4%20matRAS%3B%5Cnuniform%20vec4%20clipPlaneColor%3B%5Cnuniform%20float%20renderOverlayBlend%3B%5Cnuniform%20highp%20sampler3D%20drawing%3B%5Cnuniform%20highp%20sampler2D%20colormap%3B%5Cnuniform%20vec2%20renderDrawAmbientOcclusionXY%3B%5Cnin%20vec3%20vColor%3B%5Cnout%20vec4%20fColor%3B%5Cn%22%2Bm%2Bu%2B%22while%20(samplePos.a%20%3C%3D%20len)%20%7B%5Cn%5Ct%5Ctvec4%20colorSample%20%3D%20texture(volume%2C%20samplePos.xyz)%3B%5Cn%5Ct%5CtsamplePos%20%2B%3D%20deltaDir%3B%20%2F%2Fadvance%20ray%20position%5Cn%5Ct%5Ctif%20(colorSample.a%20%3E%3D%200.01)%20%7B%5Cn%5Ct%5Ct%5Ctif%20(firstHit.a%20%3E%20lenNoClip)%5Cn%5Ct%5Ct%5Ct%5CtfirstHit%20%3D%20samplePos%3B%5Cn%5Ct%5Ct%5CtbackNearest%20%3D%20min(backNearest%2C%20samplePos.a)%3B%5Cn%5Ct%5Ct%5CtcolorSample.a%20%3D%201.0-pow((1.0%20-%20colorSample.a)%2C%20opacityCorrection)%3B%5Cn%5Ct%5Ct%5CtcolorSample.rgb%20*%3D%20colorSample.a%3B%5Cn%5Ct%5Ct%5CtcolAcc%3D%20(1.0%20-%20colAcc.a)%20*%20colorSample%20%2B%20colAcc%3B%5Cn%5Ct%5Ct%5Ctif%20(%20colAcc.a%20%3E%20earlyTermination%20)%5Cn%5Ct%5Ct%5Ct%5Ctbreak%3B%5Cn%5Ct%5Ct%7D%5Cn%5Ct%7D%5Cn%22%2BA%2Cp%3D%22%23version%20300%20es%5Cn%23line%20215%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20vec3%20rayDir%3B%5Cnuniform%20vec3%20texVox%3B%5Cnuniform%20int%20backgroundMasksOverlays%3B%5Cnuniform%20vec3%20volScale%3B%5Cnuniform%20vec4%20clipPlane%3B%5Cnuniform%20highp%20sampler3D%20volume%2C%20overlay%3B%5Cnuniform%20float%20overlays%3B%5Cnuniform%20float%20clipThick%3B%5Cnuniform%20vec3%20clipLo%3B%5Cnuniform%20vec3%20clipHi%3B%5Cnuniform%20float%20backOpacity%3B%5Cnuniform%20mat4%20mvpMtx%3B%5Cnuniform%20mat4%20normMtx%3B%5Cnuniform%20mat4%20matRAS%3B%5Cnuniform%20vec4%20clipPlaneColor%3B%5Cnuniform%20float%20renderOverlayBlend%3B%5Cnuniform%20highp%20sampler3D%20drawing%2C%20gradient%3B%5Cnuniform%20highp%20sampler2D%20colormap%3B%5Cnuniform%20highp%20sampler2D%20matCap%3B%5Cnuniform%20vec2%20renderDrawAmbientOcclusionXY%3B%5Cnuniform%20float%20gradientAmount%3B%5Cnin%20vec3%20vColor%3B%5Cnout%20vec4%20fColor%3B%5Cn%22%2Bm%2Bu%2B%22%5Cn%5Ctfloat%20startPos%20%3D%20samplePos.a%3B%5Cn%5Ctfloat%20clipClose%20%3D%20clipPos.a%20%2B%203.0%20*%20deltaDir.a%3B%20%2F%2Fdo%20not%20apply%20gradients%20near%20clip%20plane%5Cn%5Ctfloat%20brighten%20%3D%202.0%3B%20%2F%2Fmodulating%20makes%20average%20intensity%20darker%200.5%20*%200.5%20%3D%200.25%5Cn%5Ct%2F%2Fvec4%20prevGrad%20%3D%20vec4(0.0)%3B%5Cn%5Ctwhile%20(samplePos.a%20%3C%3D%20len)%20%7B%5Cn%5Ct%5Ctvec4%20colorSample%20%3D%20texture(volume%2C%20samplePos.xyz)%3B%5Cn%5Ct%5Ctif%20(colorSample.a%20%3E%3D%200.0)%20%7B%5Cn%5Ct%5Ct%5Ctvec4%20grad%20%3D%20texture(gradient%2C%20samplePos.xyz)%3B%5Cn%5Ct%5Ct%5Ctgrad.rgb%20%3D%20normalize(grad.rgb*2.0%20-%201.0)%3B%5Cn%5Ct%5Ct%5Ct%2F%2Fif%20(grad.a%20%3C%20prevGrad.a)%5Cn%5Ct%5Ct%5Ct%2F%2F%5Ctgrad.rgb%20%3D%20prevGrad.rgb%3B%5Cn%5Ct%5Ct%5Ct%2F%2FprevGrad%20%3D%20grad%3B%5Cn%5Ct%5Ct%5Ctvec3%20n%20%3D%20mat3(normMtx)%20*%20grad.rgb%3B%5Cn%5Ct%5Ct%5Ctn.y%20%3D%20-%20n.y%3B%5Cn%5Ct%5Ct%5Ctvec4%20mc%20%3D%20vec4(texture(matCap%2C%20n.xy%20*%200.5%20%2B%200.5).rgb%2C%201.0)%20*%20brighten%3B%5Cn%5Ct%5Ct%5Ctmc%20%3D%20mix(vec4(1.0)%2C%20mc%2C%20gradientAmount)%3B%5Cn%5Ct%5Ct%5Ctif%20(samplePos.a%20%3E%20clipClose)%5Cn%5Ct%5Ct%5Ct%5CtcolorSample.rgb%20*%3D%20mc.rgb%3B%5Cn%5Ct%5Ct%5Ctif%20(firstHit.a%20%3E%20lenNoClip)%5Cn%5Ct%5Ct%5Ct%5CtfirstHit%20%3D%20samplePos%3B%5Cn%5Ct%5Ct%5CtbackNearest%20%3D%20min(backNearest%2C%20samplePos.a)%3B%5Cn%5Ct%5Ct%5CtcolorSample.a%20%3D%201.0-pow((1.0%20-%20colorSample.a)%2C%20opacityCorrection)%3B%5Cn%5Ct%5Ct%5CtcolorSample.rgb%20*%3D%20colorSample.a%3B%5Cn%5Ct%5Ct%5CtcolAcc%3D%20(1.0%20-%20colAcc.a)%20*%20colorSample%20%2B%20colAcc%3B%5Cn%5Ct%5Ct%5Ctif%20(%20colAcc.a%20%3E%20earlyTermination%20)%5Cn%5Ct%5Ct%5Ct%5Ctbreak%3B%5Cn%5Ct%5Ct%7D%5Cn%5Ct%5CtsamplePos%20%2B%3D%20deltaDir%3B%20%2F%2Fadvance%20ray%20position%5Cn%5Ct%7D%5Cn%22%2BA%2Cv%3D%22%23version%20300%20es%5Cn%23line%20392%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnuniform%20int%20axCorSag%3B%5Cnuniform%20mat4%20mvpMtx%3B%5Cnuniform%20mat4%20frac2mm%3B%5Cnuniform%20float%20slice%3B%5Cnout%20vec3%20texPos%3B%5Cnvoid%20main(void)%20%7B%5Cn%5CttexPos%20%3D%20vec3(pos.x%2C%20pos.y%2C%20slice)%3B%5Cn%5Ctif%20(axCorSag%20%3E%201)%5Cn%5Ct%5CttexPos%20%3D%20vec3(slice%2C%20pos.x%2C%20pos.y)%3B%5Cn%5Ctelse%20if%20(axCorSag%20%3E%200)%5Cn%5Ct%5CttexPos%20%3D%20vec3(pos.x%2C%20slice%2C%20pos.y)%3B%5Cn%5Ctvec4%20mm%20%3D%20frac2mm%20*%20vec4(texPos%2C%201.0)%3B%5Cn%5Ctgl_Position%20%3D%20mvpMtx%20*%20mm%3B%5Cn%7D%22%2Cx%3D%22%23version%20300%20es%5Cn%23line%20411%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20highp%20sampler3D%20volume%2C%20overlay%3B%5Cnuniform%20int%20backgroundMasksOverlays%3B%5Cnuniform%20float%20overlayOutlineWidth%3B%5Cnuniform%20float%20overlayAlphaShader%3B%5Cnuniform%20int%20axCorSag%3B%5Cnuniform%20float%20overlays%3B%5Cnuniform%20float%20opacity%3B%5Cnuniform%20float%20drawOpacity%3B%5Cnuniform%20bool%20isAlphaClipDark%3B%5Cnuniform%20highp%20sampler3D%20drawing%3B%5Cnuniform%20highp%20sampler2D%20colormap%3B%5Cnin%20vec3%20texPos%3B%5Cnout%20vec4%20color%3B%22%2Bd%2B'void%20main()%20%7B%5Cn%5Ct%2F%2Fcolor%20%3D%20vec4(1.0%2C%200.0%2C%201.0%2C%201.0)%3Breturn%3B%5Cn%5Ctvec4%20background%20%3D%20texture(volume%2C%20texPos)%3B%5Cn%5Ctcolor%20%3D%20vec4(background.rgb%2C%20opacity)%3B%5Cn%5Ctif%20((isAlphaClipDark)%20%26%26%20(background.a%20%3D%3D%200.0))%20color.a%20%3D%200.0%3B%20%2F%2FFSLeyes%20clipping%20range%5Cn%5Ctvec4%20ocolor%20%3D%20vec4(0.0)%3B%5Cn%5Ctfloat%20overlayAlpha%20%3D%20overlayAlphaShader%3B%5Cn%5Ctif%20(overlays%20%3E%200.0)%20%7B%5Cn%5Ct%5Ctocolor%20%3D%20texture(overlay%2C%20texPos)%3B%5Cn%5Ct%5Ct%2F%2FdFdx%20for%20%22boxing%22%20issue%20435%20has%20aliasing%20on%20some%20implementations%20(coarse%20vs%20fine)%5Cn%5Ct%5Ct%2F%2Fhowever%2C%20this%20only%20identifies%2050%25%20of%20the%20edges%20due%20to%20aliasing%20effects%5Cn%5Ct%5Ct%2F%2F%20http%3A%2F%2Fwww.aclockworkberry.com%2Fshader-derivative-functions%2F%5Cn%5Ct%5Ct%2F%2F%20https%3A%2F%2Fbgolus.medium.com%2Fdistinctive-derivative-differences-cce38d36797b%5Cn%5Ct%5Ct%2F%2Fif%20((ocolor.a%20%3E%3D%201.0)%20%26%26%20((dFdx(ocolor.a)%20!%3D%200.0)%20%7C%7C%20(dFdy(ocolor.a)%20!%3D%200.0)%20%20))%5Cn%5Ct%5Ct%2F%2F%5Ctocolor.rbg%20%3D%20vec3(0.0%2C%200.0%2C%200.0)%3B%5Cn%5Ct%5Ctbool%20isOutlineBelowNotAboveThreshold%20%3D%20true%3B%5Cn%5Ct%5Ctif%20(isOutlineBelowNotAboveThreshold)%20%7B%5Cn%5Ct%5Ct%5Ctif%20((overlayOutlineWidth%20%3E%200.0)%20%26%26%20(ocolor.a%20%3C%201.0))%20%7B%20%2F%2Fcheck%20voxel%20neighbors%20for%20edge%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vx%20%3D%20(overlayOutlineWidth%20)%20%2F%20vec3(textureSize(overlay%2C%200))%3B%5Cn%5Ct%5Ct%5Ct%5Ct%2F%2F6%20voxel%20neighbors%20that%20share%20a%20face%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxR%20%3D%20vec3(texPos.x%2Bvx.x%2C%20texPos.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxL%20%3D%20vec3(texPos.x-vx.x%2C%20texPos.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxA%20%3D%20vec3(texPos.x%2C%20texPos.y%2Bvx.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxP%20%3D%20vec3(texPos.x%2C%20texPos.y-vx.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxS%20%3D%20vec3(texPos.x%2C%20texPos.y%2C%20texPos.z%2Bvx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxI%20%3D%20vec3(texPos.x%2C%20texPos.y%2C%20texPos.z-vx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctfloat%20a%20%3D%200.0%3B%5Cn%5Ct%5Ct%5Ct%5Ctif%20(axCorSag%20!%3D%202)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxR).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxL).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ctif%20(axCorSag%20!%3D%201)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxA).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxP).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ctif%20(axCorSag%20!%3D%200)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxS).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxI).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ctbool%20isCheckCorners%20%3D%20true%3B%5Cn%5Ct%5Ct%5Ct%5Ctif%20(isCheckCorners)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%2F%2F12%20voxel%20neighbors%20that%20share%20an%20edge%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxRA%20%3D%20vec3(texPos.x%2Bvx.x%2C%20texPos.y%2Bvx.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxLA%20%3D%20vec3(texPos.x-vx.x%2C%20texPos.y%2Bvx.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxRP%20%3D%20vec3(texPos.x%2Bvx.x%2C%20texPos.y-vx.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxLP%20%3D%20vec3(texPos.x-vx.x%2C%20texPos.y-vx.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxRS%20%3D%20vec3(texPos.x%2Bvx.x%2C%20texPos.y%2C%20texPos.z%2Bvx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxLS%20%3D%20vec3(texPos.x-vx.x%2C%20texPos.y%2C%20texPos.z%2Bvx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxRI%20%3D%20vec3(texPos.x%2Bvx.x%2C%20texPos.y%2C%20texPos.z-vx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxLI%20%3D%20vec3(texPos.x-vx.x%2C%20texPos.y%2C%20texPos.z-vx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxAS%20%3D%20vec3(texPos.x%2C%20texPos.y%2Bvx.y%2C%20texPos.z%2Bvx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxPS%20%3D%20vec3(texPos.x%2C%20texPos.y-vx.y%2C%20texPos.z%2Bvx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxAI%20%3D%20vec3(texPos.x%2C%20texPos.y%2Bvx.y%2C%20texPos.z-vx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctvec3%20vxPI%20%3D%20vec3(texPos.x%2C%20texPos.y-vx.y%2C%20texPos.z-vx.z)%3B%5Cn%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctif%20(axCorSag%20%3D%3D%200)%20%7B%20%2F%2Faxial%20corners%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxRA).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxLA).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxRP).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxLP).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctif%20(axCorSag%20%3D%3D%201)%20%7B%20%2F%2Fcoronal%20corners%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxRS).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxLS).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxRI).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxLI).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctif%20(axCorSag%20%3D%3D%202)%20%7B%20%2F%2Fsagittal%20corners%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxAS).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxPS).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxAI).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20max(a%2C%20texture(overlay%2C%20vxPI).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ctif%20(a%20%3E%3D%201.0)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctocolor%20%3D%20vec4(0.0%2C%200.0%2C%200.0%2C%201.0)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5CtoverlayAlpha%20%3D%201.0%3B%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%7D%5Cn%5Cn%5Ct%5Ct%7D%20else%20%7B%5Cn%5Ct%5Ct%5Ctif%20((overlayOutlineWidth%20%3E%200.0)%20%26%26%20(ocolor.a%20%3E%3D%201.0))%20%7B%20%2F%2Fcheck%20voxel%20neighbors%20for%20edge%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vx%20%3D%20(overlayOutlineWidth%20)%20%2F%20vec3(textureSize(overlay%2C%200))%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxR%20%3D%20vec3(texPos.x%2Bvx.x%2C%20texPos.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxL%20%3D%20vec3(texPos.x-vx.x%2C%20texPos.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxA%20%3D%20vec3(texPos.x%2C%20texPos.y%2Bvx.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxP%20%3D%20vec3(texPos.x%2C%20texPos.y-vx.y%2C%20texPos.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxS%20%3D%20vec3(texPos.x%2C%20texPos.y%2C%20texPos.z%2Bvx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctvec3%20vxI%20%3D%20vec3(texPos.x%2C%20texPos.y%2C%20texPos.z-vx.z)%3B%5Cn%5Ct%5Ct%5Ct%5Ctfloat%20a%20%3D%201.0%3B%5Cn%5Ct%5Ct%5Ct%5Ctif%20(axCorSag%20!%3D%202)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20min(a%2C%20texture(overlay%2C%20vxR).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20min(a%2C%20texture(overlay%2C%20vxL).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ctif%20(axCorSag%20!%3D%201)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20min(a%2C%20texture(overlay%2C%20vxA).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20min(a%2C%20texture(overlay%2C%20vxP).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ctif%20(axCorSag%20!%3D%200)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20min(a%2C%20texture(overlay%2C%20vxS).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Cta%20%3D%20min(a%2C%20texture(overlay%2C%20vxI).a)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ctif%20(a%20%3C%201.0)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctocolor%20%3D%20vec4(0.0%2C%200.0%2C%200.0%2C%201.0)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5CtoverlayAlpha%20%3D%201.0%3B%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%7D%20%2F%2Foutline%20above%20threshold%5Cn%5Ct%7D%5Cn%5Cn'%2Cw%3D%22%5Ctocolor.a%20*%3D%20overlayAlpha%3B%5Cn%5Ctvec4%20dcolor%20%3D%20drawColor(texture(drawing%2C%20texPos).r%2C%20drawOpacity)%3B%5Cn%5Ctif%20(dcolor.a%20%3E%200.0)%20%7B%5Cn%5Ct%5Ctcolor.rgb%20%3D%20mix(color.rgb%2C%20dcolor.rgb%2C%20dcolor.a)%3B%5Cn%5Ct%5Ctcolor.a%20%3D%20max(drawOpacity%2C%20color.a)%3B%5Cn%5Ct%7D%5Cn%5Ctif%20((backgroundMasksOverlays%20%3E%200)%20%26%26%20(background.a%20%3D%3D%200.0))%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ctfloat%20a%20%3D%20color.a%20%2B%20ocolor.a%20*%20(1.0%20-%20color.a)%3B%20%2F%2F%20premultiplied%20alpha%5Cn%5Ctif%20(a%20%3D%3D%200.0)%20return%3B%5Cn%5Ctcolor.rgb%20%3D%20mix(color.rgb%2C%20ocolor.rgb%2C%20ocolor.a%20%2F%20a)%3B%5Cn%5Ctcolor.a%20%3D%20a%3B%5Cn%7D%22%2CC%3Dx%2Bw%2Cb%3Dx%2B%22%5Ctif%20(ocolor.a%20%3E%200.0)%20%7B%5Cn%5Ct%5Ct%2F%2Fhttps%3A%2F%2Fgamedev.stackexchange.com%2Fquestions%2F102889%2Fis-it-possible-to-convert-vec4-to-int-in-glsl-using-opengl-es%5Cn%5Ct%5Ctuint%20alpha%20%3D%20uint(ocolor.a%20*%20255.0)%3B%5Cn%5Ct%5Ctvec3%20xyzFlip%20%3D%20vec3(float((uint(1)%20%26%20alpha)%20%3E%20uint(0))%2C%20float((uint(2)%20%26%20alpha)%20%3E%20uint(0))%2C%20float((uint(4)%20%26%20alpha)%20%3E%20uint(0)))%3B%5Cn%5Ct%5Ct%2F%2Fconvert%20from%200%20and%201%20to%20-1%20and%201%5Cn%5Ct%5CtxyzFlip%20%3D%20(xyzFlip%20*%202.0)%20-%201.0%3B%5Cn%5Ct%5Ct%2F%2Fhttps%3A%2F%2Fmath.stackexchange.com%2Fquestions%2F1905533%2Ffind-perpendicular-distance-from-point-to-line-in-3d%5Cn%5Ct%5Ct%2F%2Fv1%20principle%20direction%20of%20tensor%20for%20this%20voxel%5Cn%5Ct%5Ctvec3%20v1%20%3D%20ocolor.rgb%3B%5Cn%5Ct%5Ct%2F%2Fflips%20encode%20polarity%20to%20convert%20from%200..1%20to%20-1..1%20(27%20bits%20vs%2024%20bit%20precision)%5Cn%5Ct%5Ctv1%20%3D%20normalize(%20v1%20*%20xyzFlip)%3B%5Cn%5Ct%5Ctvec3%20vxl%20%3D%20fract(texPos%20*%20vec3(textureSize(volume%2C%200)))%20-%200.5%3B%5Cn%5Ct%5Ct%2F%2Fvxl%20coordinates%20now%20-0.5..%2B0.5%20so%200%2C0%2C0%20is%20origin%5Cn%5Ct%5Ctvxl.x%20%3D%20-vxl.x%3B%5Cn%5Ct%5Ctfloat%20t%20%3D%20dot(vxl%2Cv1)%3B%5Cn%5Ct%5Ctvec3%20P%20%3D%20t%20*%20v1%3B%5Cn%5Ct%5Ctfloat%20dx%20%3D%20length(P-vxl)%3B%5Cn%5Ct%5Ctocolor.a%20%3D%201.0%20-%20smoothstep(0.2%2C0.25%2C%20dx)%3B%5Cn%5Ct%5Ct%2F%2Fif%20modulation%20was%20applied%2C%20use%20that%20to%20scale%20alpha%20not%20color%3A%5Cn%5Ct%5Ctocolor.a%20*%3D%20length(ocolor.rgb)%3B%5Cn%5Ct%5Ctocolor.rgb%20%3D%20normalize(ocolor.rgb)%3B%5Cn%5Ct%5Ct%2F%2Fcompute%20distance%20one%20half%20voxel%20closer%20to%20viewer%3A%5Cn%5Ct%5Ctfloat%20pan%20%3D%200.5%3B%5Cn%5Ct%5Ctif%20(axCorSag%20%3D%3D%200)%5Cn%5Ct%5Ct%5Ctvxl.z%20-%3D%20pan%3B%5Cn%5Ct%5Ctif%20(axCorSag%20%3D%3D%201)%5Cn%5Ct%5Ct%5Ctvxl.y%20-%3D%20pan%3B%5Cn%5Ct%5Ctif%20(axCorSag%20%3D%3D%202)%5Cn%5Ct%5Ct%5Ctvxl.x%20%2B%3D%20pan%3B%5Cn%5Ct%5Ctt%20%3D%20dot(vxl%2Cv1)%3B%5Cn%5Ct%5CtP%20%3D%20t%20*%20v1%3B%5Cn%5Ct%5Ctfloat%20dx2%20%3D%20length(P-vxl)%3B%5Cn%5Ct%5Ctocolor.rgb%20%2B%3D%20(dx2-dx-(0.5%20*%20pan))%20*%201.0%3B%5Cn%5Ct%7D%5Cn%22%2Bw%2Cy%3D%22%23version%20300%20es%5Cn%23line%20480%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20vec4%20lineColor%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctcolor%20%3D%20lineColor%3B%5Cn%7D%22%2CI%3D%22%23version%20300%20es%5Cn%23line%20520%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnuniform%20vec2%20canvasWidthHeight%3B%5Cnuniform%20vec4%20leftTopWidthHeight%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ct%2F%2Fconvert%20pixel%20x%2Cy%20space%201..canvasWidth%2C1..canvasHeight%20to%20WebGL%201..-1%2C-1..1%5Cn%5Ctvec2%20frac%3B%5Cn%5Ctfrac.x%20%3D%20(leftTopWidthHeight.x%20%2B%20(pos.x%20*%20leftTopWidthHeight.z))%20%2F%20canvasWidthHeight.x%3B%20%2F%2F0..1%5Cn%5Ctfrac.y%20%3D%201.0%20-%20((leftTopWidthHeight.y%20%2B%20((1.0%20-%20pos.y)%20*%20leftTopWidthHeight.w))%20%2F%20canvasWidthHeight.y)%3B%20%2F%2F1..0%5Cn%5Ctfrac%20%3D%20(frac%20*%202.0)%20-%201.0%3B%5Cn%5Ctgl_Position%20%3D%20vec4(frac%2C%200.0%2C%201.0)%3B%5Cn%7D%22%2CM%3D%22%23version%20300%20es%5Cn%23line%20613%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec3%20vPos%3B%5Cnout%20vec2%20TexCoord%3B%5Cnvoid%20main()%20%7B%5Cn%5CtTexCoord%20%3D%20vPos.xy%3B%5Cn%5Ctgl_Position%20%3D%20vec4(%20(vPos.xy-vec2(0.5%2C0.5))%20*%202.0%2C%200.0%2C%201.0)%3B%5Cn%7D%22%2CD%3D%22%23version%20300%20es%5Cnuniform%20highp%20usampler3D%20intensityVol%3B%5Cn%22%2CF%3D%22%23version%20300%20es%5Cnuniform%20highp%20isampler3D%20intensityVol%3B%5Cn%22%2CT%3D%22%23version%20300%20es%5Cnuniform%20highp%20sampler3D%20intensityVol%3B%5Cn%22%2CV%3D%22%23line%20636%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec2%20TexCoord%3B%5Cnout%20vec4%20FragColor%3B%5Cnuniform%20float%20coordZ%3B%5Cnuniform%20float%20layer%3B%5Cnuniform%20highp%20sampler2D%20colormap%3B%5Cnuniform%20lowp%20sampler3D%20blend3D%3B%5Cnuniform%20float%20opacity%3B%5Cnuniform%20vec4%20xyzaFrac%3B%5Cnuniform%20mat4%20mtx%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ctvec4%20vx%20%3D%20vec4(TexCoord.x%2C%20TexCoord.y%2C%20coordZ%2C%201.0)%20*%20mtx%3B%5Cn%5Ctuint%20idx%20%3D%20uint(texture(intensityVol%2C%20vx.xyz).r)%3B%5Cn%5CtFragColor%20%3D%20vec4(0.0%2C%200.0%2C%200.0%2C%200.0)%3B%5Cn%5Ctif%20(idx%20%3D%3D%20uint(0))%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ct%2F%2Fidx%20%3D%20((idx%20-%20uint(1))%20%25%20uint(100))%2Buint(1)%3B%5Cn%5Ctfloat%20textureWidth%20%3D%20float(textureSize(colormap%2C%200).x)%3B%5Cn%5Ctfloat%20fx%20%3D%20(float(idx)%2B0.5)%20%2F%20textureWidth%3B%5Cn%5Ctfloat%20nlayer%20%3D%20float(textureSize(colormap%2C%200).y)%3B%5Cn%5Ctfloat%20y%20%3D%20((2.0%20*%20layer)%20%2B%201.5)%2Fnlayer%3B%5Cn%5CtFragColor%20%3D%20texture(colormap%2C%20vec2(fx%2C%20y)).rgba%3B%5Cn%5Ctfloat%20alpha%20%3D%20FragColor.a%3B%5Cn%5CtFragColor.a%20*%3D%20opacity%3B%5Cn%5Ctif%20(xyzaFrac.a%20%3E%200.0)%20%7B%20%2F%2Foutline%5Cn%5Ct%5Ctvx%20%3D%20vec4(TexCoord.x%2BxyzaFrac.x%2C%20TexCoord.y%2C%20coordZ%2C%201.0)%20*%20mtx%3B%5Cn%5Ct%5Ctuint%20R%20%3D%20uint(texture(intensityVol%2C%20vx.xyz).r)%3B%5Cn%5Ct%5Ctvx%20%3D%20vec4(TexCoord.x-xyzaFrac.x%2C%20TexCoord.y%2C%20coordZ%2C%201.0)%20*%20mtx%3B%5Cn%5Ct%5Ctuint%20L%20%3D%20uint(texture(intensityVol%2C%20vx.xyz).r)%3B%5Cn%5Ct%5Ctvx%20%3D%20vec4(TexCoord.x%2C%20TexCoord.y%2BxyzaFrac.y%2C%20coordZ%2C%201.0)%20*%20mtx%3B%5Cn%5Ct%5Ctuint%20A%20%3D%20uint(texture(intensityVol%2C%20vx.xyz).r)%3B%5Cn%5Ct%5Ctvx%20%3D%20vec4(TexCoord.x%2C%20TexCoord.y-xyzaFrac.y%2C%20coordZ%2C%201.0)%20*%20mtx%3B%5Cn%5Ct%5Ctuint%20P%20%3D%20uint(texture(intensityVol%2C%20vx.xyz).r)%3B%5Cn%5Ct%5Ctvx%20%3D%20vec4(TexCoord.x%2C%20TexCoord.y%2C%20coordZ%2BxyzaFrac.z%2C%201.0)%20*%20mtx%3B%5Cn%5Ct%5Ctuint%20S%20%3D%20uint(texture(intensityVol%2C%20vx.xyz).r)%3B%5Cn%5Ct%5Ctvx%20%3D%20vec4(TexCoord.x%2C%20TexCoord.y%2C%20coordZ-xyzaFrac.z%2C%201.0)%20*%20mtx%3B%5Cn%5Ct%5Ctuint%20I%20%3D%20uint(texture(intensityVol%2C%20vx.xyz).r)%3B%5Cn%5Ct%5Ctif%20((idx%20!%3D%20R)%20%7C%7C%20(idx%20!%3D%20L)%20%7C%7C%20(idx%20!%3D%20A)%20%7C%7C%20(idx%20!%3D%20P)%20%7C%7C%20(idx%20!%3D%20S)%20%7C%7C%20(idx%20!%3D%20I))%5Cn%5Ct%5Ct%5CtFragColor.a%20%3D%20alpha%20*%20xyzaFrac.a%3B%5Cn%5Ct%7D%5Cn%7D%22%2CS%3D%22%23line%20691%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec2%20TexCoord%3B%5Cnout%20vec4%20FragColor%3B%5Cnuniform%20float%20coordZ%3B%5Cnuniform%20float%20layer%3B%5Cnuniform%20float%20scl_slope%3B%5Cnuniform%20float%20scl_inter%3B%5Cnuniform%20float%20cal_max%3B%5Cnuniform%20float%20cal_min%3B%5Cnuniform%20float%20cal_maxNeg%3B%5Cnuniform%20float%20cal_minNeg%3B%5Cnuniform%20bool%20isAlphaThreshold%3B%5Cnuniform%20bool%20isAdditiveBlend%3B%5Cnuniform%20highp%20sampler2D%20colormap%3B%5Cnuniform%20lowp%20sampler3D%20blend3D%3B%5Cnuniform%20int%20modulation%3B%5Cnuniform%20highp%20sampler3D%20modulationVol%3B%5Cnuniform%20float%20opacity%3B%5Cnuniform%20mat4%20mtx%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ctvec4%20vx%20%3D%20vec4(TexCoord.xy%2C%20coordZ%2C%201.0)%20*%20mtx%3B%5Cn%5Ctif%20((vx.x%20%3C%200.0)%20%7C%7C%20(vx.x%20%3E%201.0)%20%7C%7C%20(vx.y%20%3C%200.0)%20%7C%7C%20(vx.y%20%3E%201.0)%20%7C%7C%20(vx.z%20%3C%200.0)%20%7C%7C%20(vx.z%20%3E%201.0))%20%7B%5Cn%5Ct%5Ct%2F%2Fset%20transparent%20if%20out%20of%20range%5Cn%5Ct%5Ct%2F%2Fhttps%3A%2F%2Fwebglfundamentals.org%2Fwebgl%2Fwebgl-3d-textures-repeat-clamp.html%5Cn%5Ct%5CtFragColor%20%3D%20texture(blend3D%2C%20vec3(TexCoord.xy%2C%20coordZ))%3B%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ct%7D%5Cn%5Ctfloat%20f%20%3D%20(scl_slope%20*%20float(texture(intensityVol%2C%20vx.xyz).r))%20%2B%20scl_inter%3B%5Cn%5Ctfloat%20mn%20%3D%20cal_min%3B%5Cn%5Ctfloat%20mx%20%3D%20cal_max%3B%5Cn%5Ctif%20(isAlphaThreshold)%5Cn%5Ct%5Ctmn%20%3D%200.0%3B%5Cn%5Ctfloat%20r%20%3D%20max(0.00001%2C%20abs(mx%20-%20mn))%3B%5Cn%5Ctmn%20%3D%20min(mn%2C%20mx)%3B%5Cn%5Ctfloat%20txl%20%3D%20mix(0.0%2C%201.0%2C%20(f%20-%20mn)%20%2F%20r)%3B%5Cn%5Ct%2F%2Fhttps%3A%2F%2Fstackoverflow.com%2Fquestions%2F5879403%2Fopengl-texture-coordinates-in-pixel-space%5Cn%5Ctfloat%20nlayer%20%3D%20float(textureSize(colormap%2C%200).y)%3B%5Cn%5Ct%2F%2Feach%20volume%20has%20two%20color%20maps%3A%5Cn%5Ct%2F%2F%20(layer*2)%20%3D%20negative%20and%20(layer%20*%202)%20%2B%201%20%3D%20postive%5Cn%5Ctfloat%20y%20%3D%20((2.0%20*%20layer)%20%2B%201.5)%2Fnlayer%3B%5Cn%5CtFragColor%20%3D%20texture(colormap%2C%20vec2(txl%2C%20y)).rgba%3B%5Cn%5Ct%2F%2Fnegative%20colors%5Cn%5Ctmn%20%3D%20cal_minNeg%3B%5Cn%5Ctmx%20%3D%20cal_maxNeg%3B%5Cn%5Ctif%20(isAlphaThreshold)%5Cn%5Ct%5Ctmx%20%3D%200.0%3B%5Cn%5Ct%2F%2Fif%20((!isnan(cal_minNeg))%20%26%26%20(%20f%20%3C%20mx))%20%7B%5Cn%5Ctif%20((cal_minNeg%20%3C%20cal_maxNeg)%20%26%26%20(%20f%20%3C%20mx))%20%7B%5Cn%5Ct%5Ctr%20%3D%20max(0.00001%2C%20abs(mx%20-%20mn))%3B%5Cn%5Ct%5Ctmn%20%3D%20min(mn%2C%20mx)%3B%5Cn%5Ct%5Cttxl%20%3D%201.0%20-%20mix(0.0%2C%201.0%2C%20(f%20-%20mn)%20%2F%20r)%3B%5Cn%5Ct%5Cty%20%3D%20((2.0%20*%20layer)%20%2B%200.5)%2Fnlayer%3B%5Cn%5Ct%5CtFragColor%20%3D%20texture(colormap%2C%20vec2(txl%2C%20y))%3B%5Cn%5Ct%7D%5Cn%5Ctif%20(layer%20%3E%200.7)%5Cn%5Ct%5CtFragColor.a%20%3D%20step(0.00001%2C%20FragColor.a)%3B%5Cn%5Ct%2F%2Fif%20(modulation%20%3E%2010)%5Cn%5Ct%2F%2F%5CtFragColor.a%20*%3D%20texture(modulationVol%2C%20vx.xyz).r%3B%5Cn%5Ct%2F%2F%5CtFragColor.rgb%20*%3D%20texture(modulationVol%2C%20vx.xyz).r%3B%5Cn%5Ctif%20(isAlphaThreshold)%20%7B%5Cn%5Ct%5Ctif%20((cal_minNeg%20!%3D%20cal_maxNeg)%20%26%26%20(%20f%20%3C%200.0)%20%26%26%20(f%20%3E%20cal_maxNeg))%5Cn%5Ct%5Ct%5CtFragColor.a%20%3D%20pow(-f%20%2F%20-cal_maxNeg%2C%202.0)%3B%5Cn%5Ct%5Ctelse%20if%20((f%20%3E%200.0)%20%26%26%20(cal_min%20%3E%200.0))%5Cn%5Ct%5Ct%5CtFragColor.a%20*%3D%20pow(f%20%2F%20cal_min%2C%202.0)%3B%20%2F%2Fissue435%3A%20%20A%20%3D%20(V%2FX)**2%5Cn%5Ct%5Ct%2F%2FFragColor.g%20%3D%200.0%3B%5Cn%5Ct%7D%5Cn%5Ctif%20(modulation%20%3D%3D%201)%20%7B%5Cn%5Ct%5CtFragColor.rgb%20*%3D%20texture(modulationVol%2C%20vx.xyz).r%3B%5Cn%5Ct%7D%20else%20if%20(modulation%20%3D%3D%202)%20%7B%5Cn%5Ct%5CtFragColor.a%20%3D%20texture(modulationVol%2C%20vx.xyz).r%3B%5Cn%5Ct%7D%5Cn%5CtFragColor.a%20*%3D%20opacity%3B%5Cn%5Ctif%20(layer%20%3C%201.0)%20return%3B%5Cn%5Ctvec4%20prevColor%20%3D%20texture(blend3D%2C%20vec3(TexCoord.xy%2C%20coordZ))%3B%5Cn%5Ct%2F%2F%20https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FAlpha_compositing%5Cn%5Ctfloat%20aout%20%3D%20FragColor.a%20%2B%20(1.0%20-%20FragColor.a)%20*%20prevColor.a%3B%5Cn%5Ctif%20(aout%20%3C%3D%200.0)%20return%3B%5Cn%5Ctif%20(isAdditiveBlend)%5Cn%5Ct%5CtFragColor.rgb%20%3D%20((FragColor.rgb%20*%20FragColor.a)%20%2B%20(prevColor.rgb%20*%20prevColor.a))%20%2F%20aout%3B%5Cn%5Ctelse%5Cn%5Ct%5CtFragColor.rgb%20%3D%20((FragColor.rgb%20*%20FragColor.a)%20%2B%20(prevColor.rgb%20*%20prevColor.a%20*%20(1.0%20-%20FragColor.a)))%20%2F%20aout%3B%5Cn%5CtFragColor.a%20%3D%20aout%3B%5Cn%7D%22%2CE%3D%22%23version%20300%20es%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnlayout(location%3D1)%20in%20vec4%20norm%3B%5Cnlayout(location%3D2)%20in%20vec4%20clr%3B%5Cnuniform%20mat4%20mvpMtx%3B%5Cn%2F%2Funiform%20mat4%20modelMtx%3B%5Cnuniform%20mat4%20normMtx%3B%5Cnout%20vec4%20vClr%3B%5Cnout%20vec3%20vN%3B%5Cnout%20vec4%20vPc%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ctvec3%20lightPosition%20%3D%20vec3(0.0%2C%200.0%2C%20-10.0)%3B%5Cn%5CtvPc%20%3D%20mvpMtx%20*%20vec4(pos%2C%201.0)%3B%5Cn%5Ctgl_Position%20%3D%20vPc%3B%5Cn%5CtvN%20%3D%20normalize((normMtx%20*%20vec4(norm.xyz%2C1.0)).xyz)%3B%5Cn%5Ct%2F%2FvV%20%3D%20-vec3(modelMtx*vec4(pos%2C1.0))%3B%5Cn%5CtvClr%20%3D%20clr%3B%5Cn%7D%22%2CB%3D%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnflat%20in%20vec3%20vN%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctvec3%20r%20%3D%20vec3(0.0%2C%200.0%2C%201.0)%3B%20%2F%2FrayDir%3A%20for%20orthographic%20projections%20moving%20in%20Z%20direction%20(no%20need%20for%20normal%20matrix)%5Cn%5Ctfloat%20ambient%20%3D%200.35%3B%5Cn%5Ctfloat%20diffuse%20%3D%200.5%3B%5Cn%5Ctfloat%20specular%20%3D%200.2%3B%5Cn%5Ctfloat%20shininess%20%3D%2010.0%3B%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ctvec3%20lightPosition%20%3D%20vec3(0.0%2C%2010.0%2C%20-5.0)%3B%5Cn%5Ctvec3%20l%20%3D%20normalize(lightPosition)%3B%5Cn%5Ctfloat%20lightNormDot%20%3D%20dot(n%2C%20l)%3B%5Cn%5Ctvec3%20a%20%3D%20vClr.rgb%20*%20ambient%3B%5Cn%5Ctvec3%20d%20%3D%20max(lightNormDot%2C%200.0)%20*%20vClr.rgb%20*%20diffuse%3B%5Cn%5Ctfloat%20s%20%3D%20specular%20*%20pow(max(dot(reflect(l%2C%20n)%2C%20r)%2C%200.0)%2C%20shininess)%3B%5Cn%5Ctcolor%20%3D%20vec4(a%20%2B%20d%20%2B%20s%2C%20opacity)%3B%5Cn%7D%22%2CU%3D%22%23version%20300%20es%5Cn%23line%201260%5Cn%2F%2Fprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20vec3%20rayDir%3B%5Cnuniform%20vec3%20volScale%3B%5Cnuniform%20vec3%20texVox%3B%5Cnuniform%20vec4%20clipPlane%3B%5Cnuniform%20highp%20sampler3D%20volume%2C%20overlay%3B%5Cnuniform%20float%20overlays%3B%5Cnuniform%20float%20clipThick%3B%5Cnuniform%20vec3%20clipLo%3B%5Cnuniform%20vec3%20clipHi%3B%5Cnuniform%20mat4%20matRAS%3B%5Cnuniform%20mat4%20mvpMtx%3B%5Cnuniform%20float%20drawOpacity%2C%20renderOverlayBlend%3B%5Cnuniform%20highp%20sampler3D%20drawing%3B%5Cnuniform%20highp%20sampler2D%20colormap%3B%5Cnuniform%20int%20backgroundMasksOverlays%3B%5Cnin%20vec3%20vColor%3B%5Cnout%20vec4%20fColor%3B%5Cn%22%2Bm%2B%22%5Cnvoid%20main()%20%7B%5Cn%5Ctint%20id%20%3D%20254%3B%5Cn%5Ctvec3%20start%20%3D%20vColor%3B%5Cn%5Ctgl_FragDepth%20%3D%200.0%3B%5Cn%5CtfColor%20%3D%20vec4(0.0%2C%200.0%2C%200.0%2C%200.0)%3B%20%2F%2Fassume%20no%20hit%3A%20ID%20%3D%200%5Cn%5Ctfloat%20fid%20%3D%20float(id%20%26%20255)%2F%20255.0%3B%5Cn%5Ctvec3%20backPosition%20%3D%20GetBackPosition(start)%3B%5Cn%5Ctvec3%20dir%20%3D%20normalize(backPosition%20-%20start)%3B%5Cn%5CtclipVolumeStart(start%2C%20backPosition)%3B%5Cn%5Ctfloat%20len%20%3D%20length(backPosition%20-%20start)%3B%5Cn%5Ctfloat%20lenVox%20%3D%20length((texVox%20*%20start)%20-%20(texVox%20*%20backPosition))%3B%5Cn%5Ctif%20((lenVox%20%3C%200.5)%20%7C%7C%20(len%20%3E%203.0))%20return%3B%2F%2Fdiscard%3B%20%2F%2Flength%20limit%20for%20parallel%20rays%5Cn%5Ctfloat%20sliceSize%20%3D%20len%20%2F%20lenVox%3B%20%2F%2Fe.g.%20if%20ray%20length%20is%201.0%20and%20traverses%2050%20voxels%2C%20each%20voxel%20is%200.02%20in%20unit%20cube%5Cn%5Ctfloat%20stepSize%20%3D%20sliceSize%3B%20%2F%2Fquality%3A%20larger%20step%20is%20faster%20traversal%2C%20but%20fewer%20samples%5Cn%5Ctfloat%20opacityCorrection%20%3D%20stepSize%2FsliceSize%3B%5Cn%5Ctdir%20%3D%20normalize(dir)%3B%5Cn%5Ctvec4%20samplePos%20%3D%20vec4(start.xyz%2C%200.0)%3B%20%2F%2Fray%20position%5Cn%5Ctfloat%20lenNoClip%20%3D%20len%3B%5Cn%5Ctbool%20isClip%20%3D%20false%3B%5Cn%5Ctvec4%20clipPos%20%3D%20applyClip(dir%2C%20samplePos%2C%20len%2C%20isClip)%3B%5Cn%5Ctif%20(isClip)%20fColor%20%3D%20vec4(samplePos.xyz%2C%20253.0%20%2F%20255.0)%3B%20%2F%2Fassume%20no%20hit%3A%20ID%20%3D%200%5Cn%5Ct%2F%2Fstart%3A%20OPTIONAL%20fast%20pass%3A%20rapid%20traversal%20until%20first%20hit%5Cn%5Ctfloat%20stepSizeFast%20%3D%20sliceSize%20*%201.9%3B%5Cn%5Ctvec4%20deltaDirFast%20%3D%20vec4(dir.xyz%20*%20stepSizeFast%2C%20stepSizeFast)%3B%5Cn%5Ctwhile%20(samplePos.a%20%3C%3D%20len)%20%7B%5Cn%5Ct%5Ctfloat%20val%20%3D%20texture(volume%2C%20samplePos.xyz).a%3B%5Cn%5Ct%5Ctif%20(val%20%3E%200.01)%20%7B%5Cn%5Ct%5Ct%5CtfColor%20%3D%20vec4(samplePos.rgb%2C%20fid)%3B%5Cn%5Ct%5Ct%5Ctgl_FragDepth%20%3D%20frac2ndc(samplePos.xyz)%3B%5Cn%5Ct%5Ct%5Ctbreak%3B%5Cn%5Ct%5Ct%7D%5Cn%5Ct%5CtsamplePos%20%2B%3D%20deltaDirFast%3B%20%2F%2Fadvance%20ray%20position%5Cn%5Ct%7D%5Cn%5Ct%2F%2Fend%3A%20fast%20pass%5Cn%5Ctif%20((overlays%20%3C%201.0)%20%7C%7C%20(backgroundMasksOverlays%20%3E%200))%20%7B%5Cn%5Ct%5Ctreturn%3B%20%2F%2Fbackground%20hit%2C%20no%20overlays%5Cn%5Ct%7D%5Cn%5Ct%2F%2Foverlay%20pass%5Cn%5Ctlen%20%3D%20min(lenNoClip%2C%20samplePos.a)%3B%20%2F%2Fonly%20find%20overlay%20closer%20than%20background%5Cn%5CtsamplePos%20%3D%20vec4(start.xyz%2C%200.0)%3B%20%2F%2Fray%20position%5Cn%5Ctwhile%20(samplePos.a%20%3C%3D%20len)%20%7B%5Cn%5Ct%5Ctfloat%20val%20%3D%20texture(overlay%2C%20samplePos.xyz).a%3B%5Cn%5Ct%5Ctif%20(val%20%3E%200.01)%20%7B%5Cn%5Ct%5Ct%5CtfColor%20%3D%20vec4(samplePos.rgb%2C%20fid)%3B%5Cn%5Ct%5Ct%5Ctgl_FragDepth%20%3D%20frac2ndc(samplePos.xyz)%3B%5Cn%5Ct%5Ct%5Ctreturn%3B%5Cn%5Ct%5Ct%7D%5Cn%5Ct%5CtsamplePos%20%2B%3D%20deltaDirFast%3B%20%2F%2Fadvance%20ray%20position%5Cn%5Ct%7D%5Cn%5Ct%2F%2Fif%20(fColor.a%20%3D%3D%200.0)%20discard%3B%20%2F%2Fno%20hit%20in%20either%20background%20or%20overlays%5Cn%5Ct%2F%2Fyou%20only%20get%20here%20if%20there%20is%20a%20hit%20with%20the%20background%20that%20is%20closer%20than%20any%20overlay%5Cn%7D%22%2CR%3D%22%23version%20300%20es%5Cn%23line%20286%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec3%20vPos%3B%5Cnout%20vec2%20TexCoord%3B%5Cnvoid%20main()%20%7B%5Cn%20%20%20%20TexCoord%20%3D%20vPos.xy%3B%5Cn%20%20%20%20gl_Position%20%3D%20vec4(%20(vPos.xy-vec2(0.5%2C0.5))*%202.0%2C%200.0%2C%201.0)%3B%5Cn%7D%22%2CN%3Dnew%20Float32Array(%5B-1%2C-1%2C-1%2C.28%2C.28%2C.28%2C-1%2C-1%2C-1%2C.28%2C.28%2C.28%2C-1%2C1%2C-1%2C.28%2C.28%2C.28%2C1%2C-1%2C-1%2C.28%2C.28%2C.28%2C1%2C1%2C-1%2C.28%2C.28%2C.28%2C1%2C1%2C-1%2C.28%2C.28%2C.28%2C-1%2C-1%2C1%2C.8%2C.8%2C.8%2C-1%2C-1%2C1%2C.8%2C.8%2C.8%2C1%2C-1%2C1%2C.8%2C.8%2C.8%2C-1%2C1%2C1%2C.8%2C.8%2C.8%2C1%2C1%2C1%2C.8%2C.8%2C.8%2C1%2C1%2C1%2C.8%2C.8%2C.8%2C-1%2C1%2C-1%2C0%2C0%2C.74%2C-1%2C1%2C-1%2C0%2C0%2C.74%2C-1%2C1%2C1%2C0%2C0%2C.74%2C1%2C1%2C-1%2C0%2C0%2C.74%2C1%2C1%2C1%2C0%2C0%2C.74%2C1%2C1%2C1%2C0%2C0%2C.74%2C-1%2C-1%2C-1%2C.42%2C0%2C.42%2C-1%2C-1%2C-1%2C.42%2C0%2C.42%2C1%2C-1%2C-1%2C.42%2C0%2C.42%2C-1%2C-1%2C1%2C.42%2C0%2C.42%2C1%2C-1%2C1%2C.42%2C0%2C.42%2C1%2C-1%2C1%2C.42%2C0%2C.42%2C-1%2C-1%2C-1%2C.64%2C0%2C0%2C-1%2C-1%2C-1%2C.64%2C0%2C0%2C-1%2C-1%2C1%2C.64%2C0%2C0%2C-1%2C1%2C-1%2C.64%2C0%2C0%2C-1%2C1%2C1%2C.64%2C0%2C0%2C-1%2C1%2C1%2C.64%2C0%2C0%2C1%2C-1%2C-1%2C0%2C.5%2C0%2C1%2C-1%2C-1%2C0%2C.5%2C0%2C1%2C1%2C-1%2C0%2C.5%2C0%2C1%2C-1%2C1%2C0%2C.5%2C0%2C1%2C1%2C1%2C0%2C.5%2C0%2C1%2C1%2C1%2C0%2C.5%2C0%2C-.45%2C1%2C-.8%2C0%2C0%2C0%2C-.45%2C1%2C-.8%2C0%2C0%2C0%2C-.45%2C1%2C.8%2C0%2C0%2C0%2C-.25%2C1%2C-.8%2C0%2C0%2C0%2C-.25%2C1%2C.8%2C0%2C0%2C0%2C-.25%2C1%2C.8%2C0%2C0%2C0%2C-.25%2C1%2C.6%2C0%2C0%2C0%2C-.25%2C1%2C.6%2C0%2C0%2C0%2C-.25%2C1%2C.8%2C0%2C0%2C0%2C.45%2C1%2C.6%2C0%2C0%2C0%2C.25%2C1%2C.8%2C0%2C0%2C0%2C.25%2C1%2C.8%2C0%2C0%2C0%2C.25%2C1%2C.1%2C0%2C0%2C0%2C.25%2C1%2C.1%2C0%2C0%2C0%2C.25%2C1%2C.6%2C0%2C0%2C0%2C.45%2C1%2C.1%2C0%2C0%2C0%2C.45%2C1%2C.6%2C0%2C0%2C0%2C.45%2C1%2C.6%2C0%2C0%2C0%2C-.25%2C1%2C-.1%2C0%2C0%2C0%2C-.25%2C1%2C-.1%2C0%2C0%2C0%2C-.25%2C1%2C.1%2C0%2C0%2C0%2C.25%2C1%2C-.1%2C0%2C0%2C0%2C.45%2C1%2C.1%2C0%2C0%2C0%2C.45%2C1%2C.1%2C0%2C0%2C0%2C.45%2C-1%2C-.8%2C0%2C0%2C0%2C.45%2C-1%2C-.8%2C0%2C0%2C0%2C.05%2C-1%2C.8%2C0%2C0%2C0%2C.25%2C-1%2C-.8%2C0%2C0%2C0%2C-.15%2C-1%2C.8%2C0%2C0%2C0%2C-.15%2C-1%2C.8%2C0%2C0%2C0%2C-.25%2C-1%2C-.8%2C0%2C0%2C0%2C-.25%2C-1%2C-.8%2C0%2C0%2C0%2C.05%2C-1%2C.8%2C0%2C0%2C0%2C-.45%2C-1%2C-.8%2C0%2C0%2C0%2C-.15%2C-1%2C.8%2C0%2C0%2C0%2C-.15%2C-1%2C.8%2C0%2C0%2C0%2C.13%2C-1%2C-.3%2C0%2C0%2C0%2C.13%2C-1%2C-.3%2C0%2C0%2C0%2C.07%2C-1%2C-.1%2C0%2C0%2C0%2C-.33%2C-1%2C-.3%2C0%2C0%2C0%2C-.27%2C-1%2C-.1%2C0%2C0%2C0%2C-.27%2C-1%2C-.1%2C0%2C0%2C0%2C-.45%2C.6%2C1%2C0%2C0%2C0%2C-.45%2C.6%2C1%2C0%2C0%2C0%2C-.45%2C.4%2C1%2C0%2C0%2C0%2C-.25%2C.8%2C1%2C0%2C0%2C0%2C-.25%2C.4%2C1%2C0%2C0%2C0%2C-.25%2C.4%2C1%2C0%2C0%2C0%2C-.25%2C.8%2C1%2C0%2C0%2C0%2C-.25%2C.8%2C1%2C0%2C0%2C0%2C-.25%2C.6%2C1%2C0%2C0%2C0%2C.25%2C.8%2C1%2C0%2C0%2C0%2C.45%2C.6%2C1%2C0%2C0%2C0%2C.45%2C.6%2C1%2C0%2C0%2C0%2C.25%2C.8%2C1%2C0%2C0%2C0%2C.25%2C.8%2C1%2C0%2C0%2C0%2C.25%2C-.1%2C1%2C0%2C0%2C0%2C.45%2C.6%2C1%2C0%2C0%2C0%2C.45%2C.1%2C1%2C0%2C0%2C0%2C.45%2C.1%2C1%2C0%2C0%2C0%2C-.25%2C.1%2C1%2C0%2C0%2C0%2C-.25%2C.1%2C1%2C0%2C0%2C0%2C-.45%2C-.1%2C1%2C0%2C0%2C0%2C.25%2C.1%2C1%2C0%2C0%2C0%2C.25%2C-.1%2C1%2C0%2C0%2C0%2C.25%2C-.1%2C1%2C0%2C0%2C0%2C-.45%2C-.1%2C1%2C0%2C0%2C0%2C-.45%2C-.1%2C1%2C0%2C0%2C0%2C-.45%2C-.6%2C1%2C0%2C0%2C0%2C-.25%2C-.1%2C1%2C0%2C0%2C0%2C-.25%2C-.8%2C1%2C0%2C0%2C0%2C-.25%2C-.8%2C1%2C0%2C0%2C0%2C-.25%2C-.6%2C1%2C0%2C0%2C0%2C-.25%2C-.6%2C1%2C0%2C0%2C0%2C-.25%2C-.8%2C1%2C0%2C0%2C0%2C.45%2C-.6%2C1%2C0%2C0%2C0%2C.25%2C-.8%2C1%2C0%2C0%2C0%2C.25%2C-.8%2C1%2C0%2C0%2C0%2C.25%2C-.4%2C1%2C0%2C0%2C0%2C.25%2C-.4%2C1%2C0%2C0%2C0%2C.25%2C-.6%2C1%2C0%2C0%2C0%2C.45%2C-.4%2C1%2C0%2C0%2C0%2C.45%2C-.6%2C1%2C0%2C0%2C0%2C.45%2C-.6%2C1%2C0%2C0%2C0%2C-.1%2C-.8%2C-1%2C0%2C0%2C0%2C-.1%2C-.8%2C-1%2C0%2C0%2C0%2C-.1%2C.8%2C-1%2C0%2C0%2C0%2C.1%2C-.8%2C-1%2C0%2C0%2C0%2C.1%2C.8%2C-1%2C0%2C0%2C0%2C.1%2C.8%2C-1%2C0%2C0%2C0%2C-1%2C-.45%2C-.8%2C0%2C0%2C0%2C-1%2C-.45%2C-.8%2C0%2C0%2C0%2C-1%2C-.45%2C.8%2C0%2C0%2C0%2C-1%2C-.25%2C-.8%2C0%2C0%2C0%2C-1%2C-.25%2C.8%2C0%2C0%2C0%2C-1%2C-.25%2C.8%2C0%2C0%2C0%2C-1%2C-.25%2C-.8%2C0%2C0%2C0%2C-1%2C-.25%2C-.8%2C0%2C0%2C0%2C-1%2C-.25%2C-.6%2C0%2C0%2C0%2C-1%2C.45%2C-.8%2C0%2C0%2C0%2C-1%2C.45%2C-.6%2C0%2C0%2C0%2C-1%2C.45%2C-.6%2C0%2C0%2C0%2C1%2C.45%2C-.8%2C0%2C0%2C0%2C1%2C.45%2C-.8%2C0%2C0%2C0%2C1%2C.45%2C.8%2C0%2C0%2C0%2C1%2C.25%2C-.8%2C0%2C0%2C0%2C1%2C.25%2C.8%2C0%2C0%2C0%2C1%2C.25%2C.8%2C0%2C0%2C0%2C1%2C.25%2C.6%2C0%2C0%2C0%2C1%2C.25%2C.6%2C0%2C0%2C0%2C1%2C.25%2C.8%2C0%2C0%2C0%2C1%2C-.45%2C.6%2C0%2C0%2C0%2C1%2C-.25%2C.8%2C0%2C0%2C0%2C1%2C-.25%2C.8%2C0%2C0%2C0%2C1%2C-.25%2C.1%2C0%2C0%2C0%2C1%2C-.25%2C.1%2C0%2C0%2C0%2C1%2C-.25%2C.6%2C0%2C0%2C0%2C1%2C-.45%2C.1%2C0%2C0%2C0%2C1%2C-.45%2C.6%2C0%2C0%2C0%2C1%2C-.45%2C.6%2C0%2C0%2C0%2C1%2C.25%2C-.1%2C0%2C0%2C0%2C1%2C.25%2C-.1%2C0%2C0%2C0%2C1%2C.25%2C.1%2C0%2C0%2C0%2C1%2C-.25%2C-.1%2C0%2C0%2C0%2C1%2C-.45%2C.1%2C0%2C0%2C0%2C1%2C-.45%2C.1%2C0%2C0%2C0%2C1%2C-.25%2C-.8%2C0%2C0%2C0%2C1%2C-.25%2C-.8%2C0%2C0%2C0%2C1%2C-.05%2C-.1%2C0%2C0%2C0%2C1%2C-.45%2C-.8%2C0%2C0%2C0%2C1%2C-.25%2C-.1%2C0%2C0%2C0%2C1%2C-.25%2C-.1%2C0%2C0%2C0%5D)%3Bimport%7Bmat4%20as%20P%2Cvec3%20as%20L%7Dfrom%22gl-matrix%22%3Bvar%20k%3Dclass%7Bconstructor(t%2Ci%2Cs%2Cn%2Cr%3Dnull%2Ca%3Dnull)%7Be(this%2C%22sphereIdx%22%2C%5B%5D)%2Ce(this%2C%22sphereVtx%22%2C%5B%5D)%2Ce(this%2C%22renderShaders%22%2C%5B%5D)%2Ce(this%2C%22isVisible%22%2C!0)%2Ce(this%2C%22isPickable%22%2C!0)%2Ce(this%2C%22vertexBuffer%22)%2Ce(this%2C%22indexCount%22)%2Ce(this%2C%22indexBuffer%22)%2Ce(this%2C%22vao%22)%2Ce(this%2C%22mode%22)%2Ce(this%2C%22glFlags%22%2C0)%2Ce(this%2C%22id%22)%2Ce(this%2C%22colorId%22)%2Ce(this%2C%22modelMatrix%22%2CP.create())%2Ce(this%2C%22scale%22%2C%5B1%2C1%2C1%5D)%2Ce(this%2C%22position%22%2C%5B0%2C0%2C0%5D)%2Ce(this%2C%22rotation%22%2C%5B0%2C0%2C0%5D)%2Ce(this%2C%22rotationRadians%22%2C0)%2Ce(this%2C%22extentsMin%22%2C%5B%5D)%2Ce(this%2C%22extentsMax%22%2C%5B%5D)%2Ce(this%2C%22furthestVertexFromOrigin%22)%2Ce(this%2C%22originNegate%22)%2Ce(this%2C%22fieldOfViewDeObliqueMM%22)%2Ce(this%2C%22mm%22)%2Cthis.vertexBuffer%3Di%2Cthis.indexCount%3Dn%2Cthis.indexBuffer%3Dr%2Cthis.vao%3Da%2Cthis.mode%3Ds%2Cthis.id%3Dt%2Cthis.colorId%3D%5B(255%26t)%2F255%2C(t%3E%3E8%26255)%2F255%2C(t%3E%3E16%26255)%2F255%2C(t%3E%3E24%26255)%2F255%5D%7D%7D%3Be(k%2C%22BLEND%22%2C1)%2Ce(k%2C%22CULL_FACE%22%2C2)%2Ce(k%2C%22CULL_FRONT%22%2C4)%2Ce(k%2C%22CULL_BACK%22%2C8)%2Ce(k%2C%22ENABLE_DEPTH_TEST%22%2C16)%2Ce(k%2C%22generateCrosshairs%22%2C(function(t%2Ce%2Ci%2Cs%2Cn%2Cr%2Ca%3D20%2Co%3D0)%7Bconst%20l%3Dk.generateCrosshairsGeometry(t%2Ci%2Cs%2Cn%2Cr%2Ca%2Co)%3Breturn%20new%20k(e%2Cl.vertexBuffer%2Ct.TRIANGLES%2Cl.indexCount%2Cl.indexBuffer%2Cl.vao)%7D))%2Ce(k%2C%22generateCrosshairsGeometry%22%2C(function(t%2Ce%2Ci%2Cs%2Cn%2Cr%3D20%2Ca%3D0)%7Bconst%20o%3D%5B%5D%2Cl%3D%5B%5D%2Ch%3Dn*a%3Bif(h%3C%3D0)%7Blet%20t%3DL.fromValues(i%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D)%2Ca%3DL.fromValues(s%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D)%3Bk.makeCylinder(o%2Cl%2Ct%2Ca%2Cn%2Cr)%2Ct%3DL.fromValues(e%5B0%5D%2Ci%5B1%5D%2Ce%5B2%5D)%2Ca%3DL.fromValues(e%5B0%5D%2Cs%5B1%5D%2Ce%5B2%5D)%2Ck.makeCylinder(o%2Cl%2Ct%2Ca%2Cn%2Cr)%2Ct%3DL.fromValues(e%5B0%5D%2Ce%5B1%5D%2Ci%5B2%5D)%2Ca%3DL.fromValues(e%5B0%5D%2Ce%5B1%5D%2Cs%5B2%5D)%2Ck.makeCylinder(o%2Cl%2Ct%2Ca%2Cn%2Cr)%7Delse%7Blet%20t%3DL.fromValues(i%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D)%2Ca%3DL.fromValues(e%5B0%5D-h%2Ce%5B1%5D%2Ce%5B2%5D)%3Bk.makeCylinder(o%2Cl%2Ct%2Ca%2Cn%2Cr%2C!1)%2Ct%3DL.fromValues(e%5B0%5D%2Bh%2Ce%5B1%5D%2Ce%5B2%5D)%2Ca%3DL.fromValues(s%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D)%2Ck.makeCylinder(o%2Cl%2Ct%2Ca%2Cn%2Cr%2C!1)%2Ct%3DL.fromValues(e%5B0%5D%2Ci%5B1%5D%2Ce%5B2%5D)%2Ca%3DL.fromValues(e%5B0%5D%2Ce%5B1%5D-h%2Ce%5B2%5D)%2Ck.makeCylinder(o%2Cl%2Ct%2Ca%2Cn%2Cr%2C!1)%2Ct%3DL.fromValues(e%5B0%5D%2Ce%5B1%5D%2Bh%2Ce%5B2%5D)%2Ca%3DL.fromValues(e%5B0%5D%2Cs%5B1%5D%2Ce%5B2%5D)%2Ck.makeCylinder(o%2Cl%2Ct%2Ca%2Cn%2Cr%2C!1)%2Ct%3DL.fromValues(e%5B0%5D%2Ce%5B1%5D%2Ci%5B2%5D)%2Ca%3DL.fromValues(e%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D-h)%2Ck.makeCylinder(o%2Cl%2Ct%2Ca%2Cn%2Cr%2C!1)%2Ct%3DL.fromValues(e%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D%2Bh)%2Ca%3DL.fromValues(e%5B0%5D%2Ce%5B1%5D%2Cs%5B2%5D)%2Ck.makeCylinder(o%2Cl%2Ct%2Ca%2Cn%2Cr%2C!1)%7Dconst%20c%3Dt.createBuffer()%3Bif(null%3D%3D%3Dc)throw%20new%20Error(%22could%20not%20instantiate%20vertex%20buffer%22)%3Bt.bindBuffer(t.ARRAY_BUFFER%2Cc)%2Ct.bufferData(t.ARRAY_BUFFER%2Cnew%20Float32Array(o)%2Ct.STATIC_DRAW)%3Bconst%20d%3Dt.createBuffer()%3Bif(null%3D%3D%3Dd)throw%20new%20Error(%22could%20not%20instantiate%20index%20buffer%22)%3Bt.bindBuffer(t.ELEMENT_ARRAY_BUFFER%2Cd)%2Ct.bufferData(t.ELEMENT_ARRAY_BUFFER%2Cnew%20Uint32Array(l)%2Ct.STATIC_DRAW)%3Bconst%20m%3Dt.createVertexArray()%3Breturn%20t.bindVertexArray(m)%2Ct.bindBuffer(t.ELEMENT_ARRAY_BUFFER%2Cd)%2Ct.bindBuffer(t.ARRAY_BUFFER%2Cc)%2Ct.enableVertexAttribArray(0)%2Ct.vertexAttribPointer(0%2C3%2Ct.FLOAT%2C!1%2C0%2C0)%2Ct.bindVertexArray(null)%2C%7BvertexBuffer%3Ac%2CindexBuffer%3Ad%2CindexCount%3Al.length%2Cvao%3Am%7D%7D))%2Ce(k%2C%22getFirstPerpVector%22%2C(function(t)%7Bconst%20e%3DL.fromValues(0%2C0%2C0)%3Breturn%200%3D%3D%3Dt%5B0%5D%3Fe%5B0%5D%3D1%3A0%3D%3D%3Dt%5B1%5D%3Fe%5B1%5D%3D1%3A0%3D%3D%3Dt%5B2%5D%3Fe%5B2%5D%3D1%3A(e%5B0%5D%3Dt%5B2%5D%2Ce%5B1%5D%3Dt%5B2%5D%2Ce%5B2%5D%3D-(t%5B0%5D%2Bt%5B1%5D)%2CL.normalize(e%2Ce))%2Ce%7D))%2Ce(k%2C%22subdivide%22%2C(function(t%2Ce)%7Blet%20i%3Dt.length%2F3%2Cs%3De.length%2F3%3Bconst%20n%3Ds%2Cr%3DL.create()%2Ca%3DL.create()%3Bfor(let%20o%3D0%3Bo%3Cn%3Bo%2B%2B)%7Bconst%20n%3De%5B3*o%2B0%5D%2Cl%3De%5B3*o%2B1%5D%2Ch%3De%5B3*o%2B2%5D%2Cc%3DL.fromValues(t%5B3*n%2B0%5D%2Ct%5B3*n%2B1%5D%2Ct%5B3*n%2B2%5D)%2Cd%3DL.fromValues(t%5B3*l%2B0%5D%2Ct%5B3*l%2B1%5D%2Ct%5B3*l%2B2%5D)%2Cm%3DL.fromValues(t%5B3*h%2B0%5D%2Ct%5B3*h%2B1%5D%2Ct%5B3*h%2B2%5D)%3BL.add(r%2Cc%2Cd)%2CL.normalize(a%2Cr)%2Ct.push(...a)%2CL.add(r%2Cd%2Cm)%2CL.normalize(a%2Cr)%2Ct.push(...a)%2CL.add(r%2Cc%2Cm)%2CL.normalize(a%2Cr)%2Ct.push(...a)%3Blet%20u%3D%5Bi%2Ci%2B1%2Ci%2B2%5D%3Be.push(...u)%2Cu%3D%5Bn%2Ci%2Ci%2B2%5D%2Ce.push(...u)%2Cu%3D%5Bi%2Cl%2Ci%2B1%5D%2Ce.push(...u)%2Ce%5B3*o%2B0%5D%3Di%2B2%2Ce%5B3*o%2B1%5D%3Di%2B1%2Ce%5B3*o%2B2%5D%3Dh%2Cs%2B%3D3%2Ci%2B%3D3%7D%7D))%2Ce(k%2C%22weldVertices%22%2C(function(t%2Ce)%7Bconst%20i%3Dt.length%2F3%3Blet%20s%3D0%3Bconst%20n%3Dnew%20Int32Array(i)%3Bfor(let%20e%3D0%3Be%3Ci-1%3Be%2B%2B)%7Bif(0!%3D%3Dn%5Be%5D)continue%3Bn%5Be%5D%3Ds%3Blet%20r%3D3*e%3Bconst%20a%3Dt%5Br%5D%2Co%3Dt%5Br%2B1%5D%2Cl%3Dt%5Br%2B2%5D%3Bfor(let%20h%3De%2B1%3Bh%3Ci%3Bh%2B%2B)r%2B%3D3%2Ca%3D%3D%3Dt%5Br%5D%26%26o%3D%3D%3Dt%5Br%2B1%5D%26%26l%3D%3D%3Dt%5Br%2B2%5D%26%26(n%5Bh%5D%3Ds)%3Bs%2B%2B%7Dif(s%3D%3D%3Di)return%20t%3Bconst%20r%3De.length%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)e%5Bt%5D%3Dn%5Be%5Bt%5D%5D%3Bconst%20a%3Dt.slice(0%2C3*s-1)%3Bfor(let%20e%3D0%3Be%3Ci-1%3Be%2B%2B)%7Bconst%20i%3D3*e%2Cs%3D3*n%5Be%5D%3Ba%5Bs%5D%3Dt%5Bi%5D%2Ca%5Bs%2B1%5D%3Dt%5Bi%2B1%5D%2Ca%5Bs%2B2%5D%3Dt%5Bi%2B2%5D%7Dreturn%20a%7D))%2Ce(k%2C%22makeSphere%22%2C(function(t%2Ce%2Ci%2Cs%3D%5B0%2C0%2C0%5D)%7Blet%20n%3D%5B0%2C0%2C1%2C.894%2C0%2C.447%2C.276%2C.851%2C.447%2C-.724%2C.526%2C.447%2C-.724%2C-.526%2C.447%2C.276%2C-.851%2C.447%2C.724%2C.526%2C-.447%2C-.276%2C.851%2C-.447%2C-.894%2C0%2C-.447%2C-.276%2C-.851%2C-.447%2C.724%2C-.526%2C-.447%2C0%2C0%2C-1%5D%3Bconst%20r%3D%5B0%2C1%2C2%2C0%2C2%2C3%2C0%2C3%2C4%2C0%2C4%2C5%2C0%2C5%2C1%2C7%2C6%2C11%2C8%2C7%2C11%2C9%2C8%2C11%2C10%2C9%2C11%2C6%2C10%2C11%2C6%2C2%2C1%2C7%2C3%2C2%2C8%2C4%2C3%2C9%2C5%2C4%2C10%2C1%2C5%2C6%2C7%2C2%2C7%2C8%2C3%2C8%2C9%2C4%2C9%2C10%2C5%2C10%2C6%2C1%5D%3Bk.subdivide(n%2Cr)%2Ck.subdivide(n%2Cr)%2Cn%3Dk.weldVertices(n%2Cr)%3Bfor(let%20t%3D0%3Bt%3Cn.length%3Bt%2B%2B)n%5Bt%5D%3Dn%5Bt%5D*i%3Bconst%20a%3Dn.length%2F3%3Blet%20o%3D0%3Bfor(let%20t%3D0%3Bt%3Ca%3Bt%2B%2B)n%5Bo%5D%3Dn%5Bo%5D%2Bs%5B0%5D%2Co%2B%2B%2Cn%5Bo%5D%3Dn%5Bo%5D%2Bs%5B1%5D%2Co%2B%2B%2Cn%5Bo%5D%3Dn%5Bo%5D%2Bs%5B2%5D%2Co%2B%2B%3Bconst%20l%3DMath.floor(t.length%2F3)%3Bfor(let%20t%3D0%3Bt%3Cr.length%3Bt%2B%2B)r%5Bt%5D%3Dr%5Bt%5D%2Bl%3Be.push(...r)%2Ct.push(...n)%7D))%2Ce(k%2C%22makeCylinder%22%2C(function(t%2Ce%2Ci%2Cs%2Cn%2Cr%3D20%2Ca%3D!0)%7Br%3C3%26%26(r%3D3)%3Bconst%20o%3DL.create()%3BL.subtract(o%2Cs%2Ci)%2CL.normalize(o%2Co)%3Bconst%20l%3Dk.getFirstPerpVector(o)%2Ch%3DL.create()%3BL.cross(h%2Co%2Cl)%2CL.normalize(h%2Ch)%3Blet%20c%3D2*r%2Cd%3D2*r%3Ba%26%26(d%2B%3D2*r%2Cc%2B%3D2)%3Bconst%20m%3DMath.floor(t.length%2F3)%2Cu%3Dnew%20Uint32Array(3*d)%2CA%3Dnew%20Float32Array(3*c)%3Bfunction%20f(t%2Ce)%7BA%5B3*t%2B0%5D%3De%5B0%5D%2CA%5B3*t%2B1%5D%3De%5B1%5D%2CA%5B3*t%2B2%5D%3De%5B2%5D%7Dfunction%20g(t%2Ce%2Ci%2Cs)%7Bu%5B3*t%2B0%5D%3De%2Bm%2Cu%5B3*t%2B1%5D%3Di%2Bm%2Cu%5B3*t%2B2%5D%3Ds%2Bm%7Dconst%20p%3D2*r%2Cv%3Dp%2B1%3Ba%26%26(f(p%2Ci)%2Cf(v%2Cs))%3Bconst%20x%3DL.create()%2Cw%3DL.create()%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)%7Bconst%20e%3DMath.cos(t%2Fr*2*Math.PI)%2Co%3DMath.sin(t%2Fr*2*Math.PI)%3Bx%5B0%5D%3Dn*(e*l%5B0%5D%2Bo*h%5B0%5D)%2Cx%5B1%5D%3Dn*(e*l%5B1%5D%2Bo*h%5B1%5D)%2Cx%5B2%5D%3Dn*(e*l%5B2%5D%2Bo*h%5B2%5D)%2CL.add(w%2Ci%2Cx)%2Cf(t%2Cw)%2CL.add(w%2Cs%2Cx)%2Cf(t%2Br%2Cw)%3Blet%20c%3D0%3Bt%3Cr-1%26%26(c%3Dt%2B1)%2Cg(2*t%2Ct%2Cc%2Ct%2Br)%2Cg(2*t%2B1%2Cc%2Cc%2Br%2Ct%2Br)%2Ca%26%26(g(2*r%2Bt%2Ct%2Cp%2Cc)%2Cg(2*r%2Bt%2Br%2Cv%2Ct%2Br%2Cc%2Br))%7De.push(...u)%2Ct.push(...A)%7D))%2Ce(k%2C%22makeColoredCylinder%22%2C(function(t%2Ce%2Ci%2Cs%2Cn%2Cr%2Ca%3D%5B192%2C0%2C0%2C255%5D%2Co%3D20%2Cl%3D!1)%7Blet%20h%3Dt.length%2F3%3Bk.makeCylinder(t%2Ce%2Cs%2Cn%2Cr%2Co%2Cl)%2Ch%3Dt.length%2F3-h%3Bconst%20c%3D%5B%5D%3Bfor(let%20t%3D0%3Bt%3C4*h-1%3Bt%2B%3D4)c%5Bt%5D%3Da%5B0%5D%2Cc%5Bt%2B1%5D%3Da%5B1%5D%2Cc%5Bt%2B2%5D%3Da%5B2%5D%2Cc%5Bt%2B3%5D%3Da%5B3%5D%3Bi.push(...c)%7D))%2Ce(k%2C%22makeColoredSphere%22%2C(function(t%2Ce%2Ci%2Cs%2Cn%3D%5B0%2C0%2C0%5D%2Cr%3D%5B0%2C0%2C192%2C255%5D)%7Blet%20a%3Dt.length%2F3%3Bk.makeSphere(t%2Ce%2Cs%2Cn)%2Ca%3Dt.length%2F3-a%3Bconst%20o%3D%5B%5D%3Bfor(let%20t%3D0%3Bt%3C4*a-1%3Bt%2B%3D4)o%5Bt%5D%3Dr%5B0%5D%2Co%5Bt%2B1%5D%3Dr%5B1%5D%2Co%5Bt%2B2%5D%3Dr%5B2%5D%2Co%5Bt%2B3%5D%3Dr%5B3%5D%3Bi.push(...o)%7D))%3Bvar%20O%3Dk%3Bimport%7Bvec3%20as%20Y%2Cvec4%20as%20G%7Dfrom%22gl-matrix%22%3Bimport%7Bv4%20as%20K%7Dfrom%22%40lukeed%2Fuuid%22%3Bvar%20W%3D%7B%7D%3B((e%2Ci)%3D%3E%7Bfor(var%20s%20in%20i)t(e%2Cs%2C%7Bget%3Ai%5Bs%5D%2Cenumerable%3A!0%7D)%7D)(W%2C%7B%24itksnap%3A()%3D%3EH%2C%24slicer3d%3A()%3D%3EQ%2Cactc%3A()%3D%3Ez%2Cafni_blues_inv%3A()%3D%3Ete%2Cafni_reds_inv%3A()%3D%3Eee%2Cbcgwhw%3A()%3D%3EX%2Cbcgwhw_dark%3A()%3D%3Eq%2Cblue%3A()%3D%3E%24%2Cblue2cyan%3A()%3D%3EJ%2Cblue2magenta%3A()%3D%3EZ%2Cblue2red%3A()%3D%3Ej%2Cbluegrn%3A()%3D%3E_%2Cbone%3A()%3D%3Ett%2Cbronze%3A()%3D%3Eet%2Ccet_l17%3A()%3D%3Eit%2Ccividis%3A()%3D%3Est%2Ccool%3A()%3D%3Ent%2Ccopper%3A()%3D%3Eat%2Ccopper2%3A()%3D%3Ert%2Cct_airways%3A()%3D%3Eot%2Cct_artery%3A()%3D%3Elt%2Cct_bones%3A()%3D%3Eht%2Cct_brain%3A()%3D%3Edt%2Cct_brain_gray%3A()%3D%3Ect%2Cct_cardiac%3A()%3D%3Emt%2Cct_head%3A()%3D%3Eut%2Cct_kidneys%3A()%3D%3EAt%2Cct_liver%3A()%3D%3Eft%2Cct_muscles%3A()%3D%3Egt%2Cct_scalp%3A()%3D%3Ept%2Cct_skull%3A()%3D%3Evt%2Cct_soft%3A()%3D%3Ext%2Cct_soft_tissue%3A()%3D%3Ewt%2Cct_surface%3A()%3D%3ECt%2Cct_vessels%3A()%3D%3Ebt%2Cct_w_contrast%3A()%3D%3Eyt%2Ccubehelix%3A()%3D%3EIt%2Celectric_blue%3A()%3D%3EMt%2Cfreesurfer%3A()%3D%3EDt%2Cge_color%3A()%3D%3EFt%2Cgold%3A()%3D%3ETt%2Cgray%3A()%3D%3EVt%2Cgreen%3A()%3D%3ESt%2Cgreen2cyan%3A()%3D%3EEt%2Cgreen2orange%3A()%3D%3EBt%2Chot%3A()%3D%3ERt%2Chotiron%3A()%3D%3EUt%2Chsv%3A()%3D%3ENt%2Cinferno%3A()%3D%3EPt%2Cjet%3A()%3D%3ELt%2Clinspecer%3A()%3D%3Ekt%2Cmagma%3A()%3D%3EOt%2Cmako%3A()%3D%3EYt%2Cnih%3A()%3D%3EGt%2Cplasma%3A()%3D%3EKt%2Crandom%3A()%3D%3EWt%2Cred%3A()%3D%3EHt%2Credyell%3A()%3D%3EQt%2Crocket%3A()%3D%3Ezt%2Croi_i256%3A()%3D%3Eie%2Csurface%3A()%3D%3Eqt%2Cturbo%3A()%3D%3EXt%2Cviolet%3A()%3D%3Ejt%2Cviridis%3A()%3D%3EZt%2Cwarm%3A()%3D%3EJt%2Cwinter%3A()%3D%3E_t%2Cx_rain%3A()%3D%3E%24t%7D)%3Bvar%20H%3D%7BR%3A%5B0%2C255%2C0%2C0%2C255%2C0%2C255%2C255%2C0%2C205%2C210%2C102%2C0%2C0%2C46%2C255%2C106%2C221%2C233%2C165%2C255%2C147%2C218%2C75%2C255%2C60%2C255%2C255%2C218%2C0%2C188%2C255%2C255%2C222%2C127%2C139%2C124%2C255%2C70%2C0%2C238%2C238%2C240%2C245%2C184%2C32%2C255%2C25%2C112%2C34%2C248%2C245%2C255%2C144%2C173%2C65%2C255%2C250%2C128%2C50%2C244%2C255%2C123%2C255%2C173%2C255%2C127%2C255%2C143%2C220%2C253%2C255%2C0%2C0%2C128%2C255%2C250%2C148%2C178%2C255%2C135%2C100%2C240%2C250%2C255%2C107%2C135%2C0%2C139%2C245%2C186%2C255%2C255%2C0%2C210%2C255%2C47%2C72%2C175%2C128%2C176%2C255%2C139%2C240%2C255%2C216%2C119%2C219%2C72%2C255%2C199%2C154%2C189%2C240%2C230%2C0%2C85%2C64%2C153%2C205%2C250%2C95%2C0%2C255%2C224%2C176%2C138%2C30%2C240%2C152%2C160%5D%2CG%3A%5B0%2C0%2C255%2C0%2C255%2C255%2C0%2C239%2C0%2C133%2C180%2C205%2C0%2C139%2C139%2C228%2C90%2C160%2C150%2C42%2C250%2C112%2C112%2C0%2C182%2C179%2C235%2C228%2C165%2C128%2C143%2C105%2C218%2C184%2C255%2C69%2C252%2C255%2C130%2C100%2C130%2C232%2C255%2C222%2C134%2C178%2C20%2C25%2C128%2C139%2C248%2C255%2C160%2C238%2C255%2C105%2C99%2C240%2C0%2C205%2C164%2C255%2C104%2C165%2C216%2C192%2C255%2C140%2C188%2C20%2C245%2C250%2C206%2C255%2C0%2C250%2C128%2C0%2C34%2C127%2C206%2C149%2C230%2C235%2C245%2C142%2C206%2C0%2C0%2C245%2C85%2C228%2C222%2C191%2C105%2C248%2C79%2C61%2C238%2C128%2C224%2C240%2C0%2C255%2C215%2C191%2C136%2C112%2C209%2C0%2C21%2C205%2C183%2C248%2C230%2C250%2C107%2C224%2C50%2C92%2C250%2C158%2C128%2C69%2C255%2C196%2C43%2C144%2C128%2C251%2C82%5D%2CB%3A%5B0%2C0%2C0%2C255%2C0%2C255%2C255%2C213%2C205%2C63%2C140%2C170%2C128%2C139%2C87%2C225%2C205%2C221%2C122%2C42%2C250%2C219%2C214%2C130%2C193%2C113%2C205%2C196%2C32%2C128%2C143%2C180%2C185%2C135%2C0%2C19%2C0%2C224%2C180%2C0%2C238%2C170%2C240%2C179%2C11%2C170%2C147%2C112%2C144%2C34%2C255%2C250%2C122%2C144%2C47%2C225%2C71%2C230%2C0%2C50%2C96%2C240%2C238%2C0%2C230%2C203%2C212%2C0%2C143%2C60%2C230%2C240%2C209%2C127%2C128%2C205%2C114%2C211%2C34%2C80%2C235%2C237%2C140%2C215%2C238%2C35%2C250%2C139%2C139%2C220%2C211%2C181%2C173%2C255%2C30%2C220%2C79%2C139%2C238%2C0%2C230%2C245%2C0%2C255%2C0%2C216%2C153%2C147%2C204%2C255%2C133%2C50%2C107%2C255%2C250%2C154%2C47%2C208%2C204%2C92%2C210%2C160%2C0%2C0%2C255%2C222%2C226%2C255%2C128%2C152%2C45%5D%2CA%3A%5B0%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%5D%2CI%3A%5B0%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2C30%2C31%2C32%2C33%2C34%2C35%2C36%2C37%2C38%2C39%2C40%2C41%2C42%2C43%2C44%2C45%2C46%2C47%2C48%2C49%2C50%2C51%2C52%2C53%2C54%2C55%2C56%2C57%2C58%2C59%2C60%2C61%2C62%2C63%2C64%2C65%2C66%2C67%2C68%2C69%2C70%2C71%2C72%2C73%2C74%2C75%2C76%2C77%2C78%2C79%2C80%2C81%2C82%2C83%2C84%2C85%2C86%2C87%2C88%2C89%2C90%2C91%2C92%2C93%2C94%2C95%2C96%2C97%2C98%2C99%2C100%2C101%2C102%2C103%2C104%2C105%2C106%2C107%2C108%2C109%2C110%2C111%2C112%2C113%2C114%2C115%2C116%2C117%2C118%2C119%2C120%2C121%2C122%2C123%2C124%2C125%2C126%2C127%2C128%2C129%2C130%5D%7D%2CQ%3D%7Blabels%3A%5B%22background%22%2C%22tissue%22%2C%22bone%22%2C%22skin%22%2C%22connective%20tissue%22%2C%22blood%22%2C%22organ%22%2C%22mass%22%2C%22muscle%22%2C%22foreign%20object%22%2C%22waste%22%2C%22teeth%22%2C%22fat%22%2C%22gray%20matter%22%2C%22white%20matter%22%2C%22nerve%22%2C%22vein%22%2C%22artery%22%2C%22capillary%22%2C%22ligament%22%2C%22tendon%22%2C%22cartilage%22%2C%22meniscus%22%2C%22lymph%20node%22%2C%22lymphatic%20vessel%22%2C%22cerebro-spinal%20fluid%22%2C%22bile%22%2C%22urine%22%2C%22feces%22%2C%22gas%22%2C%22fluid%22%2C%22edema%22%2C%22bleeding%22%2C%22necrosis%22%2C%22clot%22%2C%22embolism%22%2C%22head%22%2C%22central%20nervous%20system%22%2C%22brain%22%2C%22gray%20matter%20of%20brain%22%2C%22telencephalon%22%2C%22cerebral%20cortex%22%2C%22right%20frontal%20lobe%22%2C%22left%20frontal%20lobe%22%2C%22right%20temporal%20lobe%22%2C%22left%20temporal%20lobe%22%2C%22right%20parietal%20lobe%22%2C%22left%20parietal%20lobe%22%2C%22right%20occipital%20lobe%22%2C%22left%20occipital%20lobe%22%2C%22right%20insular%20lobe%22%2C%22left%20insular%20lobe%22%2C%22right%20limbic%20lobe%22%2C%22left%20limbic%20lobe%22%2C%22right%20striatum%22%2C%22left%20striatum%22%2C%22right%20caudate%20nucleus%22%2C%22left%20caudate%20nucleus%22%2C%22right%20putamen%22%2C%22left%20putamen%22%2C%22right%20pallidum%22%2C%22left%20pallidum%22%2C%22right%20amygdaloid%20complex%22%2C%22left%20amygdaloid%20complex%22%2C%22diencephalon%22%2C%22thalamus%22%2C%22right%20thalamus%22%2C%22left%20thalamus%22%2C%22pineal%20gland%22%2C%22midbrain%22%2C%22substantia%20nigra%22%2C%22right%20substantia%20nigra%22%2C%22left%20substantia%20nigra%22%2C%22cerebral%20white%20matter%22%2C%22right%20superior%20longitudinal%20fasciculus%22%2C%22left%20superior%20longitudinal%20fasciculus%22%2C%22right%20inferior%20longitudinal%20fasciculus%22%2C%22left%20inferior%20longitudinal%20fasciculus%22%2C%22right%20arcuate%20fasciculus%22%2C%22left%20arcuate%20fasciculus%22%2C%22right%20uncinate%20fasciculus%22%2C%22left%20uncinate%20fasciculus%22%2C%22right%20cingulum%20bundle%22%2C%22left%20cingulum%20bundle%22%2C%22projection%20fibers%22%2C%22right%20corticospinal%20tract%22%2C%22left%20corticospinal%20tract%22%2C%22right%20optic%20radiation%22%2C%22left%20optic%20radiation%22%2C%22right%20medial%20lemniscus%22%2C%22left%20medial%20lemniscus%22%2C%22right%20superior%20cerebellar%20peduncle%22%2C%22left%20superior%20cerebellar%20peduncle%22%2C%22right%20middle%20cerebellar%20peduncle%22%2C%22left%20middle%20cerebellar%20peduncle%22%2C%22right%20inferior%20cerebellar%20peduncle%22%2C%22left%20inferior%20cerebellar%20peduncle%22%2C%22optic%20chiasm%22%2C%22right%20optic%20tract%22%2C%22left%20optic%20tract%22%2C%22right%20fornix%22%2C%22left%20fornix%22%2C%22commissural%20fibers%22%2C%22corpus%20callosum%22%2C%22posterior%20commissure%22%2C%22cerebellar%20white%20matter%22%2C%22CSF%20space%22%2C%22ventricles%20of%20brain%22%2C%22right%20lateral%20ventricle%22%2C%22left%20lateral%20ventricle%22%2C%22right%20third%20ventricle%22%2C%22left%20third%20ventricle%22%2C%22cerebral%20aqueduct%22%2C%22fourth%20ventricle%22%2C%22subarachnoid%20space%22%2C%22spinal%20cord%22%2C%22gray%20matter%20of%20spinal%20cord%22%2C%22white%20matter%20of%20spinal%20cord%22%2C%22endocrine%20system%20of%20brain%22%2C%22pituitary%20gland%22%2C%22adenohypophysis%22%2C%22neurohypophysis%22%2C%22meninges%22%2C%22dura%20mater%22%2C%22arachnoid%22%2C%22pia%20mater%22%2C%22muscles%20of%20head%22%2C%22salivary%20glands%22%2C%22lips%22%2C%22nose%22%2C%22tongue%22%2C%22soft%20palate%22%2C%22right%20inner%20ear%22%2C%22left%20inner%20ear%22%2C%22right%20external%20ear%22%2C%22left%20external%20ear%22%2C%22right%20middle%20ear%22%2C%22left%20middle%20ear%22%2C%22right%20eyeball%22%2C%22left%20eyeball%22%2C%22skull%22%2C%22right%20frontal%20bone%22%2C%22left%20frontal%20bone%22%2C%22right%20parietal%20bone%22%2C%22left%20parietal%20bone%22%2C%22right%20temporal%20bone%22%2C%22left%20temporal%20bone%22%2C%22right%20sphenoid%20bone%22%2C%22left%20sphenoid%20bone%22%2C%22right%20ethmoid%20bone%22%2C%22left%20ethmoid%20bone%22%2C%22occipital%20bone%22%2C%22maxilla%22%2C%22right%20zygomatic%20bone%22%2C%22right%20lacrimal%20bone%22%2C%22vomer%20bone%22%2C%22right%20palatine%20bone%22%2C%22left%20palatine%20bone%22%2C%22mandible%22%2C%22neck%22%2C%22muscles%20of%20neck%22%2C%22pharynx%22%2C%22larynx%22%2C%22thyroid%20gland%22%2C%22right%20parathyroid%20glands%22%2C%22left%20parathyroid%20glands%22%2C%22skeleton%20of%20neck%22%2C%22hyoid%20bone%22%2C%22cervical%20vertebral%20column%22%2C%22thorax%22%2C%22trachea%22%2C%22bronchi%22%2C%22right%20lung%22%2C%22left%20lung%22%2C%22superior%20lobe%20of%20right%20lung%22%2C%22superior%20lobe%20of%20left%20lung%22%2C%22middle%20lobe%20of%20right%20lung%22%2C%22inferior%20lobe%20of%20right%20lung%22%2C%22inferior%20lobe%20of%20left%20lung%22%2C%22pleura%22%2C%22heart%22%2C%22right%20atrium%22%2C%22left%20atrium%22%2C%22atrial%20septum%22%2C%22ventricular%20septum%22%2C%22right%20ventricle%20of%20heart%22%2C%22left%20ventricle%20of%20heart%22%2C%22mitral%20valve%22%2C%22tricuspid%20valve%22%2C%22aortic%20valve%22%2C%22pulmonary%20valve%22%2C%22aorta%22%2C%22pericardium%22%2C%22pericardial%20cavity%22%2C%22esophagus%22%2C%22thymus%22%2C%22mediastinum%22%2C%22skin%20of%20thoracic%20wall%22%2C%22muscles%20of%20thoracic%20wall%22%2C%22skeleton%20of%20thorax%22%2C%22thoracic%20vertebral%20column%22%2C%22ribs%22%2C%22sternum%22%2C%22right%20clavicle%22%2C%22left%20clavicle%22%2C%22abdominal%20cavity%22%2C%22abdomen%22%2C%22peritoneum%22%2C%22omentum%22%2C%22peritoneal%20cavity%22%2C%22retroperitoneal%20space%22%2C%22stomach%22%2C%22duodenum%22%2C%22small%20bowel%22%2C%22colon%22%2C%22anus%22%2C%22liver%22%2C%22biliary%20tree%22%2C%22gallbladder%22%2C%22pancreas%22%2C%22spleen%22%2C%22urinary%20system%22%2C%22right%20kidney%22%2C%22left%20kidney%22%2C%22right%20ureter%22%2C%22left%20ureter%22%2C%22urinary%20bladder%22%2C%22urethra%22%2C%22right%20adrenal%20gland%22%2C%22left%20adrenal%20gland%22%2C%22female%20internal%20genitalia%22%2C%22uterus%22%2C%22right%20fallopian%20tube%22%2C%22left%20fallopian%20tube%22%2C%22right%20ovary%22%2C%22left%20ovary%22%2C%22vagina%22%2C%22male%20internal%20genitalia%22%2C%22prostate%22%2C%22right%20seminal%20vesicle%22%2C%22left%20seminal%20vesicle%22%2C%22right%20deferent%20duct%22%2C%22left%20deferent%20duct%22%2C%22skin%20of%20abdominal%20wall%22%2C%22muscles%20of%20abdominal%20wall%22%2C%22skeleton%20of%20abdomen%22%2C%22lumbar%20vertebral%20column%22%2C%22female%20external%20genitalia%22%2C%22male%20external%20genitalia%22%2C%22skeleton%20of%20upper%20limb%22%2C%22muscles%20of%20upper%20limb%22%2C%22right%20upper%20limb%22%2C%22left%20upper%20limb%22%2C%22right%20shoulder%22%2C%22left%20shoulder%22%2C%22right%20arm%22%5D%2CR%3A%5B0%2C128%2C241%2C177%2C111%2C216%2C221%2C144%2C192%2C220%2C78%2C255%2C230%2C200%2C250%2C244%2C0%2C216%2C183%2C183%2C152%2C111%2C178%2C68%2C111%2C85%2C0%2C214%2C78%2C218%2C170%2C140%2C188%2C216%2C145%2C150%2C177%2C244%2C250%2C200%2C68%2C128%2C83%2C83%2C162%2C162%2C141%2C141%2C182%2C182%2C188%2C188%2C154%2C154%2C177%2C177%2C30%2C30%2C210%2C210%2C48%2C48%2C98%2C98%2C69%2C166%2C122%2C122%2C253%2C145%2C46%2C0%2C0%2C250%2C127%2C127%2C159%2C159%2C125%2C125%2C106%2C106%2C154%2C154%2C126%2C201%2C201%2C78%2C78%2C174%2C174%2C139%2C139%2C148%2C148%2C186%2C186%2C99%2C156%2C156%2C64%2C64%2C138%2C97%2C126%2C194%2C85%2C88%2C88%2C88%2C88%2C88%2C88%2C88%2C88%2C244%2C200%2C250%2C82%2C57%2C60%2C92%2C255%2C255%2C255%2C255%2C201%2C70%2C188%2C177%2C166%2C182%2C229%2C229%2C174%2C174%2C201%2C201%2C194%2C194%2C241%2C203%2C203%2C229%2C229%2C255%2C255%2C209%2C209%2C248%2C248%2C255%2C196%2C255%2C255%2C255%2C242%2C242%2C222%2C177%2C213%2C184%2C150%2C62%2C62%2C62%2C242%2C250%2C255%2C177%2C182%2C175%2C197%2C197%2C172%2C172%2C202%2C224%2C224%2C255%2C206%2C210%2C203%2C233%2C195%2C181%2C152%2C159%2C166%2C218%2C225%2C224%2C255%2C184%2C211%2C47%2C255%2C173%2C188%2C255%2C226%2C253%2C244%2C205%2C205%2C186%2C177%2C255%2C234%2C204%2C180%2C216%2C255%2C205%2C204%2C255%2C221%2C0%2C139%2C249%2C157%2C203%2C185%2C185%2C247%2C247%2C222%2C124%2C249%2C249%2C244%2C255%2C255%2C227%2C213%2C213%2C193%2C216%2C230%2C245%2C245%2C241%2C241%2C177%2C171%2C217%2C212%2C185%2C185%2C198%2C194%2C177%2C177%2C177%2C177%2C177%5D%2CG%3A%5B0%2C174%2C214%2C122%2C184%2C101%2C130%2C238%2C104%2C245%2C63%2C250%2C220%2C200%2C250%2C214%2C151%2C101%2C156%2C214%2C189%2C184%2C212%2C172%2C197%2C188%2C145%2C230%2C63%2C255%2C250%2C224%2C65%2C191%2C60%2C98%2C122%2C214%2C250%2C200%2C131%2C174%2C146%2C146%2C115%2C115%2C93%2C93%2C166%2C166%2C135%2C135%2C150%2C150%2C140%2C140%2C111%2C111%2C157%2C157%2C129%2C129%2C153%2C153%2C110%2C113%2C101%2C101%2C135%2C92%2C101%2C108%2C108%2C250%2C150%2C150%2C116%2C116%2C102%2C102%2C174%2C174%2C146%2C146%2C126%2C160%2C160%2C152%2C152%2C140%2C140%2C126%2C126%2C120%2C120%2C135%2C135%2C106%2C171%2C171%2C123%2C123%2C95%2C113%2C161%2C195%2C188%2C106%2C106%2C106%2C106%2C106%2C106%2C106%2C106%2C214%2C200%2C250%2C174%2C157%2C143%2C162%2C244%2C244%2C244%2C244%2C121%2C163%2C91%2C122%2C84%2C105%2C147%2C147%2C122%2C122%2C112%2C112%2C142%2C142%2C213%2C179%2C179%2C204%2C204%2C243%2C243%2C185%2C185%2C223%2C223%2C230%2C172%2C255%2C250%2C237%2C217%2C217%2C198%2C122%2C124%2C105%2C208%2C162%2C162%2C162%2C206%2C210%2C255%2C122%2C228%2C216%2C165%2C165%2C138%2C138%2C164%2C186%2C186%2C245%2C110%2C115%2C108%2C138%2C100%2C85%2C55%2C63%2C70%2C123%2C130%2C97%2C244%2C122%2C171%2C150%2C244%2C121%2C95%2C239%2C202%2C232%2C217%2C179%2C179%2C124%2C122%2C255%2C234%2C142%2C119%2C132%2C253%2C167%2C168%2C224%2C130%2C145%2C150%2C180%2C108%2C136%2C102%2C102%2C182%2C182%2C154%2C186%2C186%2C186%2C170%2C181%2C190%2C153%2C141%2C141%2C123%2C146%2C158%2C172%2C172%2C172%2C172%2C124%2C85%2C198%2C188%2C135%2C135%2C175%2C98%2C122%2C122%2C122%2C122%2C122%5D%2CB%3A%5B0%2C128%2C145%2C101%2C210%2C79%2C101%2C144%2C88%2C20%2C0%2C220%2C70%2C235%2C210%2C49%2C206%2C79%2C220%2C211%2C207%2C210%2C242%2C100%2C131%2C255%2C30%2C130%2C0%2C255%2C250%2C228%2C28%2C216%2C66%2C83%2C101%2C49%2C225%2C215%2C98%2C128%2C164%2C164%2C105%2C105%2C137%2C137%2C110%2C110%2C166%2C166%2C201%2C201%2C190%2C190%2C85%2C85%2C166%2C166%2C126%2C126%2C112%2C112%2C53%2C137%2C38%2C38%2C192%2C109%2C131%2C112%2C112%2C225%2C88%2C88%2C163%2C163%2C154%2C154%2C155%2C155%2C83%2C83%2C55%2C133%2C133%2C141%2C141%2C103%2C103%2C177%2C177%2C72%2C72%2C135%2C135%2C24%2C108%2C108%2C147%2C147%2C74%2C158%2C197%2C164%2C255%2C215%2C215%2C215%2C215%2C215%2C215%2C215%2C215%2C49%2C215%2C225%2C128%2C110%2C83%2C109%2C209%2C209%2C209%2C209%2C77%2C117%2C95%2C101%2C94%2C107%2C118%2C118%2C90%2C90%2C73%2C73%2C0%2C0%2C144%2C77%2C77%2C109%2C109%2C152%2C152%2C85%2C85%2C131%2C131%2C138%2C68%2C167%2C160%2C145%2C123%2C123%2C101%2C101%2C109%2C108%2C243%2C114%2C114%2C114%2C142%2C139%2C207%2C101%2C255%2C244%2C145%2C145%2C115%2C115%2C140%2C162%2C162%2C217%2C84%2C89%2C81%2C112%2C73%2C57%2C13%2C27%2C38%2C97%2C104%2C76%2C209%2C154%2C143%2C103%2C209%2C88%2C76%2C172%2C134%2C158%2C154%2C108%2C108%2C161%2C101%2C220%2C194%2C178%2C153%2C105%2C229%2C142%2C143%2C199%2C101%2C30%2C98%2C111%2C162%2C116%2C83%2C83%2C164%2C164%2C132%2C223%2C150%2C150%2C147%2C158%2C165%2C130%2C113%2C113%2C103%2C127%2C140%2C147%2C147%2C151%2C151%2C92%2C68%2C131%2C102%2C134%2C134%2C125%2C79%2C101%2C101%2C101%2C101%2C101%5D%2CA%3A%5B0%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%2C255%5D%2CI%3A%5B0%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2C30%2C31%2C32%2C33%2C34%2C35%2C36%2C37%2C38%2C39%2C40%2C41%2C42%2C43%2C44%2C45%2C46%2C47%2C48%2C49%2C50%2C51%2C52%2C53%2C54%2C55%2C56%2C57%2C58%2C59%2C60%2C61%2C62%2C63%2C64%2C65%2C66%2C67%2C68%2C69%2C70%2C71%2C72%2C73%2C74%2C75%2C76%2C77%2C78%2C79%2C80%2C81%2C82%2C83%2C84%2C85%2C86%2C87%2C88%2C89%2C90%2C91%2C92%2C93%2C94%2C95%2C96%2C97%2C98%2C99%2C100%2C101%2C102%2C103%2C104%2C105%2C106%2C107%2C108%2C109%2C110%2C111%2C112%2C113%2C114%2C115%2C116%2C117%2C118%2C119%2C120%2C121%2C122%2C123%2C124%2C125%2C126%2C127%2C128%2C129%2C130%2C131%2C132%2C133%2C134%2C135%2C136%2C137%2C138%2C139%2C140%2C141%2C142%2C143%2C144%2C145%2C146%2C147%2C148%2C149%2C150%2C151%2C152%2C153%2C154%2C155%2C156%2C157%2C158%2C159%2C160%2C161%2C162%2C163%2C164%2C165%2C166%2C167%2C168%2C169%2C170%2C171%2C172%2C173%2C174%2C175%2C176%2C177%2C178%2C179%2C180%2C181%2C182%2C183%2C184%2C185%2C186%2C187%2C188%2C189%2C190%2C191%2C192%2C193%2C194%2C195%2C196%2C197%2C198%2C199%2C200%2C201%2C202%2C203%2C204%2C205%2C206%2C207%2C208%2C209%2C210%2C211%2C212%2C213%2C214%2C215%2C216%2C217%2C218%2C219%2C220%2C221%2C222%2C223%2C224%2C225%2C226%2C227%2C228%2C229%2C230%2C231%2C232%2C233%2C234%2C235%2C236%2C237%2C238%2C239%2C240%2C241%2C242%2C243%2C244%2C245%2C246%2C247%2C248%2C249%2C250%2C251%2C252%2C253%2C254%2C255%5D%7D%2Cz%3D%7BR%3A%5B0%2C0%2C24%2C248%2C255%5D%2CG%3A%5B0%2C0%2C177%2C254%2C0%5D%2CB%3A%5B0%2C136%2C0%2C0%2C0%5D%2CA%3A%5B0%2C32%2C64%2C78%2C128%5D%2CI%3A%5B0%2C64%2C128%2C156%2C255%5D%7D%2Cq%3D%7BR%3A%5B0%2C248%2C242%2C235%2C229%2C222%2C212%2C202%2C193%2C183%2C173%2C145%2C117%2C78%2C39%2C0%2C0%2C0%2C0%2C0%2C0%2C64%2C128%2C191%2C255%2C255%2C255%2C255%2C255%2C238%2C221%2C204%2C214%2C224%2C235%2C245%2C255%2C249%2C242%2C236%2C229%2C223%2C217%2C210%2C204%2C197%2C191%2C184%2C176%2C169%2C161%2C154%2C146%2C139%2C132%2C124%2C117%2C109%2C102%2C0%5D%2CG%3A%5B0%2C251%2C247%2C243%2C239%2C235%2C235%2C235%2C235%2C235%2C235%2C216%2C197%2C174%2C150%2C127%2C153%2C178%2C204%2C229%2C255%2C255%2C255%2C255%2C255%2C220%2C185%2C150%2C115%2C77%2C38%2C0%2C31%2C61%2C92%2C122%2C153%2C138%2C122%2C107%2C92%2C77%2C61%2C46%2C31%2C15%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%5D%2CB%3A%5B0%2C254%2C253%2C252%2C251%2C250%2C251%2C252%2C253%2C254%2C255%2C226%2C198%2C132%2C66%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C40%2C80%2C120%2C160%2C200%2C199%2C198%2C197%2C196%2C196%2C195%2C194%2C193%2C192%2C191%2C184%2C176%2C169%2C161%2C154%2C146%2C139%2C132%2C124%2C117%2C109%2C102%2C0%5D%2CA%3A%5B256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%5D%2CI%3A%5B0%2C4%2C8%2C12%2C16%2C20%2C24%2C28%2C32%2C36%2C40%2C44%2C48%2C52%2C56%2C60%2C64%2C68%2C72%2C76%2C80%2C84%2C88%2C92%2C96%2C100%2C104%2C108%2C112%2C116%2C120%2C124%2C128%2C132%2C136%2C140%2C144%2C148%2C152%2C156%2C160%2C164%2C168%2C172%2C176%2C180%2C184%2C188%2C192%2C196%2C200%2C204%2C208%2C212%2C216%2C220%2C224%2C228%2C232%2C236%2C240%2C244%2C248%2C255%5D%7D%2CX%3D%7BR%3A%5B255%2C248%2C242%2C235%2C229%2C222%2C212%2C202%2C193%2C183%2C173%2C145%2C117%2C78%2C39%2C0%2C0%2C0%2C0%2C0%2C0%2C64%2C128%2C191%2C255%2C255%2C255%2C255%2C255%2C238%2C221%2C204%2C214%2C224%2C235%2C245%2C255%2C249%2C242%2C236%2C229%2C223%2C217%2C210%2C204%2C197%2C191%2C184%2C176%2C169%2C161%2C154%2C146%2C139%2C132%2C124%2C117%2C109%2C102%2C0%5D%2CG%3A%5B255%2C251%2C247%2C243%2C239%2C235%2C235%2C235%2C235%2C235%2C235%2C216%2C197%2C174%2C150%2C127%2C153%2C178%2C204%2C229%2C255%2C255%2C255%2C255%2C255%2C220%2C185%2C150%2C115%2C77%2C38%2C0%2C31%2C61%2C92%2C122%2C153%2C138%2C122%2C107%2C92%2C77%2C61%2C46%2C31%2C15%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%5D%2CB%3A%5B255%2C254%2C253%2C252%2C251%2C250%2C251%2C252%2C253%2C254%2C255%2C226%2C198%2C132%2C66%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C40%2C80%2C120%2C160%2C200%2C199%2C198%2C197%2C196%2C196%2C195%2C194%2C193%2C192%2C191%2C184%2C176%2C169%2C161%2C154%2C146%2C139%2C132%2C124%2C117%2C109%2C102%2C0%5D%2CA%3A%5B256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%2C256%5D%2CI%3A%5B0%2C4%2C8%2C12%2C16%2C20%2C24%2C28%2C32%2C36%2C40%2C44%2C48%2C52%2C56%2C60%2C64%2C68%2C72%2C76%2C80%2C84%2C88%2C92%2C96%2C100%2C104%2C108%2C112%2C116%2C120%2C124%2C128%2C132%2C136%2C140%2C144%2C148%2C152%2C156%2C160%2C164%2C168%2C172%2C176%2C180%2C184%2C188%2C192%2C196%2C200%2C204%2C208%2C212%2C216%2C220%2C224%2C228%2C232%2C236%2C240%2C244%2C248%2C255%5D%7D%2Cj%3D%7BR%3A%5B0%2C0%2C0%2C0%2C196%2C255%5D%2CG%3A%5B0%2C32%2C128%2C128%2C128%2C32%5D%2CB%3A%5B0%2C255%2C196%2C0%2C0%2C0%5D%2CA%3A%5B0%2C128%2C64%2C64%2C64%2C128%5D%2CI%3A%5B0%2C1%2C64%2C128%2C192%2C255%5D%7D%2CZ%3D%7BR%3A%5B0%2C255%5D%2CG%3A%5B0%2C0%5D%2CB%3A%5B255%2C255%5D%2CA%3A%5B0%2C128%5D%2CI%3A%5B0%2C255%5D%7D%2CJ%3D%7BR%3A%5B0%2C0%5D%2CG%3A%5B0%2C255%5D%2CB%3A%5B255%2C255%5D%2CA%3A%5B0%2C128%5D%2CI%3A%5B0%2C255%5D%7D%2C_%3D%7BR%3A%5B0%2C0%2C0%2C0%5D%2CG%3A%5B0%2C1%2C128%2C255%5D%2CB%3A%5B0%2C222%2C127%2C32%5D%2CA%3A%5B0%2C0%2C64%2C128%5D%2CI%3A%5B0%2C1%2C128%2C255%5D%7D%2C%24%3D%7BR%3A%5B0%2C0%2C0%5D%2CG%3A%5B0%2C0%2C0%5D%2CB%3A%5B0%2C128%2C255%5D%2CA%3A%5B0%2C64%2C128%5D%2CI%3A%5B0%2C128%2C255%5D%7D%2Ctt%3D%7BR%3A%5B0%2C103%2C255%5D%2CG%3A%5B0%2C126%2C255%5D%2CB%3A%5B0%2C165%2C255%5D%2CA%3A%5B0%2C76%2C128%5D%2CI%3A%5B0%2C153%2C255%5D%7D%2Cet%3D%7BR%3A%5B0%2C43%2C103%2C199%2C216%2C255%5D%2CG%3A%5B0%2C0%2C37%2C155%2C213%2C255%5D%2CB%3A%5B0%2C0%2C20%2C97%2C201%2C255%5D%2CA%3A%5B0%2C44%2C48%2C54%2C56%2C56%5D%2CI%3A%5B0%2C64%2C128%2C196%2C240%2C255%5D%7D%2Cit%3D%7BR%3A%5B0%2C9%2C24%2C33%2C40%2C46%2C52%2C57%2C62%2C66%2C70%2C74%2C78%2C81%2C85%2C88%2C91%2C94%2C98%2C101%2C103%2C106%2C109%2C112%2C114%2C117%2C119%2C121%2C124%2C126%2C128%2C130%2C133%2C135%2C137%2C139%2C141%2C143%2C145%2C147%2C149%2C151%2C153%2C155%2C157%2C159%2C161%2C163%2C164%2C166%2C168%2C169%2C171%2C172%2C174%2C175%2C177%2C178%2C180%2C181%2C183%2C184%2C186%2C187%2C189%2C190%2C191%2C193%2C194%2C196%2C197%2C198%2C199%2C200%2C201%2C202%2C203%2C204%2C205%2C206%2C207%2C208%2C209%2C210%2C211%2C212%2C213%2C214%2C215%2C216%2C217%2C218%2C219%2C220%2C221%2C222%2C222%2C223%2C224%2C224%2C225%2C226%2C226%2C227%2C228%2C228%2C229%2C229%2C230%2C231%2C231%2C232%2C233%2C233%2C234%2C234%2C235%2C235%2C236%2C236%2C236%2C237%2C237%2C237%2C238%2C238%2C238%2C239%2C239%2C239%2C240%2C240%2C240%2C241%2C241%2C241%2C242%2C242%2C242%2C243%2C243%2C243%2C243%2C243%2C243%2C243%2C243%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C245%2C245%2C245%2C245%2C245%2C245%2C245%2C245%2C245%2C245%2C245%2C245%2C245%2C245%2C245%2C245%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C244%2C243%2C243%2C243%2C243%2C243%2C243%2C243%2C243%2C243%2C243%2C243%2C243%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C241%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C242%2C243%2C243%2C244%2C244%2C245%2C246%2C246%2C247%2C247%2C248%2C249%2C249%2C250%2C250%2C251%2C251%2C252%2C252%2C253%2C253%2C254%2C254%2C254%5D%2CG%3A%5B42%2C41%2C41%2C41%2C40%2C40%2C40%2C39%2C39%2C39%2C38%2C38%2C37%2C37%2C36%2C36%2C35%2C35%2C34%2C34%2C33%2C32%2C32%2C31%2C30%2C30%2C30%2C30%2C29%2C29%2C29%2C29%2C28%2C28%2C28%2C27%2C27%2C27%2C26%2C26%2C26%2C25%2C25%2C25%2C24%2C24%2C24%2C24%2C24%2C25%2C25%2C26%2C27%2C27%2C28%2C28%2C29%2C30%2C30%2C31%2C31%2C32%2C33%2C33%2C34%2C34%2C35%2C36%2C36%2C37%2C38%2C39%2C40%2C42%2C43%2C44%2C45%2C47%2C48%2C49%2C50%2C51%2C53%2C54%2C55%2C56%2C57%2C58%2C59%2C60%2C62%2C63%2C64%2C65%2C66%2C68%2C69%2C71%2C72%2C73%2C75%2C76%2C77%2C79%2C80%2C81%2C83%2C84%2C85%2C87%2C88%2C89%2C90%2C92%2C93%2C94%2C95%2C97%2C98%2C100%2C101%2C102%2C104%2C105%2C107%2C108%2C109%2C111%2C112%2C113%2C115%2C116%2C117%2C119%2C120%2C121%2C122%2C124%2C125%2C126%2C128%2C129%2C130%2C132%2C133%2C134%2C136%2C137%2C138%2C140%2C141%2C142%2C144%2C145%2C146%2C147%2C149%2C150%2C151%2C153%2C154%2C155%2C156%2C158%2C159%2C160%2C161%2C163%2C164%2C165%2C167%2C168%2C169%2C170%2C172%2C173%2C174%2C175%2C176%2C178%2C179%2C180%2C181%2C183%2C184%2C185%2C186%2C187%2C189%2C190%2C191%2C192%2C193%2C194%2C196%2C197%2C198%2C199%2C200%2C201%2C203%2C204%2C205%2C206%2C207%2C208%2C209%2C211%2C212%2C213%2C214%2C215%2C216%2C217%2C218%2C219%2C220%2C221%2C222%2C223%2C224%2C225%2C226%2C228%2C229%2C230%2C231%2C232%2C233%2C234%2C235%2C236%2C237%2C238%2C238%2C239%2C240%2C241%2C241%2C242%2C243%2C244%2C244%2C245%2C246%2C247%2C248%2C248%2C249%2C250%2C251%2C251%2C252%2C253%2C254%2C255%5D%2CB%3A%5B167%2C167%2C166%2C166%2C166%2C165%2C165%2C165%2C164%2C164%2C164%2C163%2C163%2C162%2C162%2C162%2C161%2C161%2C161%2C160%2C160%2C160%2C159%2C159%2C158%2C158%2C157%2C157%2C156%2C155%2C155%2C154%2C154%2C153%2C153%2C152%2C151%2C151%2C150%2C150%2C149%2C149%2C148%2C147%2C147%2C146%2C146%2C145%2C144%2C144%2C143%2C143%2C142%2C141%2C141%2C140%2C139%2C139%2C138%2C137%2C137%2C136%2C135%2C135%2C134%2C133%2C133%2C132%2C131%2C131%2C130%2C130%2C129%2C128%2C128%2C127%2C127%2C126%2C125%2C125%2C124%2C124%2C123%2C123%2C122%2C121%2C121%2C120%2C119%2C119%2C118%2C118%2C117%2C116%2C116%2C116%2C115%2C115%2C114%2C114%2C113%2C113%2C113%2C112%2C112%2C111%2C111%2C110%2C110%2C109%2C109%2C109%2C108%2C108%2C107%2C107%2C106%2C106%2C106%2C106%2C106%2C105%2C105%2C105%2C105%2C105%2C105%2C105%2C104%2C104%2C104%2C104%2C104%2C103%2C103%2C103%2C103%2C103%2C102%2C102%2C102%2C103%2C103%2C103%2C103%2C104%2C104%2C104%2C104%2C104%2C105%2C105%2C105%2C105%2C106%2C106%2C106%2C106%2C106%2C107%2C107%2C107%2C107%2C108%2C108%2C109%2C110%2C111%2C111%2C112%2C113%2C113%2C114%2C115%2C115%2C116%2C117%2C117%2C118%2C119%2C120%2C120%2C121%2C122%2C122%2C123%2C124%2C125%2C126%2C128%2C129%2C130%2C131%2C132%2C134%2C135%2C136%2C137%2C138%2C140%2C141%2C142%2C143%2C144%2C146%2C147%2C148%2C149%2C150%2C152%2C153%2C155%2C157%2C158%2C160%2C162%2C163%2C165%2C167%2C168%2C170%2C172%2C173%2C175%2C177%2C178%2C180%2C182%2C183%2C185%2C187%2C188%2C190%2C193%2C196%2C199%2C201%2C204%2C207%2C210%2C212%2C215%2C218%2C221%2C224%2C226%2C229%2C232%2C235%2C238%2C240%2C243%2C246%2C249%2C252%2C255%5D%2CA%3A%5B0%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%5D%2CI%3A%5B0%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2C30%2C31%2C32%2C33%2C34%2C35%2C36%2C37%2C38%2C39%2C40%2C41%2C42%2C43%2C44%2C45%2C46%2C47%2C48%2C49%2C50%2C51%2C52%2C53%2C54%2C55%2C56%2C57%2C58%2C59%2C60%2C61%2C62%2C63%2C64%2C65%2C66%2C67%2C68%2C69%2C70%2C71%2C72%2C73%2C74%2C75%2C76%2C77%2C78%2C79%2C80%2C81%2C82%2C83%2C84%2C85%2C86%2C87%2C88%2C89%2C90%2C91%2C92%2C93%2C94%2C95%2C96%2C97%2C98%2C99%2C100%2C101%2C102%2C103%2C104%2C105%2C106%2C107%2C108%2C109%2C110%2C111%2C112%2C113%2C114%2C115%2C116%2C117%2C118%2C119%2C120%2C121%2C122%2C123%2C124%2C125%2C126%2C127%2C128%2C129%2C130%2C131%2C132%2C133%2C134%2C135%2C136%2C137%2C138%2C139%2C140%2C141%2C142%2C143%2C144%2C145%2C146%2C147%2C148%2C149%2C150%2C151%2C152%2C153%2C154%2C155%2C156%2C157%2C158%2C159%2C160%2C161%2C162%2C163%2C164%2C165%2C166%2C167%2C168%2C169%2C170%2C171%2C172%2C173%2C174%2C175%2C176%2C177%2C178%2C179%2C180%2C181%2C182%2C183%2C184%2C185%2C186%2C187%2C188%2C189%2C190%2C191%2C192%2C193%2C194%2C195%2C196%2C197%2C198%2C199%2C200%2C201%2C202%2C203%2C204%2C205%2C206%2C207%2C208%2C209%2C210%2C211%2C212%2C213%2C214%2C215%2C216%2C217%2C218%2C219%2C220%2C221%2C222%2C223%2C224%2C225%2C226%2C227%2C228%2C229%2C230%2C231%2C232%2C233%2C234%2C235%2C236%2C237%2C238%2C239%2C240%2C241%2C242%2C243%2C244%2C245%2C246%2C247%2C248%2C249%2C250%2C251%2C252%2C253%2C254%2C255%5D%7D%2Cst%3D%7BR%3A%5B0%2C86%2C166%2C255%5D%2CG%3A%5B32%2C92%2C156%2C233%5D%2CB%3A%5B76%2C108%2C117%2C69%5D%2CA%3A%5B0%2C56%2C80%2C88%5D%2CI%3A%5B0%2C64%2C192%2C255%5D%7D%2Cnt%3D%7BR%3A%5B0%2C0%2C0%5D%2CG%3A%5B127%2C196%2C254%5D%2CB%3A%5B255%2C255%2C255%5D%2CA%3A%5B0%2C64%2C128%5D%2CI%3A%5B0%2C128%2C255%5D%7D%2Crt%3D%7BR%3A%5B0%2C61%2C122%2C183%2C244%2C255%5D%2CG%3A%5B0%2C41%2C81%2C122%2C163%2C255%5D%2CB%3A%5B0%2C25%2C51%2C76%2C102%2C255%5D%2CA%3A%5B0%2C25%2C51%2C71%2C102%2C128%5D%2CI%3A%5B0%2C51%2C102%2C153%2C204%2C255%5D%7D%2Cat%3D%7BR%3A%5B0%2C61%2C122%2C183%2C244%2C255%5D%2CG%3A%5B0%2C41%2C81%2C122%2C163%2C203%5D%2CB%3A%5B0%2C25%2C51%2C76%2C102%2C127%5D%2CA%3A%5B0%2C25%2C51%2C71%2C102%2C128%5D%2CI%3A%5B0%2C51%2C102%2C153%2C204%2C255%5D%7D%2Cot%3D%7Bmin%3A-643%2Cmax%3A-235%2CR%3A%5B0%2C0%2C0%5D%2CG%3A%5B154%2C154%2C154%5D%2CB%3A%5B179%2C179%2C101%5D%2CA%3A%5B0%2C32%2C0%5D%2CI%3A%5B0%2C163%2C255%5D%7D%2Clt%3D%7Bmin%3A114%2Cmax%3A800%2CR%3A%5B0%2C255%2C255%2C255%5D%2CG%3A%5B0%2C0%2C129%2C255%5D%2CB%3A%5B0%2C0%2C0%2C255%5D%2CA%3A%5B0%2C64%2C88%2C228%5D%2CI%3A%5B0%2C80%2C160%2C255%5D%7D%2Cht%3D%7Bmin%3A180%2Cmax%3A600%2CR%3A%5B0%2C0%2C113%2C255%5D%2CG%3A%5B0%2C0%2C109%2C250%5D%2CB%3A%5B0%2C0%2C101%2C245%5D%2CA%3A%5B0%2C0%2C100%2C160%5D%2CI%3A%5B0%2C1%2C128%2C255%5D%7D%2Cct%3D%7Bmin%3A-10%2Cmax%3A110%2CR%3A%5B0%2C127%2C255%5D%2CG%3A%5B0%2C127%2C255%5D%2CB%3A%5B0%2C127%2C255%5D%2CA%3A%5B0%2C48%2C128%5D%2CI%3A%5B0%2C124%2C255%5D%7D%2Cdt%3D%7Bmin%3A-10%2Cmax%3A110%2CR%3A%5B0%2C199%2C255%5D%2CG%3A%5B0%2C127%2C255%5D%2CB%3A%5B0%2C127%2C255%5D%2CA%3A%5B0%2C48%2C128%5D%2CI%3A%5B0%2C124%2C255%5D%7D%2Cmt%3D%7Bmin%3A-80%2Cmax%3A1e3%2CR%3A%5B0%2C189%2C150%2C150%2C150%2C150%2C255%5D%2CG%3A%5B0%2C169%2C54%2C54%2C54%2C54%2C240%5D%2CB%3A%5B0%2C153%2C52%2C52%2C52%2C52%2C242%5D%2CA%3A%5B0%2C32%2C64%2C0%2C0%2C64%2C64%5D%2CI%3A%5B0%2C1%2C82%2C92%2C234%2C242%2C255%5D%7D%2Cut%3D%7Bmin%3A-590%2Cmax%3A600%2CR%3A%5B0%2C241%2C241%2C248%2C248%2C178%2C178%2C232%2C255%2C255%2C255%5D%2CG%3A%5B0%2C156%2C156%2C222%2C222%2C36%2C36%2C51%2C255%2C255%2C255%5D%2CB%3A%5B0%2C130%2C130%2C169%2C169%2C24%2C24%2C37%2C255%2C255%2C255%5D%2CA%3A%5B0%2C8%2C0%2C0%2C0%2C64%2C64%2C0%2C0%2C222%2C222%5D%2CI%3A%5B0%2C2%2C3%2C64%2C122%2C142%2C172%2C182%2C252%2C253%2C255%5D%7D%2CAt%3D%7Bmin%3A114%2Cmax%3A302%2CR%3A%5B0%2C255%2C255%5D%2CG%3A%5B0%2C129%2C255%5D%2CB%3A%5B0%2C0%2C255%5D%2CA%3A%5B0%2C88%2C228%5D%2CI%3A%5B0%2C103%2C255%5D%7D%2Cft%3D%7Bmin%3A-23%2Cmax%3A246%2CR%3A%5B0%2C44%2C255%2C255%2C255%5D%2CG%3A%5B0%2C128%2C90%2C255%2C255%5D%2CB%3A%5B0%2C0%2C70%2C0%2C255%5D%2CA%3A%5B0%2C0%2C82%2C184%2C228%5D%2CI%3A%5B0%2C64%2C131%2C196%2C255%5D%7D%2Cgt%3D%7Bmin%3A-100%2Cmax%3A246%2CR%3A%5B0%2C128%2C159%2C255%2C255%2C255%2C255%5D%2CG%3A%5B0%2C0%2C56%2C90%2C0%2C255%2C255%5D%2CB%3A%5B0%2C0%2C41%2C70%2C0%2C0%2C255%5D%2CA%3A%5B0%2C63%2C105%2C135%2C167%2C184%2C228%5D%2CI%3A%5B0%2C100%2C128%2C155%2C180%2C209%2C255%5D%7D%2Cpt%3D%7Bmin%3A-590%2Cmax%3A600%2CR%3A%5B0%2C241%2C241%2C248%2C248%2C178%2C232%2C255%2C255%5D%2CG%3A%5B0%2C156%2C156%2C222%2C222%2C36%2C51%2C255%2C255%5D%2CB%3A%5B0%2C130%2C130%2C169%2C169%2C24%2C37%2C255%2C255%5D%2CA%3A%5B0%2C63%2C105%2C135%2C167%2C184%2C228%2C228%2C228%5D%2CI%3A%5B0%2C1%2C52%2C127%2C137%2C162%2C172%2C252%2C255%5D%7D%2Cvt%3D%7Bmin%3A140%2Cmax%3A1024%2CR%3A%5B0%2C2%2C113%2C255%5D%2CG%3A%5B0%2C1%2C109%2C250%5D%2CB%3A%5B0%2C1%2C101%2C245%5D%2CA%3A%5B0%2C1%2C96%2C168%5D%2CI%3A%5B0%2C1%2C128%2C255%5D%7D%2Cxt%3D%7Bmin%3A-923%2Cmax%3A679%2CR%3A%5B0%2C0%2C0%2C0%2C0%2C255%2C255%2C255%5D%2CG%3A%5B154%2C154%2C154%2C154%2C0%2C0%2C254%2C255%5D%2CB%3A%5B179%2C179%2C179%2C179%2C0%2C0%2C0%2C255%5D%2CA%3A%5B0%2C3%2C8%2C0%2C0%2C10%2C15%2C20%5D%2CI%3A%5B0%2C30%2C62%2C88%2C170%2C200%2C232%2C255%5D%7D%2Cwt%3D%7Bmin%3A-10%2Cmax%3A110%2CR%3A%5B0%2C199%2C255%5D%2CG%3A%5B0%2C127%2C255%5D%2CB%3A%5B0%2C127%2C255%5D%2CA%3A%5B0%2C48%2C128%5D%2CI%3A%5B0%2C124%2C255%5D%7D%2CCt%3D%7Bmin%3A-600%2Cmax%3A100%2CR%3A%5B0%2C134%2C255%5D%2CG%3A%5B0%2C109%2C250%5D%2CB%3A%5B0%2C101%2C245%5D%2CA%3A%5B0%2C60%2C148%5D%2CI%3A%5B0%2C128%2C255%5D%7D%2Cbt%3D%7Bmin%3A114%2Cmax%3A246%2CR%3A%5B0%2C255%2C255%5D%2CG%3A%5B0%2C128%2C255%5D%2CB%3A%5B0%2C128%2C255%5D%2CA%3A%5B0%2C64%2C96%5D%2CI%3A%5B0%2C87%2C255%5D%7D%2Cyt%3D%7Bmin%3A50%2Cmax%3A1e3%2CR%3A%5B98%2C210%2C169%2C128%2C255%5D%2CG%3A%5B94%2C26%2C77%2C128%2C255%5D%2CB%3A%5B45%2C21%2C74%2C128%2C255%5D%2CA%3A%5B0%2C25%2C0%2C4%2C168%5D%2CI%3A%5B0%2C41%2C87%2C154%2C255%5D%7D%2CIt%3D%7BR%3A%5B0%2C13%2C21%2C26%2C27%2C25%2C22%2C21%2C22%2C28%2C39%2C54%2C75%2C98%2C124%2C148%2C171%2C189%2C202%2C210%2C213%2C211%2C206%2C200%2C195%2C193%2C195%2C201%2C211%2C225%2C240%2C255%5D%2CG%3A%5B0%2C5%2C11%2C20%2C31%2C44%2C58%2C72%2C86%2C99%2C109%2C116%2C120%2C122%2C122%2C122%2C121%2C121%2C124%2C129%2C137%2C147%2C161%2C175%2C190%2C205%2C218%2C229%2C238%2C245%2C251%2C255%5D%2CB%3A%5B0%2C14%2C30%2C46%2C61%2C71%2C77%2C78%2C75%2C68%2C60%2C52%2C48%2C47%2C53%2C65%2C83%2C105%2C131%2C157%2C183%2C205%2C222%2C235%2C241%2C243%2C242%2C240%2C239%2C240%2C245%2C255%5D%2CA%3A%5B0%2C4%2C8%2C12%2C17%2C21%2C25%2C29%2C33%2C37%2C41%2C45%2C50%2C54%2C58%2C62%2C66%2C70%2C74%2C78%2C83%2C87%2C91%2C95%2C99%2C103%2C107%2C111%2C116%2C120%2C124%2C128%5D%2CI%3A%5B0%2C8%2C16%2C25%2C33%2C41%2C49%2C58%2C66%2C74%2C82%2C90%2C99%2C107%2C115%2C123%2C132%2C140%2C148%2C156%2C165%2C173%2C181%2C189%2C197%2C206%2C214%2C222%2C230%2C239%2C247%2C255%5D%7D%2CMt%3D%7BR%3A%5B0%2C10%2C136%2C255%5D%2CG%3A%5B0%2C39%2C220%2C255%5D%2CB%3A%5B0%2C223%2C253%2C255%5D%2CA%3A%5B0%2C48%2C64%2C70%5D%2CI%3A%5B0%2C92%2C192%2C255%5D%7D%2CDt%3D%7BR%3A%5B0%2C245%2C205%2C120%2C196%2C220%2C230%2C0%2C122%2C236%2C12%2C204%2C42%2C119%2C220%2C103%2C60%2C255%2C165%2C160%2C0%2C245%2C205%2C120%2C196%2C220%2C230%2C0%2C122%2C236%2C13%2C220%2C103%2C255%2C165%2C160%2C0%2C120%2C200%2C255%2C255%2C164%2C164%2C164%2C234%2C0%2C0%2C0%2C0%2C0%5D%2CG%3A%5B0%2C245%2C62%2C18%2C58%2C248%2C148%2C118%2C186%2C13%2C48%2C182%2C204%2C159%2C216%2C255%2C60%2C165%2C42%2C32%2C200%2C245%2C62%2C18%2C58%2C248%2C148%2C118%2C186%2C13%2C48%2C216%2C255%2C165%2C42%2C32%2C200%2C190%2C70%2C148%2C148%2C108%2C108%2C108%2C169%2C0%2C0%2C0%2C0%2C0%5D%2CB%3A%5B0%2C245%2C78%2C134%2C250%2C164%2C34%2C14%2C220%2C176%2C255%2C142%2C164%2C176%2C20%2C255%2C60%2C0%2C42%2C240%2C200%2C245%2C78%2C134%2C250%2C164%2C34%2C14%2C220%2C176%2C255%2C20%2C255%2C0%2C42%2C240%2C221%2C150%2C255%2C10%2C10%2C226%2C226%2C226%2C30%2C64%2C112%2C160%2C208%2C255%5D%2CA%3A%5B0%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%5D%2CI%3A%5B0%2C2%2C3%2C4%2C5%2C7%2C8%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C24%2C26%2C28%2C30%2C31%2C41%2C42%2C43%2C44%2C46%2C47%2C49%2C50%2C51%2C52%2C53%2C54%2C58%2C60%2C62%2C63%2C72%2C77%2C78%2C79%2C80%2C81%2C82%2C85%2C251%2C252%2C253%2C254%2C255%5D%7D%2CFt%3D%7BR%3A%5B0%2C0%2C128%2C255%2C255%5D%2CG%3A%5B0%2C128%2C0%2C128%2C255%5D%2CB%3A%5B0%2C125%2C255%2C0%2C255%5D%2CA%3A%5B0%2C32%2C64%2C96%2C128%5D%2CI%3A%5B0%2C63%2C128%2C192%2C255%5D%7D%2CTt%3D%7BR%3A%5B0%2C142%2C227%2C255%5D%2CG%3A%5B0%2C85%2C170%2C255%5D%2CB%3A%5B0%2C14%2C76%2C255%5D%2CA%3A%5B0%2C42%2C84%2C128%5D%2CI%3A%5B0%2C85%2C170%2C255%5D%7D%2CVt%3D%7BR%3A%5B0%2C255%5D%2CG%3A%5B0%2C255%5D%2CB%3A%5B0%2C255%5D%2CA%3A%5B0%2C128%5D%2CI%3A%5B0%2C255%5D%7D%2CSt%3D%7BR%3A%5B0%2C0%2C0%5D%2CG%3A%5B0%2C128%2C255%5D%2CB%3A%5B0%2C0%2C0%5D%2CA%3A%5B0%2C64%2C128%5D%2CI%3A%5B0%2C128%2C255%5D%7D%2CEt%3D%7BR%3A%5B0%2C0%2C0%5D%2CG%3A%5B72%2C72%2C255%5D%2CB%3A%5B0%2C255%2C255%5D%2CA%3A%5B0%2C64%2C128%5D%2CI%3A%5B0%2C88%2C255%5D%7D%2CBt%3D%7BR%3A%5B0%2C255%2C255%5D%2CG%3A%5B72%2C88%2C255%5D%2CB%3A%5B0%2C0%2C0%5D%2CA%3A%5B0%2C64%2C128%5D%2CI%3A%5B0%2C88%2C255%5D%7D%2CUt%3D%7BR%3A%5B0%2C255%2C255%2C255%5D%2CG%3A%5B0%2C0%2C126%2C255%5D%2CB%3A%5B0%2C0%2C0%2C255%5D%2CA%3A%5B0%2C64%2C96%2C128%5D%2CI%3A%5B0%2C128%2C191%2C255%5D%7D%2CRt%3D%7BR%3A%5B3%2C255%2C255%2C255%5D%2CG%3A%5B0%2C0%2C255%2C255%5D%2CB%3A%5B0%2C0%2C0%2C255%5D%2CA%3A%5B0%2C48%2C96%2C128%5D%2CI%3A%5B0%2C95%2C191%2C255%5D%7D%2CNt%3D%7BR%3A%5B255%2C255%2C0%2C0%2C0%2C255%2C255%5D%2CG%3A%5B0%2C255%2C255%2C255%2C0%2C0%2C0%5D%2CB%3A%5B0%2C0%2C0%2C255%2C255%2C255%2C0%5D%2CA%3A%5B0%2C14%2C28%2C43%2C57%2C71%2C85%5D%2CI%3A%5B0%2C43%2C85%2C128%2C170%2C213%2C255%5D%7D%2CPt%3D%7BR%3A%5B0%2C120%2C237%2C240%5D%2CG%3A%5B0%2C28%2C105%2C249%5D%2CB%3A%5B4%2C109%2C37%2C33%5D%2CA%3A%5B0%2C56%2C80%2C88%5D%2CI%3A%5B0%2C64%2C192%2C255%5D%7D%2CLt%3D%7BR%3A%5B0%2C0%2C127%2C255%2C127%5D%2CG%3A%5B0%2C127%2C255%2C127%2C0%5D%2CB%3A%5B127%2C255%2C127%2C0%2C0%5D%2CA%3A%5B0%2C32%2C64%2C96%2C128%5D%2CI%3A%5B0%2C63%2C128%2C192%2C255%5D%7D%2Ckt%3D%7BR%3A%5B94%2C50%2C90%2C152%2C215%2C238%2C249%2C254%2C252%2C241%2C209%2C158%5D%2CG%3A%5B79%2C131%2C186%2C214%2C240%2C244%2C237%2C210%2C157%2C100%2C57%2C1%5D%2CB%3A%5B162%2C189%2C167%2C164%2C155%2C169%2C168%2C123%2C86%2C68%2C79%2C66%5D%2CA%3A%5B0%2C12%2C23%2C35%2C47%2C58%2C70%2C81%2C93%2C105%2C116%2C128%5D%2CI%3A%5B0%2C23%2C46%2C70%2C93%2C116%2C139%2C162%2C185%2C209%2C232%2C255%5D%7D%2COt%3D%7BR%3A%5B0%2C148%2C183%2C223%2C247%2C252%5D%2CG%3A%5B0%2C44%2C55%2C74%2C112%2C253%5D%2CB%3A%5B4%2C128%2C121%2C104%2C92%2C191%5D%2CA%3A%5B0%2C44%2C53%2C64%2C75%2C107%5D%2CI%3A%5B0%2C107%2C128%2C154%2C179%2C255%5D%7D%2CYt%3D%7BR%3A%5B11%2C59%2C55%2C222%5D%2CG%3A%5B4%2C45%2C165%2C245%5D%2CB%3A%5B5%2C91%2C172%2C229%5D%2CA%3A%5B0%2C23%2C70%2C107%5D%2CI%3A%5B0%2C56%2C167%2C255%5D%7D%2CGt%3D%7BR%3A%5B0%2C85%2C0%2C0%2C0%2C0%2C0%2C0%2C85%2C255%2C255%2C255%2C172%5D%2CG%3A%5B0%2C0%2C0%2C0%2C85%2C170%2C255%2C255%2C255%2C255%2C85%2C0%2C0%5D%2CB%3A%5B0%2C170%2C85%2C255%2C255%2C170%2C170%2C0%2C85%2C0%2C0%2C0%2C0%5D%2CA%3A%5B0%2C5%2C10%2C21%2C26%2C32%2C37%2C42%2C48%2C53%2C64%2C72%2C85%5D%2CI%3A%5B0%2C15%2C31%2C63%2C79%2C95%2C111%2C127%2C143%2C159%2C191%2C217%2C255%5D%7D%2CKt%3D%7BR%3A%5B13%2C156%2C237%2C240%5D%2CG%3A%5B8%2C23%2C121%2C249%5D%2CB%3A%5B135%2C158%2C83%2C33%5D%2CA%3A%5B0%2C56%2C80%2C88%5D%2CI%3A%5B0%2C64%2C192%2C255%5D%7D%2CWt%3D%7BR%3A%5B208%2C71%2C33%2C192%2C32%2C195%2C208%2C173%2C233%2C202%2C25%2C210%2C145%2C89%2C87%2C245%2C246%2C38%2C3%2C25%2C57%2C167%2C245%2C86%2C227%2C208%2C81%2C64%2C90%2C199%2C140%2C48%2C212%2C180%2C70%2C120%2C9%2C192%2C245%2C177%2C65%2C157%2C9%2C193%2C100%2C181%2C125%2C145%2C62%2C8%2C108%2C36%2C140%2C237%2C242%2C248%2C161%2C189%2C41%2C114%2C65%2C121%2C97%2C50%2C238%2C149%2C44%2C214%2C124%2C167%2C40%2C167%2C127%2C178%2C231%2C30%2C173%2C244%2C193%2C203%2C204%2C238%2C139%2C135%2C71%2C234%2C234%2C217%2C66%2C14%2C129%2C19%2C97%2C165%2C112%2C244%2C35%2C73%2C192%2C12%2C149%2C71%2C33%2C192%2C32%2C195%2C208%2C173%2C233%2C202%2C25%2C210%2C145%2C89%2C87%2C245%2C246%2C38%2C3%2C25%2C57%2C167%2C245%2C86%2C227%2C208%2C81%2C64%2C90%2C199%2C140%2C48%2C212%2C180%2C70%2C120%2C9%2C192%2C245%2C177%2C65%2C157%2C9%2C193%2C100%2C181%2C125%2C145%2C62%2C8%2C108%2C36%2C140%2C237%2C242%2C248%2C161%2C189%2C41%2C114%2C65%2C121%2C97%2C50%2C238%2C149%2C44%2C214%2C124%2C167%2C40%2C167%2C127%2C178%2C231%2C30%2C173%2C244%2C193%2C203%2C204%2C238%2C139%2C135%2C71%2C234%2C234%2C217%2C66%2C14%2C129%2C19%2C97%2C165%2C112%2C244%2C35%2C73%2C192%2C12%2C149%2C71%2C33%2C192%2C32%2C195%2C208%2C173%2C233%2C202%2C25%2C210%2C145%2C89%2C87%2C245%2C246%2C38%2C3%2C25%2C57%2C167%2C245%2C86%2C227%2C208%2C81%2C64%2C90%2C199%2C140%2C48%2C212%2C180%2C70%2C120%2C9%2C192%2C245%2C177%2C65%2C157%2C9%2C193%2C100%2C181%2C125%2C145%2C62%2C8%2C108%2C36%2C140%2C237%2C242%2C248%5D%2CG%3A%5B182%2C46%2C78%2C199%2C79%2C89%2C41%2C208%2C135%2C20%2C154%2C35%2C21%2C43%2C230%2C113%2C191%2C147%2C208%2C37%2C28%2C27%2C86%2C203%2C25%2C209%2C148%2C187%2C139%2C111%2C48%2C102%2C76%2C110%2C106%2C130%2C37%2C160%2C34%2C222%2C90%2C165%2C245%2C222%2C102%2C47%2C19%2C130%2C4%2C232%2C137%2C211%2C240%2C11%2C140%2C21%2C42%2C22%2C241%2C61%2C99%2C115%2C199%2C166%2C114%2C190%2C204%2C60%2C233%2C66%2C115%2C230%2C125%2C103%2C203%2C125%2C13%2C176%2C94%2C131%2C39%2C198%2C167%2C124%2C67%2C175%2C254%2C1%2C15%2C198%2C62%2C237%2C159%2C31%2C218%2C58%2C244%2C47%2C61%2C67%2C94%2C46%2C78%2C199%2C79%2C89%2C41%2C208%2C135%2C20%2C154%2C35%2C21%2C43%2C230%2C113%2C191%2C147%2C208%2C37%2C28%2C27%2C86%2C203%2C25%2C209%2C148%2C187%2C139%2C111%2C48%2C102%2C76%2C110%2C106%2C130%2C37%2C160%2C34%2C222%2C90%2C165%2C245%2C222%2C102%2C47%2C19%2C130%2C4%2C232%2C137%2C211%2C240%2C11%2C140%2C21%2C42%2C22%2C241%2C61%2C99%2C115%2C199%2C166%2C114%2C190%2C204%2C60%2C233%2C66%2C115%2C230%2C125%2C103%2C203%2C125%2C13%2C176%2C94%2C131%2C39%2C198%2C167%2C124%2C67%2C175%2C254%2C1%2C15%2C198%2C62%2C237%2C159%2C31%2C218%2C58%2C244%2C47%2C61%2C67%2C94%2C46%2C78%2C199%2C79%2C89%2C41%2C208%2C135%2C20%2C154%2C35%2C21%2C43%2C230%2C113%2C191%2C147%2C208%2C37%2C28%2C27%2C86%2C203%2C25%2C209%2C148%2C187%2C139%2C111%2C48%2C102%2C76%2C110%2C106%2C130%2C37%2C160%2C34%2C222%2C90%2C165%2C245%2C222%2C102%2C47%2C19%2C130%2C4%2C232%2C137%2C211%2C240%2C11%2C140%2C21%5D%2CB%3A%5B191%2C154%2C43%2C10%2C207%2C204%2C164%2C231%2C136%2C58%2C239%2C30%2C147%2C230%2C101%2C111%2C150%2C35%2C128%2C57%2C252%2C79%2C173%2C120%2C25%2C126%2C81%2C85%2C8%2C7%2C122%2C237%2C190%2C152%2C246%2C182%2C130%2C219%2C67%2C76%2C167%2C178%2C235%2C250%2C28%2C61%2C186%2C250%2C199%2C67%2C58%2C50%2C86%2C182%2C108%2C77%2C89%2C112%2C59%2C125%2C226%2C50%2C205%2C227%2C125%2C128%2C104%2C27%2C59%2C66%2C53%2C133%2C159%2C203%2C97%2C125%2C139%2C159%2C158%2C7%2C215%2C47%2C140%2C226%2C223%2C231%2C44%2C110%2C184%2C61%2C233%2C47%2C67%2C148%2C22%2C120%2C173%2C156%2C117%2C181%2C94%2C154%2C43%2C10%2C207%2C204%2C164%2C231%2C136%2C58%2C239%2C30%2C147%2C230%2C101%2C111%2C150%2C35%2C128%2C57%2C252%2C79%2C173%2C120%2C25%2C126%2C81%2C85%2C8%2C7%2C122%2C237%2C190%2C152%2C246%2C182%2C130%2C219%2C67%2C76%2C167%2C178%2C235%2C250%2C28%2C61%2C186%2C250%2C199%2C67%2C58%2C50%2C86%2C182%2C108%2C77%2C89%2C112%2C59%2C125%2C226%2C50%2C205%2C227%2C125%2C128%2C104%2C27%2C59%2C66%2C53%2C133%2C159%2C203%2C97%2C125%2C139%2C159%2C158%2C7%2C215%2C47%2C140%2C226%2C223%2C231%2C44%2C110%2C184%2C61%2C233%2C47%2C67%2C148%2C22%2C120%2C173%2C156%2C117%2C181%2C94%2C154%2C43%2C10%2C207%2C204%2C164%2C231%2C136%2C58%2C239%2C30%2C147%2C230%2C101%2C111%2C150%2C35%2C128%2C57%2C252%2C79%2C173%2C120%2C25%2C126%2C81%2C85%2C8%2C7%2C122%2C237%2C190%2C152%2C246%2C182%2C130%2C219%2C67%2C76%2C167%2C178%2C235%2C250%2C28%2C61%2C186%2C250%2C199%2C67%2C58%2C50%2C86%2C182%2C108%2C77%5D%2CA%3A%5B0%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%5D%2CI%3A%5B0%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2C30%2C31%2C32%2C33%2C34%2C35%2C36%2C37%2C38%2C39%2C40%2C41%2C42%2C43%2C44%2C45%2C46%2C47%2C48%2C49%2C50%2C51%2C52%2C53%2C54%2C55%2C56%2C57%2C58%2C59%2C60%2C61%2C62%2C63%2C64%2C65%2C66%2C67%2C68%2C69%2C70%2C71%2C72%2C73%2C74%2C75%2C76%2C77%2C78%2C79%2C80%2C81%2C82%2C83%2C84%2C85%2C86%2C87%2C88%2C89%2C90%2C91%2C92%2C93%2C94%2C95%2C96%2C97%2C98%2C99%2C100%2C101%2C102%2C103%2C104%2C105%2C106%2C107%2C108%2C109%2C110%2C111%2C112%2C113%2C114%2C115%2C116%2C117%2C118%2C119%2C120%2C121%2C122%2C123%2C124%2C125%2C126%2C127%2C128%2C129%2C130%2C131%2C132%2C133%2C134%2C135%2C136%2C137%2C138%2C139%2C140%2C141%2C142%2C143%2C144%2C145%2C146%2C147%2C148%2C149%2C150%2C151%2C152%2C153%2C154%2C155%2C156%2C157%2C158%2C159%2C160%2C161%2C162%2C163%2C164%2C165%2C166%2C167%2C168%2C169%2C170%2C171%2C172%2C173%2C174%2C175%2C176%2C177%2C178%2C179%2C180%2C181%2C182%2C183%2C184%2C185%2C186%2C187%2C188%2C189%2C190%2C191%2C192%2C193%2C194%2C195%2C196%2C197%2C198%2C199%2C200%2C201%2C202%2C203%2C204%2C205%2C206%2C207%2C208%2C209%2C210%2C211%2C212%2C213%2C214%2C215%2C216%2C217%2C218%2C219%2C220%2C221%2C222%2C223%2C224%2C225%2C226%2C227%2C228%2C229%2C230%2C231%2C232%2C233%2C234%2C235%2C236%2C237%2C238%2C239%2C240%2C241%2C242%2C243%2C244%2C245%2C246%2C247%2C248%2C249%2C250%2C251%2C252%2C253%2C254%2C255%5D%7D%2CHt%3D%7BR%3A%5B0%2C128%2C255%5D%2CG%3A%5B0%2C0%2C0%5D%2CB%3A%5B0%2C0%2C0%5D%2CA%3A%5B0%2C64%2C128%5D%2CI%3A%5B0%2C128%2C255%5D%7D%2CQt%3D%7BR%3A%5B192%2C224%2C255%5D%2CG%3A%5B1%2C128%2C255%5D%2CB%3A%5B0%2C0%2C0%5D%2CA%3A%5B0%2C64%2C128%5D%2CI%3A%5B0%2C128%2C255%5D%7D%2Czt%3D%7BR%3A%5B3%2C112%2C144%2C188%2C236%2C246%2C255%5D%2CG%3A%5B5%2C31%2C29%2C22%2C76%2C158%2C250%5D%2CB%3A%5B26%2C87%2C91%2C86%2C62%2C117%2C235%5D%2CA%3A%5B0%2C30%2C38%2C49%2C67%2C85%2C107%5D%2CI%3A%5B0%2C73%2C92%2C118%2C160%2C205%2C255%5D%7D%2Cqt%3D%7BR%3A%5B1%2C240%2C255%5D%2CG%3A%5B1%2C128%2C255%5D%2CB%3A%5B1%2C128%2C255%5D%2CA%3A%5B0%2C76%2C128%5D%2CI%3A%5B0%2C153%2C255%5D%7D%2CXt%3D%7BR%3A%5B48%2C48%2C64%2C70%2C65%2C25%2C132%2C195%2C244%2C254%2C218%2C122%5D%2CG%3A%5B18%2C18%2C64%2C107%2C150%2C226%2C255%2C241%2C199%2C158%2C57%2C4%5D%2CB%3A%5B59%2C59%2C162%2C227%2C255%2C187%2C81%2C52%2C58%2C47%2C7%2C3%5D%2CA%3A%5B0%2C22%2C26%2C30%2C34%2C43%2C52%2C57%2C63%2C67%2C77%2C86%5D%2CI%3A%5B0%2C1%2C16%2C32%2C49%2C83%2C118%2C140%2C164%2C181%2C219%2C255%5D%7D%2Cjt%3D%7BR%3A%5B0%2C128%2C255%5D%2CG%3A%5B0%2C0%2C0%5D%2CB%3A%5B0%2C128%2C255%5D%2CA%3A%5B0%2C64%2C128%5D%2CI%3A%5B0%2C128%2C255%5D%7D%2CZt%3D%7BR%3A%5B68%2C49%2C53%2C253%5D%2CG%3A%5B1%2C104%2C183%2C231%5D%2CB%3A%5B84%2C142%2C121%2C37%5D%2CA%3A%5B0%2C56%2C80%2C88%5D%2CI%3A%5B0%2C64%2C192%2C255%5D%7D%2CJt%3D%7BR%3A%5B255%2C255%2C255%5D%2CG%3A%5B127%2C196%2C254%5D%2CB%3A%5B0%2C0%2C0%5D%2CA%3A%5B0%2C64%2C128%5D%2CI%3A%5B0%2C128%2C255%5D%7D%2C_t%3D%7BR%3A%5B0%2C0%2C0%5D%2CG%3A%5B0%2C128%2C255%5D%2CB%3A%5B255%2C196%2C128%5D%2CA%3A%5B0%2C64%2C128%5D%2CI%3A%5B0%2C128%2C255%5D%7D%2C%24t%3D%7BR%3A%5B3%2C64%2C0%2C0%2C255%2C255%2C255%5D%2CG%3A%5B0%2C0%2C0%2C255%2C255%2C192%2C3%5D%2CB%3A%5B0%2C32%2C48%2C56%2C64%2C96%2C128%5D%2CA%3A%5B0%2C8%2C16%2C24%2C32%2C52%2C80%5D%2CI%3A%5B0%2C32%2C64%2C96%2C160%2C192%2C255%5D%7D%2Cte%3D%7Bmin%3A0%2Cmax%3A0%2CR%3A%5B0%2C37%5D%2CG%3A%5B242%2C0%5D%2CB%3A%5B255%2C255%5D%2CA%3A%5B0%2C64%5D%2CI%3A%5B0%2C255%5D%7D%2Cee%3D%7BR%3A%5B255%2C255%5D%2CG%3A%5B255%2C11%5D%2CB%3A%5B0%2C0%5D%2CA%3A%5B0%2C64%5D%2CI%3A%5B0%2C255%5D%7D%2Cie%3D%7Bmin%3A0%2Cmax%3A0%2CR%3A%5B65%2C10%2C223%2C120%2C216%2C207%2C251%2C93%2C252%2C217%2C21%2C253%2C131%2C165%2C173%2C143%2C144%2C217%2C86%2C89%2C63%2C254%2C172%2C1%2C142%2C107%2C42%2C78%2C221%2C8%2C222%2C71%2C127%2C126%2C167%2C33%2C104%2C2%2C208%2C216%2C0%2C251%2C7%2C105%2C2%2C101%2C248%2C190%2C253%2C62%2C255%2C224%2C166%2C37%2C110%2C138%2C45%2C34%2C6%2C37%2C69%2C201%2C43%2C122%2C199%2C37%2C173%2C194%2C103%2C211%2C75%2C159%2C96%2C4%2C239%2C98%2C110%2C193%2C253%2C166%2C40%2C255%2C48%2C130%2C140%2C243%2C101%2C9%2C177%2C220%2C133%2C32%2C4%2C81%2C48%2C48%2C210%2C109%2C60%2C132%2C1%2C119%2C1%2C159%2C247%2C33%2C212%2C187%2C253%2C144%2C196%2C254%2C168%2C79%2C64%2C196%2C39%2C97%2C73%2C173%2C104%2C216%2C217%2C43%2C101%2C119%2C254%2C5%2C237%2C103%2C203%2C122%2C57%2C87%2C251%2C164%2C19%2C75%2C200%2C2%2C252%2C150%2C66%2C0%2C255%2C157%2C23%2C254%2C55%2C16%2C240%2C161%2C69%2C253%2C207%2C195%2C5%2C60%2C255%2C251%2C200%2C217%2C134%2C123%2C253%2C180%2C27%2C246%2C130%2C136%2C250%2C232%2C4%2C125%2C140%2C22%2C253%2C255%2C13%2C180%2C123%2C61%2C254%2C111%2C10%2C185%2C76%2C192%2C255%2C223%2C186%2C61%2C198%2C5%2C172%2C13%2C83%2C172%2C171%2C6%2C23%2C73%2C134%2C133%2C109%2C61%2C213%2C55%2C57%2C132%2C36%2C209%2C2%2C144%2C1%2C253%2C68%2C155%2C3%2C160%2C2%2C77%2C121%2C70%2C67%2C176%2C223%2C131%2C4%2C162%2C232%2C255%2C150%2C94%2C235%2C191%2C207%2C10%2C246%2C0%2C225%2C4%2C209%2C116%2C57%2C112%2C172%2C253%2C1%2C6%2C92%2C227%2C73%2C62%2C135%2C223%5D%2CG%3A%5B162%2C50%2C112%2C245%2C4%2C124%2C176%2C243%2C56%2C125%2C183%2C139%2C182%2C68%2C189%2C4%2C225%2C10%2C20%2C223%2C7%2C46%2C31%2C193%2C225%2C250%2C219%2C41%2C2%2C100%2C83%2C181%2C34%2C150%2C72%2C223%2C168%2C248%2C80%2C253%2C7%2C117%2C214%2C2%2C248%2C10%2C3%2C59%2C179%2C160%2C90%2C244%2C146%2C4%2C207%2C4%2C125%2C255%2C96%2C100%2C1%2C208%2C130%2C51%2C116%2C181%2C236%2C53%2C244%2C5%2C165%2C28%2C181%2C86%2C96%2C42%2C254%2C1%2C134%2C194%2C214%2C92%2C41%2C204%2C137%2C86%2C207%2C3%2C143%2C3%2C100%2C239%2C164%2C94%2C65%2C251%2C131%2C244%2C173%2C57%2C143%2C107%2C217%2C53%2C210%2C0%2C148%2C250%2C45%2C198%2C81%2C40%2C61%2C218%2C252%2C88%2C171%2C0%2C248%2C24%2C248%2C4%2C41%2C100%2C187%2C46%2C208%2C145%2C43%2C168%2C121%2C46%2C175%2C250%2C125%2C107%2C233%2C112%2C207%2C231%2C174%2C215%2C53%2C9%2C43%2C153%2C52%2C124%2C128%2C65%2C210%2C147%2C255%2C147%2C63%2C200%2C148%2C254%2C0%2C179%2C241%2C42%2C239%2C2%2C230%2C8%2C82%2C135%2C87%2C16%2C3%2C87%2C86%2C151%2C254%2C8%2C255%2C86%2C53%2C19%2C7%2C192%2C171%2C201%2C253%2C247%2C197%2C103%2C251%2C126%2C0%2C149%2C54%2C183%2C61%2C126%2C79%2C113%2C10%2C103%2C184%2C75%2C11%2C195%2C222%2C136%2C149%2C131%2C8%2C99%2C240%2C177%2C252%2C255%2C198%2C16%2C7%2C68%2C178%2C66%2C191%2C150%2C73%2C26%2C211%2C109%2C78%2C209%2C240%2C254%2C1%2C166%2C247%2C131%2C2%2C0%2C167%2C127%2C133%2C10%2C43%2C99%2C235%2C3%2C214%2C142%2C176%2C82%2C132%2C38%2C10%2C249%2C255%2C215%2C44%2C81%5D%2CB%3A%5B176%2C182%2C248%2C37%2C117%2C35%2C96%2C69%2C32%2C152%2C108%2C20%2C237%2C250%2C2%2C89%2C141%2C216%2C111%2C251%2C211%2C149%2C10%2C44%2C214%2C103%2C31%2C251%2C3%2C32%2C252%2C246%2C97%2C1%2C219%2C167%2C197%2C4%2C36%2C116%2C206%2C118%2C106%2C43%2C205%2C204%2C114%2C69%2C127%2C205%2C87%2C80%2C41%2C251%2C145%2C204%2C253%2C161%2C247%2C1%2C149%2C9%2C43%2C253%2C97%2C72%2C136%2C161%2C171%2C181%2C26%2C255%2C108%2C80%2C218%2C214%2C231%2C255%2C84%2C31%2C109%2C4%2C218%2C3%2C217%2C36%2C68%2C85%2C241%2C39%2C221%2C2%2C240%2C2%2C173%2C42%2C206%2C5%2C110%2C46%2C103%2C27%2C212%2C184%2C2%2C207%2C246%2C45%2C116%2C72%2C110%2C253%2C38%2C105%2C248%2C159%2C243%2C81%2C192%2C93%2C141%2C145%2C24%2C157%2C234%2C131%2C57%2C178%2C62%2C75%2C65%2C176%2C148%2C40%2C253%2C66%2C76%2C240%2C51%2C154%2C17%2C251%2C139%2C253%2C207%2C9%2C114%2C49%2C200%2C254%2C96%2C73%2C138%2C118%2C204%2C102%2C137%2C89%2C145%2C161%2C4%2C112%2C66%2C234%2C147%2C178%2C212%2C205%2C185%2C11%2C203%2C131%2C2%2C250%2C118%2C169%2C1%2C185%2C154%2C53%2C171%2C197%2C61%2C175%2C249%2C96%2C15%2C254%2C95%2C5%2C222%2C75%2C246%2C194%2C2%2C61%2C180%2C25%2C133%2C165%2C15%2C233%2C59%2C35%2C221%2C140%2C109%2C7%2C114%2C255%2C198%2C0%2C115%2C168%2C252%2C23%2C242%2C80%2C75%2C142%2C137%2C255%2C12%2C182%2C68%2C201%2C4%2C111%2C37%2C228%2C83%2C248%2C24%2C192%2C249%2C5%2C54%2C223%2C160%2C122%2C160%2C114%2C145%2C119%2C252%2C31%2C253%2C250%2C10%2C214%2C8%2C47%2C0%2C142%2C222%2C70%5D%2CA%3A%5B0%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%2C64%5D%2CI%3A%5B0%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2C30%2C31%2C32%2C33%2C34%2C35%2C36%2C37%2C38%2C39%2C40%2C41%2C42%2C43%2C44%2C45%2C46%2C47%2C48%2C49%2C50%2C51%2C52%2C53%2C54%2C55%2C56%2C57%2C58%2C59%2C60%2C61%2C62%2C63%2C64%2C65%2C66%2C67%2C68%2C69%2C70%2C71%2C72%2C73%2C74%2C75%2C76%2C77%2C78%2C79%2C80%2C81%2C82%2C83%2C84%2C85%2C86%2C87%2C88%2C89%2C90%2C91%2C92%2C93%2C94%2C95%2C96%2C97%2C98%2C99%2C100%2C101%2C102%2C103%2C104%2C105%2C106%2C107%2C108%2C109%2C110%2C111%2C112%2C113%2C114%2C115%2C116%2C117%2C118%2C119%2C120%2C121%2C122%2C123%2C124%2C125%2C126%2C127%2C128%2C129%2C130%2C131%2C132%2C133%2C134%2C135%2C136%2C137%2C138%2C139%2C140%2C141%2C142%2C143%2C144%2C145%2C146%2C147%2C148%2C149%2C150%2C151%2C152%2C153%2C154%2C155%2C156%2C157%2C158%2C159%2C160%2C161%2C162%2C163%2C164%2C165%2C166%2C167%2C168%2C169%2C170%2C171%2C172%2C173%2C174%2C175%2C176%2C177%2C178%2C179%2C180%2C181%2C182%2C183%2C184%2C185%2C186%2C187%2C188%2C189%2C190%2C191%2C192%2C193%2C194%2C195%2C196%2C197%2C198%2C199%2C200%2C201%2C202%2C203%2C204%2C205%2C206%2C207%2C208%2C209%2C210%2C211%2C212%2C213%2C214%2C215%2C216%2C217%2C218%2C219%2C220%2C221%2C222%2C223%2C224%2C225%2C226%2C227%2C228%2C229%2C230%2C231%2C232%2C233%2C234%2C235%2C236%2C237%2C238%2C239%2C240%2C241%2C242%2C243%2C244%2C245%2C246%2C247%2C248%2C249%2C250%2C251%2C252%2C253%2C254%2C255%5D%7D%2Cse%3Dclass%7Bconstructor()%7Be(this%2C%22gamma%22%2C1)%2Ce(this%2C%22version%22%2C.1)%2Ce(this%2C%22cluts%22%2C%7B%7D)%3Bconst%20t%3DObject.keys(W).filter((t%3D%3E!t.startsWith(%22%24%22))).sort(new%20Intl.Collator(%22en%22).compare)%3Bfor(const%20e%20of%20t)this.cluts%5Be%5D%3DW%5Be%5D%7DaddColormap(t%2Ce)%7Bthis.cluts%5Bt%5D%3De%7Dcolormaps()%7Breturn%20Object.keys(this.cluts)%7DcolorMaps()%7Breturn%20this.colormaps()%7DcolormapFromKey(t)%7Blet%20e%3Dthis.cluts%5Bt%5D%3Breturn%20void%200!%3D%3De%3Fe%3A(e%3Dthis.cluts%5Bt.toLowerCase()%5D%2Cvoid%200!%3D%3De%3Fe%3A(t.length%3E0%26%26l.warn(%22No%20color%20map%20named%20%22%2Bt)%2C%7Bmin%3A0%2Cmax%3A0%2CR%3A%5B0%2C255%5D%2CG%3A%5B0%2C255%5D%2CB%3A%5B0%2C255%5D%2CA%3A%5B0%2C255%5D%2CI%3A%5B0%2C255%5D%7D))%7Dcolormap(t%3D%22%22%2Ce%3D!1)%7Bconst%20i%3Dthis.colormapFromKey(t)%3Breturn%20this.makeLut(i.R%2Ci.G%2Ci.B%2Ci.A%2Ci.I%2Ce)%7DmakeLabelLut(t%2Ce%3D255)%7Bif(void%200%3D%3D%3Dt.R%7C%7Cvoid%200%3D%3D%3Dt.G%7C%7Cvoid%200%3D%3D%3Dt.B)throw%20new%20Error(%60Invalid%20colormap%20table%3A%20%24%7Bt%7D%60)%3Bconst%20i%3Dt.R.length%2Cs%3Dt.I%3F%3F%5B...Array(i).keys()%5D%3Bif(i!%3D%3Dt.G.length%7C%7Ci!%3D%3Dt.B.length%7C%7Ci!%3D%3Ds.length)throw%20new%20Error(%60colormap%20does%20not%20make%20sense%3A%20%24%7Bt%7D%60)%3Blet%20n%3Dnew%20Uint8ClampedArray(i).fill(e)%3Bn%5B0%5D%3D0%2Cvoid%200!%3D%3Dt.A%26%26(n%3DUint8ClampedArray.from(t.A))%3Bconst%20r%3DMath.min(...s)%2Ca%3DMath.max(...s)%2Co%3Da-r%2B1%2Cl%3Dnew%20Uint8ClampedArray(4*o).fill(0)%3Bfor(let%20e%3D0%3Be%3Ci%3Be%2B%2B)%7Blet%20i%3D4*(s%5Be%5D-r)%3Bl%5Bi%2B%2B%5D%3Dt.R%5Be%5D%2Cl%5Bi%2B%2B%5D%3Dt.G%5Be%5D%2Cl%5Bi%2B%2B%5D%3Dt.B%5Be%5D%2Cl%5Bi%2B%2B%5D%3Dn%5Be%5D%7Dconst%20h%3D%7Blut%3Al%2Cmin%3Ar%2Cmax%3Aa%7D%3Bif(t.labels)%7Bconst%20e%3Dt.labels.length%3Bif(e%3D%3D%3Do)h.labels%3Dt.labels%3Belse%20if(e%3D%3D%3Di)%7Bh.labels%3DArray(o).fill(%22%3F%22)%3Bfor(let%20e%3D0%3Be%3Ci%3Be%2B%2B)%7Bconst%20i%3Ds%5Be%5D%3Bh.labels%5Bi%5D%3Dt.labels%5Be%5D%7D%7D%7Dreturn%20h%7Dasync%20makeLabelLutFromUrl(t)%7Bconst%20e%3Dawait%20fetch(t)%2Ci%3Dawait%20e.json()%3Breturn%20this.makeLabelLut(i)%7DmakeDrawLut(t)%7Blet%20e%3D%22object%22%3D%3Dtypeof%20t%3Ft%3AW%5Bt%5D%3Bvoid%200%3D%3D%3De%26%26(e%3D%7Bmin%3A0%2Cmax%3A0%2CR%3A%5B0%2C255%2C0%2C0%2C255%2C0%2C255%5D%2CG%3A%5B0%2C0%2C255%2C0%2C255%2C255%2C0%5D%2CB%3A%5B0%2C0%2C0%2C255%2C0%2C255%2C255%5D%2CA%3A%5B0%2C255%2C255%2C255%2C255%2C255%2C255%5D%2CI%3A%5B0%2C255%5D%7D)%3Bconst%20i%3Dthis.makeLabelLut(e%2C255)%3Bif(void%200%3D%3D%3Di.labels%26%26(i.labels%3D%5B%5D)%2Ci.labels.length%3C256)%7Bfor(let%20t%3Di.labels.length%3Bt%3C256%3Bt%2B%2B)i.labels.push(t.toString())%7Dconst%20s%3Dnew%20Uint8ClampedArray(1024)%3Blet%20n%3D0%3Bfor(let%20t%3D0%3Bt%3C256%3Bt%2B%2B)s%5Bn%2B%2B%5D%3D255%2Cs%5Bn%2B%2B%5D%3D0%2Cs%5Bn%2B%2B%5D%3D0%2Cs%5Bn%2B%2B%5D%3D255%3Bs%5B3%5D%3D0%3Bconst%20r%3DMath.min(i.lut.length%2C1024)%3Bif(r%3E0)for(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)s%5Bt%5D%3Di.lut%5Bt%5D%3Breturn%7Blut%3As%2Clabels%3Ai.labels%7D%7DmakeLut(t%2Ce%2Ci%2Cs%2Cn%2Cr)%7Bconst%20a%3Dt.length%2Co%3D%5B...t%5D%2Ch%3D%5B...e%5D%2Cc%3D%5B...i%5D%3Bif(!n)%7Bn%3Dnew%20Array(a)%3Bfor(let%20t%3D0%3Bt%3Ca%3Bt%2B%2B)n%5Bt%5D%3Dt%2F(a-1)*255%7Ds%7C%7C((s%3Dnew%20Array(a).fill(64))%5B0%5D%3D0)%3Blet%20d%3DUint8ClampedArray.from(s)%2Cm%3DUint8ClampedArray.from(n)%3Bif(r)for(let%20r%3D0%3Br%3Ca%3Br%2B%2B)o%5Br%5D%3Dt%5Ba-1-r%5D%2Ch%5Br%5D%3De%5Ba-1-r%5D%2Cc%5Br%5D%3Di%5Ba-1-r%5D%2Cd%5Br%5D%3D255-s%5Ba-1-r%5D%2Cm%5Br%5D%3D255-n%5Ba-1-r%5D%3Bconst%20u%3Dnew%20Uint8ClampedArray(1024)%3Bif(void%200%3D%3D%3Dm)%7Bm%3Dnew%20Uint8ClampedArray(a).fill(0)%3Bfor(let%20t%3D0%3Bt%3Ca%3Bt%2B%2B)m%5Bt%5D%3DMath.round(255*t%2F(a-1))%7Dvoid%200%3D%3D%3Dd%26%26(d%3Dnew%20Uint8ClampedArray(a).fill(64)%2Cd%5B0%5D%3D0)%3Bfor(let%20t%3D0%3Bt%3Ca-1%3Bt%2B%2B)%7Bconst%20e%3Dm%5Bt%5D%3Blet%20i%3Dm%5Bt%2B1%5D%3B0%3D%3D%3Dt%26%260!%3D%3De%26%26l.warn(%22colormap%20issue%3A%20indices%20expected%20to%20start%20with%200%20not%20%22%2Ce)%2Ct%3D%3D%3Dm.length-2%26%26255!%3D%3Di%26%26(l.warn(%22padding%20colormap%3A%20indices%20expected%20end%20with%20255%20not%20%22%2Ci)%2Ci%3D255)%3Bconst%20s%3Di-e%3Blet%20n%3D4*e%3Bfor(let%20r%3De%3Br%3C%3Di%3Br%2B%2B)%7Bconst%20i%3D(r-e)%2Fs%3Bu%5Bn%2B%2B%5D%3Do%5Bt%5D%2Bi*(o%5Bt%2B1%5D-o%5Bt%5D)%2Cu%5Bn%2B%2B%5D%3Dh%5Bt%5D%2Bi*(h%5Bt%2B1%5D-h%5Bt%5D)%2Cu%5Bn%2B%2B%5D%3Dc%5Bt%5D%2Bi*(c%5Bt%2B1%5D-c%5Bt%5D)%2Cu%5Bn%2B%2B%5D%3Dd%5Bt%5D%2Bi*(d%5Bt%2B1%5D-d%5Bt%5D)%7D%7Dif(1%3D%3D%3Dthis.gamma)return%20u%3Bfor(let%20t%3D0%3Bt%3C1020%3Bt%2B%2B)t%254!%3D3%26%26(u%5Bt%5D%3D255*Math.pow(u%5Bt%5D%2F255%2C1%2Fthis.gamma))%3Breturn%20u%7D%7D%2Cne%3Dnew%20se%3Bimport%7Bvec3%20as%20re%7Dfrom%22gl-matrix%22%3Bimport%7BgzipSync%20as%20ae%7Dfrom%22fflate%2Fbrowser%22%3Bvar%20oe%3Dclass%7Bstatic%20getClusterBoundaryU8(t%2Ce)%7Bconst%20i%3Dnew%20Array(t.length).fill(!1)%2Cs%3Dnew%20Array(t.length).fill(!1)%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)t%5Be%5D%3E0%26%26(s%5Be%5D%3D!0)%3Bconst%20n%3De.length%2F3%3Blet%20r%3D0%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)%7Bconst%20t%3De%5Br%5D%2Cn%3De%5Br%2B1%5D%2Ca%3De%5Br%2B2%5D%3Br%2B%3D3%2Cs%5Bt%5D%3D%3D%3Ds%5Bn%5D%26%26s%5Bt%5D%3D%3D%3Ds%5Ba%5D%26%26s%5Bn%5D%3D%3D%3Ds%5Ba%5D%7C%7C(i%5Bt%5D%3D!0%2Ci%5Bn%5D%3D!0%2Ci%5Ba%5D%3D!0)%7Dreturn%20i%7Dstatic%20createMZ3(t%2Ce%2Ci%3D!1)%7Bconst%20s%3De.length%2F3%2Cn%3Dt.length%2F3%2Cr%3D3*s*4%2Ca%3Dnew%20ArrayBuffer(16%2Br%2B3*n*4)%2Co%3Dnew%20DataView(a)%3Bo.setUint16(0%2C23117%2C!0)%2Co.setUint16(2%2C3%2C!0)%2Co.setUint32(4%2Cs%2C!0)%2Co.setUint32(8%2Cn%2C!0)%2Co.setUint32(12%2C0%2C!0)%3Blet%20l%3D16%3Breturn%20new%20Uint32Array(a%2Cl%2Ce.length).set(e)%2Cl%2B%3Dr%2Cnew%20Float32Array(a%2Cl%2Ct.length).set(t)%2Ci%3Fae(new%20Uint8Array(a))%3Aa%7Dstatic%20createOBJ(t%2Ce)%7Blet%20i%3D%22%22%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%3D3)i%2B%3D%60v%20%24%7Bt%5Be%5D%7D%20%24%7Bt%5Be%2B1%5D%7D%20%24%7Bt%5Be%2B2%5D%7D%5Cn%60%3Bfor(let%20t%3D0%3Bt%3Ce.length%3Bt%2B%3D3)i%2B%3D%60f%20%24%7Be%5Bt%5D%2B1%7D%20%24%7Be%5Bt%2B1%5D%2B1%7D%20%24%7Be%5Bt%2B2%5D%2B1%7D%5Cn%60%3Breturn(new%20TextEncoder).encode(i).buffer%7Dstatic%20createSTL(t%2Ce)%7Bconst%20i%3De.length%2F3%2Cs%3Dnew%20ArrayBuffer(84%2B50*i)%2Cn%3Dnew%20DataView(s)%3Bfor(let%20t%3D0%3Bt%3C80%3Bt%2B%2B)n.setUint8(t%2C0)%3Bn.setUint32(80%2Ci%2C!0)%3Blet%20r%3D84%3Bfor(let%20i%3D0%3Bi%3Ce.length%3Bi%2B%3D3)%7Bconst%20s%3D3*e%5Bi%5D%2Ca%3D3*e%5Bi%2B1%5D%2Co%3D3*e%5Bi%2B2%5D%3Bn.setFloat32(r%2C0%2C!0)%2Cn.setFloat32(r%2B4%2C0%2C!0)%2Cn.setFloat32(r%2B8%2C0%2C!0)%2Cr%2B%3D12%2Cn.setFloat32(r%2Ct%5Bs%5D%2C!0)%2Cn.setFloat32(r%2B4%2Ct%5Bs%2B1%5D%2C!0)%2Cn.setFloat32(r%2B8%2Ct%5Bs%2B2%5D%2C!0)%2Cr%2B%3D12%2Cn.setFloat32(r%2Ct%5Ba%5D%2C!0)%2Cn.setFloat32(r%2B4%2Ct%5Ba%2B1%5D%2C!0)%2Cn.setFloat32(r%2B8%2Ct%5Ba%2B2%5D%2C!0)%2Cr%2B%3D12%2Cn.setFloat32(r%2Ct%5Bo%5D%2C!0)%2Cn.setFloat32(r%2B4%2Ct%5Bo%2B1%5D%2C!0)%2Cn.setFloat32(r%2B8%2Ct%5Bo%2B2%5D%2C!0)%2Cr%2B%3D12%2Cn.setUint16(r%2C0%2C!0)%2Cr%2B%3D2%7Dreturn%20s%7Dstatic%20downloadArrayBuffer(t%2Ce)%7Bconst%20i%3Dnew%20Blob(%5Bt%5D%2C%7Btype%3A%22application%2Foctet-stream%22%7D)%2Cs%3DURL.createObjectURL(i)%2Cn%3Ddocument.createElement(%22a%22)%3Bn.href%3Ds%2Cn.download%3De%2Cdocument.body.appendChild(n)%2Cn.style.display%3D%22none%22%2Cn.click()%2CsetTimeout((()%3D%3E%7Bdocument.body.removeChild(n)%2CURL.revokeObjectURL(s)%7D)%2C0)%7Dstatic%20saveMesh(t%2Ce%2Ci%3D%22.mz3%22%2Cs%3D!1)%7Blet%20n%3Dnew%20ArrayBuffer(0)%3Breturn%2F%5C.obj%24%2Fi.test(i)%3Fn%3Dthis.createOBJ(t%2Ce)%3A%2F%5C.stl%24%2Fi.test(i)%3Fn%3Dthis.createSTL(t%2Ce)%3A(%2F%5C.mz3%24%2Fi.test(i)%7C%7C(i%2B%3D%22.mz3%22)%2Cn%3Dthis.createMZ3(t%2Ce%2Cs))%2Ci.length%3E4%26%26this.downloadArrayBuffer(n%2Ci)%2Cn%7Dstatic%20getClusterBoundary(t%2Ce)%7Bconst%20i%3Dnew%20Uint32Array(t.buffer)%2Cs%3Dnew%20Array(i.length).fill(!1)%2Cn%3De.length%2F3%3Blet%20r%3D0%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)%7Bconst%20t%3De%5Br%5D%2Cn%3De%5Br%2B1%5D%2Ca%3De%5Br%2B2%5D%3Br%2B%3D3%2Ci%5Bt%5D%3D%3D%3Di%5Bn%5D%26%26i%5Bt%5D%3D%3D%3Di%5Ba%5D%26%26i%5Bn%5D%3D%3D%3Di%5Ba%5D%7C%7C(s%5Bt%5D%3D!0%2Cs%5Bn%5D%3D!0%2Cs%5Ba%5D%3D!0)%7Dreturn%20s%7Dstatic%20getExtents(t)%7Bif(!ArrayBuffer.isView(t)%26%26!Array.isArray(t)%7C%7Ct.length%3C3)return%7BmxDx%3A0%2CextentsMin%3A0%2CextentsMax%3A0%7D%3Blet%20e%3D0%3Bconst%20i%3Dre.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D)%2Cs%3Dre.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D)%3Bfor(let%20n%3D0%3Bn%3Ct.length%3Bn%2B%3D3)%7Bconst%20r%3Dre.fromValues(t%5Bn%5D%2Ct%5Bn%2B1%5D%2Ct%5Bn%2B2%5D)%3Be%3DMath.max(e%2Cre.len(r))%2Cre.min(i%2Ci%2Cr)%2Cre.max(s%2Cs%2Cr)%7Dreturn%7BmxDx%3Ae%2CextentsMin%3A%5Bi%5B0%5D%2Ci%5B1%5D%2Ci%5B2%5D%5D%2CextentsMax%3A%5Bs%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D%5D%7D%7Dstatic%20generateNormals(t%2Ce)%7Bconst%20i%3D%5B%5D%3Blet%20s%3Bconst%20n%3Dt.length%3Blet%20r%2Ca%2Co%2Cl%2Ch%2Cc%2Cd%2Cm%2Cu%3Bconst%20A%3Dnew%20Float32Array(n)%2Cf%3De.length%3Bfor(s%3D0%3Bs%3Cf%3Bs%2B%3D3)%7Bd%3D3*e%5Bs%5D%2Cm%3D3*e%5Bs%2B1%5D%2Cu%3D3*e%5Bs%2B2%5D%3Bconst%20n%3D%5Bt%5Bd%5D%2Ct%5Bd%2B1%5D%2Ct%5Bd%2B2%5D%5D%2Cf%3D%5Bt%5Bm%5D%2Ct%5Bm%2B1%5D%2Ct%5Bm%2B2%5D%5D%2Cg%3D%5Bt%5Bu%5D%2Ct%5Bu%2B1%5D%2Ct%5Bu%2B2%5D%5D%3Br%3Df%5B0%5D-n%5B0%5D%2Ca%3Df%5B1%5D-n%5B1%5D%2Co%3Df%5B2%5D-n%5B2%5D%2Cl%3Dg%5B0%5D-n%5B0%5D%2Ch%3Dg%5B1%5D-n%5B1%5D%2Cc%3Dg%5B2%5D-n%5B2%5D%2Ci%5B0%5D%3Dh*o-c*a%2Ci%5B1%5D%3Dc*r-l*o%2Ci%5B2%5D%3Dl*a-h*r%2CA%5Bd%5D%2B%3Di%5B0%5D%2CA%5Bd%2B1%5D%2B%3Di%5B1%5D%2CA%5Bd%2B2%5D%2B%3Di%5B2%5D%2CA%5Bm%5D%2B%3Di%5B0%5D%2CA%5Bm%2B1%5D%2B%3Di%5B1%5D%2CA%5Bm%2B2%5D%2B%3Di%5B2%5D%2CA%5Bu%5D%2B%3Di%5B0%5D%2CA%5Bu%2B1%5D%2B%3Di%5B1%5D%2CA%5Bu%2B2%5D%2B%3Di%5B2%5D%7Dfor(s%3D0%3Bs%3Cn%3Bs%2B%3D3)%7Bi%5B0%5D%3D-1*A%5Bs%5D%2Ci%5B1%5D%3D-1*A%5Bs%2B1%5D%2Ci%5B2%5D%3D-1*A%5Bs%2B2%5D%3Blet%20t%3Di%5B0%5D*i%5B0%5D%2Bi%5B1%5D*i%5B1%5D%2Bi%5B2%5D*i%5B2%5D%3Bt%3E0%26%26(t%3D1%2FMath.sqrt(t)%2Ci%5B0%5D*%3Dt%2Ci%5B1%5D*%3Dt%2Ci%5B2%5D*%3Dt)%2CA%5Bs%5D%3Di%5B0%5D%2CA%5Bs%2B1%5D%3Di%5B1%5D%2CA%5Bs%2B2%5D%3Di%5B2%5D%7Dreturn%20A%7D%7D%3Bimport%7Bmat4%20as%20le%2Cvec4%20as%20he%2Cvec3%20as%20ce%7Dfrom%22gl-matrix%22%3Bimport%7BdecompressSync%20as%20de%2CunzipSync%20as%20me%7Dfrom%22fflate%2Fbrowser%22%3Bimport%20ue%20from%22array-equal%22%3Bimport%7Bcompress%20as%20Ae%2Cdecompress%20as%20fe%2CdecompressSync%20as%20ge%2CstrFromU8%20as%20pe%2CstrToU8%20as%20ve%7Dfrom%22fflate%2Fbrowser%22%3Bimport%7Bmat4%20as%20xe%2Cvec3%20as%20we%2Cvec4%20as%20Ce%7Dfrom%22gl-matrix%22%3Bvar%20be%3Dclass%20t%7Bstatic%20arrayBufferToBase64(e)%7Bconst%20i%3Dnew%20Uint8Array(e)%3Breturn%20t.uint8tob64(i)%7Dstatic%20readMatV4(t)%7Blet%20e%3Dt.byteLength%3Bif(e%3C40)throw%20new%20Error(%22File%20too%20small%20to%20be%20MAT%20v4%3A%20bytes%20%3D%20%22%2Bt.byteLength)%3Blet%20i%3Dnew%20DataView(t)%2Cs%3Di.getUint16(0%2C!0)%2Cn%3Dt%3Bif(35615%3D%3D%3Ds%7C%7C8075%3D%3D%3Ds)%7Bconst%20r%3Dge(new%20Uint8Array(t))%3Bi%3Dnew%20DataView(r.buffer)%2Cs%3Di.getUint16(0%2C!0)%2Cn%3Dr.buffer%2Ce%3Dn.byteLength%7Dconst%20r%3Dnew%20TextDecoder(%22utf-8%22)%2Ca%3Dnew%20Uint8Array(n)%3Blet%20o%3D0%3Bconst%20l%3D%7B%7D%3Bfunction%20h()%7Bconst%20t%3Di.getUint32(o%2C!0)%2Ce%3Di.getUint32(o%2B4%2C!0)%2Cs%3Di.getUint32(o%2B8%2C!0)%2Cn%3Di.getUint32(o%2B12%2C!0)%2Ch%3Di.getUint32(o%2B16%2C!0)%3Bif(o%2B%3D20%2C0!%3D%3Dn)throw%20new%20Error(%22Matlab%20V4%20reader%20does%20not%20support%20imaginary%20numbers%22)%3Bconst%20c%3De*s%3Bif(c%3C1)throw%20new%20Error(%22mrows%20*%20ncols%20must%20be%20greater%20than%20one%22)%3Bconst%20d%3Dnew%20Uint8Array(a.subarray(o%2Co%2Bh))%2Cm%3Dr.decode(d).trim().replaceAll(%22%5C0%22%2C%22%22)%2Cu%3D(A%3Dt%2CMath.floor(A%2F10)%2510)%3Bvar%20A%3Blet%20f%3D8%3Bif(u%3E%3D1%26%26u%3C%3D2)f%3D4%3Belse%20if(u%3E%3D3%26%26u%3C%3D4)f%3D2%3Belse%20if(5%3D%3D%3Du)f%3D1%3Belse%20if(0!%3D%3Du)throw%20new%20Error(%22impossible%20Matlab%20v4%20datatype%22)%3Bif(o%2B%3Dh%2Ct%3E50)throw%20new%20Error(%22Does%20not%20appear%20to%20be%20little-endian%20V4%20Matlab%20file%22)%3Bconst%20g%3Do%2Bc*f%3Bl%5Bm%5D%3Dfunction(t%2Ce%2Ci)%7Bconst%20s%3Dnew%20Uint8Array(a.subarray(e%2Ci))%3Breturn%201%3D%3D%3Dt%3Fnew%20Float32Array(s.buffer)%3A2%3D%3D%3Dt%3Fnew%20Int32Array(s.buffer)%3A3%3D%3D%3Dt%3Fnew%20Int16Array(s.buffer)%3A4%3D%3D%3Dt%3Fnew%20Uint16Array(s.buffer)%3A5%3D%3D%3Dt%3Fnew%20Uint8Array(s.buffer)%3Anew%20Float64Array(s.buffer)%7D(u%2Co%2Cg)%2Co%3Dg%7Dfor(%3Bo%2B20%3Ce%3B)h()%3Breturn%20l%7Dstatic%20uint8tob64(t)%7Blet%20e%3D%22%22%3Bconst%20i%3D%22ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%2B%2F%22%2Cs%3Dt.byteLength%2Cn%3Ds%253%2Cr%3Ds-n%3Blet%20a%2Co%2Cl%2Ch%2Cc%3Bfor(let%20s%3D0%3Bs%3Cr%3Bs%2B%3D3)c%3Dt%5Bs%5D%3C%3C16%7Ct%5Bs%2B1%5D%3C%3C8%7Ct%5Bs%2B2%5D%2Ca%3D(16515072%26c)%3E%3E18%2Co%3D(258048%26c)%3E%3E12%2Cl%3D(4032%26c)%3E%3E6%2Ch%3D63%26c%2Ce%2B%3Di%5Ba%5D%2Bi%5Bo%5D%2Bi%5Bl%5D%2Bi%5Bh%5D%3Breturn%201%3D%3D%3Dn%3F(c%3Dt%5Br%5D%2Ca%3D(252%26c)%3E%3E2%2Co%3D(3%26c)%3C%3C4%2Ce%2B%3Di%5Ba%5D%2Bi%5Bo%5D%2B%22%3D%3D%22)%3A2%3D%3D%3Dn%26%26(c%3Dt%5Br%5D%3C%3C8%7Ct%5Br%2B1%5D%2Ca%3D(64512%26c)%3E%3E10%2Co%3D(1008%26c)%3E%3E4%2Cl%3D(15%26c)%3C%3C2%2Ce%2B%3Di%5Ba%5D%2Bi%5Bo%5D%2Bi%5Bl%5D%2B%22%3D%22)%2Ce%7Dstatic%20download(t%2Ce%2Ci)%7Bconst%20s%3Ddocument.createElement(%22a%22)%2Cn%3DArray.isArray(t)%3Ft%3A%5Bt%5D%2Cr%3Dnew%20Blob(n%2C%7Btype%3Ai%7D)%3Bs.href%3DURL.createObjectURL(r)%2Cs.download%3De%2Cs.click()%7Dstatic%20readFileAsync(t)%7Breturn%20new%20Promise(((e%2Ci)%3D%3E%7Bconst%20s%3Dnew%20FileReader%3Bs.onload%3D()%3D%3E%7Be(s.result)%7D%2Cs.onerror%3Di%2Cs.readAsArrayBuffer(t)%7D))%7Dstatic%20blobToBase64(t)%7Breturn%20new%20Promise((e%3D%3E%7Bconst%20i%3Dnew%20FileReader%3Bi.onloadend%3D()%3D%3Ee(i.result)%2Ci.readAsDataURL(t)%7D))%7Dstatic%20async%20decompressBase64String(e)%7Bconst%20i%3Datob(e)%2Cs%3Dnew%20ArrayBuffer(i.length)%2Cn%3Dnew%20Uint8Array(s)%3Bfor(let%20t%3D0%3Bt%3Ci.length%3Bt%2B%2B)n%5Bt%5D%3Di.charCodeAt(t)%3Breturn%20t.decompressArrayBuffer(n)%7Dstatic%20async%20compressToBase64String(e)%7Bconst%20i%3Dawait%20t.compressStringToArrayBuffer(e)%3Breturn%20t.uint8tob64(new%20Uint8Array(i))%7Dstatic%20async%20compressStringToArrayBuffer(t)%7Breturn%20new%20Promise(((e%2Ci)%3D%3E%7Bconst%20s%3Dve(t)%3BAe(s%2C((t%2Cs)%3D%3E%7Bt%3Fi(t)%3Ae(s.buffer)%7D))%7D))%7Dstatic%20isArrayBufferCompressed(t)%7Bif(t%26%26t.byteLength)%7Bconst%20e%3Dnew%20Uint8Array(t)%3Breturn%208075%3D%3D%3D(e%5B0%5D%3C%3C8%7Ce%5B1%5D)%7Dreturn!1%7Dstatic%20async%20decompressArrayBuffer(t)%7Breturn%20new%20Promise(((e%2Ci)%3D%3E%7Bconst%20s%3Dnew%20Uint8Array(t)%3Bfe(s%2C((t%2Cs)%3D%3E%7Bif(t)i(t)%3Belse%7Bconst%20t%3Dpe(s)%3Be(t)%7D%7D))%7D))%7Dstatic%20arraysAreEqual(t%2Ce)%7Breturn%20ue(t%2Ce)%7Dstatic%20range(t%2Ce%2Ci)%7Breturn%20Array.from(%7Blength%3A(e-t)%2Fi%2B1%7D%2C((e%2Cs)%3D%3Et%2Bs*i))%7Dstatic%20sph2cartDeg(t%2Ce)%7Bconst%20i%3D-e*(Math.PI%2F180)%2Cs%3D(t-90)%25360*(Math.PI%2F180)%2Cn%3D%5BMath.cos(i)*Math.cos(s)%2CMath.cos(i)*Math.sin(s)%2CMath.sin(i)%5D%2Cr%3DMath.sqrt(n%5B0%5D*n%5B0%5D%2Bn%5B1%5D*n%5B1%5D%2Bn%5B2%5D*n%5B2%5D)%3Breturn%20r%3C%3D0%7C%7C(n%5B0%5D%2F%3Dr%2Cn%5B1%5D%2F%3Dr%2Cn%5B2%5D%2F%3Dr)%2Cn%7Dstatic%20vox2mm(t%2Ce)%7Bconst%20i%3Dxe.clone(e)%3Bxe.transpose(i%2Ci)%3Bconst%20s%3DCe.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2C1)%3BCe.transformMat4(s%2Cs%2Ci)%3Breturn%20we.fromValues(s%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D)%7D%7D%2Cye%3Dl%2CIe%3Dclass%20t%7Bstatic%20readTRACT(t)%7Bconst%20e%3Dt.byteLength%3Bif(e%3C20)throw%20new%20Error(%22File%20too%20small%20to%20be%20niml.tract%3A%20bytes%20%3D%20%22%2Be)%3Bconst%20i%3Dnew%20DataView(t)%2Cs%3Dnew%20Uint8Array(t)%3Blet%20n%3D0%3Bfunction%20r()%7Bfor(%3Bn%3Ce%26%2660!%3D%3Ds%5Bn%5D%3B)n%2B%2B%3Bconst%20i%3Dn%3Bfor(%3Bn%3Ce%26%2662!%3D%3Ds%5Bn%5D%3B)n%2B%2B%3Breturn%20n%2B%2B%2Cn-i%3C1%3F%22%22%3A(new%20TextDecoder).decode(t.slice(i%2Cn-1)).trim()%7Dlet%20a%3Dr()%3Bfunction%20o(t)%7Bconst%20e%3Da.indexOf(t)%3Bif(e%3C0)return%200%3Bconst%20i%3Da.indexOf('%22'%2Ce)%2B1%2Cs%3Da.indexOf('%22'%2Ci)%2Cn%3Da.slice(i%2Cs)%3Breturn%20parseInt(n)%7Dconst%20h%3Do(%22N_tracts%3D%22)%3B(!a.startsWith(%22%3Cnetwork%22)%7C%7Ch%3C1)%26%26l.warn(%22This%20is%20not%20a%20valid%20niml.tract%20file%20%22%2Ba)%3Blet%20c%3D0%3Bconst%20d%3D%5B%5D%3Bd.push(c)%3Bconst%20m%3D%5B%5D%2Cu%3D%5B%5D%3Bfor(let%20t%3D0%3Bt%3Ch%3Bt%2B%2B)%7Ba%3Dr()%3Bconst%20t%3Do(%22ni_dimen%3D%22)%2Ce%3Do(%22Bundle_Tag%3D%22)%2Cs%3Da.includes(%22binary.lsbfirst%22)%3Bfor(let%20r%3D0%3Br%3Ct%3Br%2B%2B)%7Bn%2B%3D4%3Bconst%20t%3Di.getUint32(n%2Cs)%2F3%3Bn%2B%3D4%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)m.push(i.getFloat32(n%2Cs))%2Cn%2B%3D4%2Cm.push(-i.getFloat32(n%2Cs))%2Cn%2B%3D4%2Cm.push(i.getFloat32(n%2Cs))%2Cn%2B%3D4%3Bc%2B%3Dt%2Cd.push(c)%2Cu.push(e)%7Da%3Dr()%7Dconst%20A%3D%5B%5D%3Breturn%20A.push(%7Bid%3A%22tract%22%2Cvals%3AFloat32Array.from(u)%7D)%2C%7Bpts%3Anew%20Float32Array(m)%2CoffsetPt0%3Anew%20Uint32Array(d)%2Cdps%3AA%7D%7Dstatic%20readTT(t)%7Blet%20e%3Dnew%20Uint32Array(0)%2Ci%3Dnew%20Float32Array(0)%3Bconst%20s%3Dbe.readMatV4(t)%3Bif(!(%22trans_to_mni%22in%20s))throw%20new%20Error(%22TT%20format%20file%20must%20have%20'trans_to_mni'%22)%3Bif(!(%22voxel_size%22in%20s))throw%20new%20Error(%22TT%20format%20file%20must%20have%20'voxel_size'%22)%3Bif(!(%22track%22in%20s))throw%20new%20Error(%22TT%20format%20file%20must%20have%20'track'%22)%3Blet%20n%3Dle.create()%3Bconst%20r%3Ds.trans_to_mni%3Breturn%20n%3Dle.fromValues(r%5B0%5D%2Cr%5B1%5D%2Cr%5B2%5D%2Cr%5B3%5D%2Cr%5B4%5D%2Cr%5B5%5D%2Cr%5B6%5D%2Cr%5B7%5D%2Cr%5B8%5D%2Cr%5B9%5D%2Cr%5B10%5D%2Cr%5B11%5D%2Cr%5B12%5D%2Cr%5B13%5D%2Cr%5B14%5D%2Cr%5B15%5D)%2Cle.transpose(n%2Cn)%2Cfunction(t)%7Bconst%20s%3Dnew%20DataView(t.buffer)%2Cr%3D%5B%5D%3Blet%20a%3D0%2Co%3D0%3Bfor(%3Bo%3Ct.length%3B)%7Br.push(o)%3Bconst%20t%3Ds.getUint32(o%2C!0)%3Bo%3Do%2Bt%2B13%2Ca%2B%3Dt%7De%3Dnew%20Uint32Array(r.length%2B1)%2Ci%3Dnew%20Float32Array(a)%3Blet%20l%3D0%3Bfor(let%20t%3D0%3Bt%3Cr.length%3Bt%2B%2B)%7Be%5Bt%5D%3Dl%2F3%3Blet%20n%3Dr%5Bt%5D%3Bconst%20a%3Ds.getUint32(n%2C!0)%2F3%3Blet%20o%3Ds.getInt32(n%2B4%2C!0)%2Ch%3Ds.getInt32(n%2B8%2C!0)%2Cc%3Ds.getInt32(n%2B12%2C!0)%3Bn%2B%3D16%2Ci%5Bl%2B%2B%5D%3Do%2Ci%5Bl%2B%2B%5D%3Dh%2Ci%5Bl%2B%2B%5D%3Dc%3Bfor(let%20t%3D2%3Bt%3C%3Da%3Bt%2B%2B)o%2B%3Ds.getInt8(n%2B%2B)%2Ch%2B%3Ds.getInt8(n%2B%2B)%2Cc%2B%3Ds.getInt8(n%2B%2B)%2Ci%5Bl%2B%2B%5D%3Do%2Ci%5Bl%2B%2B%5D%3Dh%2Ci%5Bl%2B%2B%5D%3Dc%7Dfor(let%20t%3D0%3Bt%3Cl%3Bt%2B%2B)i%5Bt%5D%3Di%5Bt%5D%2F32%3Blet%20h%3D0%3Bfor(let%20t%3D0%3Bt%3Cl%2F3%3Bt%2B%2B)%7Bconst%20t%3Dhe.fromValues(i%5Bh%5D%2Ci%5Bh%2B1%5D%2Ci%5Bh%2B2%5D%2C1)%3Bhe.transformMat4(t%2Ct%2Cn)%2Ci%5Bh%2B%2B%5D%3Dt%5B0%5D%2Ci%5Bh%2B%2B%5D%3Dt%5B1%5D%2Ci%5Bh%2B%2B%5D%3Dt%5B2%5D%7De%5Br.length%5D%3Dl%2F3%7D(s.track)%2C%7Bpts%3Ai%2CoffsetPt0%3Ae%7D%7Dstatic%20readTRX(t)%7Bfunction%20e(t)%7Bconst%20e%3D(31744%26t)%3E%3E10%2Ci%3D1023%26t%3Breturn(t%3E%3E15%3F-1%3A1)*(e%3F31%3D%3D%3De%3Fi%3FNaN%3A1%2F0%3AMath.pow(2%2Ce-15)*(1%2Bi%2F1024)%3Ai%2F1024*6103515625e-14)%7Dlet%20i%3D0%2Cs%3D0%2Cn%3Dnew%20Float32Array(%5B%5D)%3Bconst%20r%3D%5B%5D%2Ca%3D%5B%5D%2Co%3D%5B%5D%2Cl%3D%5B%5D%3Blet%20h%3D%5B%5D%2Cc%3D!1%3Bconst%20d%3Dme(new%20Uint8Array(t)%2C%7Bfilter%3At%3D%3Et.originalSize%3E0%7D)%2Cm%3DObject.keys(d)%3Bfor(let%20t%3D0%2Cu%3Dm.length%3Bt%3Cu%3Bt%2B%2B)%7Bconst%20u%3Dm%5Bt%5D.split(%22%2F%22)%2CA%3Du.slice(-1)%5B0%5D%3Bif(A.startsWith(%22.%22))continue%3Bconst%20f%3Du.slice(-2)%5B0%5D%2Cg%3DA.split(%22.%22)%5B0%5D%2Cp%3Dd%5Bm%5Bt%5D%5D%3Bif(A.includes(%22header.json%22))%7Bconst%20t%3D(new%20TextDecoder).decode(p)%3Bh%3DJSON.parse(t)%3Bcontinue%7Dlet%20v%3D0%2Cx%3D%5B%5D%3Bif(A.endsWith(%22.uint64%22)%7C%7CA.endsWith(%22.int64%22))%7Bv%3Dp.length%2F8%2Cx%3Dnew%20Uint32Array(v)%3Bconst%20t%3Dnew%20Uint32Array(p.buffer)%3Blet%20e%3D0%3Bfor(let%20i%3D0%3Bi%3Cv%3Bi%2B%2B)x%5Bi%5D%3Dt%5Be%5D%2C0!%3D%3Dt%5Be%2B1%5D%26%26(c%3D!0)%2Ce%2B%3D2%7Delse%20if(A.endsWith(%22.uint32%22))x%3Dnew%20Uint32Array(p.buffer)%3Belse%20if(A.endsWith(%22.uint16%22))x%3Dnew%20Uint16Array(p.buffer)%3Belse%20if(A.endsWith(%22.uint8%22))x%3Dnew%20Uint8Array(p.buffer)%3Belse%20if(A.endsWith(%22.int32%22))x%3Dnew%20Int32Array(p.buffer)%3Belse%20if(A.endsWith(%22.int16%22))x%3Dnew%20Int16Array(p.buffer)%3Belse%20if(A.endsWith(%22.int8%22))x%3Dnew%20Int8Array(p.buffer)%3Belse%20if(A.endsWith(%22.float64%22))x%3Dnew%20Float64Array(p.buffer)%3Belse%20if(A.endsWith(%22.float32%22))x%3Dnew%20Float32Array(p.buffer)%3Belse%7Bif(!A.endsWith(%22.float16%22))continue%3B%7Bv%3Dp.length%2F2%2Cx%3Dnew%20Float32Array(v)%3Bconst%20t%3Dnew%20Uint16Array(p.buffer)%2Ci%3Dnew%20Float32Array(65536)%3Bfor(let%20t%3D0%3Bt%3C65536%3Bt%2B%2B)i%5Bt%5D%3De(t)%3Bfor(let%20e%3D0%3Be%3Cv%3Be%2B%2B)x%5Be%5D%3Di%5Bt%5Be%5D%5D%7D%7Dif(v%3Dx.length%2Cf.includes(%22groups%22))a.push(%7Bid%3Ag%2Cvals%3AFloat32Array.from(x.slice())%7D)%3Belse%20if(f.includes(%22dpv%22))l.push(%7Bid%3Ag%2Cvals%3AFloat32Array.from(x.slice())%7D)%3Belse%20if(f.includes(%22dps%22))o.push(%7Bid%3Ag%2Cvals%3AFloat32Array.from(x.slice())%7D)%3Belse%7Bif(A.startsWith(%22offsets.%22))%7Bi%3Dv%3Bfor(let%20t%3D0%3Bt%3Cv%3Bt%2B%2B)r%5Bt%5D%3Dx%5Bt%5D%7DA.startsWith(%22positions.3.%22)%26%26(s%3Dv%2Cn%3Dnew%20Float32Array(x))%7D%7Dif(0%3D%3D%3Di%7C%7C0%3D%3D%3Ds)throw%20new%20Error(%22Failure%20reading%20TRX%20format%20(no%20offsets%20or%20points).%22)%3Bif(c)throw%20new%20Error(%22Too%20many%20vertices%3A%20JavaScript%20does%20not%20support%2064%20bit%20integers%22)%3Breturn%20r%5Bi%5D%3Ds%2F3%2C%7Bpts%3An%2CoffsetPt0%3Anew%20Uint32Array(r)%2Cdpg%3Aa%2Cdps%3Ao%2Cdpv%3Al%2Cheader%3Ah%7D%7Dstatic%20readTSF(t%2Ce%3D0)%7Bconst%20i%3Dnew%20Float32Array(e)%2Cs%3Dt.byteLength%3Bif(s%3C20)throw%20new%20Error(%22File%20too%20small%20to%20be%20TSF%3A%20bytes%20%3D%20%22%2Bs)%3Bconst%20n%3Dnew%20Uint8Array(t)%3Blet%20r%3D0%3Bfunction%20a()%7Bfor(%3Br%3Cs%26%2610%3D%3D%3Dn%5Br%5D%3B)r%2B%2B%3Bconst%20e%3Dr%3Bfor(%3Br%3Cs%26%2610!%3D%3Dn%5Br%5D%3B)r%2B%2B%3Breturn%20r%2B%2B%2Cr-e%3C1%3F%22%22%3A(new%20TextDecoder).decode(t.slice(e%2Cr-1))%7Dlet%20o%3Da()%3Bif(!o.includes(%22mrtrix%20track%20scalars%22))throw%20new%20Error(%22Not%20a%20valid%20TSF%20file%22)%3Blet%20l%3D-1%3Bfor(%3Br%3Cs%26%26!o.includes(%22END%22)%3B)if(o%3Da()%2Co.toLowerCase().startsWith(%22file%3A%22)%26%26(l%3DparseInt(o.split(%22%20%22).pop()))%2Co.toLowerCase().startsWith(%22datatype%3A%22)%26%26!o.endsWith(%22Float32LE%22))throw%20new%20Error(%22Only%20supports%20TSF%20files%20with%20Float32LE%22)%3Bif(l%3C20)throw%20new%20Error(%22Not%20a%20valid%20TSF%20file%20(missing%20file%20offset)%22)%3Br%3Dl%3Bconst%20h%3Dnew%20DataView(t)%3Blet%20c%3D0%3Bfor(%3Br%2B4%3C%3Ds%26%26c%3Ce%3B)%7Bconst%20t%3Dh.getFloat32(r%2C!0)%3Bif(r%2B%3D4%2CisFinite(t))i%5Bc%2B%2B%5D%3Dt%3Belse%20if(!isNaN(t))break%7Dreturn%20i%7Dstatic%20readTCK(t)%7Bconst%20e%3Dt.byteLength%3Bif(e%3C20)throw%20new%20Error(%22File%20too%20small%20to%20be%20TCK%3A%20bytes%20%3D%20%22%2Be)%3Bconst%20i%3Dnew%20Uint8Array(t)%3Blet%20s%3D0%3Bfunction%20n()%7Bfor(%3Bs%3Ce%26%2610%3D%3D%3Di%5Bs%5D%3B)s%2B%2B%3Bconst%20n%3Ds%3Bfor(%3Bs%3Ce%26%2610!%3D%3Di%5Bs%5D%3B)s%2B%2B%3Breturn%20s%2B%2B%2Cs-n%3C1%3F%22%22%3A(new%20TextDecoder).decode(t.slice(n%2Cs-1))%7Dlet%20r%3Dn()%3Bif(!r.includes(%22mrtrix%20tracks%22))throw%20new%20Error(%22Not%20a%20valid%20TCK%20file%22)%3Blet%20a%3D-1%3Bfor(%3Bs%3Ce%26%26!r.includes(%22END%22)%3B)r%3Dn()%2Cr.toLowerCase().startsWith(%22file%3A%22)%26%26(a%3DparseInt(r.split(%22%20%22).pop()))%3Bif(a%3C20)throw%20new%20Error(%22Not%20a%20valid%20TCK%20file%20(missing%20file%20offset)%22)%3Bs%3Da%3Bconst%20o%3Dnew%20DataView(t)%3Blet%20l%3D0%2Ch%3Dnew%20Uint32Array(e%2F16)%2Cc%3D0%2Cd%3D0%2Cm%3Dnew%20Float32Array(e%2F4)%3Bfor(h%5B0%5D%3D0%3Bs%2B12%3Ce%3B)%7Bconst%20t%3Do.getFloat32(s%2C!0)%3Bs%2B%3D4%3Bconst%20e%3Do.getFloat32(s%2C!0)%3Bs%2B%3D4%3Bconst%20i%3Do.getFloat32(s%2C!0)%3Bif(s%2B%3D4%2CisFinite(t))m%5Bd%2B%2B%5D%3Dt%2Cm%5Bd%2B%2B%5D%3De%2Cm%5Bd%2B%2B%5D%3Di%2Cl%2B%2B%3Belse%20if(h%5Bc%2B%2B%5D%3Dl%2C!isNaN(t))break%7Dreturn%20m%3Dm.slice(0%2Cd)%2Ch%3Dh.slice(0%2Cc)%2C%7Bpts%3Am%2CoffsetPt0%3Ah%7D%7Dstatic%20readTRK(t)%7Blet%20e%3Dnew%20DataView(t)%2Ci%3De.getUint32(0%2C!0)%3Bif(1128354388!%3D%3Di)%7Blet%20s%3Bif(4247762216%3D%3D%3Di)throw%20new%20Error(%22zstd%20TRK%20decompression%20is%20not%20supported%22)%3Bs%3Dde(new%20Uint8Array(t))%2Ct%3Ds.buffer%2Ce%3Dnew%20DataView(t)%2Ci%3De.getUint32(0%2C!0)%7Dconst%20s%3De.getUint32(992%2C!0)%2Cn%3De.getUint32(996%2C!0)%3Bif(s%3E2%7C%7C1e3!%3D%3Dn%7C%7C1128354388!%3D%3Di)throw%20new%20Error(%22Not%20a%20valid%20TRK%20file%22)%3Bconst%20r%3De.getInt16(36%2C!0)%2Ca%3D%5B%5D%3Bfor(let%20e%3D0%3Be%3Cr%3Be%2B%2B)%7Bconst%20i%3Dnew%20Uint8Array(t.slice(38%2B20*e%2C58%2B20*e))%2Cs%3D(new%20TextDecoder).decode(i).split(%22%5C0%22).shift()%3Ba.push(%7Bid%3As.trim()%2Cvals%3A%5B%5D%7D)%7Dconst%20o%3De.getFloat32(12%2C!0)%2Ch%3De.getFloat32(16%2C!0)%2Cc%3De.getFloat32(20%2C!0)%2Cd%3Dle.fromValues(1%2Fo%2C0%2C0%2C-.5%2C0%2C1%2Fh%2C0%2C-.5%2C0%2C0%2C1%2Fc%2C-.5%2C0%2C0%2C0%2C1)%2Cm%3De.getInt16(238%2C!0)%2Cu%3D%5B%5D%3Bfor(let%20e%3D0%3Be%3Cm%3Be%2B%2B)%7Bconst%20i%3Dnew%20Uint8Array(t.slice(240%2B20*e%2C260%2B20*e))%2Cs%3D(new%20TextDecoder).decode(i).split(%22%5C0%22).shift()%3Bu.push(%7Bid%3As.trim()%2Cvals%3A%5B%5D%7D)%7Dconst%20A%3Dle.create()%3Bfor(let%20t%3D0%3Bt%3C16%3Bt%2B%2B)A%5Bt%5D%3De.getFloat32(440%2B4*t%2C!0)%3B0%3D%3D%3DA%5B15%5D%26%26(l.warn(%22TRK%20vox_to_ras%20not%20set%22)%2Cle.identity(A))%3Bconst%20f%3Dle.create()%3Ble.mul(f%2Cd%2CA)%3Blet%20g%3Dnull%2Cp%3Dnull%3Bg%3Dnew%20Int32Array(t.slice(n))%2Cp%3Dnew%20Float32Array(g.buffer)%3Bconst%20v%3Dg.length%3Bif(v%3C1)throw%20new%20Error(%22Empty%20TRK%20file.%22)%3Blet%20x%3D0%2Cw%3D0%2CC%3Dnew%20Uint32Array(g.length%2F4)%2Cb%3D0%2Cy%3Dnew%20Float32Array(g.length)%2CI%3D0%3Bfor(%3Bx%3Cv%3B)%7Bconst%20t%3Dg%5Bx%5D%3Bx%2B%3D1%2CC%5Bb%2B%2B%5D%3Dw%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bconst%20t%3Dp%5Bx%2B0%5D%2Ce%3Dp%5Bx%2B1%5D%2Ci%3Dp%5Bx%2B2%5D%3Bif(x%2B%3D3%2Cy%5BI%2B%2B%5D%3Dt*f%5B0%5D%2Be*f%5B1%5D%2Bi*f%5B2%5D%2Bf%5B3%5D%2Cy%5BI%2B%2B%5D%3Dt*f%5B4%5D%2Be*f%5B5%5D%2Bi*f%5B6%5D%2Bf%5B7%5D%2Cy%5BI%2B%2B%5D%3Dt*f%5B8%5D%2Be*f%5B9%5D%2Bi*f%5B10%5D%2Bf%5B11%5D%2Cr%3E0)for(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)a%5Bt%5D.vals.push(p%5Bx%5D)%2Cx%2B%2B%3Bw%2B%2B%7Dif(m%3E0)for(let%20t%3D0%3Bt%3Cm%3Bt%2B%2B)u%5Bt%5D.vals.push(p%5Bx%5D)%2Cx%2B%2B%7Dconst%20M%3D%5B%5D%3Bfor(let%20t%3D0%3Bt%3Cu.length%3Bt%2B%2B)M.push(%7Bid%3Au%5Bt%5D.id%2Cvals%3AFloat32Array.from(u%5Bt%5D.vals)%7D)%3Bconst%20D%3D%5B%5D%3Bfor(let%20t%3D0%3Bt%3Ca.length%3Bt%2B%2B)D.push(%7Bid%3Aa%5Bx%5D.id%2Cvals%3AFloat32Array.from(a%5Bx%5D.vals)%7D)%3Breturn%20C%5Bb%2B%2B%5D%3Dw%2Cy%3Dy.slice(0%2CI)%2CC%3DC.slice(0%2Cb)%2C%7Bpts%3Ay%2CoffsetPt0%3AC%2Cdps%3AM%2Cdpv%3AD%7D%7Dstatic%20readTxtVTK(t)%7Bconst%20e%3Dnew%20TextDecoder(%22utf-8%22).decode(t).split(%22%5Cn%22)%3Bif(e.length%3C7%7C%7C!e%5B0%5D.startsWith(%22%23%20vtk%20DataFile%22))throw%20new%20Error(%22Invalid%20VTK%20image%22)%3Bif(!e%5B2%5D.startsWith(%22ASCII%22))throw%20new%20Error(%22Not%20ASCII%20VTK%20mesh%22)%3Blet%20i%3D3%3Bfor(%3Be%5Bi%5D.length%3C1%3B)i%2B%2B%3Bif(!e%5Bi%5D.includes(%22POLYDATA%22))throw%20new%20Error(%22Not%20ASCII%20VTK%20polydata%22)%3Bfor(i%2B%2B%3Be%5Bi%5D.length%3C1%3B)i%2B%2B%3Bif(!e%5Bi%5D.startsWith(%22POINTS%22))throw%20new%20Error(%22Not%20VTK%20POINTS%22)%3Blet%20s%3De%5Bi%5D.trim().split(%2F%5Cs%2B%2F)%3Bconst%20n%3DparseInt(s%5B1%5D)%2Cr%3D3*n%2Ca%3Dnew%20Float32Array(3*n)%3Blet%20o%3D0%3Bfor(%3Bo%3C3*n%3B)%7Bi%2B%2B%3Bconst%20t%3De%5Bi%5D.trim().trim().split(%2F%5Cs%2B%2F)%3Bfor(let%20e%3D0%3Be%3Ct.length%26%26!(o%3E%3Dr)%3Be%2B%2B)a%5Bo%5D%3DparseFloat(t%5Be%5D)%2Co%2B%2B%7Dconst%20l%3D%5B%5D%3Bfor(i%2B%2B%3Be%5Bi%5D.length%3C1%3B)i%2B%2B%3Bif(e%5Bi%5D.startsWith(%22METADATA%22))%7Bfor(%3Be%5Bi%5D.length%3E1%3B)i%2B%2B%3Bi%2B%2B%7Dif(s%3De%5Bi%5D.trim().split(%2F%5Cs%2B%2F)%2Ci%2B%2B%2Cs%5B0%5D.includes(%22LINES%22))%7Bconst%20t%3DparseInt(s%5B1%5D)%3Bif(t%3C1)throw%20new%20Error(%22Corrupted%20VTK%20ASCII%22)%3Blet%20n%3De%5Bi%5D.trim()%3Bconst%20r%3D%5B%5D%3Blet%20o%3D%5B%5D%3Bif(n.startsWith(%22OFFSETS%22))%7Bi%2B%2B%3Blet%20s%3D0%3Bfor(%3Bs%3Ct%3B)%7Bn%3De%5Bi%5D.trim()%2Ci%2B%2B%3Bconst%20a%3Dn.trim().split(%2F%5Cs%2B%2F)%3Bfor(let%20e%3D0%3Be%3Ca.length%26%26(r%5Bs%5D%3DparseInt(a%5Be%5D)%2Cs%2B%2B%2C!(s%3E%3Dt))%3Be%2B%2B)%3B%7Do%3DArray.from(a)%7Delse%7Blet%20s%3Dfunction()%7Bn%3De%5Bi%5D.trim()%3Bconst%20t%3Dn.trim().split(%2F%5Cs%2B%2F)%3Bh%3D%5B%5D%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)h.push(parseInt(t%5Be%5D))%3Bc%3D0%2Ci%2B%2B%7D%2Cl%3D0%3Br%5B0%5D%3D0%3Blet%20h%3D%5B%5D%2Cc%3D0%3Bs()%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bc%3E%3Dh.length%26%26s()%3Bconst%20t%3Dh%5Bc%2B%2B%5D%3Bl%2B%3Dt%2Cr%5Be%2B1%5D%3Dl%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bc%3E%3Dh.length%26%26s()%3Bconst%20t%3D3*h%5Bc%2B%2B%5D%3Bo.push(a%5Bt%2B0%5D)%2Co.push(a%5Bt%2B1%5D)%2Co.push(a%5Bt%2B2%5D)%7D%7D%7Dreturn%7Bpts%3AFloat32Array.from(o)%2CoffsetPt0%3AUint32Array.from(r)%7D%7Dif(s%5B0%5D.includes(%22TRIANGLE_STRIPS%22))%7Bconst%20t%3DparseInt(s%5B1%5D)%3Bfor(let%20s%3D0%3Bs%3Ct%3Bs%2B%2B)%7Bconst%20t%3De%5Bi%5D.trim()%3Bi%2B%2B%3Bconst%20s%3Dt.trim().split(%2F%5Cs%2B%2F)%2Cn%3DparseInt(s%5B0%5D)-2%3Blet%20r%3D1%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)t%252%3F(l.push(parseInt(s%5Br%2B2%5D))%2Cl.push(parseInt(s%5Br%2B1%5D))%2Cl.push(parseInt(s%5Br%5D)))%3A(l.push(parseInt(s%5Br%5D))%2Cl.push(parseInt(s%5Br%2B1%5D))%2Cl.push(parseInt(s%5Br%2B2%5D)))%2Cr%2B%3D1%7D%7Delse%7Bif(!s%5B0%5D.includes(%22POLYGONS%22))throw%20new%20Error(%22Unsupported%20ASCII%20VTK%20datatype%20%22%2Bs%5B0%5D)%3B%7Bconst%20t%3DparseInt(s%5B1%5D)%3Bfor(let%20s%3D0%3Bs%3Ct%3Bs%2B%2B)%7Bconst%20t%3De%5Bi%5D.trim()%3Bi%2B%2B%3Bconst%20s%3Dt.trim().split(%2F%5Cs%2B%2F)%2Cn%3DparseInt(s%5B0%5D)-2%2Cr%3DparseInt(s%5B1%5D)%3Blet%20a%3DparseInt(s%5B2%5D)%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)%7Bconst%20e%3DparseInt(s%5B3%2Bt%5D)%3Bl.push(r)%2Cl.push(a)%2Cl.push(e)%2Ca%3De%7D%7D%7D%7Dreturn%7Bpositions%3Aa%2Cindices%3Anew%20Uint32Array(l)%7D%7Dstatic%20readLayer(e%3D%22%22%2Ci%2Cs%2Cn%3D.5%2Cr%3D%22warm%22%2Ca%3D%22winter%22%2Co%3D!1%2Ch%3Dnull%2Cc%3Dnull%2Cd%3D0)%7Bconst%20m%3D%7B...Me%2CcolormapInvert%3A!1%2CalphaThreshold%3A!1%2CisTransparentBelowCalMin%3A!0%2CisAdditiveBlend%3A!1%2CcolorbarVisible%3A!0%7D%2Cu%3D%2F(%3F%3A%5C.(%5B%5E.%5D%2B))%3F%24%2F%3Blet%20A%3Du.exec(e)%5B1%5D%3BA%3DA.toUpperCase()%2C%22GZ%22%3D%3D%3DA%26%26(A%3Du.exec(e.slice(0%2C-3))%5B1%5D%2CA%3DA.toUpperCase())%3Bconst%20f%3Ds.vertexCount%2F3%3Bif(s.offsetPt0)%7Bif(%22TSF%22!%3D%3DA)throw%20new%20Error(%22readLayer%20for%20streamlines%20only%20supports%20TSF%20files.%22)%3Bconst%20n%3Ds.pts.length%2F3%2Cr%3De.split(%22%2F%22)%3Blet%20a%3D%22Unknown%22%3Bif(r.length%3E1)%7Br.pop()%26%26(a%3Da.split(%22.%22).slice(0%2C-1).join(%22.%22))%7Dconst%20o%3Dt.readTSF(i%2Cn)%3Bs.dpv%7C%7C(s.dpv%3D%5B%5D)%3Bconst%20l%3Do.reduce(((t%2Ce)%3D%3EMath.min(t%2Ce)))%2Ch%3Do.reduce(((t%2Ce)%3D%3EMath.max(t%2Ce)))%3Breturn%20s.dpv.push(%7Bid%3Aa%2Cvals%3AFloat32Array.from(o.slice())%2Cglobal_min%3Al%2Cglobal_max%3Ah%2Ccal_min%3Al%2Ccal_max%3Ah%7D)%2Cm%7Dif(f%3C3)return%20void%20l.error(%22n_vert%20%3C%203%20in%20layer%22)%3Bif(%22MZ3%22%3D%3D%3DA)m.values%3Dt.readMZ3(i%2Cf)%3Belse%20if(%22ANNOT%22%3D%3D%3DA)%7Bconst%20e%3Dt.readANNOT(i%2Cf%2C!0)%3Be%20instanceof%20Uint32Array%3Fm.values%3De%3A(m.values%3De.scalars%2Cm.colormapLabel%3De.colormapLabel)%7Delse%20if(%22CRV%22%3D%3D%3DA%7C%7C%22CURV%22%3D%3D%3DA%7C%7C%22THICKNESS%22%3D%3D%3DA%7C%7C%22AREA%22%3D%3D%3DA)m.values%3Dt.readCURV(i%2Cf)%2Cm.isTransparentBelowCalMin%3D!1%3Belse%20if(%22GII%22%3D%3D%3DA)%7Bconst%20e%3Dt.readGII(i%2Cf)%3Bm.values%3De.scalars%2Cm.colormapLabel%3De.colormapLabel%7Delse%20if(%22MGH%22%3D%3D%3DA%7C%7C%22MGZ%22%3D%3D%3DA)%7Bconst%20e%3Dt.readMGH(i%2Cf%2C!0)%3B%22scalars%22in%20e%3F(m.values%3De.scalars%2Cm.colormapLabel%3De.colormapLabel)%3Am.values%3De%7Delse%20if(%22NII%22%3D%3D%3DA)m.values%3Dt.readNII(i%2Cf%2Cs.anatomicalStructurePrimary)%3Belse%20if(%22SMP%22%3D%3D%3DA)m.values%3Dt.readSMP(i%2Cf)%3Belse%20if(%22STC%22%3D%3D%3DA)m.values%3Dt.readSTC(i%2Cf)%3Belse%7Bif(!t.isCurv(i))return%20l.warn(%22Unknown%20layer%20overlay%20format%20%22%2Be)%2Cm%3Bm.values%3Dt.readCURV(i%2Cf)%2Cm.isTransparentBelowCalMin%3D!1%7Dif(!m.values)return%20void%20l.error(%22no%20values%20in%20layer%22)%3Bm.nFrame4D%3Dm.values.length%2Ff%2Cm.frame4D%3D0%2Cm.outlineBorder%3Dd%3Blet%20g%3Dm.values%5B0%5D%2Cp%3Dm.values%5B0%5D%3Bfor(let%20t%3D0%3Bt%3Cm.values.length%3Bt%2B%2B)g%3DMath.min(g%2Cm.values%5Bt%5D)%2Cp%3DMath.max(p%2Cm.values%5Bt%5D)%3Breturn%20m.global_min%3Dg%2Cm.global_max%3Dp%2Cm.cal_min%3Dh%7C%7C0%2Ch%7C%7C(m.cal_min%3Dg)%2Cm.cal_max%3Dc%7C%7C0%2Cc%7C%7C(m.cal_max%3Dp)%2Cm.cal_minNeg%3DNaN%2Cm.cal_maxNeg%3DNaN%2Cm.opacity%3Dn%2Cm.colormap%3Dr%2Cm.colormapNegative%3Da%2Cm.useNegativeCmap%3Do%2Cm%7Dstatic%20readSMP(t%2Ce)%7Bconst%20i%3Dt.byteLength%3Blet%20s%3Dnew%20DataView(t)%2Cn%3Ds.getUint16(0%2C!0)%3Bif(n%3E5)%7Bconst%20e%3Dde(new%20Uint8Array(t))%3Bs%3Dnew%20DataView(e.buffer)%2Cn%3Ds.getUint16(0%2C!0)%2Ct%3De.buffer%7Dn%3E5%26%26l.error(%22Unsupported%20or%20invalid%20BrainVoyager%20SMP%20version%20%22%2Bn)%3Bconst%20r%3Ds.getUint32(2%2C!0)%3Br!%3D%3De%26%26l.error(%22SMP%20file%20has%20%22%2Br%2B%22%20vertices%2C%20background%20mesh%20has%20%22%2Be)%3Bconst%20a%3Ds.getUint16(6%2C!0)%2Co%3Dnew%20Float32Array(r*a)%2Ch%3D%5B%5D%3Blet%20c%3D9%3Bfunction%20d()%7Bconst%20e%3Dc%3Bfor(%3Bc%3Ci%26%260!%3D%3Ds.getUint8(c)%3B)c%2B%2B%3Breturn%20c%2B%2B%2C(new%20TextDecoder).decode(t.slice(e%2Cc-1))%7Dd()%3Bfor(let%20e%3D0%3Be%3Ca%3Be%2B%2B)%7Bconst%20i%3D%7B%7D%3Bi.mapType%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4%2Cn%3E%3D3%26%263%3D%3D%3Di.mapType%26%26(i.nLags%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4%2Ci.mnLag%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4%2Ci.mxLag%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4%2Ci.ccOverlay%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4)%2Ci.clusterSize%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4%2Ci.clusterCheck%3Ds.getUint8(c)%2Cc%2B%3D1%2Ci.critThresh%3Ds.getFloat32(c%2C!0)%2Cc%2B%3D4%2Ci.maxThresh%3Ds.getFloat32(c%2C!0)%2Cc%2B%3D4%2Cn%3E%3D4%26%26(i.includeValuesGreaterThreshMax%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4)%2Ci.df1%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4%2Ci.df2%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4%2Cn%3E%3D5%3F(i.posNegFlag%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4)%3Ai.posNegFlag%3D3%2Ci.cortexBonferroni%3Ds.getUint32(c%2C!0)%2Cc%2B%3D4%2Ci.posMinRGB%3D%5B0%2C0%2C0%5D%2Ci.posMaxRGB%3D%5B0%2C0%2C0%5D%2Ci.negMinRGB%3D%5B0%2C0%2C0%5D%2Ci.negMaxRGB%3D%5B0%2C0%2C0%5D%2Cn%3E%3D2%26%26(i.posMinRGB%5B0%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Ci.posMinRGB%5B1%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Ci.posMinRGB%5B2%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Ci.posMaxRGB%5B0%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Ci.posMaxRGB%5B1%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Ci.posMaxRGB%5B2%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Cn%3E%3D4%26%26(i.negMinRGB%5B0%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Ci.negMinRGB%5B1%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Ci.negMinRGB%5B2%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Ci.negMaxRGB%5B0%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Ci.negMaxRGB%5B1%5D%3Ds.getUint8(c)%2Cc%2B%2B%2Ci.negMaxRGB%5B2%5D%3Ds.getUint8(c)%2Cc%2B%2B)%2Ci.enableSMPColor%3Ds.getUint8(c)%2Cc%2B%2B%2Cn%3E%3D4%26%26(i.lut%3Dd())%2Ci.colorAlpha%3Ds.getFloat32(c%2C!0)%2Cc%2B%3D4)%2Ci.name%3Dd()%3Bconst%20a%3Dnew%20Float32Array(t%2Cc%2Cr)%3Bo.set(a%2Ce*r)%2Cc%2B%3D4*r%2Ch.push(i)%7Dreturn%20o%7Dstatic%20readSTC(t%2Ce)%7Bconst%20i%3Dnew%20DataView(t)%2Cs%3Di.getInt32(8%2C!1)%3Bif(s!%3D%3De)throw%20new%20Error(%22Overlay%20has%20%22%2Bs%2B%22%20vertices%2C%20expected%20%22%2Be)%3Blet%20n%3D12%2B4*s%3Bconst%20r%3Di.getUint32(n%2C!1)%3Bn%2B%3D4%3Bconst%20a%3Dnew%20Float32Array(r*s)%3Bfor(let%20t%3D0%3Bt%3Cr*s%3Bt%2B%2B)a%5Bt%5D%3Di.getFloat32(n%2C!1)%2Cn%2B%3D4%3Breturn%20a%7Dstatic%20isCurv(t)%7Bconst%20e%3Dnew%20DataView(t)%2Ci%3De.getUint8(0)%2Cs%3De.getUint8(1)%2Cn%3De.getUint8(2)%3Breturn%20255%3D%3D%3Di%26%26255%3D%3D%3Ds%26%26255%3D%3D%3Dn%7C%7C(ye.debug(%22Unable%20to%20recognize%20file%20type%3A%20does%20not%20appear%20to%20be%20FreeSurfer%20format.%22)%2C!1)%7Dstatic%20readCURV(t%2Ce)%7Bconst%20i%3Dnew%20DataView(t)%2Cs%3Di.getUint8(0)%2Cn%3Di.getUint8(1)%2Cr%3Di.getUint8(2)%2Ca%3Di.getUint32(3%2C!1)%2Co%3Di.getUint32(11%2C!1)%3Bif(255%3D%3D%3Ds%26%26255%3D%3D%3Dn%26%26255%3D%3D%3Dr%7C%7Cye.debug(%22Unable%20to%20recognize%20file%20type%3A%20does%20not%20appear%20to%20be%20FreeSurfer%20format.%22)%2Ce!%3D%3Da)throw%20new%20Error(%22CURV%20file%20has%20different%20number%20of%20vertices%20(%20%22%2Ba%2B%22)than%20mesh%20(%22%2Be%2B%22)%22)%3Bif(t.byteLength%3C15%2B4*a*o)throw%20new%20Error(%22CURV%20file%20smaller%20than%20specified%22)%3Bconst%20l%3Dnew%20Float32Array(o*a)%3Blet%20h%3D15%3Bfor(let%20t%3D0%3Bt%3Co*a%3Bt%2B%2B)l%5Bt%5D%3Di.getFloat32(h%2C!1)%2Ch%2B%3D4%3Blet%20c%3Dl%5B0%5D%2Cd%3Dl%5B0%5D%3Bfor(let%20t%3D0%3Bt%3Cl.length%3Bt%2B%2B)c%3DMath.min(c%2Cl%5Bt%5D)%2Cd%3DMath.max(d%2Cl%5Bt%5D)%3Bconst%20m%3D1%2F(d-c)%3Bfor(let%20t%3D0%3Bt%3Cl.length%3Bt%2B%2B)l%5Bt%5D%3D1-(l%5Bt%5D-c)*m%3Breturn%20l%7Dstatic%20readANNOT(t%2Ce%2Ci%3D!1)%7Bconst%20s%3Dnew%20DataView(t)%2Cn%3Ds.getUint32(0%2C!1)%3Bif(e!%3D%3Dthis.decimateLayerVertices(n%2Ce))throw%20new%20Error(%22ANNOT%20file%20has%20different%20number%20of%20vertices%20than%20mesh%22)%3Bif(t.byteLength%3C4%2B8*n)throw%20new%20Error(%22ANNOT%20file%20smaller%20than%20specified%22)%3Blet%20r%3D0%3Bconst%20a%3Dnew%20Uint32Array(n)%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)%7Ba%5Bs.getUint32(r%2B%3D4%2C!1)%5D%3Ds.getUint32(r%2B%3D4%2C!1)%7Dif(!i)return%20a%3Blet%20o%3D0%3Btry%7Bo%3Ds.getInt32(r%2B%3D4%2C!1)%7Dcatch(t)%7Breturn%20a%7Dif(1!%3D%3Do)return%20a%3Bif(s.getInt32(r%2B%3D4%2C!1)%3E0)return%20a%3Bconst%20h%3Ds.getInt32(r%2B%3D4%2C!1)%2Cc%3Ds.getInt32(r%2B%3D4%2C!1)%3Br%2B%3Dc%3Bconst%20d%3Ds.getInt32(r%2B%3D4%2C!1)%3Bif(d%3C1)return%20a%3Bconst%20m%3D%7BR%3AArray(h).fill(0)%2CG%3AArray(h).fill(0)%2CB%3AArray(h).fill(0)%2CA%3AArray(h).fill(0)%2CI%3AArray(h).fill(0)%2Clabels%3AArray(h).fill(%22%22)%7D%3Bfor(let%20t%3D0%3Bt%3Cd%3Bt%2B%2B)%7Bconst%20t%3Ds.getInt32(r%2B%3D4%2C!1)%2Ce%3Ds.getInt32(r%2B%3D4%2C!1)%3Br%2B%3D4%3Blet%20i%3D%22%22%3Bfor(let%20t%3D0%3Bt%3Ce%3Bt%2B%2B)%7Bconst%20t%3Ds.getUint8(r%2B%2B)%3Bif(0%3D%3D%3Dt)break%3Bi%2B%3DString.fromCharCode(t)%7Dr-%3D4%3Bconst%20n%3Ds.getInt32(r%2B%3D4%2C!1)%2Ca%3Ds.getInt32(r%2B%3D4%2C!1)%2Co%3Ds.getInt32(r%2B%3D4%2C!1)%2Cc%3Ds.getInt32(r%2B%3D4%2C!1)%3Bt%3C0%7C%7Ct%3E%3Dh%3Fl.warn(%22annot%20entry%20out%20of%20range%22)%3A(m.R%5Bt%5D%3Dn%2Cm.G%5Bt%5D%3Da%2Cm.B%5Bt%5D%3Do%2Cm.A%5Bt%5D%3Dc%2Cm.I%5Bt%5D%3D(c%3C%3C24)%2B(o%3C%3C16)%2B(a%3C%3C8)%2Bn%2Cm.labels%5Bt%5D%3Di)%7Dconst%20u%3Dnew%20Float32Array(n)%3Bu.fill(-1)%3Blet%20A%3D0%3Bfor(let%20t%3D0%3Bt%3Ce%3Bt%2B%2B)%7Bconst%20e%3Da%5Bt%5D%3Bfor(let%20i%3D0%3Bi%3Ch%3Bi%2B%2B)if(m.I%5Bi%5D%3D%3D%3De)%7Bu%5Bt%5D%3Di%3Bbreak%7Du%5Bt%5D%3C0%26%26(A%2B%2B%2Cu%5Bt%5D%3D0)%7DA%3E0%26%26l.error(%60annot%20vertex%20colors%20do%20not%20match%20%24%7BA%7D%20of%20%24%7Bn%7D%20vertices.%60)%3Bfor(let%20t%3D0%3Bt%3Ch%3Bt%2B%2B)m.I%5Bt%5D%3Dt%3Breturn%7Bscalars%3Au%2CcolormapLabel%3Ane.makeLabelLut(m)%7D%7Dstatic%20readNV(t)%7Bconst%20e%3Dt.byteLength%2Ci%3Dnew%20Uint8Array(t)%3Blet%20s%3D0%3Bfunction%20n()%7Bfor(%3Bs%3Ce%26%2610%3D%3D%3Di%5Bs%5D%3B)s%2B%2B%3Bconst%20n%3Ds%3Bfor(%3Bs%3Ce%26%2610!%3D%3Di%5Bs%5D%3B)s%2B%2B%3Breturn%20s%2B%2B%2Cs-n%3C1%3F%22%22%3A(new%20TextDecoder).decode(t.slice(n%2Cs-1))%7Dlet%20r%2Ca%2Co%3D0%2Cl%3D0%2Ch%3D0%2Cc%3D0%3Bfor(%3Bs%3Ce%3B)%7Bconst%20t%3Dn()%3Bif(t.startsWith(%22%23%22))continue%3Bconst%20e%3Dt.trim().split(%2F%5Cs%2B%2F)%3Bif(o%3C1)o%3DparseInt(e%5B0%5D)%2Cr%3Dnew%20Float32Array(3*o)%3Belse%20if(h%3C3*o)r%5Bh%5D%3DparseFloat(e%5B0%5D)%2Cr%5Bh%2B1%5D%3DparseFloat(e%5B1%5D)%2Cr%5Bh%2B2%5D%3DparseFloat(e%5B2%5D)%2Ch%2B%3D3%3Belse%20if(l%3C1)l%3DparseInt(e%5B0%5D)%2Ca%3Dnew%20Uint32Array(3*l)%3Belse%7Bif(c%3E%3D3*l)break%3Ba%5Bc%2B2%5D%3DparseInt(e%5B0%5D)-1%2Ca%5Bc%2B1%5D%3DparseInt(e%5B1%5D)-1%2Ca%5Bc%2B0%5D%3DparseInt(e%5B2%5D)-1%2Cc%2B%3D3%7D%7Dreturn%7Bpositions%3Ar%2Cindices%3Aa%7D%7Dstatic%20readASC(t)%7Bconst%20e%3Dt.byteLength%2Ci%3Dnew%20Uint8Array(t)%3Blet%20s%3D0%3Bfunction%20n()%7Bfor(%3Bs%3Ce%26%2610%3D%3D%3Di%5Bs%5D%3B)s%2B%2B%3Bconst%20n%3Ds%3Bfor(%3Bs%3Ce%26%2610!%3D%3Di%5Bs%5D%3B)s%2B%2B%3Breturn%20s%2B%2B%2Cs-n%3C1%3F%22%22%3A(new%20TextDecoder).decode(t.slice(n%2Cs-1))%7Dlet%20r%3Dn()%3Br.startsWith(%22%23!ascii%22)%7C%7Cl.warn(%22Invalid%20ASC%20mesh%22)%2Cr%3Dn()%3Blet%20a%3Dr.trim().split(%2F%5Cs%2B%2F)%3Bconst%20o%3DparseInt(a%5B0%5D)%2Ch%3DparseInt(a%5B1%5D)%2Cc%3Dnew%20Float32Array(3*o)%3Blet%20d%3D0%3Bfor(let%20t%3D0%3Bt%3Co%3Bt%2B%2B)r%3Dn()%2Ca%3Dr.trim().split(%2F%5Cs%2B%2F)%2Cc%5Bd%5D%3DparseFloat(a%5B0%5D)%2Cc%5Bd%2B1%5D%3DparseFloat(a%5B1%5D)%2Cc%5Bd%2B2%5D%3DparseFloat(a%5B2%5D)%2Cd%2B%3D3%3Bconst%20m%3Dnew%20Uint32Array(3*h)%3Bd%3D0%3Bfor(let%20t%3D0%3Bt%3Ch%3Bt%2B%2B)r%3Dn()%2Ca%3Dr.trim().split(%2F%5Cs%2B%2F)%2Cm%5Bd%5D%3DparseInt(a%5B0%5D)%2Cm%5Bd%2B1%5D%3DparseInt(a%5B1%5D)%2Cm%5Bd%2B2%5D%3DparseInt(a%5B2%5D)%2Cd%2B%3D3%3Breturn%7Bpositions%3Ac%2Cindices%3Am%7D%7Dstatic%20readVTK(e)%7Bconst%20i%3De.byteLength%3Bif(i%3C20)throw%20new%20Error(%22File%20too%20small%20to%20be%20VTK%3A%20bytes%20%3D%20%22%2Be.byteLength)%3Bconst%20s%3Dnew%20Uint8Array(e)%3Blet%20n%3D0%3Bfunction%20r(t%3D!0)%7Bif(t)for(%3Bn%3Ci%26%2610%3D%3D%3Ds%5Bn%5D%3B)n%2B%2B%3Bconst%20r%3Dn%3Bfor(%3Bn%3Ci%26%2610!%3D%3Ds%5Bn%5D%3B)n%2B%2B%3Breturn%20n%2B%2B%2Cn-r%3C1%3F%22%22%3A(new%20TextDecoder).decode(e.slice(r%2Cn-1))%7Dlet%20a%3Dr()%3Bif(!a.startsWith(%22%23%20vtk%20DataFile%22))throw%20new%20Error(%22Invalid%20VTK%20mesh%22)%3Bif(a%3Dr(!1)%2Ca%3Dr()%2Ca.startsWith(%22ASCII%22))return%20t.readTxtVTK(e)%3Bif(!a.startsWith(%22BINARY%22))throw%20new%20Error(%22Invalid%20VTK%20image%2C%20expected%20ASCII%20or%20BINARY%20%22%2Ba)%3Bif(a%3Dr()%2C!a.includes(%22POLYDATA%22))throw%20new%20Error(%22Only%20able%20to%20read%20VTK%20POLYDATA%20%22%2Ba)%3Ba%3Dr()%2Ca.includes(%22POINTS%22)%26%26(a.includes(%22double%22)%7C%7Ca.includes(%22float%22))%7C%7Cl.warn(%22Only%20able%20to%20read%20VTK%20float%20or%20double%20POINTS%22%2Ba)%3Bconst%20o%3Da.includes(%22double%22)%3Blet%20h%3Da.trim().split(%2F%5Cs%2B%2F)%3Bconst%20c%3D3*parseInt(h%5B1%5D)%2Cd%3Dnew%20Float32Array(c)%2Cm%3Dnew%20DataView(e)%3Bif(o)for(let%20t%3D0%3Bt%3Cc%3Bt%2B%2B)d%5Bt%5D%3Dm.getFloat64(n%2C!1)%2Cn%2B%3D8%3Belse%20for(let%20t%3D0%3Bt%3Cc%3Bt%2B%2B)d%5Bt%5D%3Dm.getFloat32(n%2C!1)%2Cn%2B%3D4%3Ba%3Dr()%2Ch%3Da.trim().split(%2F%5Cs%2B%2F)%3Bconst%20u%3D%5B%5D%3Bif(h%5B0%5D.includes(%22LINES%22))%7Bconst%20t%3DparseInt(h%5B1%5D)%2Ce%3Dn%3Bif(a%3Dr()%2Ca.startsWith(%22OFFSETS%22))%7Blet%20e%3D!1%3Ba.includes(%22int64%22)%26%26(e%3D!0)%3Bconst%20i%3Dnew%20Uint32Array(t)%3Bif(e)%7Blet%20e%3D!1%3Bfor(let%20s%3D0%3Bs%3Ct%3Bs%2B%2B)%7Blet%20t%3Dm.getInt32(n%2C!1)%3B0!%3D%3Dt%26%26(e%3D!0)%2Cn%2B%3D4%2Ct%3Dm.getInt32(n%2C!1)%2Cn%2B%3D4%2Ci%5Bs%5D%3Dt%7De%26%26l.warn(%22int32%20overflow%3A%20JavaScript%20does%20not%20support%20int64%22)%7Delse%20for(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bconst%20t%3Dm.getInt32(n%2C!1)%3Bn%2B%3D4%2Ci%5Be%5D%3Dt%7Dreturn%7Bpts%3Ad%2CoffsetPt0%3Ai%7D%7Dn%3De%3Blet%20i%3D0%3Bconst%20s%3D%5B%5D%2Co%3D%5B%5D%3Bs.push(i)%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bconst%20t%3Dm.getInt32(n%2C!1)%3Bn%2B%3D4%2Ci%2B%3Dt%2Cs.push(i)%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bconst%20t%3D3*m.getInt32(n%2C!1)%3Bn%2B%3D4%2Co.push(d%5Bt%2B0%5D)%2Co.push(d%5Bt%2B1%5D)%2Co.push(d%5Bt%2B2%5D)%7D%7Dreturn%7Bpts%3AFloat32Array.from(o)%2CoffsetPt0%3AUint32Array.from(s)%7D%7Dif(h%5B0%5D.includes(%22TRIANGLE_STRIPS%22))%7Bconst%20t%3DparseInt(h%5B1%5D)%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bconst%20t%3Dm.getInt32(n%2C!1)-2%3Bn%2B%3D4%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)e%252%3F(u.push(m.getInt32(n%2B8%2C!1))%2Cu.push(m.getInt32(n%2B4%2C!1))%2Cu.push(m.getInt32(n%2C!1)))%3A(u.push(m.getInt32(n%2C!1))%2Cu.push(m.getInt32(n%2B4%2C!1))%2Cu.push(m.getInt32(n%2B8%2C!1)))%2Cn%2B%3D4%3Bn%2B%3D8%7D%7Delse%7Bif(!h%5B0%5D.includes(%22POLYGONS%22))throw%20new%20Error(%22Unsupported%20binary%20VTK%20datatype%20%22%2Bh%5B0%5D)%3B%7Bconst%20t%3DparseInt(h%5B1%5D)%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bconst%20t%3Dm.getInt32(n%2C!1)-2%3Bif(0%3D%3D%3De%26%26t%3E65535)throw%20new%20Error(%22Invalid%20VTK%20binary%20polygons%20using%20little-endian%20data%20(MRtrix)%22)%3Bn%2B%3D4%3Bconst%20i%3Dm.getInt32(n%2C!1)%3Bn%2B%3D4%3Blet%20s%3Dm.getInt32(n%2C!1)%3Bn%2B%3D4%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bconst%20t%3Dm.getInt32(n%2C!1)%3Bn%2B%3D4%2Cu.push(i)%2Cu.push(s)%2Cu.push(t)%2Cs%3Dt%7D%7D%7D%7Dreturn%7Bpositions%3Ad%2Cindices%3Anew%20Uint32Array(u)%7D%7Dstatic%20readDFS(t)%7Bconst%20e%3Dnew%20DataView(t)%2Ci%3De.getUint32(0%2C!0)%2Cs%3De.getUint16(4%2C!0)%3B1599292996%3D%3D%3Di%26%2617740%3D%3D%3Ds%7C%7Cl.warn(%22Not%20a%20little-endian%20brainsuite%20DFS%20mesh%22)%3Bconst%20n%3De.getUint32(12%2C!0)%2Cr%3De.getUint32(24%2C!0)%2Ca%3De.getUint32(28%2C!0)%2Co%3De.getUint32(48%2C!0)%3Blet%20h%3Dn%3Bconst%20c%3Dnew%20Uint32Array(t%2Ch%2C3*r)%3Bh%2B%3D3*r*4%3Bconst%20d%3Dnew%20Float32Array(t%2Ch%2C3*a)%3Bfor(let%20t%3D0%3Bt%3C3*a%3Bt%2B%3D3)%7Bconst%20e%3Dd%5Bt%5D%3Bd%5Bt%5D%3Dd%5Bt%2B1%5D%2Cd%5Bt%2B1%5D%3De%7Dlet%20m%3Breturn%20o%3E%3D0%26%26(m%3Dnew%20Float32Array(t%2Co%2C3*a))%2C%7Bpositions%3Ad%2Cindices%3Ac%2Ccolors%3Am%7D%7Dstatic%20readMZ3(t%2Ce%3D0)%7Bif(t.byteLength%3C20)throw%20new%20Error(%22File%20too%20small%20to%20be%20mz3%3A%20bytes%20%3D%20%22%2Bt.byteLength)%3Blet%20i%3Dnew%20DataView(t)%2Cs%3Di.getUint16(0%2C!0)%2Cn%3Dt%3Bif(35615%3D%3D%3Ds%7C%7C8075%3D%3D%3Ds)%7Bconst%20e%3Dde(new%20Uint8Array(t))%3Bi%3Dnew%20DataView(e.buffer)%2Cs%3Di.getUint16(0%2C!0)%2Cn%3De.buffer%7Dconst%20r%3Di.getUint16(2%2C!0)%2Ca%3Di.getUint32(4%2C!0)%3Blet%20o%3Di.getUint32(8%2C!0)%3Bconst%20h%3Di.getUint32(12%2C!0)%3Bif(ye.debug(%22MZ3%20magic%20%25d%20attr%20%25d%20face%20%25d%20vert%20%25d%20skip%20%25d%22%2Cs%2Cr%2Ca%2Co%2Ch)%2C23117!%3D%3Ds)throw%20new%20Error(%22Invalid%20MZ3%20file%22)%3Bconst%20c%3D!!(1%26r)%2Cd%3D!!(2%26r)%2Cm%3D!!(4%26r)%3Blet%20u%3D!!(8%26r)%3Bconst%20A%3D!!(16%26r)%3Bif(r%3E63)throw%20new%20Error(%22Unsupported%20future%20version%20of%20MZ3%20file%22)%3Blet%20f%3D4%3BA%26%26(f%3D8)%3Blet%20g%3D0%3Bif(e%3E0%26%26!c%26%26a%3C1%26%26!m%26%26(u%3D!0)%2Cu)%7Blet%20t%3De%3B0%3D%3D%3De%26%26(t%3Do)%3Bconst%20i%3D16%2Bh%2B(c%3F1%3A0)*a*12%2B(d%3F1%3A0)*t*12%2B(m%3F1%3A0)*t*4%2Cs%3DMath.floor((n.byteLength-i)%2Ff)%3Bo!%3D%3De%26%26s%25e%3D%3D0%26%26(l.warn(%22Issue%20729%3A%20mz3%20mismatch%20scalar%20NVERT%20does%20not%20match%20mesh%20NVERT%22)%2Co%3De)%2Cg%3DMath.floor(s%2Fo)%2Cg%3C1%26%26(l.warn(%22Corrupt%20MZ3%3A%20file%20reports%20NSCALAR%20but%20not%20enough%20bytes%22)%2Cu%3D!1)%7Dif(o%3C3%26%26e%3C3)throw%20new%20Error(%22Not%20a%20mesh%20MZ3%20file%20(maybe%20scalar)%22)%3Be%3E0%26%26e!%3D%3Do%26%26l.warn(%22Layer%20has%20%22%2Bo%2B%22vertices%2C%20but%20background%20mesh%20has%20%22%2Be)%3Blet%20p%3D16%2Bh%2Cv%3Dnull%3Bc%26%26(v%3Dnew%20Uint32Array(n%2Cp%2C3*a)%2Cp%2B%3D3*a*4)%3Blet%20x%3Dnull%3Bd%26%26(x%3Dnew%20Float32Array(n%2Cp%2C3*o)%2Cp%2B%3D3*o*4)%3Blet%20w%3Dnull%3Bif(m)%7Bw%3Dnew%20Float32Array(3*o)%3Bconst%20t%3Dnew%20Uint8Array(n%2Cp%2C4*o)%3Bp%2B%3D4*o%3Blet%20e%3D0%2Ci%3D0%3Bfor(let%20s%3D0%3Bs%3Co%3Bs%2B%2B)%7Bfor(let%20s%3D0%3Bs%3C3%3Bs%2B%2B)w%5Be%5D%3Dt%5Bi%5D%2F255%2Ce%2B%2B%2Ci%2B%2B%3Bi%2B%2B%7D%7Dlet%20C%3Dnew%20Float32Array%3Bif(!m%26%26u%26%26g%3E0)%7Bif(A)%7Bconst%20t%3Dnew%20Float64Array(n%2Cp%2Cg*o)%3BC%3DFloat32Array.from(t)%7Delse%20C%3Dnew%20Float32Array(n%2Cp%2Cg*o)%3Bp%2B%3Df*g*o%7Dreturn%20e%3E0%3FC%3A%7Bpositions%3Ax%2Cindices%3Av%2Cscalars%3AC%2Ccolors%3Aw%7D%7Dstatic%20readPLY(t)%7Bconst%20e%3Dt.byteLength%2Ci%3Dnew%20Uint8Array(t)%3Blet%20s%3D0%3Bfunction%20n()%7Bfor(%3Bs%3Ce%26%2610%3D%3D%3Di%5Bs%5D%3B)s%2B%2B%3Bconst%20n%3Ds%3Bfor(%3Bs%3Ce%26%2610!%3D%3Di%5Bs%5D%3B)s%2B%2B%3Breturn%20s%2B%2B%2Cs-n%3C1%3F%22%22%3A(new%20TextDecoder).decode(t.slice(n%2Cs-1))%7Dlet%20r%3Dn()%3Bif(!r.startsWith(%22ply%22))throw%20new%20Error(%22Not%20a%20valid%20PLY%20file%22)%3Br%3Dn()%3Bconst%20a%3Dr.includes(%22ascii%22)%3Bfunction%20o(t)%7Bif(%22char%22%3D%3D%3Dt%7C%7C%22uchar%22%3D%3D%3Dt%7C%7C%22int8%22%3D%3D%3Dt%7C%7C%22uint8%22%3D%3D%3Dt)return%201%3Bif(%22short%22%3D%3D%3Dt%7C%7C%22ushort%22%3D%3D%3Dt%7C%7C%22int16%22%3D%3D%3Dt%7C%7C%22uint16%22%3D%3D%3Dt)return%202%3Bif(%22int%22%3D%3D%3Dt%7C%7C%22uint%22%3D%3D%3Dt%7C%7C%22int32%22%3D%3D%3Dt%7C%7C%22uint32%22%3D%3D%3Dt%7C%7C%22float%22%3D%3D%3Dt%7C%7C%22float32%22%3D%3D%3Dt)return%204%3Bif(%22double%22%3D%3D%3Dt)return%208%3Bthrow%20new%20Error(%22Unknown%20data%20type%3A%20%22%2Bt)%7Dconst%20h%3Dr.includes(%22binary_little_endian%22)%3Blet%20c%3D0%2Cd%3D!1%2Cm%3D0%2Cu%3D0%2CA%3D0%2Cf%3D0%2Cg%3D0%2Cp%3D0%2Cv%3D0%3Bfor(%3Bs%3Ce%26%26!r.startsWith(%22end_header%22)%3B)%7Bif(r%3Dn()%2Cr.startsWith(%22comment%22))continue%3Blet%20t%3Dr.split(%2F%5Cs%2F)%3Bif(r.startsWith(%22element%20vertex%22))for(c%3DparseInt(t%5Bt.length-1%5D)%2Cr%3Dn()%2Ct%3Dr.split(%2F%5Cs%2F)%3Br.startsWith(%22property%22)%3B)%7Bconst%20e%3Dt%5B1%5D%3B%22x%22%3D%3D%3Dt%5B2%5D%26%26e.startsWith(%22double%22)%3Fd%3D!0%3A%22x%22!%3D%3Dt%5B2%5D%7C%7Ce.startsWith(%22float%22)%7C%7Cl.error(%22Error%3A%20expect%20ply%20xyz%20to%20be%20float%20or%20double%3A%20%22%2Br)%2Cm%2B%3Do(e)%2Cr%3Dn()%2Ct%3Dr.split(%2F%5Cs%2F)%7Dif(r.startsWith(%22element%20face%22))for(v%3DparseInt(t%5Bt.length-1%5D)%2Cr%3Dn()%2Ct%3Dr.split(%2F%5Cs%2F)%3Br.startsWith(%22property%22)%3B)%7Bif(%22list%22%3D%3D%3Dt%5B1%5D)A%3Do(t%5B2%5D)%2Cf%3Do(t%5B3%5D)%2Cu%2B%3DA%2B3*f%3Belse%7Bconst%20e%3Do(t%5B1%5D)%3Bu%2B%3De%2C0%3D%3D%3Df%26%26(g%2B%3De%2Cp%2B%2B)%7Dr%3Dn()%2Ct%3Dr.split(%2F%5Cs%2F)%7D%7Dif(a)%7Bv%3C1%26%26l.error(%60Malformed%20ply%20format%3A%20faces%20%24%7Bv%7D%20%60)%3Bconst%20t%3Dnew%20Float32Array(3*c)%3Blet%20e%3D0%3Bfor(let%20i%3D0%3Bi%3Cc%3Bi%2B%2B)%7Br%3Dn()%3Bconst%20i%3Dr.split(%2F%5Cs%2F)%3Bt%5Be%5D%3DparseFloat(i%5B0%5D)%2Ct%5Be%2B1%5D%3DparseFloat(i%5B1%5D)%2Ct%5Be%2B2%5D%3DparseFloat(i%5B2%5D)%2Ce%2B%3D3%7Dlet%20i%3Dnew%20Uint32Array(3*v)%2Cs%3D0%3Bfor(let%20t%3D0%3Bt%3Cv%3Bt%2B%2B)%7Br%3Dn()%3Bconst%20t%3Dr.split(%2F%5Cs%2F)%2Ce%3DparseInt(t%5Bp%5D)-2%3Bif(e%3C1)break%3Bif(s%2B3*e%3Ei.length)%7Bconst%20t%3Dnew%20Uint32Array(i.length%2Bi.length)%3Bt.set(i)%2Ci%3Dt.slice()%7Dconst%20a%3DparseInt(t%5Bp%2B1%5D)%3Blet%20o%3DparseInt(t%5Bp%2B2%5D)%3Bfor(let%20n%3D0%3Bn%3Ce%3Bn%2B%2B)%7Bconst%20e%3DparseInt(t%5Bp%2B3%2Bn%5D)%3Bi%5Bs%2B0%5D%3Da%2Ci%5Bs%2B1%5D%3Do%2Ci%5Bs%2B2%5D%3De%2Co%3De%2Cs%2B%3D3%7D%7Dreturn%20i.length!%3D%3Ds%26%26(i%3Di.slice(0%2Cs))%2C%7Bpositions%3At%2Cindices%3Ai%7D%7D(m%3C12%7C%7CA%3C1%7C%7Cf%3C1%7C%7Cv%3C1)%26%26l.warn(%60Malformed%20ply%20format%3A%20stride%20%24%7Bm%7D%20count%20%24%7BA%7D%20iBytes%20%24%7Bf%7D%20iStrideBytes%20%24%7Bu%7D%20iPadBytes%20%24%7Bg%7D%20faces%20%24%7Bv%7D%60)%3Bconst%20x%3Dnew%20DataView(t)%3Blet%20w%3Bif(s%254%3D%3D0%26%2612%3D%3D%3Dm%26%26h)w%3Dnew%20Float32Array(t%2Cs%2C3*c)%2Cs%2B%3Dc*m%3Belse%7Bw%3Dnew%20Float32Array(3*c)%3Blet%20t%3D0%3Bfor(let%20e%3D0%3Be%3Cc%3Be%2B%2B)d%3F(w%5Bt%5D%3Dx.getFloat64(s%2Ch)%2Cw%5Bt%2B1%5D%3Dx.getFloat64(s%2B8%2Ch)%2Cw%5Bt%2B2%5D%3Dx.getFloat64(s%2B16%2Ch))%3A(w%5Bt%5D%3Dx.getFloat32(s%2Ch)%2Cw%5Bt%2B1%5D%3Dx.getFloat32(s%2B4%2Ch)%2Cw%5Bt%2B2%5D%3Dx.getFloat32(s%2B8%2Ch))%2Ct%2B%3D3%2Cs%2B%3Dm%7Dconst%20C%3Dnew%20Uint32Array(3*v)%3Blet%20b%3D!0%2Cy%3D0%3Bif(1%3D%3D%3DA%26%264%3D%3D%3Df%26%2613%3D%3D%3Du)for(let%20t%3D0%3Bt%3Cv%3Bt%2B%2B)%7Bconst%20t%3Dx.getUint8(s)%3Bs%2B%3DA%2C3!%3D%3Dt%26%26(b%3D!1)%2CC%5By%5D%3Dx.getUint32(s%2Ch)%2Cs%2B%3D4%2CC%5By%2B1%5D%3Dx.getUint32(s%2Ch)%2Cs%2B%3D4%2CC%5By%2B2%5D%3Dx.getUint32(s%2Ch)%2Cs%2B%3D4%2Cy%2B%3D3%7Delse%7Blet%20t%3Ds%3Bfor(let%20e%3D0%3Be%3Cv%3Be%2B%2B)%7Bs%3Dt%2Bg%3Blet%20e%3D0%3B1%3D%3D%3DA%3Fe%3Dx.getUint8(s)%3A2%3D%3D%3DA%3Fe%3Dx.getUint16(s%2Ch)%3A4%3D%3D%3DA%26%26(e%3Dx.getUint32(s%2Ch))%2Cs%2B%3DA%2C3!%3D%3De%26%26(b%3D!1)%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)1%3D%3D%3Df%3FC%5By%5D%3Dx.getUint8(s)%3A2%3D%3D%3Df%3FC%5By%5D%3Dx.getUint16(s%2Ch)%3A4%3D%3D%3Df%26%26(C%5By%5D%3Dx.getUint32(s%2Ch))%2Cy%2B%2B%2Cs%2B%3Df%3Bt%2B%3Du%7D%7Dreturn%20b%7C%7Cl.warn(%22Only%20able%20to%20read%20PLY%20meshes%20limited%20to%20triangles.%22)%2C%7Bpositions%3Aw%2Cindices%3AC%7D%7Dstatic%20readICO(t)%7Bconst%20e%3Dnew%20TextDecoder(%22utf-8%22).decode(t).split(%22%5Cn%22)%3Blet%20i%3De%5B0%5D.trim().split(%2F%5Cs%2B%2F)%3Bi.length%3E1%26%26l.warn(%22This%20is%20not%20a%20valid%20FreeSurfer%20ICO%2FTRI%20mesh.%22)%3Bconst%20s%3DparseInt(i%5B0%5D)%2Cn%3Dnew%20Float32Array(3*s)%3Blet%20r%3D1%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)%7Bconst%20t%3De%5Br%5D.trim().split(%2F%5Cs%2B%2F)%3Br%2B%2B%3Blet%20i%3DparseInt(t%5B0%5D)-1%3Bconst%20a%3DparseFloat(t%5B1%5D)%2Co%3DparseFloat(t%5B2%5D)%2Ch%3DparseFloat(t%5B3%5D)%3Bif(i%3C0%7C%7Ci%3E%3Ds)%7Bl.error(%22ICO%20vertices%20corrupted%22)%3Bbreak%7Di*%3D3%2Cn%5Bi%5D%3Da%2Cn%5Bi%2B1%5D%3Do%2Cn%5Bi%2B2%5D%3Dh%7Di%3De%5Br%5D.trim().split(%2F%5Cs%2B%2F)%2Cr%2B%2B%3Bconst%20a%3DparseInt(i%5B0%5D)%2Co%3Dnew%20Uint32Array(3*a)%3Bfor(let%20t%3D0%3Bt%3Ca%3Bt%2B%2B)%7Bconst%20t%3De%5Br%5D.trim().split(%2F%5Cs%2B%2F)%3Br%2B%2B%3Blet%20i%3DparseInt(t%5B0%5D)-1%3Bconst%20s%3DparseInt(t%5B1%5D)-1%2Cn%3DparseInt(t%5B2%5D)-1%2Ch%3DparseInt(t%5B3%5D)-1%3Bif(i%3C0%7C%7Ci%3E%3Da)%7Bl.error(%22ICO%20indices%20corrupted%22)%3Bbreak%7Di*%3D3%2Co%5Bi%5D%3Ds%2Co%5Bi%2B1%5D%3Dn%2Co%5Bi%2B2%5D%3Dh%7Dfor(let%20t%3D0%3Bt%3Co.length%3Bt%2B%3D3)%7Bconst%20e%3Do%5Bt%5D%3Bo%5Bt%5D%3Do%5Bt%2B1%5D%2Co%5Bt%2B1%5D%3De%7Dreturn%7Bpositions%3An%2Cindices%3Ao%7D%7Dstatic%20readGEO(t%2Ce%3D!1)%7Bconst%20i%3Dnew%20TextDecoder(%22utf-8%22).decode(t).split(%22%5Cn%22)%2Cs%3Di%5B0%5D.trim().split(%2F%5Cs%2B%2F)%2Cn%3DparseInt(s%5B0%5D)%3Blet%20r%3DparseInt(s%5B1%5D)%2Ca%3DparseInt(s%5B2%5D)%3Bconst%20o%3DparseInt(s%5B3%5D)%3B(n%3E1%7C%7Co!%3D%3D3*a)%26%26l.warn(%22Multi-part%20BYU%2FGEO%20header%20or%20not%20a%20triangular%20mesh.%22)%3Bconst%20h%3D%5B%5D%3Br*%3D3%3Blet%20c%3D0%2Cd%3D2%3Bfor(%3Bc%3Cr%3B)%7Bconst%20t%3Di%5Bd%5D.trim().split(%2F%5Cs%2B%2F)%3Bd%2B%2B%3Bfor(let%20e%3D0%3Be%3Ct.length%26%26(h.push(parseFloat(t%5Be%5D))%2Cc%2B%2B%2C!(c%3E%3Dr))%3Be%2B%2B)%3B%7Dconst%20m%3D%5B%5D%3Ba*%3D3%3Blet%20u%3D0%3Bfor(%3Bu%3Ca%3B)%7Bconst%20t%3Di%5Bd%5D.trim().split(%2F%5Cs%2B%2F)%3Bd%2B%2B%3Bfor(let%20e%3D0%3Be%3Ct.length%26%26(m.push(Math.abs(parseInt(t%5Be%5D))-1)%2Cu%2B%2B%2C!(u%3E%3Da))%3Be%2B%2B)%3B%7Dif(e)for(let%20t%3D0%3Bt%3Cm.length%3Bt%2B%3D3)%7Bconst%20e%3Dm%5Bt%5D%3Bm%5Bt%5D%3Dm%5Bt%2B1%5D%2Cm%5Bt%2B1%5D%3De%7Dreturn%7Bpositions%3Anew%20Float32Array(h)%2Cindices%3Anew%20Uint32Array(m)%7D%7Dstatic%20readOFF(t)%7Bconst%20e%3Dnew%20TextDecoder(%22utf-8%22).decode(t).split(%22%5Cn%22)%2Ci%3D%5B%5D%2Cs%3D%5B%5D%3Blet%20n%3D0%3Be%5Bn%5D.includes(%22OFF%22)%3Fn%2B%2B%3Al.warn(%22File%20does%20not%20start%20with%20OFF%22)%3Blet%20r%3De%5Bn%5D.trim().split(%2F%5Cs%2B%2F)%3Bconst%20a%3DparseInt(r%5B0%5D)%2Co%3DparseInt(r%5B1%5D)%3Bn%2B%2B%3Bfor(let%20t%3D0%3Bt%3Ca%3Bt%2B%2B)%7Br%3De%5Bn%5D.trim().split(%2F%5Cs%2B%2F)%2Ci.push(parseFloat(r%5B0%5D))%2Ci.push(parseFloat(r%5B1%5D))%2Ci.push(parseFloat(r%5B2%5D))%2Cn%2B%2B%7Dfor(let%20t%3D0%3Bt%3Co%3Bt%2B%2B)%7Br%3De%5Bn%5D.trim().split(%2F%5Cs%2B%2F)%3B3!%3D%3DparseInt(r%5B0%5D)%26%26l.warn(%22Only%20able%20to%20read%20OFF%20files%20with%20triangular%20meshes%22)%2Cs.push(parseInt(r%5B1%5D))%2Cs.push(parseInt(r%5B2%5D))%2Cs.push(parseInt(r%5B3%5D))%2Cn%2B%2B%7Dreturn%7Bpositions%3Anew%20Float32Array(i)%2Cindices%3Anew%20Uint32Array(s)%7D%7Dstatic%20readOBJMNI(t)%7Bconst%20e%3Dnew%20TextDecoder(%22utf-8%22).decode(t).trim().split(%2F%5Cs*%2C%5Cs*%7C%5Cs%2B%2F)%3B(e.length%3C1%7C%7C%22P%22!%3D%3De%5B0%5D)%26%26l.warn(%22This%20is%20not%20a%20valid%20MNI%20OBJ%20mesh.%22)%3Blet%20i%3D6%3Bconst%20s%3DparseInt(e%5Bi%2B%2B%5D)%2Cn%3D3*s%2Cr%3Dnew%20Float32Array(n)%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)r%5Bt%5D%3DparseFloat(e%5Bi%2B%2B%5D)%3Bi%2B%3Dn%3Bconst%20a%3DparseInt(e%5Bi%2B%2B%5D)%2Co%3DparseInt(e%5Bi%2B%2B%5D)%3B(a%3C1%7C%7Co%3C0%7C%7Co%3E2)%26%26l.warn(%22This%20is%20not%20a%20valid%20MNI%20OBJ%20mesh.%22)%3Blet%20h%3D1%3B1%3D%3D%3Do%3Fh%3Da%3A1%3D%3D%3Do%26%26(h%3Ds)%2Ci%2B%3D4*h%2Ci%2B%3Da%3Bconst%20c%3D3*a%2Cd%3Dnew%20Uint32Array(c)%3Bfor(let%20t%3D0%3Bt%3Cc%3Bt%2B%2B)d%5Bt%5D%3DparseInt(e%5Bi%2B%2B%5D)%3Breturn%7Bpositions%3Ar%2Cindices%3Ad%7D%7Dstatic%20readOBJ(t)%7Bconst%20e%3Dnew%20TextDecoder(%22utf-8%22).decode(t)%3Bif(%22P%22%3D%3D%3De%5B0%5D)return%20this.readOBJMNI(t)%3Bconst%20i%3De.split(%22%5Cn%22)%2Cs%3Di.length%2Cn%3D%5B%5D%2Cr%3D%5B%5D%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)%7Bconst%20e%3Di%5Bt%5D%3Bif(%22v%22%3D%3D%3De%5B0%5D%26%26%22%20%22%3D%3D%3De%5B1%5D)%7Bconst%20t%3De.trim().split(%2F%5Cs%2B%2F)%3Bn.push(parseFloat(t%5B1%5D))%2Cn.push(parseFloat(t%5B2%5D))%2Cn.push(parseFloat(t%5B3%5D))%7Dif(%22f%22%3D%3D%3De%5B0%5D)%7Bconst%20t%3De.trim().split(%2F%5Cs%2B%2F)%2Ci%3Dt.length-3%3Bif(i%3C1)break%3Blet%20s%3Dt%5B1%5D.split(%22%2F%22)%3Bconst%20n%3DparseInt(s%5B0%5D)-1%3Bs%3Dt%5B2%5D.split(%22%2F%22)%3Blet%20a%3DparseInt(s%5B0%5D)-1%3Bfor(let%20e%3D0%3Be%3Ci%3Be%2B%2B)%7Bs%3Dt%5B3%2Be%5D.split(%22%2F%22)%3Bconst%20i%3DparseInt(s%5B0%5D)-1%3Br.push(n)%2Cr.push(a)%2Cr.push(i)%2Ca%3Di%7D%7D%7Dreturn%7Bpositions%3Anew%20Float32Array(n)%2Cindices%3Anew%20Uint32Array(r)%7D%7Dstatic%20readFreeSurfer(e)%7Bconst%20i%3Dnew%20Uint8Array(e)%3Bif(35%3D%3D%3Di%5B0%5D%26%2633%3D%3D%3Di%5B1%5D%26%2697%3D%3D%3Di%5B2%5D)return%20t.readASC(e)%3Bconst%20s%3Dnew%20DataView(e)%2Cn%3Ds.getUint32(0%2C!1)%2Cr%3Ds.getUint32(4%2C!1)%3B4294966883%3D%3D%3Dn%26%261919246708%3D%3D%3Dr%7C%7Cye.debug(%22Unable%20to%20recognize%20file%20type%3A%20does%20not%20appear%20to%20be%20FreeSurfer%20format.%22)%3Blet%20a%3D0%3Bfor(%3B10!%3D%3Ds.getUint8(a)%3B)a%2B%2B%3Ba%2B%3D2%3Blet%20o%3Ds.getUint32(a%2C!1)%3Ba%2B%3D4%3Blet%20h%3Ds.getUint32(a%2C!1)%3Ba%2B%3D4%2Co*%3D3%3Bconst%20c%3Dnew%20Float32Array(o)%3Bfor(let%20t%3D0%3Bt%3Co%3Bt%2B%2B)c%5Bt%5D%3Ds.getFloat32(a%2C!1)%2Ca%2B%3D4%3Bh*%3D3%3Bconst%20d%3Dnew%20Uint32Array(h)%3Bfor(let%20t%3D0%3Bt%3Ch%3Bt%2B%2B)d%5Bt%5D%3Ds.getUint32(a%2C!1)%2Ca%2B%3D4%3Bconst%20m%3Ds.getUint32(a%2C!1)%3Ba%2B%3D4%3Blet%20u%3D20%3D%3D%3Dm%3Bif(!u)%7Bconst%20t%3Ds.getUint32(a%2C!1)%3Ba%2B%3D4%3Bconst%20e%3Ds.getUint32(a%2C!1)%3Ba%2B%3D4%2Cu%3D2%3D%3D%3Dm%26%260%3D%3D%3Dt%26%2620%3D%3D%3De%7Dif(u)%7Bconst%20t%3D(new%20TextDecoder).decode(e.slice(a)).trim().split(%22%5Cn%22)%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)%7Bif(!t%5Be%5D.startsWith(%22cras%22))continue%3Bconst%20i%3Dt%5Be%5D.split(%22%3D%22)%5B1%5D.trim().split(%22%20%22).map(Number)%2Cs%3DMath.floor(c.length%2F3)%3Blet%20n%3D0%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)c%5Bn%5D%2B%3Di%5B0%5D%2Cn%2B%2B%2Cc%5Bn%5D%2B%3Di%5B1%5D%2Cn%2B%2B%2Cc%5Bn%5D%2B%3Di%5B2%5D%2Cn%2B%2B%7D%7Delse%20l.warn(%22Unknown%20FreeSurfer%20Mesh%20extension%20code.%22)%3Breturn%7Bpositions%3Ac%2Cindices%3Ad%7D%7Dstatic%20readSRF(e)%7Bconst%20i%3Dnew%20Uint8Array(e)%3Bif(35%3D%3D%3Di%5B0%5D%26%2633%3D%3D%3Di%5B1%5D%26%2697%3D%3D%3Di%5B2%5D)return%20t.readASC(e)%3Bif(31%3D%3D%3Di%5B0%5D%26%26139%3D%3D%3Di%5B1%5D)%7Be%3Dde(new%20Uint8Array(e)).buffer%7Dconst%20s%3Dnew%20DataView(e)%2Cn%3Ds.getFloat32(0%2C!0)%2Cr%3Ds.getUint32(8%2C!0)%2Ca%3Ds.getUint32(12%2C!0)%2Co%3Ds.getFloat32(16%2C!0)%2Ch%3Ds.getFloat32(20%2C!0)%2Cc%3Ds.getFloat32(24%2C!0)%2Cd%3Dnew%20Float32Array(3*r)%3Blet%20m%3D28%2Cu%3D1%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)d%5Bu%5D%3D-s.getFloat32(m%2C!0)%2Bo%2Cu%2B%3D3%2Cm%2B%3D4%3Bu%3D2%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)d%5Bu%5D%3D-s.getFloat32(m%2C!0)%2Bh%2Cu%2B%3D3%2Cm%2B%3D4%3Bu%3D0%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)d%5Bu%5D%3D-s.getFloat32(m%2C!0)%2Bc%2Cu%2B%3D3%2Cm%2B%3D4%3Bm%3D28%2B24*r%3Bconst%20A%3Ds.getFloat32(m%2C!0)%2Cf%3Ds.getFloat32(m%2B4%2C!0)%2Cg%3Ds.getFloat32(m%2B8%2C!0)%2Cp%3Ds.getFloat32(m%2B16%2C!0)%2Cv%3Ds.getFloat32(m%2B20%2C!0)%2Cx%3Ds.getFloat32(m%2B24%2C!0)%3Bm%2B%3D32%3Bconst%20w%3Dnew%20Float32Array(3*r)%2CC%3Dnew%20Uint32Array(e%2Cm%2Cr)%3Bu%3D0%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)%7Bconst%20e%3DC%5Bt%5D%3Be%3E1056964608%26%26(w%5Bu%2B0%5D%3D(e%3E%3E16%26255)%2F255%2Cw%5Bu%2B1%5D%3D(e%3E%3E8%26255)%2F255%2Cw%5Bu%2B2%5D%3D(255%26e)%2F255)%2C0%3D%3D%3De%26%26(w%5Bu%2B0%5D%3DA%2Cw%5Bu%2B1%5D%3Df%2Cw%5Bu%2B2%5D%3Dg)%2C1%3D%3D%3De%26%26(w%5Bu%2B0%5D%3Dp%2Cw%5Bu%2B1%5D%3Dv%2Cw%5Bu%2B2%5D%3Dx)%2Cu%2B%3D3%7Dm%2B%3D4*r%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)%7Bm%2B%3D4%2B4*s.getUint32(m%2C!0)%7Dconst%20b%3Dnew%20Uint32Array(3*a)%3Bfor(let%20t%3D0%3Bt%3C3*a%3Bt%2B%2B)b%5Bt%5D%3Ds.getInt32(m%2C!0)%2Cm%2B%3D4%3Breturn%204!%3D%3Dn%26%26l.warn(%22Not%20valid%20SRF%22)%2C%7Bpositions%3Ad%2Cindices%3Ab%2Ccolors%3Aw%7D%7Dstatic%20readTxtSTL(t)%7Bconst%20e%3Dnew%20TextDecoder(%22utf-8%22).decode(t).split(%22%5Cn%22)%3Bif(!e%5B0%5D.startsWith(%22solid%22))throw%20new%20Error(%22Not%20a%20valid%20STL%20file%22)%3Bconst%20i%3D%5B%5D%3Bfor(let%20t%3D1%3Bt%3Ce.length%3Bt%2B%2B)%7Bif(!e%5Bt%5D.includes(%22vertex%22))continue%3Bconst%20s%3De%5Bt%5D.trim().split(%2F%5Cs%2B%2F)%3Bfor(let%20t%3D1%3Bt%3Cs.length%3Bt%2B%2B)i.push(parseFloat(s%5Bt%5D))%7Dconst%20s%3DMath.floor(i.length%2F3)%3Bif(3*s!%3D%3Di.length)throw%20new%20Error(%22Unable%20to%20parse%20ASCII%20STL%20file.%22)%3Bconst%20n%3Dnew%20Float32Array(i)%2Cr%3Dnew%20Uint32Array(s)%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)r%5Bt%5D%3Dt%3Breturn%7Bpositions%3An%2Cindices%3Ar%7D%7Dstatic%20readSTL(e)%7Bif(e.byteLength%3C134)throw%20new%20Error(%22File%20too%20small%20to%20be%20STL%3A%20bytes%20%3D%20%22%2Be.byteLength)%3Bconst%20i%3Dnew%20DataView(e)%3Bif(1768714099%3D%3D%3Di.getUint32(0%2C!0))return%20t.readTxtSTL(e)%3Bconst%20s%3Di.getUint32(80%2C!0)%2Cn%3D3*s%3Bif(e.byteLength%3C84%2B50*s)throw%20new%20Error(%22STL%20file%20too%20small%20to%20store%20triangles%20%3D%20%22%2Bs)%3Bconst%20r%3Dnew%20Uint32Array(n)%2Ca%3Dnew%20Float32Array(3*n)%3Blet%20o%3D96%2Cl%3D0%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)%7Bfor(let%20t%3D0%3Bt%3C9%3Bt%2B%2B)a%5Bl%5D%3Di.getFloat32(o%2C!0)%2Cl%2B%3D1%2Co%2B%3D4%3Bo%2B%3D14%7Dfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)r%5Bt%5D%3Dt%3Breturn%7Bpositions%3Aa%2Cindices%3Ar%7D%7Dstatic%20decimateLayerVertices(t%2Ce)%7Bif(t%25e%3D%3D0)return%20t%3Bconst%20i%3DMath.round(Math.log((t-2)%2F10)%2FMath.log(4))%2Cs%3DMath.round(Math.log((e-2)%2F10)%2FMath.log(4))%2Cn%3D10*Math.pow(4%2Ci)%2B2%2Cr%3D10*Math.pow(4%2Cs)%2B2%3Breturn%20n!%3D%3Dt%7C%7Cr!%3D%3De%3Ft%3Ae%7Dstatic%20readNII2(t%2Ce%3D0%2Ci%3D%22%22)%7Blet%20s%3Dnew%20Float32Array%3Bconst%20n%3Dt.byteLength%3Blet%20r%3D!0%3Bconst%20a%3Dnew%20DataView(t)%3Blet%20o%3Da.getUint16(0%2Cr)%3Bif(469893120%3D%3D%3Do%26%26(r%3D!1%2Co%3Da.getUint16(0%2Cr))%2C540!%3D%3Do)throw%20new%20Error(%22Not%20a%20valid%20NIfTI-2%20dataset%22)%3Bconst%20h%3DNumber(a.getBigInt64(168%2Cr))%2Cc%3Da.getFloat64(176%2Cr)%2Cd%3Da.getFloat64(184%2Cr)%3B1%3D%3D%3Dc%26%260%3D%3D%3Dd%7C%7Cl.warn(%22ignoring%20scale%20slope%20and%20intercept%22)%3Bconst%20m%3Da.getUint32(504%2Cr)%2Cu%3Da.getUint16(12%2Cr)%3Bif(2!%3D%3Du%26%264!%3D%3Du%26%268!%3D%3Du%26%2616!%3D%3Du)throw%20new%20Error(%22Unsupported%20NIfTI%20datatype%20%22%2Bu)%3Blet%20A%3D1%3Bconst%20f%3D%5B1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%5D%3Bfor(let%20t%3D1%3Bt%3C8%3Bt%2B%2B)f%5Bt%5D%3DMath.max(Number(a.getBigInt64(16%2B8*t%2Cr))%2C1)%2CA*%3Df%5Bt%5D%3Bif(m%3E%3D3e3%26%26m%3C%3D3099%26%26h%3E580)%7Blet%20s%3Dfunction()%7Bfor(%3Bw%3Cn%26%2610%3D%3D%3Dv%5Bw%5D%3B)w%2B%2B%3Bconst%20e%3Dw%3Bfor(%3Bw%3Cn%26%2610!%3D%3Dv%5Bw%5D%3B)w%2B%2B%3Breturn%20w%2B%2B%2Cw-e%3C1%3F%22%22%3A(new%20TextDecoder).decode(t.slice(e%2Cw-1)).trim()%7D%2Co%3Dfunction()%7Blet%20t%3Ds()%3Bif(!t.startsWith(%22%3C%22)%7C%7Ct.endsWith(%22%3E%22))return%20t%3Bfor(%3Bw%3Cn%26%26!t.endsWith(%22%3E%22)%3B)t%2B%3Ds()%3Breturn%20t%7D%2Cc%3Dfunction(t%2Ce%3D!1)%7Bconst%20i%3Dx.indexOf(t)%3Bif(i%3C0)return%201%3Bconst%20s%3Dx.indexOf('%22'%2Ci)%2B1%2Cn%3Dx.indexOf('%22'%2Cs)%2Cr%3Dx.slice(s%2Cn)%3Breturn%20e%3Fr%3AparseInt(r)%7D%2Cd%3D0%2Cm%3D0%2CA%3D0%2Cg%3D%22%22%2Cp%3Dnew%20Uint32Array%3Bconst%20v%3Dnew%20Uint8Array(t)%3Blet%20x%2Cw%3D552%3Bconst%20C%3Df%5B5%5D%2Cb%3Dnew%20Float32Array(e*C)%3Bfor(%3Bw%3Cn%26%26(x%3Do()%2C!x.includes(%22%3C%2FCIFTI%3E%22))%3B)if(x.includes(%22%3CBrainModel%22))%7Bconst%20t%3Dc(%22SurfaceNumberOfVertices%3D%22)%2Cs%3Dc(%22BrainStructure%3D%22%2C!0).toUpperCase()%3Bif(t%25e!%3D0)continue%3Blet%20n%3D!1%3Bif(i.includes(%22CORTEX%22)%26%26s.includes(%22CORTEX%22)%26%26(n%3D!0)%2C!n)continue%3Bif(n%3D!1%2Ci.includes(%22LEFT%22)%26%26s.includes(%22LEFT%22)%26%26(n%3D!0)%2Ci.includes(%22RIGHT%22)%26%26s.includes(%22RIGHT%22)%26%26(n%3D!0)%2C!n)continue%3Bif(A%3Dt%2Cd%3Dc(%22IndexOffset%3D%22)%2Cm%3Dc(%22IndexCount%3D%22)%2Cg%3Ds%2Cx.includes(%22%3CVertexIndices%3E%22)%7C%7C(x%3Do())%2C!x.startsWith(%22%3CVertexIndices%3E%22)%7C%7C!x.endsWith(%22%3C%2FVertexIndices%3E%22))return%20l.warn(%22Unable%20to%20find%20CIfTI%20%3CVertexIndices%3E%22)%2Cb%3Bx%3Dx.slice(15%2C-16)%3Bconst%20r%3Dx.trim().split(%2F%5Cs%2B%2F)%3Br.length%3Cm%26%26l.error(%22Error%20parsing%20VertexIndices%22)%2Cp%3Dnew%20Uint32Array(m)%3Bfor(let%20t%3D0%3Bt%3Cm%3Bt%2B%2B)p%5Bt%5D%3DparseInt(r%5Bt%5D)%7Dif(0%3D%3D%3DA%7C%7C0%3D%3D%3Dp.length)return%20l.warn(%22Unable%20to%20find%20CIfTI%20structure%20that%20matches%20the%20mesh.%22)%2Cb%3Bif(16!%3D%3Du)return%20l.warn(%22Only%20able%20to%20read%20float32%20CIfTI%20(only%20known%20datatype).%22)%2Cb%3Bconst%20y%3Dnew%20Float32Array(m*C)%2CI%3Dh%2BC*d*4%3Bfor(let%20t%3D0%3Bt%3Cm*C%3Bt%2B%2B)y%5Bt%5D%3Da.getFloat32(I%2B4*t%2Cr)%3Blet%20M%3D0%3Bfor(let%20t%3D0%3Bt%3Cm%3Bt%2B%2B)for(let%20i%3D0%3Bi%3CC%3Bi%2B%2B)b%5Bp%5Bt%5D%2Bi*e%5D%3Dy%5BM%5D%2CM%2B%2B%3Breturn%20l.debug(%22CIfTI%20diagnostics%22%2CA%2Cg%2Cd%2Cm%2Cd%2Ci)%2Cb%7Dif(A%3Dthis.decimateLayerVertices(A%2Ce)%2CA%25e!%3D0)throw%20new%20Error(%22Vertices%20in%20layer%20(%22%2BA%2B%22)%20is%20not%20a%20multiple%20of%20number%20of%20vertices%20(%22%2Be%2B%22)%22)%3Bif(r)16%3D%3D%3Du%3Fs%3Dnew%20Float32Array(t%2Ch%2CA)%3A8%3D%3D%3Du%3Fs%3Dnew%20Int32Array(t%2Ch%2CA)%3A4%3D%3D%3Du%26%26(s%3Dnew%20Int16Array(t%2Ch%2CA))%3Belse%20if(16%3D%3D%3Du)%7Bs%3Dnew%20Float32Array(A)%3Bfor(let%20t%3D0%3Bt%3CA%3Bt%2B%2B)s%5Bt%5D%3Da.getFloat32(h%2B4*t%2Cr)%7Delse%20if(8%3D%3D%3Du)%7Bs%3Dnew%20Int32Array(A)%3Bfor(let%20t%3D0%3Bt%3CA%3Bt%2B%2B)s%5Bt%5D%3Da.getInt32(h%2B4*t%2Cr)%7Delse%20if(4%3D%3D%3Du)%7Bs%3Dnew%20Int16Array(A)%3Bfor(let%20t%3D0%3Bt%3CA%3Bt%2B%2B)s%5Bt%5D%3Da.getInt16(h%2B2*t%2Cr)%7Dreturn%202%3D%3D%3Du%26%26(s%3Dnew%20Uint8Array(t%2Ch%2CA))%2Cs%7Dstatic%20readNII(e%2Ci%3D0%2Cs%3D%22%22)%7Blet%20n%3Dnew%20Float32Array%2Cr%3D!0%2Ca%3Dnew%20DataView(e)%2Co%3Da.getUint16(0%2Cr)%3Bif(540%3D%3D%3Do%7C%7C469893120%3D%3D%3Do)return%20t.readNII2(e%2Ci%2Cs)%3Bif(23553%3D%3D%3Do%26%26(r%3D!1%2Co%3Da.getUint16(0%2Cr))%2C348!%3D%3Do)%7Bconst%20n%3Dde(new%20Uint8Array(e))%3Bif(a%3Dnew%20DataView(n.buffer)%2Ce%3Dn.buffer%2Co%3Da.getUint16(0%2Cr)%2C540%3D%3D%3Do%7C%7C469893120%3D%3D%3Do)return%20t.readNII2(e%2Ci%2Cs)%3B23553%3D%3D%3Do%26%26(r%3D!1%2Co%3Da.getUint16(0%2Cr))%7D348!%3D%3Do%26%26l.error(%22Not%20a%20valid%20NIfTI%20image.%22)%3Bconst%20h%3Da.getFloat32(108%2Cr)%2Cc%3Da.getFloat32(112%2Cr)%2Cd%3Da.getFloat32(116%2Cr)%3B1%3D%3D%3Dc%26%260%3D%3D%3Dd%7C%7Cl.warn(%22ignoring%20scale%20slope%20and%20intercept%22)%3Bconst%20m%3Da.getUint16(70%2Cr)%3Bif(2!%3D%3Dm%26%264!%3D%3Dm%26%268!%3D%3Dm%26%2616!%3D%3Dm)throw%20new%20Error(%22Unsupported%20NIfTI%20datatype%20%22%2Bm)%3Blet%20u%3D1%3Bfor(let%20t%3D1%3Bt%3C8%3Bt%2B%2B)%7Bconst%20e%3Da.getUint16(40%2B2*t%2Cr)%3Bu*%3DMath.max(e%2C1)%7Dif(u%3Dthis.decimateLayerVertices(u%2Ci)%2Cu%25i!%3D0)throw%20new%20Error(%22Vertices%20in%20layer%20(%22%2Bu%2B%22)%20is%20not%20a%20multiple%20of%20number%20of%20vertices%20(%22%2Bi%2B%22)%22)%3Bif(r)16%3D%3D%3Dm%3Fn%3Dnew%20Float32Array(e%2Ch%2Cu)%3A8%3D%3D%3Dm%3Fn%3Dnew%20Int32Array(e%2Ch%2Cu)%3A4%3D%3D%3Dm%26%26(n%3Dnew%20Int16Array(e%2Ch%2Cu))%3Belse%20if(16%3D%3D%3Dm)%7Bn%3Dnew%20Float32Array(u)%3Bfor(let%20t%3D0%3Bt%3Cu%3Bt%2B%2B)n%5Bt%5D%3Da.getFloat32(h%2B4*t%2Cr)%7Delse%20if(8%3D%3D%3Dm)%7Bn%3Dnew%20Int32Array(u)%3Bfor(let%20t%3D0%3Bt%3Cu%3Bt%2B%2B)n%5Bt%5D%3Da.getInt32(h%2B4*t%2Cr)%7Delse%20if(4%3D%3D%3Dm)%7Bn%3Dnew%20Int16Array(u)%3Bfor(let%20t%3D0%3Bt%3Cu%3Bt%2B%2B)n%5Bt%5D%3Da.getInt16(h%2B2*t%2Cr)%7Dreturn%202%3D%3D%3Dm%26%26(n%3Dnew%20Uint8Array(e%2Ch%2Cu))%2Cn%7Dstatic%20readMGH(t%2Ce%3D0%2Ci%3D!1)%7Blet%20s%3Dnew%20DataView(t)%2Cn%3Dt%3Bif(31%3D%3D%3Ds.getUint8(0)%26%26139%3D%3D%3Ds.getUint8(1))%7Bconst%20e%3Dde(new%20Uint8Array(t))%3Bn%3Dnew%20ArrayBuffer(e.byteLength)%2Cnew%20Uint8Array(n).set(new%20Uint8Array(e))%2Cs%3Dnew%20DataView(e.buffer)%7Dconst%20r%3Ds.getInt32(0%2C!1)%2Ca%3DMath.max(1%2Cs.getInt32(4%2C!1))%2Co%3DMath.max(1%2Cs.getInt32(8%2C!1))%2Ch%3DMath.max(1%2Cs.getInt32(12%2C!1))%2Cc%3DMath.max(1%2Cs.getInt32(16%2C!1))%2Cd%3Ds.getInt32(20%2C!1)%3Blet%20m%3D284%3Bconst%20u%3D!1%3B(1!%3D%3Dr%7C%7Cd%3C0%7C%7Cd%3E4)%26%26l.warn(%22Not%20a%20valid%20MGH%20file%22)%3Blet%20A%3Da*o*h*c%2Cf%3D%5B%5D%3Bif(A%3Dthis.decimateLayerVertices(A%2Ce)%2CA%25e!%3D0)return%20l.warn(%22Vertices%20in%20layer%20(%22%2BA%2B%22)%20is%20not%20a%20multiple%20of%20number%20of%20vertices%20(%22%2Be%2B%22)%22)%2Cf%3Bif(3%3D%3D%3Dd)%7Bf%3Dnew%20Float32Array(A)%3Bfor(let%20t%3D0%3Bt%3CA%3Bt%2B%2B)f%5Bt%5D%3Ds.getFloat32(m%2B4*t%2Cu)%7Delse%20if(1%3D%3D%3Dd)%7Bf%3Dnew%20Int32Array(A)%3Bfor(let%20t%3D0%3Bt%3CA%3Bt%2B%2B)f%5Bt%5D%3Ds.getInt32(m%2B4*t%2Cu)%7Delse%20if(4%3D%3D%3Dd)%7Bf%3Dnew%20Int16Array(A)%3Bfor(let%20t%3D0%3Bt%3CA%3Bt%2B%2B)f%5Bt%5D%3Ds.getInt16(m%2B2*t%2Cu)%7Delse%200%3D%3D%3Dd%26%26(f%3Dnew%20Uint8Array(t%2Cm%2CA))%3Bif(!i)return%20f%3Blet%20g%3D4%3B4%3D%3D%3Dd%26%26(g%3D2)%2C0%3D%3D%3Dd%26%26(g%3D1)%2Cm%2B%3Dg*A%2Cm%2B%3D16%3Bconst%20p%3Dn.byteLength%3Blet%20v%3Bfor(%3Bm%3Cp-8%3B)%7Blet%20t%3D0%3Bswitch(s.getInt32(m%2B%3D4%2Cu))%7Bcase%2030%3At%3Ds.getInt32(m%2B%3D4%2Cu)-1%3Bbreak%3Bcase%2020%3Acase%202%3At%3D0%3Bbreak%3Bcase%201%3At%3D0%3B%7Blet%20t%3Ds.getInt32(m%2B%3D4%2Cu)%3Bif(t%3E0)return%20l.warn(%22unsupported%20CTABreadFromBinaryV1%22)%2Cf%3Bif(t%3D-t%2C2!%3D%3Dt)return%20l.warn(%22CTABreadFromBinary%3A%20unknown%20version%22)%2Cf%3Bconst%20e%3Ds.getInt32(m%2B%3D4%2Cu)%3Bif(e%3C0)return%20l.warn(%22CTABreadFromBinaryV2%3A%20nentries%20was%20%22%2Ce)%2Cf%3Bconst%20i%3Ds.getInt32(m%2B%3D4%2Cu)%3Bm%2B%3Di%3Bconst%20n%3Ds.getInt32(m%2B%3D4%2Cu)%3Bif(n%3C0)return%20f%3Bconst%20r%3D%7BR%3A%5B%5D%2CG%3A%5B%5D%2CB%3A%5B%5D%2CA%3A%5B%5D%2CI%3A%5B%5D%2Clabels%3A%5B%5D%7D%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)%7Bconst%20t%3Ds.getInt32(m%2B%3D4%2Cu)%2Ce%3Ds.getInt32(m%2B%3D4%2Cu)%3Blet%20i%3Dm%2B4%2Cn%3D%22%22%3Bfor(let%20t%3D0%3Bt%3Ce%3Bt%2B%2B)%7Bconst%20t%3Ds.getUint8(i%2B%2B)%3Bif(0%3D%3D%3Dt)break%3Bn%2B%3DString.fromCharCode(t)%7Dm%2B%3De%3Bconst%20a%3Ds.getInt32(m%2B%3D4%2Cu)%2Co%3Ds.getInt32(m%2B%3D4%2Cu)%2Cl%3Ds.getInt32(m%2B%3D4%2Cu)%2Ch%3D255-s.getInt32(m%2B%3D4%2Cu)%3Br.I.push(t)%2Cr.R.push(a)%2Cr.G.push(o)%2Cr.B.push(l)%2Cr.A.push(h)%2Cr.labels.push(n)%7Dv%3Dne.makeLabelLut(r)%7Dbreak%3Bdefault%3At%3Ds.getInt32(m%2B%3D8%2Cu)%7Dm%2B%3Dt%7Dreturn%7Bscalars%3Af%2CcolormapLabel%3Av%7D%7Dstatic%20readX3D(t)%7Bconst%20e%3Dt.byteLength%3Bif(e%3C20)throw%20new%20Error(%22File%20too%20small%20to%20be%20X3D%3A%20bytes%20%3D%20%22%2Be)%3Bconst%20i%3Dnew%20Uint8Array(t)%3Blet%20s%3D0%3Bfunction%20n()%7Bfor(%3Bs%3Ce%26%2660!%3D%3Di%5Bs%5D%3B)s%2B%2B%3Bconst%20n%3Ds%3Bfor(%3Bs%3Ce%26%2662!%3D%3Di%5Bs%5D%3B)s%2B%2B%3Bconst%20r%3Ds%3Breturn(new%20TextDecoder).decode(t.slice(n%2Cr%2B1)).trim()%7Dlet%20r%3Dn()%3Bfunction%20a(t)%7Bconst%20e%3Dr.indexOf(t%2B%22%3D%22)%3Bif(e%3C0)return%22%22%3Bconst%20i%3Dr%5Be%2Bt.length%2B1%5D%2Cs%3Dr.indexOf(i%2Ce)%2B1%2Cn%3Dr.indexOf(i%2Cs)%3Breturn%20r.slice(s%2Cn)%7Dfunction%20o(t)%7Bconst%20e%3Dr.indexOf(t%2B%22%3D%22)%3Bif(e%3C0)return%201%3Bconst%20i%3Dr%5Be%2Bt.length%2B1%5D%2Cs%3Dr.indexOf(i%2Ce)%2B1%2Cn%3Dr.indexOf(i%2Cs)%3Blet%20a%3Dr.slice(s%2Cn).trim()%3Ba%3Da.replace(%2F%2C%5Cs*%24%2F%2C%22%22)%3Bconst%20o%3Da.trim().split(%2F%5Cs*%2C%5Cs*%7C%5Cs%2B%2F)%3Bif(o.length%3C2)return%20parseFloat(a)%3Blet%20l%3Dnew%20Array(o.length)%2Ch%3D0%3Bfor(let%20t%3D0%3Bt%3Co.length%3Bt%2B%2B)%7Bconst%20e%3DparseFloat(o%5Bt%5D)%3BisFinite(e)%26%26(l%5Bh%5D%3De%2Ch%2B%2B)%7Dreturn%20l%3Dl.slice(0%2Ch)%2Cl%7Dr.includes(%22xml%20version%22)%7C%7Cl.warn(%22Not%20a%20X3D%20image%22)%3Blet%20h%3D%5B%5D%2Cc%3D%5B%5D%2Cd%3D%5B%5D%2Cm%3D%5B%5D%2Cu%3D%5B0%2C0%2C0%2C0%5D%2CA%3D%5B0%2C0%2C0%2C0%5D%2Cf%3D%5B255%2C255%2C255%2C255%5D%2Cg%3D%5B255%2C255%2C255%2C255%5D%3Bconst%20p%3D%7B%7D%3Bfunction%20v()%7Bif(!r.endsWith(%22%2F%3E%22))if(r.startsWith(%22%3CAppearance%3E%22))for(%3Bs%3Ce%26%26!r.endsWith(%22%3C%2FAppearance%3E%22)%3B)r%2B%3Dn()%3Belse%20for(%3Bs%3Ce%26%26!r.endsWith(%22%2F%3E%22)%3B)r%2B%3Dn()%3Bconst%20t%3Da(%22USE%22)%3Bif(t.length%3E1)return%20void(t%20in%20p%3Ff%3Dp%5Bt%5D%3Al.warn(%22Unable%20to%20find%20DEF%20for%20%22%2Bt))%3Bconst%20i%3Do(%22diffuseColor%22)%3Bif(i.length%3C3)return%3Bf%5B0%5D%3DMath.round(255*i%5B0%5D)%2Cf%5B1%5D%3DMath.round(255*i%5B1%5D)%2Cf%5B2%5D%3DMath.round(255*i%5B2%5D)%3Bconst%20h%3Da(%22DEF%22)%3Bh.length%3C1%7C%7C(p%5Bh%5D%3Df)%7Dfor(%3Bs%3Ce%3B)if(r%3Dn()%2Cf%3Dg.slice()%2Cr.startsWith(%22%3CTransform%22)%26%26(u%3Do(%22translation%22)%2CA%3Do(%22rotation%22))%2Cr.startsWith(%22%3CAppearance%22)%26%26(v()%2Cg%3Df.slice())%2Cr.startsWith(%22%3CShape%22))%7Blet%20t%3D1%2Ci%3D1%2Ca%3D%5B%5D%2Cg%3D%5B%5D%3Bfor(%3Bs%3Ce%26%26(r%3Dn()%2Cr.startsWith(%22%3CAppearance%22)%26%26v()%2C!r.startsWith(%22%3C%2FShape%22))%3B)%7Bif(r.startsWith(%22%3CSphere%22)%26%26(t%3Do(%22radius%22)%2Ci%3D-1)%2Cr.startsWith(%22%3CCylinder%22)%26%26(t%3Do(%22radius%22)%2Ci%3Do(%22height%22))%2Cr.startsWith(%22%3CIndexedFaceSet%22)%26%26(i%3D-2%2Ca%3Do(%22coordIndex%22))%2Cr.startsWith(%22%3CIndexedTriangleSet%22)%26%26(i%3D-7%2Ca%3Do(%22index%22))%2Cr.startsWith(%22%3CIndexedTriangleStripSet%22)%26%26(i%3D-3%2Ca%3Do(%22index%22))%2Cr.startsWith(%22%3CCoordinate%22))%7Bg%3Do(%22point%22)%3Bconst%20t%3Dg.length%253%3B0!%3D%3Dt%26%26(g%3Dg.slice(0%2C-t))%7Dr.startsWith(%22%3CColor%22)%26%26(m%3Do(%22color%22))%2Cr.startsWith(%22%3CBox%22)%26%26(i%3D-4%2Cl.warn(%22Unsupported%20x3d%20shape%3A%20Box%22))%2Cr.startsWith(%22%3CCone%22)%26%26(i%3D-5%2Cl.warn(%22Unsupported%20x3d%20shape%3A%20Cone%22))%2Cr.startsWith(%22%3CElevationGrid%22)%26%26(i%3D-6%2Cl.warn(%22Unsupported%20x3d%20shape%3A%20ElevationGrid%22))%7Dif(i%3C-3%26%26-7!%3D%3Di)%3Belse%20if(i%3C-1)%7Bif(a.length%3C1%7C%7Cg.length%3C3%7C%7Cvoid%200%3D%3D%3Dg.length)%7Bl.warn(%22Indexed%20mesh%20must%20specify%20indices%20and%20points%22)%3Bbreak%7Dconst%20t%3DMath.floor(h.length%2F3)%3Blet%20e%3D2%3Bif(-7%3D%3D%3Di)c%3D%5B...c%2C...a%5D%3Belse%20if(-2%3D%3D%3Di)%7Blet%20i%3D0%3Bfor(%3Be%3Ca.length%3B)a%5Be%5D%3E%3D0%3F(c.push(a%5Bi%5D%2Bt)%2Cc.push(a%5Be-1%5D%2Bt)%2Cc.push(a%5Be-0%5D%2Bt)%2Ce%2B%3D1)%3A(e%2B%3D3%2Ci%3De-2)%7Delse%20for(%3Be%3Ca.length%3B)a%5Be%5D%3E%3D0%3F(c.push(a%5Be-2%5D%2Bt)%2Cc.push(a%5Be-1%5D%2Bt)%2Cc.push(a%5Be-0%5D%2Bt)%2Ce%2B%3D1)%3Ae%2B%3D3%3Bh%3D%5B...h%2C...g%5D%3Bconst%20s%3DMath.floor(g.length%2F3)%2Cn%3DArray(s).fill(f).flat()%3Bif(m.length%3D%3D%3D3*s)%7Blet%20t%3D0%2Ce%3D0%3Bfor(let%20i%3D0%3Bi%3Cs%3Bi%2B%2B)%7Bfor(let%20i%3D0%3Bi%3C3%3Bi%2B%2B)n%5Be%5D%3DMath.round(255*m%5Bt%5D)%2Ct%2B%2B%2Ce%2B%2B%3Be%2B%2B%7D%7Dd%3D%5B...d%2C...n%5D%7Delse%20if(i%3C0)O.makeColoredSphere(h%2Cc%2Cd%2Ct%2Cu%2Cf)%3Belse%7Bconst%20e%3Dle.create()%3Ble.fromRotation(e%2CA%5B3%5D%2C%5BA%5B0%5D%2CA%5B1%5D%2CA%5B2%5D%5D)%3Bconst%20s%3Dhe.fromValues(0%2C.5*-i%2C0%2C1)%2Cn%3Dhe.fromValues(0%2C.5*%2Bi%2C0%2C1)%3Bhe.transformMat4(s%2Cs%2Ce)%2Che.transformMat4(n%2Cn%2Ce)%2Che.add(s%2Cs%2Cu)%2Che.add(n%2Cn%2Cu)%3Bconst%20r%3Dce.fromValues(s%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D)%2Ca%3Dce.fromValues(n%5B0%5D%2Cn%5B1%5D%2Cn%5B2%5D)%3BO.makeColoredCylinder(h%2Cc%2Cd%2Cr%2Ca%2Ct%2Cf)%7D%7Dreturn%7Bpositions%3AFloat32Array.from(h)%2Cindices%3AUint32Array.from(c)%2Crgba255%3AUint8Array.from(d)%7D%7Dstatic%20readGII(t%2Ce%3D0)%7Blet%20i%3Dt.byteLength%3Bif(i%3C20)throw%20new%20Error(%22File%20too%20small%20to%20be%20GII%3A%20bytes%20%3D%20%22%2Bi)%3Blet%20s%3Dnew%20TextDecoder(%22ascii%22).decode(t)%3Bif(31%3D%3D%3Ds%5B0%5D.charCodeAt(0))%7Bconst%20e%3Dde(new%20Uint8Array(t))%3Bt%3De.buffer%2Cs%3Dnew%20TextDecoder(%22ascii%22).decode(e.buffer)%7Dlet%20n%3D0%3Bfunction%20r()%7Blet%20e%3D!0%2Cr%3Dn%3Bfor(%3Be%3B)%7Bfor(%3Bn%3Ci%26%26%22%3C%22!%3D%3Ds%5Bn%5D%3B)n%2B%2B%3Bfor(r%3Dn%3Bn%3Ci%26%26%22%3E%22!%3D%3Ds%5Bn%5D%3B)n%2B%2B%3Bif(e%3D%22%2F%22%3D%3D%3Ds%5Bn-1%5D%2Cr%2B1%3Ci%26%26%22%2F%22%3D%3D%3Ds%5Br%2B1%5D%26%26(n%2B%3D1%2Ce%3D!0)%2Cn%3E%3Di)break%7Dconst%20a%3D(new%20TextDecoder).decode(t.slice(r%2B1%2Cn)).trim()%2Co%3Da.split(%22%20%22)%5B0%5D.trim()%2Cl%3Dn%3Blet%20h%3Dn%2Cc%3Dn%3Bif(%22%3F%22!%3D%3Ds%5Br%2B1%5D%26%26%22!%22!%3D%3Ds%5Br%2B1%5D)%7Bconst%20t%3D%22%3C%2F%22%2Bo%2B%22%3E%22%3Bh%3Ds.indexOf(t%2Cl)%2Cc%3Dh%2Bt.length-1%7Dreturn%7Bname%3Aa%2CstartPos%3Ar%2CcontentStartPos%3Al%2CcontentEndPos%3Ah%2CendPos%3Ac%7D%7Dlet%20a%3Dr()%3Bif(!a.name.startsWith(%22%3Fxml%22))throw%20new%20Error(%22readGII%3A%20Invalid%20XML%20file%22)%3Bfor(%3B!a.name.startsWith(%22GIFTI%22)%26%26a.endPos%3Ci%3B)a%3Dr()%3Bif(!a.name.startsWith(%22GIFTI%22)%7C%7Ca.contentStartPos%3D%3D%3Da.contentEndPos)throw%20new%20Error(%22readGII%3A%20XML%20file%20does%20not%20include%20GIFTI%20tag%22)%3Bi%3Da.contentEndPos%3Blet%20o%3Dnew%20Float32Array%2Ch%3Dnew%20Uint32Array%2Cc%3Dnew%20Float32Array%2Cd%3D%22%22%2Cm%3D!1%2Cu%3D!1%2CA%3D!1%2Cf%3D!1%2Cg%3D%5B1%2C1%2C1%5D%3Bconst%20p%3D%5B0%2C0%2C0%5D%3Blet%20v%3D0%2Cx%3D!1%2Cw%3D!1%2CC%3D0%2Cb%3D!1%3Ba.endPos%3Da.contentStartPos%3Blet%20y%3D%22%22%3Bfunction%20I(t%2Ce%3D!1)%7Bconst%20i%3Dy.indexOf(t)%3Bif(i%3C0)return%201%3Bconst%20s%3Dy.indexOf('%22'%2Ci)%2B1%2Cn%3Dy.indexOf('%22'%2Cs)%2Cr%3Dy.slice(s%2Cn)%3Breturn%20e%3FparseFloat(r)%3AparseInt(r)%7Dfunction%20M(t)%7Bconst%20e%3Dy.indexOf(t)%3Bif(e%3C0)return%22%22%3Bconst%20i%3De%2Bt.length%2Cs%3Dy.indexOf(%22%5D%22%2Ci)%3Breturn%20y.slice(i%2Cs)%7Dconst%20D%3D%7BR%3A%5B%5D%2CG%3A%5B%5D%2CB%3A%5B%5D%2CA%3A%5B%5D%2CI%3A%5B%5D%2Clabels%3A%5B%5D%7D%3Bfor(%3Ba.endPos%3Ci%26%26a.name.length%3E1%3B)if(a%3Dr()%2Ca.name.startsWith(%22Label%20Key%22)%26%26(y%3Da.name%2CD.I.push(I(%22Key%3D%22))%2CD.R.push(Math.round(255*I(%22Red%3D%22%2C!0)))%2CD.G.push(Math.round(255*I(%22Green%3D%22%2C!0)))%2CD.B.push(Math.round(255*I(%22Blue%3D%22%2C!0)))%2CD.A.push(Math.round(255*I(%22Alpha%22%2C!0)))%2Cy%3D(new%20TextDecoder).decode(t.slice(a.contentStartPos%2B1%2Ca.contentEndPos)).trim()%2CD.labels.push(M(%22%3C!%5BCDATA%5B%22)))%2C%22Data%22!%3D%3Da.name.trim())%7Bif(%22DataSpace%22%3D%3D%3Da.name.trim()%26%26(y%3D(new%20TextDecoder).decode(t.slice(a.contentStartPos%2B1%2Ca.contentEndPos)).trim()%2Cy.includes(%22NIFTI_XFORM_SCANNER_ANAT%22)%26%26(b%3D!0))%2C%22MD%22%3D%3D%3Da.name.trim()%26%26(y%3D(new%20TextDecoder).decode(t.slice(a.contentStartPos%2B1%2Ca.contentEndPos)).trim()%2Cy.includes(%22AnatomicalStructurePrimary%22)%26%26y.includes(%22CDATA%5B%22)%26%26(d%3DM(%22%3CValue%3E%3C!%5BCDATA%5B%22).toUpperCase())%2Cy.includes(%22VolGeom%22)%26%26y.includes(%22CDATA%5B%22)))%7Blet%20t%3D-1%3Bif(y.includes(%22VolGeomC_R%22)%26%26(t%3D0)%2Cy.includes(%22VolGeomC_A%22)%26%26(t%3D1)%2Cy.includes(%22VolGeomC_S%22)%26%26(t%3D2)%2Ct%3C0)continue%3Bp%5Bt%5D%3DparseFloat(M(%22%3CValue%3E%3C!%5BCDATA%5B%22))%7Da.name.startsWith(%22DataArray%22)%26%26(y%3Da.name%2Cg%3D%5B1%2C1%2C1%5D%2Cx%3Dy.includes('Encoding%3D%22GZipBase64Binary%22')%2Cw%3Dy.includes('Encoding%3D%22ASCII%22')%2Cm%3Dy.includes('Intent%3D%22NIFTI_INTENT_TRIANGLE%22')%2Cu%3Dy.includes('Intent%3D%22NIFTI_INTENT_POINTSET%22')%2CA%3Dy.includes('Intent%3D%22NIFTI_INTENT_VECTOR%22')%2Cf%3Dy.includes('ArrayIndexingOrder%3D%22ColumnMajorOrder%22')%2Cy.includes('DataType%3D%22NIFTI_TYPE_UINT8%22')%26%26(v%3D2)%2Cy.includes('DataType%3D%22NIFTI_TYPE_INT32%22')%26%26(v%3D8)%2Cy.includes('DataType%3D%22NIFTI_TYPE_FLOAT32%22')%26%26(v%3D16)%2Cy.includes('DataType%3D%22NIFTI_TYPE_FLOAT64%22')%26%26(v%3D32)%2Cg%5B0%5D%3DI(%22Dim0%3D%22)%2Cg%5B1%5D%3DI(%22Dim1%3D%22)%2Cg%5B2%5D%3DI(%22Dim2%3D%22))%7Delse%7Bif(A)continue%3Blet%20i%3Bif(y%3D(new%20TextDecoder).decode(t.slice(a.contentStartPos%2B1%2Ca.contentEndPos)).trim()%2Cw)%7Bconst%20t%3Dg%5B0%5D*g%5B1%5D*g%5B2%5D%2Ce%3Dy.split(%2F%5Cs%2B%2F)%3Bif(t!%3D%3De.length)throw%20new%20Error(%22Unable%20to%20parse%20ASCII%20GIfTI%22)%3Bif(2%3D%3D%3Dv%26%26(v%3D8)%2C32%3D%3D%3Dv%26%26(v%3D16)%2C8%3D%3D%3Dv)%7Bi%3Dnew%20Int32Array(t)%3Bfor(let%20s%3D0%3Bs%3Ct%3Bs%2B%2B)i%5Bs%5D%3DparseInt(e%5Bs%5D)%7Dif(16%3D%3D%3Dv)%7Bi%3Dnew%20Float32Array(t)%3Bfor(let%20s%3D0%3Bs%3Ct%3Bs%2B%2B)i%5Bs%5D%3DparseFloat(e%5Bs%5D)%7D%7Delse%20if(%22undefined%22%3D%3Dtypeof%20Buffer)%7Blet%20t%3Dfunction(t)%7Bconst%20e%3Datob(t)%2Ci%3De.length%2Cs%3Dnew%20Uint8Array(i)%3Bfor(let%20t%3D0%3Bt%3Ci%3Bt%2B%2B)s%5Bt%5D%3De.charCodeAt(t)%3Breturn%20s%7D%3Bif(x)%7Bconst%20e%3Dt(y.slice())%3Bi%3Dde(new%20Uint8Array(e))%7Delse%20i%3Dt(y.slice())%7Delse%20if(x)%7Bconst%20t%3DBuffer.from(y.slice()%2C%22base64%22)%3Bi%3Dde(new%20Uint8Array(t))%7Delse%20i%3DBuffer.from(y.slice()%2C%22base64%22)%3Bif(u)%7Bif(16!%3D%3Dv%26%26l.warn(%22expect%20positions%20as%20FLOAT32%22)%2Co%3Dnew%20Float32Array(i.buffer)%2Cf)%7Bconst%20t%3Do.slice()%2Ce%3Dt.length%2F3%3Blet%20i%3D0%3Bfor(let%20s%3D0%3Bs%3Ce%3Bs%2B%2B)for(let%20n%3D0%3Bn%3C3%3Bn%2B%2B)o%5Bi%5D%3Dt%5Bn*e%2Bs%5D%2Ci%2B%2B%7D%7Delse%20if(m)%7Bif(8!%3D%3Dv%26%26l.warn(%22expect%20indices%20as%20INT32%22)%2Ch%3Dnew%20Uint32Array(i.buffer)%2Cf)%7Bconst%20t%3Dh.slice()%2Ce%3Dt.length%2F3%3Blet%20i%3D0%3Bfor(let%20s%3D0%3Bs%3Ce%3Bs%2B%2B)for(let%20n%3D0%3Bn%3C3%3Bn%2B%2B)h%5Bi%5D%3Dt%5Bn*e%2Bs%5D%2Ci%2B%2B%7D%7Delse%7Blet%20t%2Cs%3Dfunction(t%2Ce)%7Bconst%20i%3Dt.length%2Cs%3Dnew%20Float32Array(i%2Be.length)%3Breturn%20s.set(t)%2Cs.set(e%2Ci)%2Cs%7D%3Bif(C%3Dg%5B0%5D*g%5B1%5D*g%5B2%5D%2C0!%3D%3De%26%26C%25e!%3D0%26%26l.warn(%22Number%20of%20vertices%20in%20scalar%20overlay%20(%22%2BC%2B%22)%20does%20not%20match%20mesh%20(%22%2Be%2B%22)%22)%2C2%3D%3D%3Dv)%7Bconst%20e%3Dnew%20Uint8Array(i.buffer)%3Bt%3DFloat32Array.from(e)%7Delse%20if(8%3D%3D%3Dv)%7Bconst%20e%3Dnew%20Int32Array(i.buffer)%3Bt%3DFloat32Array.from(e)%7Delse%20if(16%3D%3D%3Dv)t%3Dnew%20Float32Array(i.buffer)%3Belse%7Bif(32!%3D%3Dv)throw%20new%20Error(%60Invalid%20dataType%3A%20%24%7Bv%7D%60)%3B%7Bconst%20e%3Dnew%20Float64Array(i.buffer)%3Bt%3DFloat32Array.from(e)%7D%7Dc%3Ds(c%2Ct)%7D%7Dlet%20F%3Bif(D.I.length%3E1%26%26(F%3Dne.makeLabelLut(D))%2Ce%3E0)return%7Bscalars%3Ac%2CcolormapLabel%3AF%2CanatomicalStructurePrimary%3Ad%7D%3Bif(o.length%3E2%26%26!b%26%26(0!%3D%3Dp%5B0%5D%7C%7C0!%3D%3Dp%5B1%5D%7C%7C0!%3D%3Dp%5B2%5D))%7BC%3DMath.floor(o.length%2F3)%3Blet%20t%3D0%3Bfor(let%20e%3D0%3Be%3CC%3Be%2B%2B)o%5Bt%5D%2B%3Dp%5B0%5D%2Ct%2B%2B%2Co%5Bt%5D%2B%3Dp%5B1%5D%2Ct%2B%2B%2Co%5Bt%5D%2B%3Dp%5B2%5D%2Ct%2B%2B%7Dreturn%7Bpositions%3Ao%2Cindices%3Ah%2Cscalars%3Ac%2CcolormapLabel%3AF%2CanatomicalStructurePrimary%3Ad%7D%7D%7D%2CMe%3D%7Bcolormap%3A%22gray%22%2Copacity%3A0%2CnFrame4D%3A0%2Cframe4D%3A0%2CoutlineBorder%3A0%2Ccal_min%3A0%2Ccal_max%3A0%2Ccal_minNeg%3A0%2Ccal_maxNeg%3A0%2Cvalues%3Anew%20Array%7D%2CDe%3Dclass%7Bconstructor(t%3D%22%22%2Ci%3Dnull%2Cs%3D%22%22%2Cn%3D1%2Cr%3Dnew%20Uint8Array(%5B255%2C255%2C255%2C255%5D)%2Ca%3D!0%2Co%3D%5B%5D%2Cl%3D!0)%7Be(this%2C%22url%22)%2Ce(this%2C%22gl%22)%2Ce(this%2C%22name%22)%2Ce(this%2C%22opacity%22)%2Ce(this%2C%22rgba255%22)%2Ce(this%2C%22visible%22)%2Ce(this%2C%22layers%22)%2Ce(this%2C%22colorbarVisible%22)%2Cthis.url%3Dt%2Cthis.gl%3Di%2Cthis.name%3Ds%2Cthis.opacity%3Dn%2Cthis.rgba255%3Dr%2Cthis.visible%3Da%2Cthis.layers%3Do%2Cthis.colorbarVisible%3Dl%7D%7D%2CFe%3Dclass%20t%7Bconstructor(t%2Ci%2Cs%3D%22%22%2Cn%3Dnew%20Uint8Array(%5B255%2C255%2C255%2C255%5D)%2Cr%3D1%2Ca%3D!0%2Co%2Cl%3Dnull%2Ch%3Dnull%2Cc%3Dnull%2Cd%3Dnull%2Cm%3D!0%2Cu%3D%22%22)%7Be(this%2C%22id%22)%2Ce(this%2C%22name%22)%2Ce(this%2C%22anatomicalStructurePrimary%22)%2Ce(this%2C%22colorbarVisible%22)%2Ce(this%2C%22furthestVertexFromOrigin%22)%2Ce(this%2C%22extentsMin%22)%2Ce(this%2C%22extentsMax%22)%2Ce(this%2C%22opacity%22)%2Ce(this%2C%22visible%22)%2Ce(this%2C%22meshShaderIndex%22%2C0)%2Ce(this%2C%22offsetPt0%22%2Cnull)%2Ce(this%2C%22colormapInvert%22%2C!1)%2Ce(this%2C%22fiberGroupColormap%22%2Cnull)%2Ce(this%2C%22indexBuffer%22)%2Ce(this%2C%22vertexBuffer%22)%2Ce(this%2C%22vao%22)%2Ce(this%2C%22vaoFiber%22)%2Ce(this%2C%22pts%22)%2Ce(this%2C%22tris%22)%2Ce(this%2C%22layers%22)%2Ce(this%2C%22type%22%2C%22mesh%22)%2Ce(this%2C%22data_type%22)%2Ce(this%2C%22rgba255%22)%2Ce(this%2C%22fiberLength%22)%2Ce(this%2C%22fiberLengths%22)%2Ce(this%2C%22fiberDensity%22)%2Ce(this%2C%22fiberDither%22%2C.1)%2Ce(this%2C%22fiberColor%22%2C%22Global%22)%2Ce(this%2C%22fiberDecimationStride%22%2C1)%2Ce(this%2C%22fiberSides%22%2C5)%2Ce(this%2C%22fiberRadius%22%2C0)%2Ce(this%2C%22fiberOcclusion%22%2C0)%2Ce(this%2C%22f32PerVertex%22%2C5)%2Ce(this%2C%22fiberMask%22)%2Ce(this%2C%22colormap%22)%2Ce(this%2C%22dpg%22)%2Ce(this%2C%22dps%22)%2Ce(this%2C%22dpv%22)%2Ce(this%2C%22hasConnectome%22%2C!1)%2Ce(this%2C%22connectome%22)%2Ce(this%2C%22indexCount%22)%2Ce(this%2C%22vertexCount%22%2C1)%2Ce(this%2C%22nodeScale%22%2C4)%2Ce(this%2C%22edgeScale%22%2C1)%2Ce(this%2C%22legendLineThickness%22%2C0)%2Ce(this%2C%22nodeColormap%22%2C%22warm%22)%2Ce(this%2C%22edgeColormap%22%2C%22warm%22)%2Ce(this%2C%22nodeColormapNegative%22)%2Ce(this%2C%22edgeColormapNegative%22)%2Ce(this%2C%22nodeMinColor%22)%2Ce(this%2C%22nodeMaxColor%22)%2Ce(this%2C%22edgeMin%22)%2Ce(this%2C%22edgeMax%22)%2Ce(this%2C%22nodes%22)%2Ce(this%2C%22edges%22)%2Ce(this%2C%22points%22)%2Cthis.anatomicalStructurePrimary%3Du%2Cthis.name%3Ds%2Cthis.colorbarVisible%3Dm%2Cthis.id%3DK()%3Bconst%20A%3Doe.getExtents(t)%3Bthis.furthestVertexFromOrigin%3DA.mxDx%2Cthis.extentsMin%3DA.extentsMin%2Cthis.extentsMax%3DA.extentsMax%2Cthis.opacity%3Dr%3E1%3F1%3Ar%2Cthis.visible%3Da%2Cthis.meshShaderIndex%3D0%2Cthis.indexBuffer%3Do.createBuffer()%2Cthis.vertexBuffer%3Do.createBuffer()%2Cthis.vao%3Do.createVertexArray()%2Co.bindVertexArray(this.vao)%2Co.bindBuffer(o.ELEMENT_ARRAY_BUFFER%2Cthis.indexBuffer)%2Co.bindBuffer(o.ARRAY_BUFFER%2Cthis.vertexBuffer)%2Co.enableVertexAttribArray(0)%2Co.enableVertexAttribArray(1)%3Bif(7!%3D%3Dthis.f32PerVertex%3F(o.vertexAttribPointer(0%2C3%2Co.FLOAT%2C!1%2C20%2C0)%2Co.vertexAttribPointer(1%2C4%2Co.BYTE%2C!0%2C20%2C12)%2Co.enableVertexAttribArray(2)%2Co.vertexAttribPointer(2%2C4%2Co.UNSIGNED_BYTE%2C!0%2C20%2C16))%3A(o.vertexAttribPointer(0%2C3%2Co.FLOAT%2C!1%2C28%2C0)%2Co.vertexAttribPointer(1%2C3%2Co.FLOAT%2C!1%2C28%2C12)%2Co.enableVertexAttribArray(2)%2Co.vertexAttribPointer(2%2C4%2Co.UNSIGNED_BYTE%2C!0%2C28%2C24))%2Co.bindVertexArray(null)%2Cthis.vaoFiber%3Do.createVertexArray()%2Cthis.offsetPt0%3Dnull%2Cthis.hasConnectome%3D!1%2Cthis.colormapInvert%3D!1%2Cthis.fiberGroupColormap%3Dnull%2Cthis.pts%3Dt%2Cthis.layers%3D%5B%5D%2Cthis.type%3D%22mesh%22%2Cthis.tris%3Di%2Cn%5B3%5D%3C1)return%20this.rgba255%3Dn%2Cthis.fiberLength%3D2%2Cthis.fiberDither%3D.1%2Cthis.fiberColor%3D%22Global%22%2Cthis.fiberDecimationStride%3D1%2Cthis.fiberMask%3D%5B%5D%2Cthis.colormap%3Dl%2Cthis.dpg%3Dh%2Cthis.dps%3Dc%2Cthis.dpv%3Dd%2Ch%26%26this.initValuesArray(h)%2Cc%26%26this.initValuesArray(c)%2Cd%26%26this.initValuesArray(d)%2Cthis.offsetPt0%3Dnew%20Uint32Array(i)%2Cthis.tris%3Dnew%20Uint32Array(0)%2Cthis.updateFibers(o)%2Co.bindVertexArray(this.vaoFiber)%2Co.bindBuffer(o.ELEMENT_ARRAY_BUFFER%2Cthis.indexBuffer)%2Co.bindBuffer(o.ARRAY_BUFFER%2Cthis.vertexBuffer)%2Co.enableVertexAttribArray(0)%2Co.vertexAttribPointer(0%2C3%2Co.FLOAT%2C!1%2C16%2C0)%2Co.enableVertexAttribArray(1)%2Co.vertexAttribPointer(1%2C4%2Co.UNSIGNED_BYTE%2C!0%2C16%2C12)%2Cvoid%20o.bindVertexArray(null)%3Bif(l)%7Bthis.connectome%3Dl%2Cthis.hasConnectome%3D!0%3Bconst%20t%3DObject.keys(l)%3Bfor(let%20e%3D0%2Ci%3Dt.length%3Be%3Ci%3Be%2B%2B)this%5Bt%5Be%5D%5D%3Dl%5Bt%5Be%5D%5D%7Dthis.rgba255%3Dn%2Cthis.updateMesh(o)%7DinitValuesArray(t)%7Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)%7Bconst%20i%3Dt%5Be%5D.vals.reduce(((t%2Ce)%3D%3EMath.min(t%2Ce)))%2Cs%3Dt%5Be%5D.vals.reduce(((t%2Ce)%3D%3EMath.max(t%2Ce)))%3Bt%5Be%5D.global_min%3Di%2Ct%5Be%5D.global_max%3Ds%2Ct%5Be%5D.cal_min%3Di%2Ct%5Be%5D.cal_max%3Ds%7Dreturn%20t%7DlinesToCylinders(t%2Ce%2Ci)%7Bfunction%20s(t)%7Breturn%20Y.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D)%7Dconst%20n%3DMath.pow(2%2C32)-1%2Cr%3Di.length%3Blet%20a%3D0%2Co%3D0%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)i%5Bt%5D!%3D%3Dn%3Fa%2B%2B%3Ao%2B%2B%3Bconst%20l%3Dthis.fiberSides%2Ch%3Dl*a%2Cc%3Dthis.f32PerVertex%3Bif(5!%3D%3Dc)throw%20Error(%22fiberSides%20%3E%201%20requires%20f32PerVertex%20%3D%3D%205%22)%3Bconst%20d%3Dnew%20Float32Array(h*c)%2Cm%3Dnew%20Uint8Array(d.buffer)%3Blet%20u%3D0%2CA%3DG.create()%2Cf%3DG.create()%2Cg%3DG.create()%3Bconst%20p%3DY.create()%3Blet%20v%3DY.create()%2Cx%3D0%3Bconst%20w%3Dthis.fiberRadius%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)%7Bconst%20a%3Di%5Bt%5D%3D%3D%3Dn%3Bif(a%26%26x%3C1)continue%3Blet%20o%3D4*i%5Bt%5D%3Bif(x%2B%2B%2Cx%3C%3D1)%7BA%3DG.fromValues(e%5Bo%2B0%5D%2Ce%5Bo%2B1%5D%2Ce%5Bo%2B2%5D%2Ce%5Bo%2B3%5D)%2Cf%3DG.clone(A)%2Ct%2B1%3Cr%26%26i%5Bt%2B1%5D!%3D%3Dn%26%26(o%3D4*i%5Bt%2B1%5D%2Cg%3DG.fromValues(e%5Bo%2B0%5D%2Ce%5Bo%2B1%5D%2Ce%5Bo%2B2%5D%2Ce%5Bo%2B3%5D)%2CY.subtract(p%2Cs(A)%2Cs(g))%2CY.normalize(p%2Cp)%2Cv%3DO.getFirstPerpVector(p))%3Bcontinue%7Dg%3Da%3FG.clone(f)%3AG.fromValues(e%5Bo%2B0%5D%2Ce%5Bo%2B1%5D%2Ce%5Bo%2B2%5D%2Ce%5Bo%2B3%5D)%2CY.subtract(p%2Cs(A)%2Cs(g))%2CY.normalize(p%2Cp)%3Bconst%20h%3DY.create()%3BY.cross(h%2Cv%2Cp)%3Bconst%20C%3DY.create()%3BY.cross(C%2Cp%2Ch)%2Cv%3DY.clone(v)%3Bconst%20b%3DY.create()%3BY.cross(b%2Cp%2CC)%2CY.normalize(b%2Cb)%3Bconst%20y%3DY.create()%3Bfor(let%20t%3D0%3Bt%3Cl%3Bt%2B%2B)%7Bconst%20e%3DMath.cos(t%2Fl*2*Math.PI)%2Ci%3DMath.sin(t%2Fl*2*Math.PI)%3By%5B0%5D%3Dw*(e*C%5B0%5D%2Bi*b%5B0%5D)%2Cy%5B1%5D%3Dw*(e*C%5B1%5D%2Bi*b%5B1%5D)%2Cy%5B2%5D%3Dw*(e*C%5B2%5D%2Bi*b%5B2%5D)%2CY.add(y%2Cs(f)%2Cy)%3Bconst%20n%3Du*c%3Bd%5Bn%2B0%5D%3Dy%5B0%5D%2Cd%5Bn%2B1%5D%3Dy%5B1%5D%2Cd%5Bn%2B2%5D%3Dy%5B2%5D%3Bconst%20r%3DY.create()%3BY.subtract(r%2Cy%2Cs(f))%2CY.normalize(r%2Cr)%3Bconst%20a%3D4*(n%2B3)%3Bm%5Ba%2B0%5D%3D127*r%5B0%5D%2Cm%5Ba%2B1%5D%3D127*r%5B1%5D%2Cm%5Ba%2B2%5D%3D127*r%5B2%5D%2Cd%5Bn%2B4%5D%3Df%5B3%5D%2Cu%2B%2B%7DA%3DG.clone(f)%2Cf%3DG.clone(g)%2Ca%26%26(x%3D0)%7Dconst%20C%3D(a-o)*l*2*3%2Cb%3Dnew%20Uint32Array(C)%3Blet%20y%3D0%3Bu%3D0%3Bfor(let%20t%3D1%3Bt%3Cr%3Bt%2B%2B)%7Bif(i%5Bt%5D%3D%3D%3Dn)%7Bu%2B%3Dl%3Bcontinue%7Dif(i%5Bt-1%5D%3D%3D%3Dn)continue%3Blet%20e%3Du%2Cs%3Du%2Bl%3Bconst%20r%3Ds%2Ca%3Ds%2Bl%3Bfor(let%20t%3D0%3Bt%3Cl%3Bt%2B%2B)b%5By%2B%2B%5D%3De%2Cb%5By%2B%2B%5D%3Ds%2B%2B%2Cs%3D%3D%3Da%26%26(s%3Da-l)%2Cb%5By%2B%2B%5D%3Ds%2Cb%5By%2B%2B%5D%3De%2B%2B%2Ce%3D%3D%3Dr%26%26(e%3Dr-l)%2Cb%5By%2B%2B%5D%3Ds%2Cb%5By%2B%2B%5D%3De%3Bu%2B%3Dl%7Dt.bindBuffer(t.ELEMENT_ARRAY_BUFFER%2Cthis.indexBuffer)%2Ct.bufferData(t.ELEMENT_ARRAY_BUFFER%2CUint32Array.from(b)%2Ct.STATIC_DRAW)%2Ct.bindBuffer(t.ARRAY_BUFFER%2Cthis.vertexBuffer)%2Ct.bufferData(t.ARRAY_BUFFER%2CFloat32Array.from(d)%2Ct.STATIC_DRAW)%2Cthis.indexCount%3DC%7DcreateFiberDensityMap()%7Bif(this.fiberDensity)return%3Bconst%20t%3Dthis.pts%2Ce%3Dt.length%2F3%3Blet%20i%3D0%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)%7Bconst%20e%3Dthis.extentsMax%5Bt%5D-this.extentsMin%5Bt%5D%3Bi%3DMath.max(i%2Ce)%7Dif(this.fiberDensity%3Dnew%20Float32Array(e)%2C0%3D%3D%3Di)return%3Bconst%20s%3D64%2Cn%3Di%2F63%2F2%2Cr%3D63%2Fi%3Blet%20a%3Dnew%20Float32Array(262144)%3Bconst%20o%3D%5Bthis.extentsMin%5B0%5D-n%2Cthis.extentsMin%5B1%5D-n%2Cthis.extentsMin%5B2%5D-n%5D%2Cl%3D%5B0%2C0%2C0%5D%3Blet%20h%3D0%3Bfor(let%20i%3D0%3Bi%3Ce%3Bi%2B%2B)%7Bl%5B0%5D%3DMath.round((t%5Bh%2B%2B%5D-o%5B0%5D)*r)%2Cl%5B1%5D%3DMath.round((t%5Bh%2B%2B%5D-o%5B1%5D)*r)%2Cl%5B2%5D%3DMath.round((t%5Bh%2B%2B%5D-o%5B2%5D)*r)%3Bconst%20e%3Dl%5B0%5D%2Bl%5B1%5D*s%2B4096*l%5B2%5D%3B-1!%3D%3De%26%26a%5Be%5D%2B%2B%7Dfunction%20c(t%2Ce)%7Blet%20i%3Dt.slice()%2Cs%3D-1%3Bconst%20n%3De-1%3Bfor(let%20r%3D0%3Br%3Ce%3Br%2B%2B)for(let%20r%3D0%3Br%3Ce%3Br%2B%2B)for(let%20r%3D0%3Br%3Ce%3Br%2B%2B)s%2B%2B%2Cr%3C1%7C%7Cr%3E%3Dn%7C%7C(t%5Bs%5D%3Di%5Bs-1%5D%2Bi%5Bs%5D%2Bi%5Bs%5D%2Bi%5Bs%2B1%5D)%3Bs%3D-1%2Ci%3Dt.slice()%3Bfor(let%20r%3D0%3Br%3Ce%3Br%2B%2B)for(let%20r%3D0%3Br%3Ce%3Br%2B%2B)for(let%20a%3D0%3Ba%3Ce%3Ba%2B%2B)s%2B%2B%2Cr%3C1%7C%7Cr%3E%3Dn%7C%7C(t%5Bs%5D%3Di%5Bs-e%5D%2Bi%5Bs%5D%2Bi%5Bs%5D%2Bi%5Bs%2Be%5D)%3Bconst%20r%3De*e%3Bs%3D-1%2Ci%3Dt.slice()%3Bfor(let%20a%3D0%3Ba%3Ce%3Ba%2B%2B)for(let%20o%3D0%3Bo%3Ce%3Bo%2B%2B)for(let%20o%3D0%3Bo%3Ce%3Bo%2B%2B)s%2B%2B%2Ca%3C1%7C%7Ca%3E%3Dn%7C%7C(t%5Bs%5D%3Di%5Bs-r%5D%2Bi%5Bs%5D%2Bi%5Bs%5D%2Bi%5Br%5D)%3Breturn%20t%7Da%3Dc(a%2Cs)%2Ca%3Dc(a%2Cs)%3Blet%20d%3D0%2Cm%3D1%2F0%3Bconst%20u%3D262144%3Bfor(let%20t%3D0%3Bt%3Cu%3Bt%2B%2B)a%5Bt%5D%3C%3D0%7C%7C(d%3DMath.max(d%2Ca%5Bt%5D)%2Cm%3DMath.min(m%2Ca%5Bt%5D))%3Bif(!(d%3C%3D1%7C%7Cd%3C%3Dm))%7Bh%3D0%3Bfor(let%20t%3D0%3Bt%3Cu%3Bt%2B%2B)a%5Bt%5D%3DMath.max(0%2Ca%5Bt%5D-m)%3Bd-%3Dm%3Bfor(let%20i%3D0%3Bi%3Ce%3Bi%2B%2B)%7Bl%5B0%5D%3DMath.round((t%5Bh%2B%2B%5D-o%5B0%5D)*r)%2Cl%5B1%5D%3DMath.round((t%5Bh%2B%2B%5D-o%5B1%5D)*r)%2Cl%5B2%5D%3DMath.round((t%5Bh%2B%2B%5D-o%5B2%5D)*r)%3Bconst%20e%3Dl%5B0%5D%2Bl%5B1%5D*s%2B4096*l%5B2%5D%3Bthis.fiberDensity%5Bi%5D%3Da%5Be%5D%2Fd%7D%7D%7DupdateFibers(t)%7Bif(!this.offsetPt0%7C%7C!this.fiberLength)return%3Bconst%20e%3Dthis.pts%2Ci%3Dthis.offsetPt0%2Cs%3Di.length-1%2Cn%3De.length%2F3%3Bif(!this.fiberLengths)%7Bthis.fiberLengths%3Dnew%20Uint32Array(s)%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)%7Bconst%20s%3D3*i%5Bt%5D%2Cn%3D3*(i%5Bt%2B1%5D-1)%3Blet%20r%3D0%3Bfor(let%20t%3Ds%3Bt%3Cn%3Bt%2B%3D3)%7Bconst%20i%3DY.fromValues(e%5Bt%2B0%5D-e%5Bt%2B3%5D%2Ce%5Bt%2B1%5D-e%5Bt%2B4%5D%2Ce%5Bt%2B2%5D-e%5Bt%2B5%5D)%3Br%2B%3DY.len(i)%7Dthis.fiberLengths%5Bt%5D%3Dr%7D%7Dconst%20r%3Dnew%20Float32Array(4*n)%2Ca%3Dnew%20Uint32Array(r.buffer)%3Blet%20o%3D0%2Cl%3D0%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)r%5Bl%2B0%5D%3De%5Bo%2B0%5D%2Cr%5Bl%2B1%5D%3De%5Bo%2B1%5D%2Cr%5Bl%2B2%5D%3De%5Bo%2B2%5D%2Co%2B%3D3%2Cl%2B%3D4%3Bconst%20h%3Dthis.fiberDither%2Cc%3D.5*h%3Bfunction%20d(t%2Ce%2Ci)%7Bconst%20s%3D255*(h*Math.random()-c)%3Breturn(t%3DMath.max(Math.min(t%2Bs%2C255)%2C0))%2B((e%3DMath.max(Math.min(e%2Bs%2C255)%2C0))%3C%3C8)%2B((i%3DMath.max(Math.min(i%2Bs%2C255)%2C0))%3C%3C16)%7Dfunction%20m(t%2Ce%2Ci%2Cs%2Cn%2Cr%2Ca)%7Bconst%20o%3DY.fromValues(Math.abs(t-s)%2CMath.abs(e-n)%2CMath.abs(i-r))%3BY.normalize(o%2Co)%3Bconst%20l%3Da-c%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)o%5Bt%5D%3D255*Math.max(Math.min(Math.abs(o%5Bt%5D)%2Bl%2C1)%2C0)%3Breturn%20o%5B0%5D%2B(o%5B1%5D%3C%3C8)%2B(o%5B2%5D%3C%3C16)%7Dconst%20u%3Dthis.fiberColor.toLowerCase()%3Blet%20A%3Dnull%2Cf%3Dnull%3Bif(u.startsWith(%22dps%22)%26%26this.dps%26%26this.dps.length%3E0)%7Bconst%20t%3DparseInt(u.substring(3))%3Bt%3Cthis.dps.length%26%26this.dps%5Bt%5D.vals.length%3D%3D%3Ds%26%26(A%3Dthis.dps%5Bt%5D.vals)%7Dif(u.startsWith(%22dpv%22)%26%26this.dpv%26%26this.dpv.length%3E0)%7Bconst%20t%3DparseInt(u.substring(3))%3Bt%3Cthis.dpv.length%26%26this.dpv%5Bt%5D.vals.length%3D%3D%3Dn%26%26(f%3Dthis.dpv%5Bt%5D)%7Dconst%20g%3Dnew%20Int16Array(s)%3Bif(this.dpg%26%26null!%3D%3Dthis.fiberGroupColormap)%7Bconst%20t%3Dnew%20Uint8ClampedArray(4*this.dpg.length)%2Ce%3Dnew%20Array(this.dpg.length).fill(!1)%2Cn%3Dthis.fiberGroupColormap%3Bvoid%200%3D%3D%3Dn.A%26%26(n.A%3DArray.from(new%20Uint8ClampedArray(n.I.length).fill(255)))%3Bfor(let%20i%3D0%3Bi%3Cn.I.length%3Bi%2B%2B)%7Blet%20s%3Dn.I%5Bi%5D%3Bs%3C0%7C%7Cs%3E%3Dthis.dpg.length%7C%7C(n.A%5Bi%5D%3C1%7C%7C(e%5Bs%5D%3D!0%2Cs*%3D4%2Ct%5Bs%5D%3Dn.R%5Bi%5D%2Ct%5Bs%2B1%5D%3Dn.G%5Bi%5D%2Ct%5Bs%2B2%5D%3Dn.B%5Bi%5D%2Ct%5Bs%2B3%5D%3D255))%7Dg.fill(-1)%3Bfor(let%20t%3D0%3Bt%3Cthis.dpg.length%3Bt%2B%2B)if(e%5Bt%5D)for(let%20e%3D0%3Be%3Cthis.dpg%5Bt%5D.vals.length%3Be%2B%2B)g%5Bthis.dpg%5Bt%5D.vals%5Be%5D%5D%3Dt%3Bfor(let%20e%3D0%3Be%3Cs%3Be%2B%2B)%7Bif(g%5Be%5D%3C0)continue%3Bconst%20s%3Dg%5Be%5D%25256*4%2Cn%3Dd(t%5Bs%5D%2Ct%5Bs%2B1%5D%2Ct%5Bs%2B2%5D)%2Cr%3Di%5Be%5D%2Co%3D4*(i%5Be%2B1%5D-1)%2B3%3Bfor(let%20t%3D4*r%2B3%3Bt%3C%3Do%3Bt%2B%3D4)a%5Bt%5D%3Dn%7D%7Delse%20if(f)%7Bconst%20t%3Dne.colormap(this.colormap%2Cthis.colormapInvert)%2Ce%3Df.cal_min%2Ci%3Df.cal_max%3Blet%20s%3D3%3Bfor(let%20r%3D0%3Br%3Cn%3Br%2B%2B)%7Blet%20n%3DMath.min(Math.max((f.vals%5Br%5D-e)%2F(i-e)%2C0)%2C1)%3Bn%3D4*Math.round(Math.max(Math.min(255%2C255*n)))%3Bconst%20o%3Dt%5Bn%5D%2B(t%5Bn%2B1%5D%3C%3C8)%2B(t%5Bn%2B2%5D%3C%3C16)%3Ba%5Bs%5D%3Do%2Cs%2B%3D4%7D%7Delse%20if(A)%7Bconst%20t%3Dne.colormap(this.colormap%2Cthis.colormapInvert)%3Blet%20e%3DA%5B0%5D%2Cn%3DA%5B0%5D%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)e%3DMath.min(e%2CA%5Bt%5D)%2Cn%3DMath.max(n%2CA%5Bt%5D)%3Bn%3D%3D%3De%26%26(e-%3D1)%3Bfor(let%20r%3D0%3Br%3Cs%3Br%2B%2B)%7Blet%20s%3D(A%5Br%5D-e)%2F(n-e)%3Bs%3D4*Math.round(Math.max(Math.min(255%2C255*s)))%3Bconst%20o%3Dt%5Bs%5D%2B(t%5Bs%2B1%5D%3C%3C8)%2B(t%5Bs%2B2%5D%3C%3C16)%2Cl%3Di%5Br%5D%2Ch%3D4*(i%5Br%2B1%5D-1)%2B3%3Bfor(let%20t%3D4*l%2B3%3Bt%3C%3Dh%3Bt%2B%3D4)a%5Bt%5D%3Do%7D%7Delse%20if(u.includes(%22fixed%22))if(0%3D%3D%3Dh)%7Bconst%20t%3Dthis.rgba255%5B0%5D%2B(this.rgba255%5B1%5D%3C%3C8)%2B(this.rgba255%5B2%5D%3C%3C16)%3Blet%20e%3D3%3Bfor(let%20i%3D0%3Bi%3Cn%3Bi%2B%2B)a%5Be%5D%3Dt%2Ce%2B%3D4%7Delse%20for(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)%7Bconst%20e%3Dd(this.rgba255%5B0%5D%2Cthis.rgba255%5B1%5D%2Cthis.rgba255%5B2%5D)%2Cs%3Di%5Bt%5D%2Cn%3D4*(i%5Bt%2B1%5D-1)%2B3%3Bfor(let%20t%3D4*s%2B3%3Bt%3C%3Dn%3Bt%2B%3D4)a%5Bt%5D%3De%7Delse%20if(u.includes(%22local%22))for(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)%7Bconst%20s%3Di%5Bt%5D%3Blet%20n%3D3*s%3Bconst%20r%3D3*(i%5Bt%2B1%5D-1)%2Co%3Dh*Math.random()%3Blet%20l%3Dm(e%5Bn%5D%2Ce%5Bn%2B1%5D%2Ce%5Bn%2B2%5D%2Ce%5Bn%2B4%5D%2Ce%5Bn%2B5%5D%2Ce%5Bn%2B6%5D%2Co)%2Cc%3D4*s%2B3%3Bfor(%3Bn%3Cr%3B)a%5Bc%5D%3Dl%2Cc%2B%3D4%2Cn%2B%3D3%2Cl%3Dm(e%5Bn-3%5D%2Ce%5Bn-2%5D%2Ce%5Bn-1%5D%2Ce%5Bn%2B3%5D%2Ce%5Bn%2B4%5D%2Ce%5Bn%2B5%5D%2Co)%3Ba%5Bc%5D%3Da%5Bc-4%5D%7Delse%20for(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)%7Bconst%20s%3Di%5Bt%5D%2Cn%3Di%5Bt%2B1%5D-1%2Cr%3D3*s%2Co%3D3*n%2Cl%3Dm(e%5Br%5D%2Ce%5Br%2B1%5D%2Ce%5Br%2B2%5D%2Ce%5Bo%5D%2Ce%5Bo%2B1%5D%2Ce%5Bo%2B2%5D%2Ch*Math.random())%2Cc%3D4*n%2B3%3Bfor(let%20t%3D4*s%2B3%3Bt%3C%3Dc%3Bt%2B%3D4)a%5Bt%5D%3Dl%7Dif(this.fiberOcclusion%3E0)%7Blet%20t%3Dfunction(t%2Ce)%7Breturn%20e*(255%26t)%2B(e*(t%3E%3E8%26255)%3C%3C8)%2B(e*(t%3E%3E16%26255)%3C%3C16)%7D%3Bthis.createFiberDensityMap()%3Bfor(let%20e%3D0%3Be%3Cs%3Be%2B%2B)%7Bconst%20s%3Di%5Be%5D%2Cn%3D4*s%2B3%2Cr%3D4*(i%5Be%2B1%5D-1)%2B3%3Blet%20o%3Ds%3Bconst%20l%3DMath.min(this.fiberOcclusion%2C.99)%3Bfor(let%20e%3Dn%3Be%3C%3Dr%3Be%2B%3D4)%7Blet%20i%3Dthis.fiberDensity%5Bo%2B%2B%5D%3Bif(i%3C%3D0)continue%3Bi%2F%3D(1%2Fl-2)*(1-i)%2B1%3Bconst%20s%3D1-Math.min(i%2C.9)%3Blet%20n%3Da%5Be%5D%3Bn%3Dt(n%2Cs)%2Ca%5Be%5D%3Dn%7D%7D%7Dconst%20p%3Dthis.fiberLength%2Cv%3DMath.pow(2%2C32)-1%2Cx%3D%5B%5D%3Blet%20w%3D-1%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)if(!(g%5Bt%5D%3C0%7C%7Cthis.fiberLengths%5Bt%5D%3Cp%7C%7C(w%2B%2B%2Cw%25this.fiberDecimationStride!%3D0)))%7Bfor(let%20e%3Di%5Bt%5D%3Be%3Ci%5Bt%2B1%5D%3Be%2B%2B)x.push(e)%3Bx.push(v)%7Dthis.fiberSides%3E2%26%26this.fiberRadius%3E0%3Fthis.linesToCylinders(t%2Cr%2Cx)%3A(this.indexCount%3Dx.length%2Ct.bindBuffer(t.ARRAY_BUFFER%2Cthis.vertexBuffer)%2Ct.bufferData(t.ARRAY_BUFFER%2CUint32Array.from(a)%2Ct.STATIC_DRAW)%2Ct.bindBuffer(t.ELEMENT_ARRAY_BUFFER%2Cthis.indexBuffer)%2Ct.bufferData(t.ELEMENT_ARRAY_BUFFER%2CUint32Array.from(x)%2Ct.STATIC_DRAW))%7DindexNearestXYZmm(t%2Ce%2Ci)%7Bconst%20s%3Dthis.pts%2Cn%3Dthis.pts.length%2F3%3Blet%20r%3D0%2Ca%3D1%2F0%2Co%3D0%3Bfor(let%20l%3D0%3Bl%3Cn%3Bl%2B%2B)%7Bconst%20n%3DMath.pow(s%5Br%5D-t%2C2)%2BMath.pow(s%5Br%2B1%5D-e%2C2)%2BMath.pow(s%5Br%2B2%5D-i%2C2)%3Bn%3Ca%26%26(a%3Dn%2Co%3Dl)%2Cr%2B%3D3%7Dreturn%20a%3DMath.sqrt(a)%2C%5Bo%2Ca%5D%7DunloadMesh(t)%7Bif(t.bindBuffer(t.ARRAY_BUFFER%2Cnull)%2Ct.bindBuffer(t.ELEMENT_ARRAY_BUFFER%2Cnull)%2Ct.bindVertexArray(null)%2Ct.deleteBuffer(this.vertexBuffer)%2Ct.deleteBuffer(this.indexBuffer)%2Ct.deleteVertexArray(this.vao)%2Ct.deleteVertexArray(this.vaoFiber)%2Cthis.offsetPt0%3Dnull%2Cthis.tris%3Dnull%2Cthis.pts%3Dnull%2Cthis.layers%26%26this.layers.length%3E0)for(let%20t%3D0%3Bt%3Cthis.layers.length%3Bt%2B%2B)this.layers%5Bt%5D.values%3Dnull%3Bif(this.dpg%26%26this.dpg.length%3E0)for(let%20t%3D0%3Bt%3Cthis.dpg.length%3Bt%2B%2B)this.dpg%5Bt%5D.vals%3Dnull%3Bif(this.dps%26%26this.dps.length%3E0)for(let%20t%3D0%3Bt%3Cthis.dps.length%3Bt%2B%2B)this.dps%5Bt%5D.vals%3Dnull%7DupdateMesh(t)%7Bif(this.offsetPt0)return%20void%20this.updateFibers(t)%3Bif(this.hasConnectome)return%3Bif(!this.pts%7C%7C!this.tris%7C%7C!this.rgba255)return%20void%20l.warn(%22underspecified%20mesh%22)%3Bfunction%20e(t%2Ce%2Ci)%7Breturn%20t*(1-i)%2Be*i%7Dfunction%20i(t%2Ce)%7Breturn%20Math.min(t%2Be%2C255)%7Dconst%20s%3Dthis.generatePosNormClr(this.pts%2Cthis.tris%2Cthis.rgba255)%2Cn%3Dthis.pts.length%2F3%2Cr%3Dnew%20Uint8Array(s.buffer)%3Blet%20a%3D0%3Bconst%20o%3Dnew%20Uint8Array(4*n)%3Bif(this.layers%26%26this.layers.length%3E0)for(let%20t%3D0%3Bt%3Cthis.layers.length%3Bt%2B%2B)%7Bconst%20s%3Dthis.layers%5Bt%5D%2Cl%3Ds.opacity%3Bif(l%3C%3D0%7C%7Cs.cal_min%3Es.cal_max)continue%3Bif(void%200%3D%3D%3Ds.outlineBorder%26%26(s.outlineBorder%3D0)%2Cvoid%200%3D%3D%3Ds.isAdditiveBlend%26%26(s.isAdditiveBlend%3D!1)%2Cs.colormapLabel%26%26s.colormapLabel.R%26%26!s.colormapLabel.lut%26%26(s.colormapLabel%3Dne.makeLabelLut(s.colormapLabel))%2Cs.colormapLabel%26%26s.colormapLabel.lut)%7Bconst%20t%3Ds.colormapLabel.lut%2Ci%3DMath.floor(t.length%2F4)%2Ca%3Dn*Math.min(Math.max(s.frame4D%2C0)%2Cs.nFrame4D-1)%2Co%3Dnew%20Uint8Array(4*n)%3Blet%20h%3D0%3Bfor(let%20e%3D0%3Be%3Cs.values.length%3Be%2B%2B)%7Blet%20n%3D4*Math.min(Math.max(s.values%5Be%2Ba%5D%2C0)%2Ci-1)%3Bo%5Bh%2B0%5D%3Dt%5Bn%2B0%5D%2Co%5Bh%2B1%5D%3Dt%5Bn%2B1%5D%2Co%5Bh%2B2%5D%3Dt%5Bn%2B2%5D%2Ch%2B%3D4%7Dlet%20c%3Dnew%20Array(n).fill(!1)%3Bs.outlineBorder%3E0%26%26(c%3Doe.getClusterBoundary(o%2Cthis.tris))%2Ch%3D0%3Bfor(let%20t%3D0%3Bt%3Cs.values.length%3Bt%2B%2B)%7Blet%20i%3Dl%3Bc%5Bt%5D%26%26(i%3Ds.outlineBorder)%3Blet%20n%3D28*t%2B24%3B7!%3D%3Dthis.f32PerVertex%26%26(n%3D20*t%2B16)%2Cr%5Bn%2B0%5D%3De(r%5Bn%2B0%5D%2Co%5Bh%2B0%5D%2Ci)%2Cr%5Bn%2B1%5D%3De(r%5Bn%2B1%5D%2Co%5Bh%2B1%5D%2Ci)%2Cr%5Bn%2B2%5D%3De(r%5Bn%2B2%5D%2Co%5Bh%2B2%5D%2Ci)%2Ch%2B%3D4%7Dcontinue%7Dif(s.values%20instanceof%20Uint8Array)%7Bconst%20t%3Dnew%20Uint8Array(s.values.buffer)%3Blet%20i%3Dnew%20Array(n).fill(!0)%3Bs.outlineBorder%3E0%26%26(i%3Doe.getClusterBoundary(t%2Cthis.tris))%3Blet%20a%3D0%3Bfor(let%20n%3D0%3Bn%3Cs.values.length%3Bn%2B%2B)%7Blet%20o%3D28*n%2B24%3B7!%3D%3Dthis.f32PerVertex%26%26(o%3D20*n%2B16)%3Blet%20h%3Dl%3Bi%5Bn%5D%26%26(h%3Ds.outlineBorder)%2Cr%5Bo%2B0%5D%3De(r%5Bo%2B0%5D%2Ct%5Ba%2B0%5D%2Ch)%2Cr%5Bo%2B1%5D%3De(r%5Bo%2B1%5D%2Ct%5Ba%2B1%5D%2Ch)%2Cr%5Bo%2B2%5D%3De(r%5Bo%2B2%5D%2Ct%5Ba%2B2%5D%2Ch)%2Ca%2B%3D4%7Dcontinue%7Dconst%20h%3Dne.colormap(s.colormap%2Cs.colormapInvert)%2Cc%3Dn*Math.min(Math.max(s.frame4D%2C0)%2Cs.nFrame4D-1)%3Bs.isAdditiveBlend%26%26(a%3DMath.max(a%2Cl))%2Cs.useNegativeCmap%26%26(s.cal_min%3DMath.max(0%2Cs.cal_min)%2Cs.cal_max%3DMath.max(s.cal_min%2B1e-6%2Cs.cal_max))%2Cvoid%200%3D%3D%3Ds.isTransparentBelowCalMin%26%26(s.isTransparentBelowCalMin%3D!0)%3Blet%20d%3Ds.cal_min%3Bs.alphaThreshold%26%26(d%3DMath.min(d%2C0))%3Bconst%20m%3D255%2F(s.cal_max-d)%3Blet%20u%3Ds.cal_min%3Bif(s.isTransparentBelowCalMin%7C%7C(u%3DNumber.NEGATIVE_INFINITY)%2Cs.outlineBorder%3C%3D0)for(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)%7Bconst%20n%3Ds.values%5Bt%2Bc%5D%3Bif(n%3Cu)continue%3Blet%20a%3DMath.round((n-d)*m)%3Bif(a%3C0%26%26s.isTransparentBelowCalMin)continue%3Ba%3DMath.max(0%2Ca)%2Ca%3D4*Math.min(255%2Ca)%3Blet%20A%3D28*t%2B24%3Bif(7!%3D%3Dthis.f32PerVertex%26%26(A%3D20*t%2B16)%2Cs.isAdditiveBlend)%7Bconst%20e%3D4*t%3Bo%5Be%2B0%5D%3Di(o%5Be%2B0%5D%2Ch%5Ba%2B0%5D)%2Co%5Be%2B1%5D%3Di(o%5Be%2B1%5D%2Ch%5Ba%2B1%5D)%2Co%5Be%2B2%5D%3Di(o%5Be%2B2%5D%2Ch%5Ba%2B2%5D)%2Co%5Be%2B3%5D%3Di(o%5Be%2B3%5D%2C255)%7Delse%7Bconst%20t%3Dl%3Br%5BA%2B0%5D%3De(r%5BA%2B0%5D%2Ch%5Ba%2B0%5D%2Ct)%2Cr%5BA%2B1%5D%3De(r%5BA%2B1%5D%2Ch%5Ba%2B1%5D%2Ct)%2Cr%5BA%2B2%5D%3De(r%5BA%2B2%5D%2Ch%5Ba%2B2%5D%2Ct)%7D%7Delse%7Bconst%20t%3Dnew%20Uint8Array(n)%3Bfor(let%20e%3D0%3Be%3Cn%3Be%2B%2B)%7Blet%20i%3DMath.round((s.values%5Be%2Bc%5D-s.cal_min)*m)%3Bi%3C0%7C%7C(i%3DMath.min(255%2Ci)%2Ct%5Be%5D%3Di)%7Dconst%20i%3Doe.getClusterBoundaryU8(t%2Cthis.tris)%3Bfor(let%20a%3D0%3Ba%3Cn%3Ba%2B%2B)%7Bif(t%5Ba%5D%3C1)continue%3Blet%20n%3Dl%3Bi%5Ba%5D%26%26(n%3Ds.outlineBorder)%3Bconst%20o%3D4*t%5Ba%5D%3Blet%20c%3D28*a%2B24%3B7!%3D%3Dthis.f32PerVertex%26%26(c%3D20*a%2B16)%2Cr%5Bc%2B0%5D%3De(r%5Bc%2B0%5D%2Ch%5Bo%2B0%5D%2Cn)%2Cr%5Bc%2B1%5D%3De(r%5Bc%2B1%5D%2Ch%5Bo%2B1%5D%2Cn)%2Cr%5Bc%2B2%5D%3De(r%5Bc%2B2%5D%2Ch%5Bo%2B2%5D%2Cn)%7D%7Dif(s.useNegativeCmap)%7Bconst%20t%3Dne.colormap(s.colormapNegative%2Cs.colormapInvert)%3Bif(s.outlineBorder%3C%3D0)%7Blet%20a%3Ds.cal_min%2Ch%3Ds.cal_max%3BisFinite(s.cal_minNeg)%26%26isFinite(s.cal_minNeg)%26%26(a%3D-s.cal_minNeg%2Ch%3D-s.cal_maxNeg)%2Ch%3Ca%26%26(%5Ba%2Ch%5D%3D%5Bh%2Ca%5D)%3Blet%20d%3Da%3B0%3D%3D%3Dd%26%26(d%3DNumber.EPSILON)%2Cs.alphaThreshold%26%26(a%3D0)%3Bconst%20m%3D255%2F(h-a)%3Bfor(let%20h%3D0%3Bh%3Cn%3Bh%2B%2B)%7Bconst%20n%3D-s.values%5Bh%2Bc%5D%3Bif(n%3Cd)continue%3Blet%20u%3DMath.round((n-a)*m)%3Bif(u%3C0)continue%3Bu%3D4*Math.min(255%2Cu)%3Blet%20A%3D28*h%2B24%3Bif(7!%3D%3Dthis.f32PerVertex%26%26(A%3D20*h%2B16)%2Cs.isAdditiveBlend)%7Bconst%20e%3D4*h%3Bo%5Be%2B0%5D%3Di(o%5Be%2B0%5D%2Ct%5Bu%2B0%5D)%2Co%5Be%2B1%5D%3Di(o%5Be%2B1%5D%2Ct%5Bu%2B1%5D)%2Co%5Be%2B2%5D%3Di(o%5Be%2B2%5D%2Ct%5Bu%2B2%5D)%2Co%5Be%2B3%5D%3Di(o%5Be%2B3%5D%2C255)%7Delse%20r%5BA%2B0%5D%3De(r%5BA%2B0%5D%2Ct%5Bu%2B0%5D%2Cl)%2Cr%5BA%2B1%5D%3De(r%5BA%2B1%5D%2Ct%5Bu%2B1%5D%2Cl)%2Cr%5BA%2B2%5D%3De(r%5BA%2B2%5D%2Ct%5Bu%2B2%5D%2Cl)%7D%7Delse%7Bconst%20i%3Dnew%20Uint8Array(n)%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)%7Bconst%20e%3DMath.round((-s.values%5Bt%2Bc%5D-s.cal_min)*m)%3Be%3C0%7C%7C(i%5Bt%5D%3DMath.min(255%2Ce))%7Dconst%20a%3Doe.getClusterBoundaryU8(i%2Cthis.tris)%3Bfor(let%20i%3D0%3Bi%3Cn%3Bi%2B%2B)%7Blet%20n%3D255%2Co%3Dl%3Ba%5Bi%5D%26%26(o%3Ds.outlineBorder)%2Cn%3D4*Math.min(255%2Cn)%3Blet%20h%3D28*i%2B24%3B7!%3D%3Dthis.f32PerVertex%26%26(h%3D20*i%2B16)%2Cr%5Bh%2B0%5D%3De(r%5Bh%2B0%5D%2Ct%5Bn%2B0%5D%2Co)%2Cr%5Bh%2B1%5D%3De(r%5Bh%2B1%5D%2Ct%5Bn%2B1%5D%2Co)%2Cr%5Bh%2B2%5D%3De(r%5Bh%2B2%5D%2Ct%5Bn%2B2%5D%2Co)%7D%7D%7D%7Dif(a%3E0)for(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)%7Blet%20i%3Dfunction(t%2Ce)%7Breturn%20Math.min(t*e*(1%2F255)%2C255)%7D%2Cs%3D28*t%2B24%3B7!%3D%3Dthis.f32PerVertex%26%26(s%3D20*t%2B16)%3Bconst%20n%3D4*t%2Cl%3DMath.min(a%2Co%5Bn%2B3%5D%2F255)%3Bl%3C%3D0%7C%7C(r%5Bs%2B0%5D%3Di(r%5Bs%2B0%5D%2Co%5Bn%2B0%5D)%2Cr%5Bs%2B1%5D%3Di(r%5Bs%2B1%5D%2Co%5Bn%2B1%5D)%2Cr%5Bs%2B2%5D%3Di(r%5Bs%2B2%5D%2Co%5Bn%2B2%5D)%2Cr%5Bs%2B0%5D%3De(r%5Bs%2B0%5D%2Co%5Bn%2B0%5D%2Cl)%2Cr%5Bs%2B1%5D%3De(r%5Bs%2B1%5D%2Co%5Bn%2B1%5D%2Cl)%2Cr%5Bs%2B2%5D%3De(r%5Bs%2B2%5D%2Co%5Bn%2B2%5D%2Cl))%7Dt.bindBuffer(t.ELEMENT_ARRAY_BUFFER%2Cthis.indexBuffer)%2Ct.bufferData(t.ELEMENT_ARRAY_BUFFER%2CUint32Array.from(this.tris)%2Ct.STATIC_DRAW)%2Ct.bindBuffer(t.ARRAY_BUFFER%2Cthis.vertexBuffer)%2Ct.bufferData(t.ARRAY_BUFFER%2CFloat32Array.from(s)%2Ct.STATIC_DRAW)%2Cthis.indexCount%3Dthis.tris.length%2Cthis.vertexCount%3Dthis.pts.length%7DreverseFaces(t)%7Bif(this.offsetPt0)return%3Bif(this.hasConnectome)return%3Bconst%20e%3Dthis.tris%7C%7C%5B%5D%3Bfor(let%20t%3D0%3Bt%3Ce.length%3Bt%2B%3D3)%7Bconst%20i%3De%5Bt%5D%3Be%5Bt%5D%3De%5Bt%2B1%5D%2Ce%5Bt%2B1%5D%3Di%7Dthis.updateMesh(t)%7DhierarchicalOrder()%7Bconst%20t%3Dthis.tris.length%2F3%2Ce%3DMath.log(t%2F20)%2FMath.log(4)%3Bif(t!%3D%3D20*Math.pow(4%2Ce))return%20NaN%3Bif(this.pts.length%2F3!%3D%3D10*Math.pow(4%2Ce)%2B2)return%20NaN%3Bfor(let%20t%3D0%3Bt%3C15%3Bt%2B%3D3)if(0!%3D%3Dthis.tris%5Bt%5D)return%20NaN%3Bfor(let%20t%3D15%3Bt%3C24%3Bt%2B%3D3)if(3!%3D%3Dthis.tris%5Bt%5D)return%20NaN%3Bfor(let%20t%3D24%3Bt%3C30%3Bt%2B%3D3)if(4!%3D%3Dthis.tris%5Bt%5D)return%20NaN%3Breturn%20e%7DdecimateFaces(t%2Ce)%7Blet%20i%3Dthis.tris%3Bfor(let%20s%3Dt-1%3Bs%3E%3De%3Bs--)%7Bconst%20t%3D10*Math.pow(4%2Cs%2B1)%2B2%2Ce%3D10*Math.pow(4%2Cs)%2B2%2Cn%3Di.length%2F3%2Cr%3D20*Math.pow(4%2Cs)%3Bconsole.log(%60order%20%24%7Bs%2B1%7D%20-%3E%20%24%7Bs%7D%20vertices%20%24%7Bt%7D%20-%3E%20%24%7Be%7D%20faces%20%24%7Bn%7D%20-%3E%20%24%7Br%7D%60)%3Bconst%20a%3DArray.from(%7Blength%3At%7D%2C((t%2Ce)%3D%3Ee%2B1))%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)%7Bconst%20e%3Di%5B3*t%5D%2Cs%3Di%5B3*t%2B1%5D%2Cn%3Di%5B3*t%2B2%5D%3Ba%5Be-1%5D%3DMath.min(a%5Be-1%5D%2Cs%2Cn)%7Dconst%20o%3Dnew%20Uint32Array(3*r)%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)o%5B3*t%5D%3Da%5Bi%5B3*t%5D-1%5D%2Co%5B3*t%2B1%5D%3Da%5Bi%5B3*t%2B1%5D-1%5D%2Co%5B3*t%2B2%5D%3Da%5Bi%5B3*t%2B2%5D-1%5D%3Bi%3Do%7Dthis.tris%3Dnew%20Uint32Array(i)%7DdecimateHierarchicalMesh(t%2Ce%3D4)%7Bconst%20i%3Dthis.hierarchicalOrder()%3Bif(isNaN(i))return%20l.warn(%22Unable%20to%20decimate%20mesh%3A%20it%20does%20not%20have%20a%20hierarchical%20structure%22)%2C!1%3Bif(e%3E%3Di)return%20l.warn(%60Unable%20to%20decimate%20mesh%3A%20input%20order%20(%24%7Bi%7D)%20must%20be%20larger%20than%20downsampled%20order%20(%24%7Be%7D)%60)%2C!1%3Bconst%20s%3Dthis.pts.length%2F3%2Cn%3D10*Math.pow(4%2Ce)%2B2%3Bif(this.pts%3Dnew%20Float32Array(this.pts.slice(0%2C3*n))%2Cthis.decimateFaces(i%2Ce)%2Cthis.layers%26%26this.layers.length%3E0)for(let%20t%3D0%3Bt%3Cthis.layers.length%3Bt%2B%2B)%7Bconst%20e%3Dthis.layers%5Bt%5D%3Be.values%20instanceof%20Float32Array%7C%7Ce.values.length!%3D%3Ds%3Fe.values%3Dnew%20Float32Array(e.values.slice(0%2Cn))%3Al.warn(%22decimation%20logic%20needs%20to%20be%20updated%22)%7Dreturn%20this.updateMesh(t)%2C!0%7DsetLayerProperty(t%2Ce%2Ci%2Cs)%7Bconst%20n%3Dthis.layers%5Bt%5D%3Bn%26%26e%20in%20n%3F(n%5Be%5D%3Di%2Cthis.updateMesh(s))%3Al.warn(%22mesh%20does%20not%20have%20property%20%22%2Ce%2C%22%20for%20layer%20%22%2Cn)%7DsetProperty(t%2Ce%2Ci)%7Bt%20in%20this%3F(this%5Bt%5D%3De%2Cthis.updateMesh(i))%3Al.warn(%22mesh%20does%20not%20have%20property%20%22%2Ct%2Cthis)%7DgeneratePosNormClr(t%2Ce%2Ci)%7B(t.length%3C3%7C%7Ci.length%3C4)%26%26(l.error(%22Catastrophic%20failure%20generatePosNormClr()%22)%2Cl.debug(%22this%22%2Cthis)%2Cl.debug(%22pts%22%2Ct)%2Cl.debug(%22rgba%22%2Ci))%3Bconst%20s%3Doe.generateNormals(t%2Ce)%2Cn%3Dt.length%2F3%2Cr%3Dn%3D%3D%3Di.length%2F4%2Ca%3Dthis.f32PerVertex%2Co%3Dnew%20Float32Array(n*a)%2Ch%3Dnew%20Uint8Array(o.buffer)%3Blet%20c%3D0%2Cd%3D0%2Cm%3D0%2Cu%3D4*(a-1)%3Bfor(let%20e%3D0%3Be%3Cn%3Be%2B%2B)o%5Bm%2B0%5D%3Dt%5Bc%2B0%5D%2Co%5Bm%2B1%5D%3Dt%5Bc%2B1%5D%2Co%5Bm%2B2%5D%3Dt%5Bc%2B2%5D%2C7!%3D%3Da%3F(h%5Bu-4%5D%3D127*s%5Bc%2B0%5D%2Ch%5Bu-3%5D%3D127*s%5Bc%2B1%5D%2Ch%5Bu-2%5D%3D127*s%5Bc%2B2%5D)%3A(o%5Bm%2B3%5D%3Ds%5Bc%2B0%5D%2Co%5Bm%2B4%5D%3Ds%5Bc%2B1%5D%2Co%5Bm%2B5%5D%3Ds%5Bc%2B2%5D)%2Ch%5Bu%5D%3Di%5Bd%2B0%5D%2Ch%5Bu%2B1%5D%3Di%5Bd%2B1%5D%2Ch%5Bu%2B2%5D%3Di%5Bd%2B2%5D%2Ch%5Bu%2B3%5D%3Di%5Bd%2B3%5D%2Cr%26%26(d%2B%3D4)%2Cc%2B%3D3%2Cm%2B%3Da%2Cu%2B%3D4*a%3Breturn%20o%7Dstatic%20readMesh(e%2Ci%2Cs%2Cn%3D1%2Cr%3Dnew%20Uint8Array(%5B255%2C255%2C255%2C255%5D)%2Ca%3D!0)%7Blet%20o%2Ch%3Dnew%20Uint32Array(%5B%5D)%2Cc%3Dnew%20Float32Array(%5B%5D)%2Cd%3D%22%22%3Bconst%20m%3D%2F(%3F%3A%5C.(%5B%5E.%5D%2B))%3F%24%2F%3Blet%20u%3Dm.exec(i)%5B1%5D%3Bif(u%3Du.toUpperCase()%2C%22GZ%22%3D%3D%3Du%26%26(u%3Dm.exec(i.slice(0%2C-3))%5B1%5D%2Cu%3Du.toUpperCase())%2C%22JCON%22%3D%3D%3Du%26%26l.error(%22you%20should%20never%20see%20this%20message%3A%20load%20using%20nvconnectome%20not%20nvmesh%22)%2C%22JSON%22%3D%3D%3Du%26%26l.error(%22you%20should%20never%20see%20this%20message%3A%20load%20using%20nvconnectome%20not%20nvmesh%22)%2Cr%5B3%5D%3DMath.max(1%2Cr%5B3%5D)%2C%22TCK%22%3D%3D%3Du%7C%7C%22TRK%22%3D%3D%3Du%7C%7C%22TT%22%3D%3D%3Du%7C%7C%22TRX%22%3D%3D%3Du%7C%7C%22TRACT%22%3D%3D%3Du)%7Bif(o%3D%22TCK%22%3D%3D%3Du%3FIe.readTCK(e)%3A%22TRACT%22%3D%3D%3Du%3FIe.readTRACT(e)%3A%22TT%22%3D%3D%3Du%3FIe.readTT(e)%3A%22TRX%22%3D%3D%3Du%3FIe.readTRX(e)%3AIe.readTRK(e)%2Cvoid%200%3D%3D%3Do)%7Bo%3D%7Bpts%3Anew%20Float32Array(%5B0%2C0%2C0%2C0%2C0%2C0%5D)%2CoffsetPt0%3Anew%20Uint32Array(%5B0%5D)%7D%2Cl.error(%22Creating%20empty%20tracts%22)%7Dreturn%20r%5B3%5D%3D0%2Cnew%20t(o.pts%2Co.offsetPt0%2Ci%2Cr%2Cn%2Ca%2Cs%2C%22inferno%22%2Co.dpg%7C%7Cnull%2Co.dps%7C%7Cnull%2Co.dpv%7C%7Cnull)%7Dif(%22GII%22%3D%3D%3Du)o%3DIe.readGII(e)%3Belse%20if(%22MZ3%22%3D%3D%3Du)o%3DIe.readMZ3(e)%2C(o%20instanceof%20Float32Array%7C%7Cnull%3D%3D%3Do.positions)%26%26l.warn(%22MZ3%20does%20not%20have%20positions%20(statistical%20overlay%3F)%22)%3Belse%20if(%22ASC%22%3D%3D%3Du)o%3DIe.readASC(e)%3Belse%20if(%22DFS%22%3D%3D%3Du)o%3DIe.readDFS(e)%3Belse%20if(%22BYU%22%3D%3D%3Du%7C%7C%22G%22%3D%3D%3Du)o%3DIe.readGEO(e)%3Belse%20if(%22GEO%22%3D%3D%3Du)o%3DIe.readGEO(e%2C!0)%3Belse%20if(%22ICO%22%3D%3D%3Du%7C%7C%22TRI%22%3D%3D%3Du)o%3DIe.readICO(e)%3Belse%20if(%22OFF%22%3D%3D%3Du)o%3DIe.readOFF(e)%3Belse%20if(%22NV%22%3D%3D%3Du)o%3DIe.readNV(e)%3Belse%20if(%22OBJ%22%3D%3D%3Du)o%3DIe.readOBJ(e)%3Belse%20if(%22PLY%22%3D%3D%3Du)o%3DIe.readPLY(e)%3Belse%20if(%22X3D%22%3D%3D%3Du)o%3DIe.readX3D(e)%3Belse%20if(%22FIB%22%3D%3D%3Du%7C%7C%22VTK%22%3D%3D%3Du)%7Bif(o%3DIe.readVTK(e)%2C%22offsetPt0%22in%20o)return%20r%5B3%5D%3D0%2Cnew%20t(o.pts%2Co.offsetPt0%2Ci%2Cr%2Cn%2Ca%2Cs%2C%22inferno%22)%7Delse%20o%3D%22SRF%22%3D%3D%3Du%3FIe.readSRF(e)%3A%22STL%22%3D%3D%3Du%3FIe.readSTL(e)%3AIe.readFreeSurfer(e)%3Bif(o.anatomicalStructurePrimary%26%26(d%3Do.anatomicalStructurePrimary)%2Co%20instanceof%20Float32Array)throw%20new%20Error(%22fatal%3A%20unknown%20mesh%20type%20loaded%22)%3Bif(!o.positions)throw%20new%20Error(%22positions%20not%20loaded%22)%3Bif(!o.indices)throw%20new%20Error(%22indices%20not%20loaded%22)%3Bif(c%3Do.positions%2Ch%3Do.indices%2C%22rgba255%22in%20o%26%26o.rgba255.length%3E0%26%26(r%3Do.rgba255)%2C%22colors%22in%20o%26%26o.colors%26%26o.colors.length%3D%3D%3Dc.length)%7Bconst%20t%3Dc.length%2F3%3Br%3Dnew%20Uint8Array(4*t)%3Blet%20e%3D0%2Ci%3D0%3Bfor(let%20s%3D0%3Bs%3Ct%3Bs%2B%2B)r%5Bi%2B%2B%5D%3D255*o.colors%5Be%5D%2Cr%5Bi%2B%2B%5D%3D255*o.colors%5Be%2B1%5D%2Cr%5Bi%2B%2B%5D%3D255*o.colors%5Be%2B2%5D%2Cr%5Bi%2B%2B%5D%3D255%2Ce%2B%3D3%7Dconst%20A%3Dc.length%2F3%3Bif(h.length%2F3%3C1%7C%7CA%3C3)throw%20new%20Error(%22Mesh%20should%20have%20at%20least%20one%20triangle%20and%20three%20vertices%22)%3Br%5B3%5D%3DMath.max(1%2Cr%5B3%5D)%3Bconst%20f%3Dnew%20t(c%2Ch%2Ci%2Cr%2Cn%2Ca%2Cs%2Cnull%2Cnull%2Cnull%2Cnull%2C!0%2Cd)%3Breturn%22scalars%22in%20o%26%26o.scalars.length%3E0%26%26(Ie.readLayer(i%2Ce%2Cf%2Cn%2C%22gray%22)%2Cf.updateMesh(s))%2Cf%7Dstatic%20async%20loadLayer(t%2Ce)%7Blet%20i%2Cs%3Bif(void%200!%3D%3Dt.base64)i%3Dfunction(t)%7Bconst%20e%3Dwindow.atob(t)%2Ci%3De.length%2Cs%3Dnew%20Uint8Array(i)%3Bfor(let%20t%3D0%3Bt%3Ci%3Bt%2B%2B)s%5Bt%5D%3De.charCodeAt(t)%3Breturn%20s.buffer%7D(t.base64)%3Belse%7Bif(!t.url)throw%20new%20Error(%22layer%3A%20missing%20url%22)%3Bconst%20e%3Dawait%20fetch(t.url%2C%7Bheaders%3At.headers%7D)%3Bif(!e.ok)throw%20Error(e.statusText)%3Bi%3Dawait%20e.arrayBuffer()%7Dlet%20n%3D%5B%5D%3Bif(t.name%26%26%22%22!%3D%3Dt.name)s%3Dt.name%3Belse%7Bif(!t.url)throw%20new%20Error(%22layer%3A%20missing%20url%22)%3Btry%7Bn%3Dnew%20URL(t.url).pathname.split(%22%2F%22)%7Dcatch(e)%7Bn%3Dt.url.split(%22%2F%22)%7Dfinally%7Bs%3Dn.slice(-1)%5B0%5D%7D%7Ds.indexOf(%22%3F%22)%3E-1%26%26(s%3Ds.slice(0%2Cs.indexOf(%22%3F%22)))%3Blet%20r%3D.5%3B%22opacity%22in%20t%26%26(r%3Dt.opacity)%3Blet%20a%3D%22warm%22%3B%22colormap%22in%20t%26%26(a%3Dt.colormap)%3Blet%20o%3D%22winter%22%3B%22colormapNegative%22in%20t%26%26(o%3Dt.colormapNegative)%3Blet%20l%3D!1%3B%22useNegativeCmap%22in%20t%26%26(l%3Dt.useNegativeCmap)%3Blet%20h%3Dnull%3B%22cal_min%22in%20t%26%26(h%3Dt.cal_min)%3Blet%20c%3Dnull%3B%22cal_max%22in%20t%26%26(c%3Dt.cal_max)%3Bconst%20d%3DIe.readLayer(s%2Ci%2Ce%2Cr%2Ca%2Co%2Cl%2Ch%2Cc)%3Bd%26%26e.layers.push(d)%7Dstatic%20async%20loadFromUrl(%7Burl%3Ae%3D%22%22%2Cheaders%3Ai%3D%7B%7D%2Cgl%3As%2Cname%3An%3D%22%22%2Copacity%3Ar%3D1%2Crgba255%3Aa%3D%5B255%2C255%2C255%2C255%5D%2Cvisible%3Ao%3D!0%2Clayers%3Al%3D%5B%5D%2Cbuffer%3Ah%3Dnew%20ArrayBuffer(0)%7D%3D%7B%7D)%7Blet%20c%2Cd%3De.split(%22%2F%22)%3Bif(%22%22%3D%3D%3Dn)%7Btry%7Bd%3Dnew%20URL(e).pathname.split(%22%2F%22)%7Dcatch(t)%7Bd%3De.split(%22%2F%22)%7D(n%3Dd.slice(-1)%5B0%5D).indexOf(%22%3F%22)%3E-1%26%26(n%3Dn.slice(0%2Cn.indexOf(%22%3F%22)))%7Dif(%22%22%3D%3D%3De)throw%20Error(%22url%20must%20not%20be%20empty%22)%3Bif(!s)throw%20Error(%22gl%20context%20is%20null%22)%3Bif(h.byteLength%3E0)c%3Dh%3Belse%7Bconst%20t%3Dawait%20fetch(e%2C%7Bheaders%3Ai%7D)%3Bif(!t.ok)throw%20Error(t.statusText)%3Bc%3Dawait%20t.arrayBuffer()%7Dconst%20m%3Dawait%20this.readMesh(c%2Cn%2Cs%2Cr%2Cnew%20Uint8Array(a)%2Co)%3Bif(!l%7C%7Cl.length%3C1)return%20m%3Bfor(let%20e%3D0%3Be%3Cl.length%3Be%2B%2B)await%20t.loadLayer(l%5Be%5D%2Cm)%3Breturn%20m.updateMesh(s)%2Cm%7Dstatic%20async%20readFileAsync(t)%7Breturn%20new%20Promise(((e%2Ci)%3D%3E%7Bconst%20s%3Dnew%20FileReader%3Bs.onload%3D()%3D%3E%7Be(s.result)%7D%2Cs.onerror%3Di%2Cs.readAsArrayBuffer(t)%7D))%7Dstatic%20async%20loadFromFile(%7Bfile%3Ae%2Cgl%3Ai%2Cname%3As%3D%22%22%2Copacity%3An%3D1%2Crgba255%3Ar%3D%5B255%2C255%2C255%2C255%5D%2Cvisible%3Aa%3D!0%2Clayers%3Ao%3D%5B%5D%7D%3D%7B%7D)%7Bif(!e)throw%20new%20Error(%22file%20must%20be%20set%22)%3Bif(!i)throw%20new%20Error(%22rendering%20context%20must%20be%20set%22)%3Bconst%20l%3Dawait%20t.readFileAsync(e)%2Ch%3Dt.readMesh(l%2Cs%2Ci%2Cn%2Cnew%20Uint8Array(r)%2Ca)%3Bif(!o%7C%7Co.length%3C1)return%20h%3Bfor(let%20e%3D0%3Be%3Co.length%3Be%2B%2B)await%20t.loadLayer(o%5Be%5D%2Ch)%3Breturn%20h.updateMesh(i)%2Ch%7Dasync%20loadFromBase64(%7Bbase64%3Ae%2Cgl%3Ai%2Cname%3As%3D%22%22%2Copacity%3An%3D1%2Crgba255%3Ar%3D%5B255%2C255%2C255%2C255%5D%2Cvisible%3Aa%3D!0%2Clayers%3Ao%3D%5B%5D%7D%3D%7B%7D)%7Bif(!e)throw%20new%20Error(%22base64%20must%20bet%20set%22)%3Bif(!i)throw%20new%20Error(%22rendering%20context%20must%20be%20set%22)%3Bconst%20l%3Dfunction(t)%7Bconst%20e%3Dwindow.atob(t)%2Ci%3De.length%2Cs%3Dnew%20Uint8Array(i)%3Bfor(let%20t%3D0%3Bt%3Ci%3Bt%2B%2B)s%5Bt%5D%3De.charCodeAt(t)%3Breturn%20s.buffer%7D(e)%2Ch%3Dawait%20t.readMesh(l%2Cs%2Ci%2Cn%2Cnew%20Uint8Array(r)%2Ca)%3Bif(!o%7C%7Co.length%3C1)return%20h%3Bfor(let%20e%3D0%3Be%3Co.length%3Be%2B%2B)await%20t.loadLayer(o%5Be%5D%2Ch)%3Breturn%20h.updateMesh(i)%2Ch%7Dstatic%20readGII(t)%7Breturn%20Ie.readGII(t)%7Dstatic%20readX3D(t)%7Breturn%20Ie.readX3D(t)%7Dstatic%20readNII(t%2Ce%3D0)%7Breturn%20Ie.readNII(t%2Ce)%7Dstatic%20readNII2(t%2Ce%3D0)%7Breturn%20Ie.readNII2(t%2Ce)%7Dstatic%20readMGH(t)%7Breturn%20Ie.readMGH(t)%7Dstatic%20readSTL(t)%7Breturn%20Ie.readSTL(t)%7Dstatic%20readTxtSTL(t)%7Breturn%20Ie.readTxtSTL(t)%7Dstatic%20readSRF(t)%7Breturn%20Ie.readSRF(t)%7Dstatic%20readFreeSurfer(t)%7Breturn%20Ie.readFreeSurfer(t)%7Dstatic%20readOBJ(t)%7Breturn%20Ie.readOBJ(t)%7Dstatic%20readOFF(t)%7Breturn%20Ie.readOFF(t)%7Dstatic%20readGEO(t%2Ce%3D!1)%7Breturn%20Ie.readGEO(t%2Ce)%7Dstatic%20readICO(t)%7Breturn%20Ie.readICO(t)%7Dstatic%20readPLY(t)%7Breturn%20Ie.readPLY(t)%7Dstatic%20readMZ3(t%2Ce%3D0)%7Breturn%20Ie.readMZ3(t%2Ce)%7Dstatic%20readVTK(t)%7Breturn%20Ie.readVTK(t)%7Dstatic%20readASC(t)%7Breturn%20Ie.readASC(t)%7Dstatic%20readNV(t)%7Breturn%20Ie.readNV(t)%7Dstatic%20readANNOT(t%2Ce%2Ci%3D!1)%7Breturn%20Ie.readANNOT(t%2Ce%2Ci)%7Dstatic%20readCURV(t%2Ce)%7Breturn%20Ie.readCURV(t%2Ce)%7Dstatic%20readSTC(t%2Ce)%7Breturn%20Ie.readSTC(t%2Ce)%7Dstatic%20readSMP(t%2Ce)%7Breturn%20Ie.readSMP(t%2Ce)%7Dstatic%20readTxtVTK(t)%7Breturn%20Ie.readTxtVTK(t)%7Dstatic%20readTRK(t)%7Breturn%20Ie.readTRK(t)%7Dstatic%20readTCK(t)%7Breturn%20Ie.readTCK(t)%7Dstatic%20readTSF(t)%7Breturn%20Ie.readTSF(t)%7Dstatic%20readTT(t)%7Breturn%20Ie.readTT(t)%7Dstatic%20readTRX(t)%7Breturn%20Ie.readTRX(t)%7Dstatic%20readTRACT(t)%7Breturn%20Ie.readTRACT(t)%7D%7D%2CTe%3D%22data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAgAAAAEACAIAAABK8lkwAAFEQElEQVR4AeS1B3RVV5ou%2BF3lhHJCCAlJCCWEJEACRAYTDMZE4%2BzuSj1V1VNrut5bb70w0%2F1YU7NmpldPT6%2F3prunl6tcXu1sjI0xGZMRIJCIkgzKEhLKEsoR6c63zzn33HOvbjj3Srh79Xxsrs7%2B97%2F%2Fnf7%2F%2BzxghAvtnxCSEAK8Avw18LfA7rDYMPw3uBYEyfyPFOADFycq04G%2FAqbsO0xJDm7F%2FiOQKq2gbBIbgMsOZ1yWfPRDG7AT%2BHPMOoz%2FWpvAa0CFqV8hdf9Fduw28oGvNXHel%2FJ4E3BWYyw1nctN%2FLmUGWq4G8DW2c8S97ATKNFsrQX4sxm%2F4ENgn4hRCBy3HDkvXa0LWAl8ZxnimGScKTyB32mCNgM%2FNw%2F%2BD0CraWQc%2BJ9n77bfAB5rln0sWZwiTaIx%2Bv8zkOXU28ulHW1atMlj0brzT9YCa6VrWZqXuRSZVy7ioitheEe1O9Nr29NrH%2BHREIZc2sPP1B8n%2BMClsAIBAekZGelxC6uPs6pTfsZVNkgF7hi1gtKtFjtoz5kBoy0Mhx1EPuxk5fXr16elpfn6%2BnZ1dZWWllZXV2NmiEVsPOL5G47wYAT7wc8LXkYYJzAxjOF%2B9Hejuw1tzWjmh6vB9yr%2FLXBU%2Ba8L%2Fv6Ii0NkJIKC4OMjLGNjGBhAVxeePsX4uN44m92%2BoM1LgCWmzlOS1wXURqIvB2UalpZ8ik9haMiNFS4c4M8Ba2s%2FcE7P7CNun%2ByAHifyv7%2BtJY8Y9Mjq3LmYPx8REQgMhIeHeK%2B%2BPrS3jzY2jvKqQip2bygHXtFMSAcygIvHrOIo%2Fd3W8XdjEUTT4gdc%2BuFYv6NdzcGcBCREISoQgR7wYKr3oa8d7fWoNyqH8vT3nH5uYlLWBg28pQvyxuTEpMkUJ3I2LhShrCZ2RzHagx5WUAc6HOzqf4LE9jEWxnbgCz7Cf3P8RnlArvQlPk6iwpHzSd0CQF54Ba9sW7Tt%2B0Ubz58PMZk3ZGYufSkzZxEWncAJnkpfsJ8Cw%2BnptT9Lr6lAxX3cv43bTWjSuZND4mce8AuHXr%2BHS4iPR0EBcnMzsrLSi1OPCwEIOCTLzLsONaBW2ZCVAJC6f7A35ddmDfgHez6Zzre8d%2B%2Fed955p6CgICAg4OnTp2fOnPnggw8qKyvhOpigS7AkHekpSGExzMXcCERQAPzhLwvAOMZlAehCVytan%2BBJLYR4P8RDWnSuIu6J6fa%2FmC3%2Fm%2FzHmQB4eWHpUmRlYeFC8VBRUZgzRxGA0VH096OzE83NqKlBeTnu3tWZQm5cUxxeXYKlC%2BXeAB7%2Bn3jID97APDz8hXhw%2Bdm80bMEw0tw86Ybi1wQm2Pd%2F8ps6te548WYAcjj5Xr8%2FqOFBvx3swg40oDly0V5ZWZiwQKh3xQAT08hAL29aG0deb9%2B5FI9%2Bn5%2FaE4F%2Fj35Kss0jVWeXoS4ErS0aKMdkrjN6k6Yq%2FlYtNNCAH7A%2F%2F0D8%2BOYnV2RtQpQkIWsJCTFICYIQRQApjoFgElegxqmdzGKO9EZEPE7%2F99YzW4E%2FsA%2FPxfcqEUA%2Fsb%2FL%2FsnfOBTiMJc5HIVkmc4wmUBGMFIN7ob0cjyKUUpm829KYf7lVkD2k3GQw4EIDwc6%2FKwSVwPkH0FeSX43pHS6BSAxVh8AAf2YE%2FOvJzGRYiORkfHPaA%2BPn5vRkbw7rjdiUiMRewRHCnXl0XJyQHp6dl7w7N3Ydcd3LmJm5dx%2BRzO8XaczjVd9zwp52zCqGcPCvz9sWULNmzAqlVYtizU2zu9VxAN2SR%2B2pI2UGt3JNPBVjLEj23iNOja9dy5czdu3Lhv3z65Gx4e7u3t%2FfjxY1cFIBnJTNPlWM5MzURmFKJsujF3qQd84kWmAmtBiyzeJSi5juvsOl1rifzHS7maH%2FTtcM0a0fLzsWSJeBd7mJpCVRUePkRJCYqKUFzsMCbcAnfAZpr812K1h%2FI3P5rx8A1Vt%2BuzhadbAmCiP9Z9pGLRFcbg3pm0WKyzckwE3arDNygIe%2FZg2zbxiGT%2F6TgnRHxU0Onvc6nfVRU4mKUZzuhGerqVACjItegxM1ORmqu9hyM%2F4AfbWUZ2fgWvvISXVmP1ElNiWmEIQ3dx9xqukZca%2FP8yIN6IP1UHn2r1hxoQq3b%2Byd8QELC4P2E7tq%2FH%2Bnzkx6gUbol61JP3LuLiCZxoF%2FRugdBpX6rHcgfXnZeH3FzVox95rGvu38EM5wLAEG%2FhrdfxegISxEXzphed7ug4Tg3MzOzJzNwLRNCHEheAgM%2FwGUnBWcij6elpGRnpgIcXvFZgBRs1hmR0FEcb0ACXcVp6j9uuUT%2FBlGR67tiBl16CQUmd9HRjevqjmpppTCqP%2F1ZaKljvCmo%2BGme1hKOjo%2BfPn6%2B1pKSkUBX0RwhF6GZs3oANJNhcq2JSwdp8%2FhweHvDxgZdFqsQhjm0LthSjmFl%2BARfO4ixmFVxg505s3Yr16xEV5cSZeyRRsK1di6VLxcfJk%2BjsnNUNyQIgoQxlJP1e9Mrdh5IY7MCOYDkzkpKEZ0ICnjyZ3Tuxg1lgfzWQcfZm%2B%2FvjnXfwxhviBe1hBCNsSBTfFRWgBuzaJSYq4ENmZODiRaenFbTEHxUTE4L9GXEawhBGNtuHfcxeB4cJROBarM1BzgIsOOIf7u8vL2t08gwBAav9Uw7i4C7sSkKSA2eOsnHPVIgv8EUd6jBzUADYTGBdsz8jAchAxht44228zWoX%2FeHhRZ1HFkV9W4TvgMnM%2Fp7MO31IfQPz5lEe6DaFqTGMPcIjh1H%2F9%2FSwtPSrWRhfiY0bZRPVmEuwfj7BJ7Wo1XPYMhtfFimY7Xh%2BSgrefhsHDyIrS7VdwqVbGbdC0stxorLM1lISEmUFyHblabRZa5xx2Y6NjY2wcDQYGhoaJV%2FrAzODbLUVW9fDsjSbm1FXJ37Jnb29ojZVAQgIQGgoIiP51kI4%2BSthJVYyyci9zObv8F0LWjAb4JscOIDdu7X5rAsUwTffRHKy%2BDhyBNXVs7IdYPFiwenh4XJPZnx1kGkvW6imionO2dkvXgBmjfqtIhpnI9Srr%2BK11%2BywP3PVYICvL9l%2FFErekrRlDcjPN7kxzagBcXFocZRXBhisBYDszzatInzhS%2FZ%2FD%2B%2BtwqrpcfrQx814wzsUoR7woIWM9Bbe8g3w9fafAE44kEj53vIDAt4KeItMGIIQ7ehzPPeyRbbLsTwIQUYY%2F4g%2FtqN9RtfNlMvNRVSUaghHuKwB93DP3iRHAkBGPoADVDOF%2FYeG8MknKV98sejyZfJfBJBZXBxNjjAa8Sd%2FwoXpRudBDH6AD1rRai9sEkrTPy2NYC2tXYuqKuzfL2iF0ZD5Jt7kA%2Fwev%2B9Bj%2BPD7td2moE%2F2PD52sH8sDCx7ltvIS1NNnDFIzhyGqevhl3tSe9BCg4pMvTfLWeS%2FQ%2FZWELOCn31aJhxgdXW1j548GDFihXJpDoJRUVFFaweHSDv78GeXdgVj3jFxMq7fRv37omaqalBUxPa24UAGDXbpAZQAKKjRU1y0YwMkXAFBfD3Z1HJ0SIR%2BRW%2BqkTlzA6HzEy88w7eeEMIjRUeP3785MmT7u5u6p%2FBYAgICIiMjExISEhNTdW6rVghXtjPDx9%2FLA40C%2BBh2SQwVcj15SjXjtsQALbTpzE1NRvL28Tss%2F%2BMU9Q8jwmyeTM2bbIcpyCXlKC%2BHgMDQgD8%2FUfDwkZiRxCrjJP9mcVmAZADUQNMAmCwtUWZ%2FQMQYJ4lC8A0MFH3YZ8V%2B5N5b%2BHWYzxuQxsFiQIQgYgkJOUgh40O%2B%2F33nw8YBAaAKw4OnwTs8fc%2FEHBAZv8neMKUqEc9E2YCE37wi0Y09ymTvjorHencUic6%2F2CTxfQjj1SfJ3%2BOjY36%2BvoJG%2FKoAe4IAAVwN3bvxV5ehGI6fBiff44rV6izbNF8GhofPBDUEBSEX%2FwCnp505pQudL2P96dgO%2FXT5Yk9PTh2DK2tGB%2FHz36GAPF4aUjjC%2FHiPsfnDk5qI%2FGpAbdduaytW7Frl8r%2BVJ3P8Nmn%2BLQYxcoW0%2FGNEIDL02b%2B1lGdGB3VJjOA6hwqNenBBJcEdGJ42PFejdPDTUxMHDt2zGg0ZmZm%2Bvr6dnR03Lhx48yZM07PzdehSO%2FHfma5Yiou5pvi5k3cuYPmZrsz%2BUwdHaKVS8QXFyeybdUqrFsnhFxKtWAEUww%2BxsdVqIK7oL689poN9qfC3bx5s6ysrL6%2BvrOzc3h4mAIQGBgYFRVFFczOzl65cmVhYaHqT0pgkJER%2FP736O7GjEAxIZtnZ8s9meutXJrQJFe7Ui%2FBwYoG3L%2BP2ccLpH6rNYzuasCyZSI7LHDtGo4cweXLlHGRTsLXMBIRMRrrqQpAVZXIL75XRIRpFtmfGnDxooMlZQEw91lRtgSAbL4d27dgi9Z4AzdO4MRVXC1DWT%2F6ZaMnPFORWoCCzdj8Kl4NDQhd6b8fYvSyvT3wzP%2BeAhCQFO0fbYTxOI5fwIVSlFajmnxIixe85mJuFrLWYA23sQzL1LmUhAY0UIGKUOTma82di9xcZGaK7%2F148B8fFBT8NfANGZWFeQ7nnuKpzXl2BWAndr6CVzhZ6ZOsv%2FlGMIXE%2FmxxgLQahKRHRood7N7N3lIs5cRmNPNabUaW2NWE27eFeLDo9%2B2TDauxugIVd3DHHonMQu6npGD9eqxZoxpO4%2FQxHFPYX93iSV2rGmwWidE8i7RIEabOJyIxBjFmAfivWNaD%2BHY0NIiKuHsXAwM2xcQ2Hj9%2BXFlZuWDBAh8fn2fPnlEDnJ6b7P8O3tkH5arR1YWTJ3HunKiutjadl6xsq6VFNIoHybC2Fq%2B%2BivDwFKS8gTeoph%2Fggza0ufc4O3eKPNKyP0939OjR06dPX716dfoxHz16RHtsbOy6deuqqqr27t0bEhIiD5EVuC9u86OPMCOQ%2BknlJpAppgsATMKgCAAx%2BwLwY%2FC%2BvSVdUQJDQICRpL14scZWU4Ovv8aHH1pkudE42tU10gWUm20VFUIDWKAKSA7UgLg4PqTBTu1ZC4DM%2FpOTVu5k3o3YqLWQ9z%2FBJ0dw5Bmeae2TmCQds9WilkPv%2Br0b7h8O%2FMbxsf%2BW%2FwMzpwKnPsbHh3H4FE5pR5%2FjeROa2B7gQStaxzG%2BCmaFXI%2F1JD1SEN3ceac8UnWecifJTDoKwAP5gkg%2BHHNNAChTL%2BPlHdih9O%2FdE0xxQiF0WQASgHB1wunTSEwUxCq9OSc2orEOdXyH6cFJrZHaPtmHBbZihXhpCRReqog9AXAGnnnKicvSpSgoUHtksmu4dh7nzQ4RWo2aQV0a8RJeWmdYR4XPRCYFQDsYuRs%2FkT6YFMx4SiHl9dIlFwrNaDTW19frdN6Gba%2FjdTP7V1UJRaeuF5tkTx%2FBWDBCdzcOHxYH4Mcbb%2FAFF2IhZaYTne%2FjfbgOlv22bUomyyD7f%2FTRR19%2B%2BeXNmzcdTGxrazt8%2BPDTp08HBwffe%2B%2B94OBg2b5qFerqRCnzet2HTOUSalBDlmfOTPeSBYDJ7w1v0c%2FMFLMiI4XQzgL%2BBdjfFtnqAks5IcHSxAe4fNkwMGAVZAQYtbRQANjMAkBQANhabNw5wbIi%2B4dr2EgRAEuQ00gsyWRHE6pR%2FS2%2B%2FQJfDGDA3kGu4%2FoUpuZgzk%2FxU51nl2OewRl7DmT%2Fz%2FCZP%2FyjEZ2CFNkYhSiyBJm6BCVwFV5eyM1Vy%2BZJ3ZMHDx48eVInP4GkDHnncI6SM32qhy2TB2lrK7Yq%2FdFRfP89zpjP4y0JQKbVNPqQyiUYYOD0LdhisJW1GdNNd%2B%2BK2jFhMRZnIMMHPngR8PAQySQJlYwylN3FXWs3rQC4VXoRiPgz%2FNlv8JvfGn%2F7svHlRGPiNBdFB%2BfPx8svG%2F%2FiL4y%2F%2FrXxvfcQEKBzhV8B7ZoueXy7PVdmwB7s2Y%2F9Sp%2Fl8dFH%2BOMfVfY3uH5Ksz%2BpmdE%2B%2F1xmumVYRhLk67t6Y0FBWLcOGzdaGL%2F55hun7K%2Fi%2BvXrlIFvv%2F1Wa2RAhvWwken6kJIieJyUJkFmeZuOQxiyHtUox79xbLboRUQYIpXsVmCorTVIpKzNtCmJ%2Fa1oqalJCAB%2FzcjIEDVrB2R%2FNnO%2Ft1fMp%2BZbIhvZOcjRWi7h0lmcdcD%2BMm7i5mmcvjqdImyhHOWkfgfsL%2BMZnjHmRVy02iFVyp3LFwyfh%2BBgufcADyQog0EIykUuPWxOtVEWG7BhEzap0kTdFsxu8SC2BKC2VnhevSr3FmIhg2zExunxbbxkVZWYboIXvBZgQQIS3LkLO4cyIzERSUnw9VUNNaipRKXdXW5wZwdhCHsX7%2F4UP30Vr%2FIBFKtRJB3Wax3%2FXrKyISQEBw7gJz%2FBW28JRdcNoxrBHihFO7FzF3bxYkW%2Fvh5ffolPP0V1texgcPeizcVM3vvqKxw9KvfI%2Fnz9WMS6FK2gAIWFCAszWy5cuHDy5Emd7C%2Fj2rVrp06dKioqUi1xcVi5UgR3ExoSH8WoAwGwIQ%2BzJgCG2QjygjdxzfwZEIDAQLO7oa8PPT2YmLDKHE%2Fgd7YilZcLDjeD6ksNmDvX5rLWAkCZkZRGCw94pCI1XcM9Vai6jdt01XPw8xg7D3Tq8LyC4cto1hOzAhWUlkd4pD0IadMPfnAVublCACQ8x3NVANT7JvtTA2xOtWaaEISsw7r1Kkvx2VhLJlrXCsCc6cGuXUN%2BPlaskOmVQe7h3h3c6UOf1itq%2BsT2drS0YHQUfsrhyR3RiCY1w038r3ZHoqMRayamcYy3orUNbdZukdLvZTeX34M9B3FwBVZYWAcGhNS1tWFoCEYj5sxBQgIWL9a6bNiAsTE8e4avvzYbbWu3Les9W46k4%2B3YPg%2FzRIdLf%2FstjhxBQ4M8aqeqjTpOaVD%2FCO%2Fbt0WJLliALVsCEMAsKkXp1%2Fha%2F6UtXYrly83d3t7eK1eunD9%2F3tXLp2wsWbIkPz%2Ff1yTzy5aJAikudjUSRCZrSFzmd8qAPXfSCh2YTor4xcSIuWlpqKyE%2B%2FhXwf4Wb%2B0Mnp6imd2fk5eem4flELeBQ8BpG9PJ%2FtSA7ds1pvR0oQGtrVaeZAnyZhzizCZbAjAf8xOR6Atf1ULmLUOZzlP3MqmATOANh243hACgWvdl3sd9ykAGMlRLAhK41WoXYkBUHJM7JUXukf2ZgYODgxQANrmgkpBEDeBvPeqtZlsLwCqsWo3VlAGlz6K5cQMjI1Zuc2xupasLN2%2Fi1i2sWwdJSxiqGMVncMb5Mch5vb0qNYcilA0vAiKwOXIvep%2Fh2eyuwFOTcHmTFtazZ4WUMrWfPhVKQAEICUFyspDMLVu0MrBtG548EYzBGpBxyOYyKwFthQD%2Fry2vLGRtwiZuSemfOoXjx9UKsUUtFgXu7Q0PD4yPi%2F1OwzlpazfMhf7996JKSXkxMYUovI7rV3G1E516Lo0kmZ2NyEizpbS0tLi4eIB35SK6urpu3bp1586dwsJC2cIaycrCvHni7l2DzP7%2B%2FnKPpeWUNWQfRQDUCDMSALswSA9o1MXJLsADHlOYcmem0UZKuSFf3d2iUHhnzAoFzCtqwMWLVp5kfzZzv7NT5HZdnZUbn2Mu5motpMJa1Orf0g0dAnBFavpBorfaA%2FcZgxjXBCA3VwiACRLtPxAfGgEQXsilBjgRgAAErMCKlYJaJIyOsgpRUuLCbuh8544sAARDMSBZYBjDTiZSY7icCf7w94MfXgRYzAEB5mXFwiOzuwKpfz3WW5g%2B%2BwyHD%2BPcOWsppVhSMhsb8dZbKChQzevXi4tXBeBVeyvxoaJNkey4rMVa82bKygRHX7ok96ZVpplHWGuUpMREhIcrAkB1bm1FbS0ePsTYmOw1KDWo0YzDw7h2TRxk715almEZc%2B6c0AnnYB2bq13Cw4cP79%2B%2F794TcG55ebkqAJAEJjXVXQGQ0IIWknsNapwKANsWbLGIQN0dGsJsIFWcIzUe8eEIZ5nQMorRHvQ0oakSlS6RmoooRGUiMwlJ%2FAhEIAWAMXvRyyPzvOUo1zobtInywsDkpwaYU4LqTQ2YO1dkoQbWAkD2Z5uGCEREIlLtDmGoFa3d6HZpS7935vCfgf%2FiSsBBDPKGuQ1uT90nn9WFEIGBgv2pARIYjbRfhSp%2BV1eD1dPcjPh4McRKpAawGAc1NQsrAWDFLsfyIAQp%2FXv3cPcuBgdd2FBbm5jFp8vKYo%2BhGJBhr%2BGak4mTk6KZ4AlPNrwIiMDmyFOY4sKzGD4DGTnIoYybTefP48gRHDtme0JDAz79FH5%2BiI1FQoJsY1LzWcm%2FlIaZgNxDNTJXyJUruHhR%2FrTH%2FvPn46WXsGaNSKqUFISEKMN9fSKZqqpERhQV4fJlWAmAgtu3cecONm9GcDBXz0a2TgFISkJysrnb1NRUWVnZ2dnp3sEbGhqqqqp6e3tDQ0PV%2BAsWuBglLk5w98KFck9mdqeTutBFN%2FIQKVX0vb2RnS3iUOndgfmhspC1DutYUMyxBCSQLPzgR%2FsYxrhoIxq56G3cvoIrMgXoQQhCNmMzk4SPtRALmbcUANonMEFRaUYzReUu7hah6BZu2Q%2Fz55uBdHtjNj8V1AGn5a9%2FsBwghVADdu0S96cgPd2YkWHQCEAwgpnbydDkjR0BmIM5bGqXR3OV%2FV%2BQ5nEb3IwqANykmX71gFVKpiB7SCD7s6mDovNAEQAf%2BMgawKfUBrAQAA7TydznCzx0nvHW4JSyMlkAYFIe5wKgEwbXfF%2FQszkA05GFZO6Pj4vKpwY4QFcXzp1DZibee0%2B1ZWQgNXWmApCP%2FBVYoXRKS3H9OmprYZ%2F98%2FOxZw9eflkklRWoBGx81Q0bsHQpixGnTg0%2BeTJNACYmRNIxcwoLIxGZjvQkJNWj3vE%2Bg4JEmkZFmS2NjY0k8Zmc%2FcmTJ1QRVQAYf948F0OQtdlM0CkAqqciAGocNwVAwU7sfAWvkKxTkWo15AvfeeJw8wp56SikThzH8Qu44DQmhWQ3dm%2FH9vVYbzXkDW%2BKAdsyLNuADaxiJvY36B%2BzHekQ%2F78ha4DROr0OKX%2F%2F67RZdebBaQIwMqJogDkVWRJMu4sXVR%2ByP5t5ztOngv2bmqbvj0rpD3%2B1O4hBNv2Xb3TF0xWKEjsZwpC9fToHb4caoCxttCkA27fD01N0ZXq3KwAs1GxkM42UfkeHuM36eleOI4Hvxomjo7IuMeBiLNbDAs7xP7o849fAP%2BJHBWsmDnHmPgn30SMMDDiZdu8e7tzB1q2IjZUNCxYgMXFGO5mP%2BXzvNKQp%2FZIS3Lply1FJ79Wr8dZbeO01MxEzpZ7gCROUdBBliApNDGUVh%2F0Ee%2FciJYWUM3js%2FxgsHTYHUhT38WNUVgouApVwIYnD6dMLpomxsLS1tbW2ts7k%2BJzOINnZ2XLX1xfR0QgPR0%2BP7hAaAShHOTn9GZ7pmScLwA7sCEaw6CcliTjz59vkJodQyCQYB97Em%2Fuwz%2BkEqg4vPAIRPvA5jdOODoclb%2BGt1%2FAa%2FR3HZD6%2FjbdjERuILz4CxtWHNiPS4s%2F0sYgI%2FD8QzQJ1jtcl%2B5NLzAJAjaMGzJ0LU2JYCwBph80WvODlpeG6MYyx6XwD%2Feyv9dcpAxOYYFO7LDTtPp2Ap%2BftMK8kyOzfi151vL9f0YClS0U3HvEyIVSi0oYAZCCD2WOOXl0tytgNPH8uJlZVqcXDsOlIn6kAdLk5rwOIxo%2BHEISwabbdhfZ2XTN5aVQLkwDwb%2FTM9k3dZZErnbo6oTGSnNtMzZwcHDyIt98Wu5dxHudv43YtagcMA2QTUnR6YHpBUEEOcji6ZPFUzNeD0cPD3OMpq1g8BRcaH4ePzwIsSIRzHQsLE9SsRVdXV2dn50yO393d3WNJ9lyFTa8ALF4sEti0LZnTdS49hSnZfw3WKCZZS1wWABnbDuKglv2b0dyJTlKYJzxDEcob5gOpo37wI7OPY5xccBM3bUbkFFI%2F3eZjvtVQIxq70MXpjBmOcHp6wIP2zdhshHEI%2BNzZdplgW4BDQKHmNSTD30vfehmVZE4N6Osz5yTS04UGSALA7dkQACqG7S0ZDJrE5wNNYlLPHoxuPdiPBLJ%2Fbq7akwXAykUrAEQucqkBtgWAV0lxME9lGdfUuLkzTmQzCQDDMvhpnP6XvrAfA9RwbTVidBRjY7pmtrTImS3D1xehoQgIwPCwmzuxUHRWUlmZLS%2BR4RERePVV7NunVNoQhr7AF9%2Fhu8u43G%2FoV10XBhUUBs5bjZzVQNbgYMzg4M%2BBKKkdA3rNIY2C6ZqbkZw8D%2FPYnG41OFg0LfolzOQhOH1gYMBqlTlzdM9n9mZny5%2FP8IxsXoYy%2FavbFoDTpzE15eI5lgF79mKv3OGLlKK0GtXtaB%2FFKAUgAhHJSF6KpRuxcQ6U45Gyd2N3C1rqUEfP6UF3YicdrNj%2FEi6VoKQKVR3ooLr4wjcSkSlIYfB1WBeIwJfwUh9K%2BSonrOMdFj8t4q%2BZZREvJOCgNEb%2Bv6DaDfp5lXzOzF292tSnALBdvAiJr9hYbspQQ4MQgPZ2m3FI91rG5%2F3IquYU8nFclQGDbk8veHlpSJgSa9S5WliYEAA2CXxlUv0jPBKzzcsbKyuFAJBX5s4VfU6gBpzDuR70WAhADGL40nxvZSLTlBdaXw%2F3wImcbkIUohg8GtFMLPxbxxSmtKkGH8qBj66Zvb3o69MayP7%2B%2Fm4KAGub5UF2UPpMhMePYSc1t2zB9u2Ij1e6h3H4Y3x8BVesvGuCgthuAWwfDA5icJA1tFejAdWqa1ubKMXkZNYnU4sJ0IlOB7vlMXlYLUZGRobdlj5TBMJqFTZdoPbKlC1BZnOXVm9CE6fUoz4JSaJP8ZED3r%2FvShjBBUloI0d0o%2FsIjpzBmeu4bnWZZOrVWE3ifg2vJSJRNvLpN2MzReuwzM4aUCq2Yms2slXLAAbodgInruEaF9I6ByFoFVZVoIIixCrej%2BW2ZPmQYP9DWku80j9oMl%2FTaoBekP2pAWYBYI5SAEhmra2yAJhdyf5sdkA9Y1O7fvBj078NFyTLFfYnAhDArNTucxzjumaS%2BnNzYVBWI%2Fuz2XRkxrHJAqBqwEVclLuKACzAAjbzpOZmNDXh%2BXO4h2fP8OQJuroQGamN%2F%2F8HARC8iEGWjdKPikJsrNbhn%2B3NHB%2FHxIR23NMTXl5uboO8k4xkpcOnrKkRAmMNkdVpadiwAYWFiukCLhzHccH%2B0xEYiKCgSqqJSQBk8xogWmrfqp58%2Bm6FR8hEbI4FwJtC4W3uTkxMjI%2FrKwP7mJDgYBVH0LA%2FQRp1VQBgkg1FANSYrgmAQCxihzH8GT77FJ%2FeEuJrDbIG67kd7UYYf4FfhCJUtpO46V%2BEohZBzwpIfFSLdVinjUD2%2F2f8M9l%2FenA%2B8%2Ff4nnrGPfwEP5mP%2BT%2BxscdH%2FGeJeM3Y9C%2B9aGgQGtDaauYvZGQIDXBRAHgKipzanYM5wQh2aSc6NcDg4gFDEMKmdocwxKZrJgWAzQQLATDK%2B1D2KwYeYPt2RSzI%2FpxpLQDxiOfTmqO3MGdaXDyLJSghjGASgAQkMP5t3Lbrz1rVlKtUqt4z2oA9%2BPhoaYB6y4VnMTyZjqXIolX6qanIykJ4OHp6ZMOfQKUESxhZv39tYTG4vw3eNu9c6TQ2imYHK1di9Wrl%2BxmeXcZlFrzt1YOChAbIWxscNJoEgGAh%2Fhz4D2q%2Frw%2F9%2FfKnVYrbhIeHaJqbEMDMMD0IC8Cg80o1AlCLWvL4Uzx1dQOyAOzADiWTMzNFTFYE1dFFnMTJozhqk%2F1VVKCCyp2IxIM4qBqXYmkOcrQCwOJfjuVhCFMtfO7v8J1N9lfxGI%2B%2FxtdRiPoVfoUfFxUVQgPMAkD2z8hYeKmJ7E8eV4zV1YL9TSU2HUxsNrUbichoRLu6k73AUYcO77l%2BOl4pN6N2e9HL5nhKKf9nZyM3F0%2Bi8US2lZPku9E93VHE7JU04A6pXyBa0oBsZJehDKoAxCGOzTy3owNtbZgJOJ3NVEXW8adjYECwhgnU51CE4kUgNFQwkgn9gqj6ZzE8ubYOdaw6pU%2BxWbdOZOdnn6k%2BDbandsziNnjb8zBP6Tx9KvTYFqXHx2PZMixerHSp0DdxcxCDtoNSANhkkP0HLdzCtJ2hIdHkSQgKROAsHu2FIyVF5O085fZkHncjDK%2BANca5y7BMMcm6cvGiS3FqUHMJl9icepLEWdursIryL1sykZmO9NM4rfpkIYubULsDGChC0UU43xIPch7ns5G%2FBsvt%2BVgnmFH5Mdhw1CvwZH9qwJYtpj5TNj09dW79otZFZifWF5t9dKCjHe1q1xe%2BvCK2JjTp3EYKsNGZz3rgHjesMyKQgATuwRveqoWb7ESn41mHxMw8fJGnsT14YiNFD5mHKQCHFAEgODMPCWYB8IFPDGKoRea5XV2izQSdPIj5JAzOJbjQOMblbLB%2B%2F%2FZ2tLaqPTrzaqjwTFDMIubMQUICYmNVA2WqYzrzGtxfgZnIm92GbQEIUExr16KnBx4eOHVKfNguidkE5ZMXSOZV%2BrxbO3JO6l9iZgMwT%2B7irt24gYEOBMACo6OiSfCDH9uLPO5sQ6ZpCWMYc1sAYBKPGQrALXTeRK1OZz4fV1QFIBKRyUhmMsj0x4JaiIVJSNLukFPsSr4lrmGM3M%2FD%2BNsaXWt%2F4kwSvqNDaEBtrdBlBRkZi9JrzQJgNAqJcCgAT%2FHUiutTkUpp1C8Am6TmGOvE%2FbsgAGlI4za0lmY0c6uOZ51ELE6SzLNMhm5RuBKbWzua8OgRHjwSGRAjdTmT888J9oMH%2BxGIYKJYzCVPSVTlPrq7rSJwCS6kdg2mpqC%2BHjU1Wv%2FFWLwcy2e0h%2BlYvhzZ2VpDLWob0GBnT%2B5gGMPFKC5CkYV192788pf4zW%2BwaRMChDAYp8%2FsmLVT8p7NVz05KbScz2ENsYW0NFaT0q9BzSM8eoZndiWQ7E8NkDE4aHAgAM%2BfiybBG95ss3a2Fw1fX60AkB8p5yMYcS9YJSoZQSZfgZgYEZmXrhtPhADgvisrVqNaa4lHfBzi1O8EJGhHq1DFR9cZvFNogGjTcWG6yeigB5fKjPRerqHVeenpizIWRSFK6ZP62QYGHESgwjG961GvWnKQQ2H2gY%2BeDawENgpGcgJy%2BXpglb5DecFrKZZmw0xHHeioQ12nuGbHIG93AROm7sfA%2B9IHa%2FNvpJtmmwL%2BSjvn70DdMDPcv5OiSNsAwhDGZvYlZfT3w0F560FvL%2Fr6tAZ5lVa0WjkqidDTY7x%2FH%2FfuIS9PNqzF2gpUsHj4vJgVZGZi2zasXasaylH%2BAA86DZ2zE9%2BES7iUgYxEJFLhzdbVq5GVhfx8lJSIYz58aGxosK6DX0tNhtH9DYQgJBShSocPwWYLUVFISUF0tNJl8lEO7Qb18xMC4OWldIeGHGWI0SiaBA94sDnesEYvBLwkYGbwlKC1MK%2FZnEBmf39%2FuUf6ZpvJNuQIW7DFIn5lpc7pt6WmH13oakZzP%2FqDESxbosULK28cg5hYwQNmNKGpEY3645P9lwFbnfoZbdssWX8F8LKma7AXggLAtmuXyCRiUXz8ovRFmAu0SMOyADgDdY71noQkuRuBiDVYcx%2F3z%2BCM44lUmi3I3YR5eu5nPRLLsKwKt7vR7dhzIzauxupIRJqPiQo9YvyG8t%2BM00DfF3iD%2FL%2FLwv6F8p%2Fp7F9QUBAbK56%2BpaWluLh4YkLRD1Fm5As28zwW9gzZH1K1UZOHhxEQIBusV5kGQ1ERcnOxcKFxzhzZ%2F3W87gvfq7jKe6EwTgjRozTph1QF3t6IjBTsv24d9uxBsFIYk4bJy7h8Azcw2xjF6DEco9q9iTdTkGIeCA3Fzp3YsAEPHqC8HI94rEdGpnZzs8HGdUi%2FMe5sYA54g3OUDl%2BBzRbmzxdNBYmDdGA3KNk%2FMDAb%2BE%2FAW3CWJILzFdKXpMCJmo2NiaaZ7eHn5%2Bft7a2mqRtgBF9fXwer2IZM0BJa0UrurkY1ZgAbApCdjVOnhILqwC2puQRWCmVAFQDmoVp3oQgNR7jWswMdFF%2F9wfnkv3PqZHQ0Ypnqp%2B1HMTsODBhlDeDNMcIvqQEZi5AujY2P6xSAe7h3B3c2YINaGluxtQENvKtSlNqbxWvcj%2F2v4JUYfaVItx3Y0Y72T%2FHpMIbtueUhjzHNWSGB26MgOV3iEP8nA%2B%2BZb1Bc4heSfZlZAz6T%2F3zBwg366U9%2F%2BvLLLy9YsMBoNNbW1p46derDDz8cHR2FLACBCAxCkHmFkRFB3DMHg2gEgEtwIUf%2BjY04fhzh4YbXXyfX0GDEgt%2FgNyuxsha1Peh5jkrgH%2F6dCzs4hLeBDC%2FGREoK8vPh6SnMUmp9ja9P4mQVqmbhpHJMTd5zw5%2FgEyrBbuzOR76FJ49WWChaZ6dI3LIy6oGxtBT379uQgXZ39uIP%2FwAo166%2B5vTgsbGYO9fcbUMbKc9uUG47KIjUmC13HQsARZdNAvnFKcWQDK2CMWvnzJnT09MDdxEYGMggVqs4Yd24OEHQCxfKPZm7MTOQXxiEFJWJTOVmZI25eVPP9L8B%2Fi8XV%2BxHPzXffA%2Ba6uaHttL70NeLXpeCG2fsYbSVis5gKC%2BXBUBEXwQkpCfgojQis79zYScZD9%2FAjQIUkKBlC3P0AA4wOSkJl3Bp%2BpQMZGzDNgoAZ%2Bnf6yqsGsOYH%2FzO4qxNelmP9a%2Fi1dfwGn1U4zVcu4mb1GOn8dPkP9QAqcJUCU0zGMCWZv0Ia9eu3b1796ZNm5RDZWT4%2BPjU1dWdPXsWsgCQL9jMM3ibOi7UOagwmjgWrGQPV6%2BKM%2FT1YcuW5MWL3wQ%2BhycFgE2UkiRyrgjAb8XP60C0ycAA19Du035m%2FMw3%2BOYMzszCMVXIeW26%2B0pU%2FgF%2FaEFLNao3YEMc4qz9o6KwnsmwHlVVKCnBjRtGHp%2BZrgnmHnzhy6Z07L9mZKTYggxyQTe66Wp37aCg0KCgbFkAxscFYfPXHnx8RJNAFVTC2gcfvNeSiMLCwsLDw2ciAIwQEhJitUp%2Fv8M5MjWbQOIuQxlmDFlIFAFQV9EnAHCdMXnhbGqXmcDHsJEYEiey6Y88c%2FZ3WwPI%2FqyMwUFDUJBRMEC8aUAWAH24jMuLsTgVqWyyJQYxP8fP52P%2BMixjoFa08up4XZGIXIiFS7GUlbtIKI54xCX4yLEc%2FxnwJ7i9GgWcxch88bu4W4e6LnSNY5x0H4tYigoVYiu2BiNYndiO9gu4cAVX9F6HzPX6kJiYmJmZqbVkZ2cnJSXJ30IApGL1MY8%2Fpyg%2Bx8wxMaHlCG0iOsKVK4lPn26oqFhRUFCQn4%2B8vFnYiQkDvx0oWl50bfm1ixcv3iq9NYuRzVDfxSje9UN8yMRiHvDVmWQLsMDGlEXMsUVYsQI5OaAsnzjBezPOQAY84cmmdOy%2FZmioaDIoAL3odRQ0KGhJYGC2%2FE32Z3OAwEDRZF%2FJ2%2FGGu1giXRaW6OjomJiYmpoauIsoCVardHc7nKMRgApUsOYpipgxZAHYgR1KzbP2uMr8%2BWhq0hnBJcacwhSb2tUmg0VisEBFiU78yOzvngZMTgoNYFux4ifAfwLShJWZ5YoA8LCncGoe5v0p%2FjQCEbKRmboP%2B9ZhXTWqO9AxhjFveIcjnKWaiETZ5zEeP8cXwJfA39o7J48TAviLdpfKQaJna0BDIxp70MOlSYBRiKKuRCNaO5H1%2BR2%2B48bcTzaD8mNzZwYJWouHh4dqEQLgBS8v6cP0OEbRZg4%2B2pQ5Ea1XsYNCFO6u2b21ZmvulVzkA5%2FNwkZUzAn5u5dfKcpZWpSyaCTiG5w6NZvBrSHfsBG3cOs2bheggGlBgslCVjrSmQrW%2FguZGwuxYAFiYvDll%2BjpcbGmtCvzeU1Pbv81g4IwZ47y7Zymyf7UAJ0CEBamagt1xYm0AK2taGkRbOTtrVji4%2BPnkyJnAEaIi4tTu6T%2BtjaMjNifsHgxsrMRHi73ZNbGbIB0LEdbgzWKSVYa3QLgEixe3xJSKhjtdZ2msyNX1zPVVQ0oL6cARK1Yka2wPyGzv4ZknKISlV%2FhKx%2F4HMCBuZir2iMRyWZ7XZRzym7B%2Fs2Og%2FcBhwEffD6JyXxBXqCKsDmYMoIRBj%2BCIyUogVsYNYxStKaHHcWo%2FN3U1PT48eMYsor5JssbGxvlb8HI1hnDC3XlTu3Ckno8KDz8cQiy%2F3t473W8HopQ1ADVYiMlJaitFQX83OUd%2FB3%2Ffwkv6jnJlU%2Figb%2BiJS7O8LOfwd8f4%2BM4f34WDmrCNuAQsMrCZlAq7ZbxFpUgEYmZyExDGn%2FJAZQEb3hb%2BG%2FdiuBgcVUffojhYff2Ib2f6QXFrdu4dtr8%2FMyEyxxSM8YmkoKCKADxcsepAMTGIjpa%2FuxARyc6ne75yRM0NCA1VekmJycvXLjQ09NzcnLSjRsIDAxMSkpKTEzUxnfCtzIpS6BizaIAwCQn1gJw%2BrTOQnOJKH3hS4JTu8%2Fx%2FLmpdCaEyE6oQ8w96%2FRzTwOMbl6LDQ0IkXjUFmpqyFyLOzsXR0WZTGT%2FigpXF2UZ8hKe4dl2bC9AgQNP0ugVXDmDM3X4djcaHR9VPksb8BEq%2BvGHZjRvwIYwhDmI%2FxiPz%2BHcMRy7iIvuXSCVZghDSuUKFleucxjDtMvf165dS01NHR0dZTkYjcb6%2BvpTp05duXJFHhUCYMEXloFmEZIaOMqUeZi3C7sO4mCoMVS2sGiPHsXVq%2BKhOztF8rqIQ59KWR6FqAxkrMO6vdhLCpZfcf9%2BQ0cH6upEm%2BWD2qxZqXoaQeVtPI3TyUjOQc5yLF%2BFVeux3kIaV67EyIg48OHD7u1gXEjbuNJhjfv4TPex0gWnr0P2XxIYqHScCkBCAuKFWDALW9DShS6ne2Z5V1ebBcDf3z8rKys7O%2Fv%2B%2Fftu3EBmZmZ6errWUlvr8KFDQ7UCMLvsTzShiQHrUZ%2BEJNGnxsvL6Tidq6UYSPmD6aVAbhhVpZ2MxqYOBSCAzaXgBvfZ3jZsaMDfAX9h%2B9iTFdnPy7OxUeo8eyZ4oarKjUXv4i7TshKVK7GSz5CClBjEqFo4gIGneFqN6gd4cAM3LuDCNrWadKADeB%2FvV6GqFKV5yFuERfGID0e46sByaEBDOcopRZdwidtw%2BQAmimZ9keunj2vtfX1977%2F%2F%2Fr1792JiYthtaWm5ffv22NiYPCoE4Dmes5lnW3GD2%2FD0FM0E61WmYa1x7WZsVjWTDPPll%2FjoI8q%2B2zvo75f%2BdKObYssnIS3%2BEr8MRjCNvr7GjRtx5w55YfbVTkrsTioQ8I9mm8EsEJLu1F3BlTVYQ2rYgR2pSDV7cmdkxLIyPHrkxtoseHOd%2B%2FuLNg2Tk6Kp8IWvH%2FzsBeRQTnBKdnCcaYFRwST2EBsriJy%2F0jHJenr2%2FPixKOcdO8yWvLy85cuXuycAS5cuzcnJUbvUQ15kpYNC07A%2FUYay2RUAmERFEQB1RWen%2BytB6KxnFxAq1CxU7ZLOKNfydz%2F6%2B9Cn9VTL7V8QRptsP81Kms4uz55bMVcRAKYLm7toQ9tn%2BOwqrmYicwEWRCEqCEEkvjGM8Yo4ytQlR%2FP23It%2FGZev43o2srntuZjLe2YdQqpN0lETmshIbDO8OrL8kK3soFFrHxoaunz5ss0IQgBIi%2BNaifOmFnrPcGdKHC8vtWe9igqJEEMQQrXMR75qvnYNZ8%2FOhP2tUYGKszibhayd2ClbSBFsp04Ze3pkw4tQgmkwKEcmetDzHb6rRCUT7k28SUowuxUWoqjIPQFgwas1jzlzRJsGoxHDw4LGZXVggkYgwl7AVViVH5wfFBxknmw0nWE6cnORnS1%2FyrqrZ8%2Fd3XjwQHCkysNpaWlr1qy5K8Gl45P9CwsLU1JSVAtplsEdaJZWAFj5ZOpmNGNWwZjUFSo9q0v0MzPFipGR6OpyMGuV1M7rXsULXrGIjUa0%2BWLRzTSTv7vQ1YlOdYisR26i9pP19N4t8Cnw9uxejT4NIJkublkMlRBmJgAy%2BMrqQ%2FMeKADkqElM2t%2BmC6eYwMRdMHeV7PXjP0kAZvHeLIjeYBBNgj1hmA4P%2Fh8RpaEpDl9f%2BPnNwu4Yh80E61WMpiYhGcmpSNXOLitDaeks3pVAKUpZhFrLwoVISrKzpxcHy2SnAHyCT77BN9riRFaW4Ahb3O0UvehlUzphYQgPt%2BlG2TMpH%2BIQtwALKMPT85wcsdF749r%2FvBYBJhNFIyDA9tpca9Uq5Ash70c%2FWY%2B6q3PbJSUoLrawbN68edu2bZFkSd0ICwvbunXrxo0btcZbtxzmEqWCXDxvntzjntkw22BBWkfWqI49FEoCEKh7lSQkJSLRoMmwVrS2oU39bkGLlf9CLNR%2FikKp%2FXgwpaInPLOQRQ3AP0n9jg7B%2FvX1s7gUVZAEZZ%2F9ZwpS%2F%2ByyP6SkItc7EQaH8JC9BzFotrG2WeEzhyVNcAllT7Y4NhaxJBq129mJpib09c3udQlKakJTO9pVy9y5iImZ7vjiZcBSA5rRfB7ni1BkYU1MRHy8G7G70d2FLqVDDY6KIi9PP09LC5qbzd1c5K4SbGMhhcHG4L3GvTvGd4SGhtZdqcNr0igD2ro1ga1bQfINCuJnMYpLUDKOcZ3brqzEtWsWTB0fH7979%2B4DBw7M0SeEAQEBdN61a9f8%2BfNV440bKCpCY6P9aRoi5m5fkABgurRkZzsVgBBJAFbpXoIsmYY0raURjcx5%2BZtpVo96bbFnIEOwqj7kS%2Byf9CKuxhmWYmmOMSfQaJJCsj%2FbjwrjrDnNHAZKvGAQsv%2BQ0QbR2xOG6fCCRItsZhurVyrgmYJFq4nTJ%2FjcLqMHIzhEZLuC3l48e%2FZCru4ZnnEbMVD4KyQEwcGzEPYv%2BH%2BbqCctyHz%2FqDvCXdxlUu%2FFXrMpMhIREW5spgc9FLkRjPhDEvJ580Tr6bFyq60VnLtihdLdiI21qOUs6tAkJiGxwzZs24%2F9y7CsvX1t5fn%2Fknw%2BWbgmJSErS4iTVkCInTuxZw%2FWruVnG9qu4Mp1XHdp5xcvIjMTKSkIC1MsK1asGB8f9%2FHxOXHiRF1dnYO5CxYs2LlzJwWgsLBQNXZ14fx5XLoEa8lVQYHUCAAJugxlOovHVVSikvH5NEr6xcaKdRctQlWVg1mrkVWKNQ9xvwMdjuNHInI5luchT7XUoKYa1VrG5x6YZgUokLt0XoEVlOoGNDgO7g3vNVi0GtEv4mYcwSgvvYb7NBvLy390AXBBKAw%2F1lokerbp2iOEATaEYTqEAJAT2cw2aovMi%2F0aVXAV05jVehVL8I194KN2JyYwPv5CrmxcBDaHZvn7%2BMxC2EP8PzWF16aQpVgm4XkIno7mUA3NkgcyLyuc3B2OcMUUECCaW2gW3NycilTRSUggO6KszNLF8Pix8f59bNokmJzg%2Fb%2BLd6MRvQ7ruA2unYY0Fh5%2F6XzmTFT3949e7n1Zmc1pXOH778Wvl5dYIj8f27Zh3z55%2FBROfY%2FvtdSjBy0tOHlSqNV775mNa9euDQ8PT0pKun79%2Bv3792tra41Gc7Z7eHgkJyfn5OSQ97ds2ZKdna0ekP%2BPH8fp0%2BjstL%2BkzP7%2BklJKAsCGFwY5%2FhZssVjdoQAEI3grtjai8UN8OIUpB55024ANvvDVLleOcqsN3Md9VQAgCf9jPP4D%2FiCrvj28glcYPwEJL%2B5ybMIAw17s3YZt5qUfP8a9eyLxfjwYf%2BRT6wRZnlyvaA5526BIj1YYHEMIQDe6u9BlYQ4LE20mAhBOHgvXGjrRab3KvyEIJh8hh4%2BonD6OoDmY41KQ53huUYQeHvKLGlxPQPJFPeoVAVi4EKmpNt2KipCXh3ffVbrc8AEc2I3dfejzg18QgmQ7Sfm77zp9bpUUo3ilYaXYDaeRNJcvF%2BRKAYiNBZk3LU32P4Ij3%2BLbEpS4cZPXryMiAoGB2L%2FfbMySQIqvqKhoaGjo6uoa4VULiQyIjIxMTEzMzMzMz8%2BnGEjuShl89RW%2B%2BQbFxQ7XkylYQhvayI9VqHJj2zphWwCoUUOOynUFVjzDM6bHd%2FiOHzZ99mAPiXI1VqsWVhyf4C7uat1qUXsLtwpRuBiLZUsOcjiRfHEUR22yhgc8yP6v4bXt2P7ibgZYCQyHYDgQw9yGEUYqXyISl2Ip2Z%2FN7HjzJm7ffpE7UWGc4TTDC9hTpYhrQLWIrSX6Ss0fRRh0QAjAOMbb0U52jkSkYo6MRFQUGhvd3yYjsI5NoMZwiTGMvYAL%2BVeDvj48MxenD3zmYm4MYnhwnQHIv4EINPdHRzGm3NhfAr9zZS81qKlG9VZsFR0%2BREYGZcBYU2OZkYaSEuPx42J8xw6z1Rve5kwAqR%2BHDwsmjcZFKkoUolKQIgbS00WzRA96TuLkN%2FjmOI67fZFc0dMTExPYuxe%2BvmZ7gYTJycnu7u5RXg6oQf7h4eGe9DbjBPDz0dFjR492ctsnTjhcKS5O8C8FUoLMzniRYJVxiR%2FwQyYypbv2VjSApGYDfK5flAz%2FIn8kn%2BRLPU5Awg3c4PRWtMoeNKYhbSVWkiJ3YZd28mVcLkIRZcMq6DVcy0UuN0Bmly2cK6crgz%2FCIz6ibA9HOIMXoICKtRM7MYHGiUaS8ou5m0MUAHLXfxC%2FwxQAlkMc4rKQZbFiaSkuX0Z5%2BQt9Jrep32aU2ZUBXhOq5D%2FEsCoAwnBLapZ2x%2FCS%2FzCfWtBiLvvoaMTEzGibnK6J8BRPGX9W7%2BFfH9rb0damNZAuM5ChUwDiEc%2FyDkCA2UQ56e1Ve5OAp%2B698LZZyc1oZljRz8lBXh5qaqY5Gr76yujhgZ4erF2LRMvSvn8fRUU4e1ah0Q50HMbhSUxSV%2FKRb7FVafQBHpBBvsf313F9hnd59CgGBtDRgW3bkJZmMUS6j2Z%2B2sUrNTXRJ09GHz9%2B7MKFiunDFpWdnS3I1wRScxnK8IIhy4wiAIQjASC%2Bax%2BJeTIcw9xYgzWctRZrKe1MqhGMeMIzDGHJSM5DnqLKEv4%2F9toDOqosTRP8Qgh5B%2FLeIWSQBEgI4REpTEICiclM0lRm1XZXVZ%2Fp0zO1s3vOnO3d2RmmZ3dqtvv0ntM1VZ2T25llsysRJkF4I4yEcDJICCGHDPIS8t4gFPvd9yJevAiFQhECMqf66NOV9O5%2F%2F%2Bv%2B%2B%2F%2FfRxSh6CquUgBmrsjpV3AlAhFqwdiGbeR6Ll6LWqrUJCYd4UhC4OJUC%2B5On6HRodOjtV8hvPx1EaQRdilf%2F%2FNsLq2tuHAB1669sceR8Zovp32tGnBM9ytjRFJNyT5gYrdFAJrRzMZM1JmDKL1Br3RMTg8MVHry%2Bq92cZ95zvN7tW2tB%2BmqoQE9PfD2lg0pSFmP9cUoHsLQnLPXYd1KrDQyMd3b2%2Bd9HLJMKUp1ArBmDdauJZ1r29tn5KImK0tbVycoKCYGvr5YvBijo2Lzigo8eIC6OsOMalR%2Fjs%2FLUZ6EpFCEesLTDnbjGCdlNKKxAhWFKBzAwGsJZ06OSJqaGqFMPHtk5GyO%2FwE4IIKtx%2BfL1l7c71ul9cXLbNy6pdjNlLVMvhJ4eEaMF3kth59TAPZgjwc8RJ8X4xlCQ8VtzaBzbOzst2Pen%2BJTb3gvxdId2ME2jWlZAJzgNHMOn%2Bk0Tp%2FH%2BdnOcAEXfOHrBjfyvmKUal5UPdn%2FBV44wGExFiujU5g6NXrq9Kh3%2BZsO0Gxoa0NWFs6ceZWimAtvQNdU674%2BGfgbqZmAdfdvpWYDdALA6m1Ag8EcQt4IEUzw4sV8jufoKBI6RKIeCVycW7zytX8J%2FMq2Gf%2F4ynvaBFImq3ubrqhYYzuxswUtf8QfX%2BKlhXlbsGU3dm%2FERoOJBEzy6%2Byc91ke4iG1JwMZrHNoNNi4EUVFLCGtmUTUFBVpObiUBLNUPPvYGDo6MD5uZtk%2B9J3FWTaShTvcZQGgsR%2F9rz2c1WSyahQUIDUViYlYtkykFSXKwwMODsJhYkIzOBj4%2FHlXa8uBXY278Az4Of4e%2BH%2FJqj%2F5Cfz8RMvOpp%2BZyuaKZF5eWILMy6%2F9CjNB7pb32oRNOpOsQ2YEQLzV2FjZsbFjWmjfxbtRiJIHGHZXuJpdvwQl3%2BLbLGR1oMPCMehA%2FeDbMfFMhkj9bGpLF7qykX1i9ETe6J%2B9MZp8CAQA%2FsAiM4P37%2BPqVZw%2BjdLSN7I53iD7Gz3nm97DRugEgLlSh7pudPvAR%2FTJFxERYBWRg%2BYBzg0PV3pcth71ltPRatgSwzf%2BoDNQXCzoasMGIYESyL8TmGCt3sCNGpgJZiACSQQswvfxvtFAYSFKSl7lLCMYuYd7d3GXIiT669fjyRPxoOaXFVHt7dX29lqxtPQCbfz5TiLMSLAFBSEqCsHB8PGBu7ssAJrJSQwOtnd3fznd0t3d2P1u67tu%2F9WNpxJZ4uqKjz%2BWNUBLDZhJrzLtShjAwHcmAMRjPDYjAJcuYXp6hq%2BWYtw4pvkSQ61o3YZta7HWF75ml6UDnzsHOedxXryORYxh7Df4TQ96GtG4GZtXYIVZtyEMFaEoF7mXcfnBaLt2dPSNReVvJAGQNOB0APz94eKC8XF0duLpUxQV4dYt8f2mUCwpkEXMMt4mNeu3SbXCrd%2FM1xuBvfJFeqpGtU4AiOho0eYnAPJcPbisWe5Tww52bEr35UvR3gSkhQ1Li13tXt%2FqXV0iTVeswN69im0XdoUgJAUp5ShvQlM%2F%2Bl%2FgxWIs9oBHEIJiEZuGtI3YaLQOw8517tx5xePkIz8VqWSXAFFXwO7dggc7O7VtbbOoqMa2DRT3N68EbaS0ttmOOgWc7BLR7zqAAxGIMJxo%2B3b4kjB9QQ14KCq4CFjDf15eagGQGVn73QgawDTgdg1oiESk6Ht46A5TWoq%2Fk11%2BoziTccfG%2FrYC%2F64WtQ%2FxkInEnAlF6FIsdYGLBhpSeTe6yeMVqKBWUvWtPMY0ps%2FgTCUqH%2BBBEpJYtP7wd4Mb1xzHeB%2F6qCis3FKUck12%2F3bU5%2B%2B6R%2FUnVGGv%2BfUrbYtKtvgzqMH%2F44%2BAAKHczs6YmEB3N%2Brr0dv7Jh9kH3B0DpdZxtvmnmlms3OwbrfP3%2BSlJRgEgHnABDIwUUwMYmNx6dJ8Vl2%2BXExXrVw5VzIwlZ3hrHTHxoT2vwmwWkZFTenAHHNxea0bXL6M0FAsXYoNGxTbCqEJK57jOStqAANTmLKHPQWA9RaMYNMVOjpw5oyIvPZV%2BWgEIznIIV98hs9EPzgYBw9icBBff61lXdnI9%2FJpmPH%2FBfiVyZjmO5IBC0KVi1zyoKwB1FTDwMqVgk3YsrPvXL6cBYjMkgk3X%2BdCOmb7zk4v70jVaZUFgAjRC4Ao%2Fd%2BoPcfYKHBwmcToTdxkC0MY02YJlrBkZAHoRW8LWprRPI%2BTVKOazRveFE5KpStcZQFgorajvQ51si6ySo6OjvLXzBJFZmz%2FML%2B4MOeZ%2F2zfKc7Ne%2FzcmzmQiN6x7%2BLmBgFoQIOUka06SmLBxMcjMhINDbYtGREhJvr6yr02tHHZetRbnsRs9oKX0u3vF%2B1NQFrYsLSXF5Ysed17nDiBxYsxMYFt29RmiYT85phbW4vTp5GVhZoam%2FZklWrNEXABCiIRyTfNRKbor1qFyUnY2eHUKTQ2aq3WAGXpICAWCKBOid5qIAPgNfeL3nckA7Me%2BQmeUABkGdiDPYaBwED85Cc3%2FPyy2LKzKwYGsDgZf5%2BsH2aGl82PPecNCsAvhOTsBhZLhgSKEnx8IITZQLIvJQGYNJ7bhCa213ueHvSwWXAQZxodU5%2FNgOOmhmvzPcYA8G%2Bl9j8Uzlki%2Bi%2Bk9iZw7DsQAXt1pxSlD%2FFQJwBEUhKSk20WAM5KTFR6JSjhskYOw4CbkcEf%2FkEIcoKTYunowPPnr3Ct%2FwD8jfmR53jeIXOXBAcHQQ4BAWJHY3RLf8lut2zenRLz29%2Bir48Mi61bhYjqSes%2FAkf1XlnSd5VCmGSlu3dx%2FTouXEBV1dy7ODnB0VHpvcCLKUyZdcxGtje8PeCRhjTRX7sWLi7w9salS8jPV%2BjaghKYUDoFIC4srKNpm579wyUXjelCb1wJzIDv%2ByW%2BlGXgAA7w1rL94pVFWdmHjh%2F3HR%2F3vY4zuE721%2Be5IOKy7%2FicIxi5rts3VW9LEhqAG78CfvU9RM4aaKWcPWqF57VXUIEFfHcwEoBiFBehKAMZ7nAX%2FVWrsHo1cnIwMmLteiTUlSuFbEgYxnAhCrmskU8lZCJSEIvYaEQr3RcvhOiQPOeJaUsp2ojGBjSMY1zRm2XLEBs7UwAUCr4l0ZyNGB3FN98IHi8q0jCG8fGIiBA6Y2dn6tnTo2lqwtOnKCvTFhQgLw8TE3Ov7%2BUlhMvTUzEMYYjNrC8vewInHCHUQqcBVOigIERHiw%2BqTpmgP2vpOigoLi0tNmDLrS8YlhTVwN8DOcAlg0FWgtcsA5o5xrV8%2F%2BnTOE0BoAxQA5hap08jK0s0YDPgJx31p1L7fnFCagtYwPcGIwEYxegDPLiP%2BzuwQ%2FSdnbFmDdLScOuWtevRPzUVbm5yj0txwREY68cMAUhBSjKSle7jx6isFDLwJkB2qERlOcrXYI1sSUpCSgpyc00cq1Tf2rl5ZwbEhJIS0agwy5cjLAx%2BfoKy%2FxcG56f4LTk7CwNP0dWFlhbU1aGiQiPd2RxhRkDTCK1%2BZPFibN8utFmFTnSS72Y7DIe%2BxteTmKRIvIW3hGnpUhw5IhbZuBGlpdxdnIEnoXTNhKMjgoMRHo6YGKxYEZaSElu43sdnUXc3x3ol3me7BjyzwNhl8r8p5WsemJv9FdzGbd66W9u9MuvdrKx1Z84oI7FYwAIWIMHepH8P9%2B7gThrSvOAl%2BunpWL8e9%2B5hYsKq9eifpmP3AQzkI%2F8u7pr6UAAGAQ9dLxOZW7AlGMHKeEEBiovneyGteQZV4yEeFqBAEYCgIGzeLFQnJ0dx6TEWAOtpR8CUpWprRZPxH3ltSQCOUgAYh3%2FGlOlGGjNr%2Fnv8H43oeo7xcdjZiRNv2CA0QA9KbD3qG9Fo4ZBkw1%2Fj193obkHLTuwMQICwUpnY3n4b1dVoaEBrK0jqAwNio6kpsZezMzw84O0tNqWGRUcLGSCJDiI2lr539dSfP2eUeGPB%2Fkfn967zQdV41ZdZX6ZldV26RKXa%2B91tvIAF%2FInAVAAGMZiHvNVY%2FS7eFX0fH2zahKIiXLumdnsOOAPuJpPpuXEjgnVUfgu3uBQXNN2zUmrp4nMd1h3EwbfxtjJ4%2BzZu3TIQ5kxoZzKsjSBX5iI3EYkUHtmye7egvuFh3L8vG6pmCMCs26qZ2oqDDUoNFrl6pgz8OfACR3t0AuDrK3hZhSIUPcKjaUxbXnMMY1nIakBDFaq2Yut6rPeQdZivzMa3IxiFwUGDADg5CQHw0Mu1HrGxz%2BLibty5c00SgG5rwn5a9ztvzBVdEx3uB46jO6v70o2vpBN2AQeAJVjAAhagh%2F1M003cTEJSAhJiECP6W7fi0SOUl6O9XfEhgTvpOFwPT09kZGCLjlKf4ukN3KAGmNlTEgDvdO%2FN2LwHew7jsDN0dFZRgbNncfnyHIdmpR82tYVITY1vv519hSu4EoYw0h6vyS5Z7uOP4eCAgADk5aG3VwjAIQ5kAEstneSU%2FsM6TdKa%2BbQ4UzW4GL4BWGTGpxnN13H9Du5YdQSgAAXlKC9G8VqsTUEKhVD30DLc3ESbBZSQalQ%2FxuPC6MLi2NvwKhU8awNOSM1GZrcSlpbJltqfvZ6NFrCAfymwN2u9hmvLsTwa0Xawg6srtm9HdTV%2B9zvFgRzuaCIAO3ciMxO%2BvvycxvRVXOUiWjXl6ZFWg9jKHyT2J6Z7pWcIitXh8WMcP46TJzEwMPe5ybyPDT1S%2F1Hj8ZOWBWAAAydx0glOH%2BADqh0tS5fipz9FTAzS0%2FvKy6uq%2F7lOt%2BK%2FmVUDkqwNstaqQUv8NQa9RpqgEpVncfYMzvSi19rjAKMY5QPlInclVspKH4GIIAT5wtcLXq5wdYQjn%2F4lXk5gYghDXLwTnS1oaUADpf0JnrAhFqI9wAIWsIA%2FUZgXANLKJVwKR%2Fhe7BX9tDTs2YOWFly%2Fzl4nUAUshqAcHTeuXy8cMnRsfhEXOZ2LmF38fydvVA7EV24RsyRMTyMnBxcu4PRpNDdbe%2FSkmZ9a5d%2FJOac%2Fw7Pf4XeDGHwH72zHdiF1wLZtyHCsrLxTVa1eP2ne4a3Qy6VRcC35Jpgd%2BzkHShHjD38XuFBWScod6KhCVQEKKLS1qJ3H4UjunM7mDGe%2BdSACfeDjCU8TARjGcB%2F6KACtaG1Eo2H%2BggAsYAF%2F4rCfbeACLoQghKSQilTR37cPz5%2BjtxclJZUSidlLlLWJQwkJOHgQ%2B%2FfLE4tRfB7nOX22lQ%2Fwt5LqUEkBePECxcW4exe3buHqVUxMzOsSu6VmO5rR%2FAW%2BaEBDOco3YANvuhiLNVVVCWxm3LU2Lv8BcNTUVmnGZjrp%2BEzrz88i4TEifeFLsqYAjGCEjFyHumpUzytkRhjDGLWEzbZpZP84wA0YfvUjLGABC%2FgeYG9hLBvZPvDxglc0ouHsjMOHMTKCqanKx49lAeDfTfHx%2BPBDvPceli7llHrUn8ZpTrS861htbV1lZc23vRUVS0tK8OABWlutPXGL%2FK%2F19dx%2FAhPncK4EJXdwZzVWJ%2FQnxFRVRdfWuigbqfa0EcettFmBqTKUsVnlq3k9kVnAAhbwLx6WBKADHSdx0hWun%2BLTEIQgMBAff9xhZ1d16lQzORuoSE9%2FfvCg3wcfIDKS3Va0HsfxUzjFiRaW%2FQ1QB9RWVtberKyq2khNsQlHZfY%2F%2Bjqj0IIWtsu4HF8Zv6wqKBqIAu7pBv%2FwGjf6T1KbD%2F4vqS1gAQtYwOuDveXhalQfwzE72B3BkQhEIDS0cs3%2FVHnNE1gCOFZ47q9I3%2B8X6UPPRjRmIYvOVaiyvOb%2FLQkALlQCbBttPfFXut%2FXj1GMFlcVs%2FGbgtYgbLektoAFLGAB%2FwKhgXZupwQkvIf3DuDAaqz%2Bx3%2FEz3%2F%2BsqXlNOASErLnr%2F8af%2FmXKEXpGZw5iZNP8MSaPRewgAUsYAHfOxbh6NxOXeh6iqdDGHrR%2FqLoTFBOjrMQBcQMDiIqavDFqstZ7llZyKpDnVV7%2Fqfv%2B9ILWMACFrAAwN5Kvza0fYEvaiprFlWWAVuArZI5r6KCLfdG0I3v%2ByILWMACFrAA22Bvk%2FfNyptelSWA3Ii8koq8voo%2BbP%2B%2B77GABSxgAQuwEXbQAP8rMKSy3QIyIOwz21%2Bhv7UfyJbmsGX3dfThZ7M4z9asw78HpgCt1NqBv9DbqTX5ejtbD%2FCvbb611lx704gHfqXfaxD4L0Cg5QO9ufbm8AbP%2FIrzR4F%2F9yd36Fnbn85Jv%2B%2F23eO7u9dW4Kax9XPA36bD2gM%2F%2B5kZeymQO%2Bfkf5jt%2FhZZPhKR4Qj3gY8LXOxgN47xfvS3o70OdcMYllz8HBzg4oVFplOf4yNIErDCyDwN%2FDcr7%2FsPNkUnMTExMjLSx8fH0dFxampqYGCgpaWloqKCH7AZ26Um4zqQI%2Bma1QgLQ0QEfH3h7g57e7x8iaEhdHaivh6trXitCA0NDQsL8%2FX1dXd358VpmZiYGBoa6urqampqam5unv%2FSQUEID4efHzw8IK2MyUlxke5ucQve5fVBA40%2F%2FJdgiRvcnOBkL1JdlIs53LSwTjCCwxDmBz8PeDhCigYmBjH4HM%2Bb0NSKVwq%2Bv78uGEz46WmMjaG3V0SCH%2FOHjw9CQuDtDTc3LF4sUoXL9fejvR2Nja8YVVe4RiAiAAFLsZTfjKoWWgZkCEPd6G5DWwMa8JrAmIcghH894UmuWIRF8l5kiR70kDGe4dkUpl7XdhERESEhISx2k7Tv7u5ua2urf63JyRgyr7zh7Q53Jidz9SVejmKUTNiJTuZVL3otr%2FBv%2BLtFi1UmEjf9Daa7%2BP8XokPu2rp1Ky%2FFb1Zubm5u44wEYFUcJc%2F%2Bn0bGUqnNgSVmrRYldz3Wr8XaJCRRA%2FiuTCBZAPrQ14KWGtSUoOQO7vBpXVz%2B0fmvIZWbgkfAF5IAEO8bNIDsf9TKsC%2Bx%2FoVSU1MzMjL4d9myZX5%2Bfk5OThSAvr6%2BZ8%2BelZWV5efnX7lyZZolOwOrzMeO1J8JLJe%2BqyT2v2H9UbBuHZKSEB0tCINsQQGYmsLgoCjp2lqUlODuXVRU4JWxadMmXjk%2BPp7F4O%2Fv7%2BHhoVTC4OBgZ2cnr19ZWfnw4UNGQKvVWruuRoMNG7B6NeLjmZXiFp6ecHISQxMTQgC6ukBdqanBo0d48ECw4HxB0o9DXDSiQxHKb%2FKUXGOkqgs2CsBGbExBSjzima5cijQkCwAzlgLQgQ4SUAUqilF8D%2FdsOiR1nK%2B6YoUIRkCATg2ZTaOj6OkRkaiuRmkpyspsvHx6ughybCzCwsQe7u4GAWBI29rw9KlY9P599PXZGthkJK%2FCKsY2ClGBCCR5UVllAWBAKABd6GIV16HuCZ4wJvye3wvyvdZgTSISYxBD6WXkveDlDOeZYlOP%2BkpUlqKU1IH5IiAggDmfmJgYExMTGhrKYjdJ%2B66urpaWltra2vLycmY%2Bv%2Be9F3OSGbUCK5ifFABf%2BHrAg0lFGqSSUQDIhHJeVaO6DGWFKKQwmF1KcB4zZv80UgzGfxYmiZR%2BASrZp59%2B%2Bv7778fFxdFQUVHB233%2B%2Bee9xsVFAfDiP2qAuy030cw0WWQD0v0%2B7NuJnSwq3tysD6%2FKC6ci9SIu1jr%2FpYuLFj9VBjskAVDDS%2Fe%2Fd%2F5Hng179%2B49ePDgrl27goONjsouE2XHjh0rV66krh47dmyI5GWMfy2xO1uXap4kANv1XXncCjg74%2BBBvP02Nm9GRIQZB6rCzp2oqhJ0cvEizp3DfBEdHb1nz55t27atW7cuMDDQgmd7e%2FuDBw9Wr1598eJFVsXcSyckiENu2YK0NISEWPIcGMDDh8jPx7VruH3b1iuQm9Zi7WqsTkCCzB2LRF7rMAZcsHqp5Vj%2BNt7eiq3pSJ8tXWWQ5h7gwS3cuozLtbAiGsCuXcjIEFydnAxvb%2FM%2BlZUoLEReHq5eFXpgxYmXi3UZ5DVrzKeKOsKM7ZUruHvXymhQAjOQsQEbSF6MrWXnYQyTuQpQcBu3r%2BEayRq24C28tQVbGPaVWEmZsew8iclylFNs7uDOdVy3VXJcXV0zMzM3b968du1aVrSnp6elew0Pl5WVFRQU5OfnX79%2Bvb%2B%2F36a9lmBJJjI3Y3Ma0pKQRO207N%2BAhhKU3Mf9POQxwcwtSMqlIGqlLx2mFQEAWKEsZ%2FKV3E1OTu7p6WHl5uQYkY%2B9TdfAbDxqkf1Zih%2Fho8M4zMtbcGO5rsM6ZlsQgrJc3J2dNXMvjdfP%2FuT9Tz755MMPP1QsHR0dJHpHR0eSvp2dHT%2FeeecdDw8PrVb75Zdfmkz%2FM8FEojHMeg6T2d9V%2Br4uteq5z%2BHoiE8%2FxZEjeOutOTyp8GxkbVdXHDs2j%2BgwOXjfAwcOxMfHz%2BlMeZA9g4KCKIGlpaWWvLdtExq2Zw8VZu5zsALpv2oVoqLg64tvv7Xy%2FD7w2YEdMkklInEeEVCDSfge3tuHfZSBOZ1DhKaFrMCKUISexMlCFFpwXroUhw9j3z7s2AEnJ0vL8h3YqBCRkTh1CiUlFg%2Bxfr1Yd%2B9exMZaFeGVKxEWBi8vXLw45wX3Yu9u7CZ5xSLWmuiR2vgKbGTwaERnI7sGNdZMJN3vx37qLjXAAx7WTHGAAzWJLRWpPN45nLuHe7AOTOC9e%2Ffu3LmTLLlo0aK57%2BXmtkFCSkpKXFzc%2BfPnHz16ZOVezEn5ahQAK6dEipePXI%2F1yUhehmUMI5XV1Emw%2FbTaIAmCjjC9vb1ZqupRFqyPj4%2FJGrYJgBkenYufveF9BEc%2BxacskpmjfeijjPMhl%2BiFzBOen%2BEzjbPGxWUUuCXt%2BYoaYAP7x8TEkNwPs5wkVFdXU%2B2fPHlCwXdycoqKitq8efOWLVs4xI%2B%2Bvr6mpqarV6%2BaLLJBrwFCBiLXNjSQ%2FVOlkTZJF3KsOsq77%2BL9943YvwyMVROaRjHKw%2FB13d3djfyZDQMDuHTJpujwUkeOHPnss8%2BCg4PV9omJifb29uFhkXbMfmaPg4ODMhobG%2Fvpp59SAulQW1trfunt2%2FHJJ%2FjgA7i4qM0jGOlEJ2%2FBZHWBC%2Bmbj24YXrJEzOKUly%2BRnT3n%2BVkhrC6SFEkHrwxSySf45CN8xLxV21%2B8eNHW1jY0NMRvan9ISIidnZ0ySgWmvyMcpzBVAvNsTe79wQ%2Fw0UdYt87M6PT0tFa%2FoMJGlEJ%2Ff13wZtWAtWt16y7RVdDcoBD96EdYvBjj47hxYzYvXudDfHgIhxheM8Okmv5%2BTE6Cx%2BYRXV1NxrdhG6VxKZZ%2Bg2%2FKmLsWEYUo7nUYh8nmZoaZCYODFvbirAhE%2BMLXFa45VtRXenr6%2B%2B%2B%2Ff%2BDAgejoaNgIlj9LJiAg4MSJE3l5eXP6r8EaphOvFo5wM8MjIxgdFZVrbw%2BWs6rEIIniD%2FCDUISSHv%2BIP%2Fai1%2FQJtEbcKAmCThJYmGQt9Si7cjmrYa0AmCdRK5h5H%2FYxh0zYvx71RSh6iqdd6JrABFONLBCNaD4klZwOh1wO5bnwtt1AOV4JGpu8qfDbtm1bzNoAnj59%2Btvf%2Fvbbb7%2BtqamRR5csWVJVVUVm3LFjB7uZmZmlpaV37twZ4SsaYynwARDv4RH30facku05OWQQSNR%2FHTOVfCYSEsAtSKAqXD96%2FQ7u1KJ2GMPOzs5hYWFr1qzZtWsX2Vkf63149gzl5Whutv7Ke%2FbsYSWo2b%2Bzs%2FP27dtlZWXNzc0K5YWGhiYlJTH7%2Ffz8ZDdKAidSJH75y1%2BSv0zXTU3Fe%2B%2Fh44%2FVOV2Fqgd4wL9taKMM0EIB8IPfMixjnbAZph88KPilrQ2FhRYOvw7rjuAIq4tFYjrGIDAa7e3o7RVlJj2AZfjDn2T3Ht5Ts39vby%2Fr%2FNGjR42NjYOkIcDLyysiIiIlJSUjI8NFr21kn%2Ffxfh%2F6WtDCrJ65OC9EKTRh%2F8ePH5eXlzPOrEztokVgbOPi6PSfnZ1lh8BAHDkijt%2FTg6amGYtyeP9%2BvP%2B%2BCfvLxfUcz8cxbg97sjAjnIY0JzgZHaizE%2FX1IkozoIHmY3xMLcxEptHA2BgePkRVFVpa0NeHiQlBymRkHx9ERCAxUaSuHjGIIX%2BRkij2zNvZwh6MYFIkPamjRgO886NHrEORBorYyHuFh2PFCrGdHrzjZ%2FjMDna8cj7yLbwyq%2BaTTz75%2BOOPvb2NNL67u%2FvJkyd8ZX6MkpQBVpmPjw8LLSEhwZ9SrAfl%2F0c%2F%2BpGjoyPTPj%2Ff0l68EfOTV2OSGw2UlaGiQrxod7d4XZYPOYcCEBCAqCgkJyPUkM9bsZUM%2BRIvv8SXL6BKY8H2RnWnFgDe5d69e0xU%2BeSsUx6VyWZywrkFYFYGtYL912P9LuxilaqNl3H5Ei7xkSpQwdeSjbwhg5WO9J3YeQAHXF1c453fBX6G%2BUNj6wTyOzkuUZ9VOTk5Z86cUdif6OvrO378OBmQCUHGdHV1XblyJb8LZyGppMzMuO3b4zcFxMfj2rXCx48pAIVWHYVkuH692pCtyf4j%2Fsi4DWFIdz2NZuvWrW1tbT%2F84Q9J0MJkby9m5eVZLwBcgTKWoCpa5s2JEyeuXLnCS718%2BVKx29vbp6WlcfS9995bsUIn53FxvN92stjNmzeN1qUmvf224CYV%2B1%2FABbZc5PLdTY4RichN2LQP%2B8ihBuuuXaisFHSjOoYaqUiVSYrFbzRw7x6Ki3kTwW6trYJHhoetEYAMZDD9AhCgWKj3p06dYjQKCgoo%2FIqdT79%2B%2FXqOMhokCNkYhCBO5%2B1O4MSMOOOdd7Bxo8FCZc3OzmaOFRcXNzQ0jJAFNBpB6CtXIiPjP1PLmTQ6oRWBJN9%2B8YWZ98OOHfD1VQz1qD%2BP87dx%2BwmedKBjDGMUALJPPOK3YAsrazmW61wpXdu2oaTErAAcxEG%2BhSn7372LGzfw4IGIbWOjEfvwxaOjsXo1tmzB7t2CyCSEIOQQDnWj%2B3N8rhS7GjweT8W9TNn%2FyhXk5gr5l8XGJLvIkgzUpk3YuVMIjwQHOBzG4R70tKK1AQ1mnzgqKurw4cNHjhxRsz%2BDf%2B3atbt371Lm6%2BvrOzs7ZQGgurPYIyMjk5OT161bx0pZulSXaW5ublyEE3t7eysqTPNZOc87eIeRNGJ%2FRvvyZVA2qAHMT767GnzK5cuRmqrLGEdH2UwKHcQgH%2FQ0ThucZwiAFlqtnpeZVN988w15P1TSkqamphs3bjyb8daWBMASg1rB%2FhpoWNUsKrWR2fk1vj6FU1OYUtsnMPFIyP2jRjSS437o%2FsMIj4i593h97A9J2MPDw%2BXvxsbGkpISVriJz%2BTkJJmRlEcBYJfJwfpXC4BGiQ0LePv2xdu27RZEOewTl9Odk9NOCeid6xzMb87VkyxRhrJzOHccx41eQKu9devW9PR0YGAgaUhnJZXHxFgbI42Gab2JVaQH5YQK97vf%2FY7XN3Gempq6d%2B8eHbjjT3%2F6U%2Fn6xMaNG2nPy8tTqwU2bBBEQDrT4yIu%2Fh6%2FN7mCApYrG1PcBS6sGZ2VzJeeLoqhoGDmlDCEySRlxP7V1bh6VRAHScqENeYCq3Qt1rLSFEtra%2BuxY8f%2B8Ic%2FkBRMnFn55O6Ojg7e%2Bsc%2F%2FvGSJUt098aGe7h3C7e60KU4u7qKcs5UcenY2NjXX3%2FNxRk39YvyAUTjLfr68NlnigYkJzOVUF6OO3dUhyBZpKVh7VrF0IzmP%2BAPWciqRKX6tMMYpjBUo5p68Bf4C4PCka%2FZyEfd3Wr%2FNKRRjHdjt9Gdv%2F0Wp0%2FPdNbvMSyV7yM8foz2dnzyCfSlRGZ%2FG2%2FXoIbyP3PeLuzii6%2FESnV0cOwYzpwRTzk%2Bbn4vsidbaSmJDR9%2BiMREecQTntzrKZ7%2BE%2F5p5jwm%2FJ49e%2Fbv309aV4zkRGr8xYsX5WpS%2Bw9JqKur41uzTJ4%2BfXro0KG4OJ1QeXh4cCkmCamWDzpzu83Y%2FBbeika0wVRTg6%2B%2FFmHkW5pFFxOnSzxzZSWeP8cPfiDYQMJO7KxFLXWdkTQkjNaIiCVBMFyhQIKPjw%2B%2Fu82%2BGmBn%2FhwWGFRrFfsTqUhlJhmyDShBSTaymaAm7K%2FGFVw5gRN0w%2Fyhmd80Ly8vReGpnC2zMAi1lKPyt7e3t1L8pmDFs2olPIrMyflJTvtfteOvBEnMAXJrWJjaUIzifOSb9b19%2B3ZpaenExISu7%2BEBf38laSwjOTl51apVcn7IuHHjBithJvsr4NCFCxeuX7%2BuWBgxLsKljPxWrRLcpAcLkgLAZ7V8nvM4fxM3O9BhMCUlQV9vJtiDPSQpdXYhPx9ffIFf%2FhKnTtnK%2FpB4KhGJagujcf78%2BZnsr6C8vPzs2bNkB7WRi8QjXm1hJChk6jQ5d%2B7cyZMnjdhfjfp6TVaWYMD%2BfsW2ebNQVSNQ6Y2Dcw3XTuO0CfsrIH3wFShORtblyxGtYijAGc6ZyCTdGLmR%2Ff%2FwB0Fes%2FCIAcXF%2BOMfhb%2BKuzOQQTb0ha%2BJbyhCSZGme%2FHu3OvsWfPsrwbFhp7Hj6ufOwlJm7ApGckz3d96660dO3YkJCQolubmZirxr3%2F9a761CfubID8%2F%2F6uvvqJzTY2ef4GoqCguyGXNTklBSjrSDf3JSXEpatts7K%2FGtWv45huRAyowhuux3tAXbG90ZhMBkNEtYbZ97OY%2BihpaG3xXYIWRsAO5yL2Kq3NOZJrSrRrVmA%2Fmx%2F49%2FF0sQe6Pj4%2BPjo6adeWQQriOEsw4kfrZWF1AFapykHMDN%2FiAQgDY%2FgwIm%2F0spAq9DhEv8fIZns0WDa1W29PT069iCjizhJ2tCVBcXNyKFSsUO4vh%2Fv37RUVFliNVXFxMt2fPnikWLhKnZqLwcMFNKsIrQhEFTDtX9vCmJSipQIXBFBWFiIiZnluwZQd2GBU5yfT3v8dXX2lqajTSHTU2pkIYwiIRqXQ7OjoYCl7W8izyQkFBAZ9AsXCRMOPXpYqtXm3oVlVVUTPIOJbWbWjA5ctQCS1lPTXVaB0EBSE01HBgdDB6j%2FDIwqoFKChF6RCGDKbgYAQGqn02YiPDG4Qgg%2BnOHZw%2BbUJGlvDkiTi86oIOcFiLtalINXEknZGsF2GRwXTlitjo5k1r92pqwvnzgi5V4F4kXxNHd3f3zZs3Z2RkKJYXL16cPn36%2BPHjFRUV1mxVX1%2BflZV15syZgYEBxcgFN23a5OPjY%2BIcgYhYxHrD22AqLMTt23j61NqrMaV5r0eGB6W2rcIqP%2Fjp%2BlqWlFFNGQsAC%2Be3Ksrmxz%2BQXEw2MS8A5ivHFvYnCS0X%2FLdcsZShrBCFTWiyZnouWm5jBG8Em2ZYhoGs17kDi0oWAAnXcZ0CoBvyBT7Sy8DOWcLv5KRm8GEMD2LQUvApWvb2hu6LF5iaMutowonR0dHLli1TuiyDx48fW3M%2FulVWVqrXiSJTKyBXBanoA6hDXSUqrVmZUteMZkOf9%2FLzg6%2BvUXjgtBmbt2KrwVRejlOnNN98oxkctHxlC%2FCFr6G0gMbGxrq6Omsm1tTUkBoMt4c%2Fl1K6AQGIjTXiWOoKFXTudVn%2FZN72dsWQmIiEBN13L5unZ6%2BXV28v5NbR29HS2yINmGt6MLxtaDP0qdNeXoZ4w57sSV42OJDscnJw6RJsApmOdxweVgwrsTIRiWqXpVhKSeB2BlNHh5ANiodNKCmhDlNXFUMc4rgX11d7rV27dt26dR4eHorl2rVrly5dsjLnZdTW1l68eJH6rVgcHBzS09PT0tJMPAMQEIxgk8lCGm1CQQFKS9UGisoy6GtWsP20elQShJlMobXA3fYzTa%2FO%2FkQoQsMQprZUoeoJrL0%2FFTkPQsRTbNt2TqQDHxpbJiX2f20CIOJE6s%2FMhKsr9OxfjWojp9VAvNTiIKShwtKCrMnFWDzrMKWChOvtreu%2BfCnIoL9%2FpqPJswYFBYWGhjqrlIYsxvy25o50U1Oek5MTlwoODm5tbR1lnzXm6YlR3egE%2BrrRPSniPAtcDJ996OuH8eHd3eHmhq4uxUDKWId13tBfeWKClKE5e1ZNN1altDFc4eoGN8NJ%2Bvq6u7uticbz5897enqULhfhUko3LAzh4QbnsbExauecpKOrNlJbWZmiHhQS6jU1kfp%2BFJLw%2F52DatLkBIM9G36h%2Bz%2BAgSEMGexOTnB0VHrJSF6FVV4wSILgcdKr6oJWYWwMjx4JYV63TjaQjmMQQ1pQBJ4cze2MZj14IDRvYvZbzIaHD0Wg4uIUA1kyClG9KulbtWpVSoqBTrq6uvLy8m5Qb2xEbm4ul6KcMOdlC5el5fLly1qtgSXd4e4BD6OZjKEqja1CTQ0aGgTL29nJhhCEBCFINzpDAKS%2BsLzF3wggynS9ElFigOrS9tYfxhOezOxFWPQCL5hDIxix4OwP%2F0AEqi2NaKxHvfXbUQBSbRYAy5WeIrG%2FiQCQ%2Bo9Ju%2BGFBNm6ePFiarvZVRwkyN9TEoyG164VArBmDT%2Fb0CYLgJlVnIC9kgDESxpwSjU0NISBAaXHmAcj2E%2Fj9xzPzayTmoqEBEO3rg6NjdCayvXMuPj7%2BwcEBCjdyclJ0ndbW5s1Ue7o6KDnxMSEo547uBQX5AqCmEhR2WyK%2BwtL7E%2F8reGTnswuo1HS3GIj%2FVuN1akiNfTIy9OwjJ89w6uBic1mOLQqGSyDoVN7mqxDdVaFGS0tLU1NTXOuqZE1oLJSUMCuXbKRcaWWkHbICf%2BN%2Ff%2BusU7aJPxiFrsxicQjfgVWGDlQhAoL5xPQ6mrU1ioCQIQjPAxhigAsx%2FI4GCibEReaQSqfPXW1s%2B1VVSUCpQI3otgUoUjuxsTEJCYm%2Bvr6Kg7FxcUFBQV8u3ncrLCw8OHDh4oAeHp6JiQkxMfHV1RUKD4maaAL9cuXtu3EKZSNvj54e8uGJVhCHtaHQ2tS6YoAHJX7nxlpQInUBGwSgCQkJWgTIhHpBz83uPFWrNJBDHagow51ZSh7BjO1R8FnU7oDGKA%2FZcP6uzcCP8P8ccj0GkmIkdnfW2XNmkDWBZmgvyXrDvQx1hL8%2FPyCgoLMrkw7R%2BXv%2Fv7%2BwcFBw5i7u2D%2FzEy5R%2BpnG8bwrKdcJrU4YwEgC7e0qL1Ykyux8hqumU6PjcWePdiyxWBhuZaXm3iZJQlvb28fHx%2Bl293d3dXVZX146cwpwcHBcpdLeUs5%2Bnf8vSw1K2Fc0w5wIN8bmcgLKollHiYiMRCByqimoAB37%2BKVMYGJcYw7CWXWybwib5ZBNzorXS7CpZSul5eoBAU9PT2MmzXLilfr7NQ2N2NoSOSVhMBAIScUAAl2UrMNpA93uBv6XHxYl592sItGdAxiDKMkVpLawMB8AtrYCGOpC0CAP%2Fzlb8aZTxmBCMMwGZzbjY1ZSF12vzK71%2Fg4GKhftwK6hKTykq%2BUcQrA8uXL1TOePHlSVlY2n3sBnMjp7777rmLh4tHR0WoBYBqwGU1jHpA39I%2Bn4L9a3owS9U9qlWKq6ZPNWLwJrb6cNismw5ee%2FY1hKgDqiMcj%2Fi28tU67LhnJzAxXuKo9%2B9BXjepiFN%2FCrQu4MAajl2OSecBD6fajn%2F54szDKlqPqTlwcPvwQ%2B8j%2BAYqtDmd%2BL9j%2Fgq7%2FLVpbW5v0KcuMWbVqVW5u7rNnpvK2evVqqr383djY2KIiay3Zn41lChSikOzPv3MfPMO4294uKqG1FXp6TUPaBmzgUgyjwW3NGhw8iA8%2BgMS8Apx1%2BzaKiy1TvwwvCUp3QIL1sZb9FQHgUp6enja8lda8mUXrAx8jE%2Bmyt1fpLcfyWMQaLvj4MUpL52ComXuZi0svervRHYIQuUtJU2TeMvz9%2FdVS2oWuHvQoXRcX0RSMjo6OjIxYHyfN8%2BdaRkAvAHxq5bWla2hsjXY4wpU7CrS1UWbkz1CEhiHMSICZ%2FHV1Zpe8NOemJECufImhUE7svRSSGO4mTwcbHQOSYBiT44y7bQdy%2Flx31JkH6hDNIADc1CC84eHhkZGRSre5ubmmpoZijHlheHi4tra2vr4%2BKipKtkRERHALtQ9zgJlgNC02FitXzhSA%2F03I4ez43exDWhK%2B4WklNZi29S72sw3swI792L9LuysGMWYdlmDJOqxji0OcL3y%2FxtdDGFJGqfBOqnuNYGQYwzadTGvrVYyRpHxFRwv2Z4sypM1FXMxC1mmcVk9hQlDYq6qq4igYQGZmJtn%2F5MmTFAbZwc7Obv%2F%2B%2FTt37qTay5bHjx%2FTXzefs8j%2B27bxk5cl%2B1%2FH9bkPqjHKdd2tHz5EQYHgdwme8MxAxhM8OYmTou%2FoiD17sHs39u1DgF7SmM3nz%2BPq1VkpjjJzy9BzdXV1c3MzPNDICNPa%2BvDSn1w222qWYPFd4xG%2FDMsMfYprfT36DbIXBdZclOGONTXQx5%2FcyFwls5BlyLp2sJvUTlIy29Feh7pGNFo%2BAx0a0KCwEms7NtagNLO%2BnkZDNyUfiHrUq%2FeytxdNwUsJ1seZ2qYZHFTOS5H18FDG7KRmA1KRmoxkV7gaTLW1CiUFICAQgUYTmPl8AnM4as1%2B93twv1clAO5SEwJApfeHv5EzpUhfaJhV2fKBjRxsnjnSTBnrUPUdpX253ZCDg0NwcHBgYKBaAJqamvAK4AotLS2KAPj5%2BQUFBTk7O4%2BNjcmWJjQxE4zmbNyI0lJwX1a3McYtKPnE7IcQhD%2F9OgVAOcReuH%2BMjw%2FjsAMc5lwiE5l0I8X%2FHr9XjIuwiE3pTmKSzfpjvSL7GxAWpmf%2FKMVGXib7H8Oxme7379%2FPy8uTBSApKemHP%2FwhU4cs39fX5%2BjoyPfesmXL3r17ZecbN27cvXu3q0un81qyP5sEsj9bG9owV0abQOd15w7WrNEmJ0PPLBQAmcUKlw%2Fo2H%2FnTnnov7P19mqPHcPJk3j61Pw%2Bt0xL1lmC0p2QYH1cTfy5lJOTQe9h67UlkNk3YiNJymAqLsajR4Zd4ByKUFK8weHZM%2FJXGMI4MQUpcYjjtw98hABctpvABAWgBS01qClByR3cKUf5bLtXoKIMZZuxWe4uWbIkPT1969atubm5Fs6ckZFBNy8vL8XyCI%2B4lNI1LlIslmB9TDA%2BHjM%2B%2FiXwY6nnwou5KGPWCYC%2BlpzgtBVb12O9Yai5GY8fKwJABWXojOYyt%2FXprYa1j1pA9u9V9fUCAFCk2Yycu7vN7jXLlWYegezfaWxZKmnAkJ8EI9eOjvb2drwCOjs7nz9%2FrrZwCx8fHwqD3B3AANOpFKWrsMrgdOgQKwdubsjLs%2BZKc%2BC1C4CMbcARHPkIH%2BlSZ3CQtMIbg%2BJGVvf0FKyqJyYZLJtmNFeishCF5o9qy%2BHmxf7mokfNl9k%2FNlax3cZtUj8FwOwqT548uXDhAt%2FywIED7K5evXrVqlW1tbWDg4MODg4hISHkBdmztLT03LlzV69e1c2U2X%2F5cn5Wo5rsfwM3bOdAFXJyNDz2v%2FpXSkD2Ym%2F7jvauPW7PyP6qG6GpCadOaU6cwIMHswZ0BomZMNFLCdafzsTfQcIcjxJvKkJqhCP8MA7vwR57JSfr60HyvXdP8QlAQCACDUv39KC9%2Fa2R9N3YvQ3bjJSDa5wB2cw31TcGMRx9iqdUiEu4dEYMzDimFkzgu7i7BmvSka5%2F0u3Pnj3j05eUlJg9c2pq6v79%2B3fs2KFYuAIbJUe5%2Ffi4qBsFbm5u7u7u1seZdZPCZogzVI%2BmmTu3VLW0H%2FsZKMbZYLp%2FH4WGgvWAhyc8DaM8%2BsCA0eltBtm%2FR9WlXLkBrsAI92Iz3Yt%2Fra2YmYTZKWmAGt6SBjyjPC9daiQ2vb29PT3qg9l%2Bsd7evr4%2BtYXMwI0UASDu4V4uchORaEhpMtKPf4yQEKxYIRK7tPSVNECrFc0wXfRtvYipACQDBylU%2FOFSFKtr18RBKyrQ1obRUSEAZMCoKKxdC9IQlUCPTdjECysC8AIv2JTRRWLmIivPpJm%2FDKjg46Nj%2F8RExVaAAlI%2F2wQmZpt39uxZMuPo6OjOnTsp6RqNJiYmxsQnNzc3Ozv7%2BPHjIyMjoh8crM3MFAIggezP9krsTzx5gosXERqKvXvlcPj%2FxP%2FgnoO9u6O%2FcnIaVNxYwOfO4cwZPH5susIp8ZCzYZEEpauVYP3pTPxNVrPp5t7wJndnIGMf9iUgQWdlsl28qKG%2BqmTGF75%2B8DPM7O090NPzAX78Lt51gYvRolNAtpggmpSklAG2YAS7w%2F1rfG1aKtJhr%2BP6cu3yEITQjV0PD4%2BPPvrI0dExJyenqKiopaVFcQ8JCVmzZg0z5NChQ%2BR02diIRgpMjiZHvTBprb8f4XrW9fX19fPzsz7OPpQZQBEAOzvRVHxqZ%2Bx%2BaTb2P4ADH%2BCD7dhuMFVW4tYtoQF6MIZGYeQTyOk9f%2FRIGqCGu9RGnOH8ynuZEOa4pAE9Eu8T3cBV4KHY0t1deSMZQxJe5WIzV3CToLbUo%2F4yLjOdDuOwwUrh%2B%2BADpKSgoAAPH4qyJbvqU8ucBvx%2FUoMZUpyeFk3pSX1bL2I%2FM2GaEe1yywXt7Th5EufPiyyZnDSaRAt5p7sbf%2F7nCAiQbWEIo9aFIrSZCwBjGGNTZjjBiU9u08k0NmiAadC0np469l%2B9WjGWovQYjpH9hzDH2586daqjo6OioiI1NZXs7%2B%2Fv7%2BzsPDU1Rc1vbGwsKyvLz8%2B%2FfPmyIQNI%2FWyurvy8gRtk%2F2pUz5%2F6FTD4QUGM8IY1a%2B4C%2Fz977QFeVXalC%2F5XCQkhJJSFAkIRSSiQRQ4iF1DkcmG76tnuZ0%2BP3cndM%2B3vven3%2BOZ989kd7A522%2B5yV9lV5aIIRY4FEkkkiSAJBRQB5ZwllHXn3%2Bfce%2B65VzcKUe35pn8WV%2Bess%2Ffae6%2B91v%2FjN0hCEuWZjfIhMDY6KgbI1txsOjfZVsokvPYWLSGd%2F982dSYAcao707Ak%2FOEfichkJC%2FH8hnQ9Y%2BGiT1xgtcgVFAFX%2FjSlNdtPT3v9uwir6nH1KGuAx0jGPFo9Ag%2BE%2Bwb4Is%2FglJ6b%2BEtUuggBk%2FgxMRNN6P5jObMTMx8F%2B8GI5j1FxIS8v3vfz8lJaWwsLC2tla%2BcRJKeHg4natWrVIOw7I%2FjuOncbpdcJABLS1Gl8OJc%2BfOZTkNDBi6wwoWQbPQWtlrLMqtqnmorDyREQ2RcK9cwbVr6hlucKMZ3tn1Jo1vgXoto8OCADSZrjU0JMxhmGzkn80Ocnd3Z8LVnsHBQTvzbwmDEkxWIUyGUQC84e0Cl7dNuiEmRtimTSgqEkpcXo6qKlRW8kErcbqF9MruP9afXitMjykQABlV68JndHb6HjmCzz5DXh7MEjGFizmNisK77yq%2BKESxmWUBIMn2oEf5xKZiIvDVYPp0HfsvXar4SlBC6qe1oc2eGHfv3n306BGbnO0aEBDAqx0bG%2Bvq6qqrq3v27Fl9fb1h6NKl2owMLF7MxwY0kP1pU8D%2BEmacPftWQMB2P7%2B2uXP9Jc9qNi%2FQVV19XKZ%2BtvEfHMSW8sx%2FOqRoAAXAHe5%2B8KMGGHFYSYk41NmzuH3bZDKriCY%2Fk3r39%2Ffv79svv77Cqzu4Q42vQlUrWikA0zE9rDAs%2BUzyGv81Ue9GKUG2YRs5mjpxH%2Fcn7o8RqBADGKBUpGpSxWrdWC2BDd%2FX1ycuZcYMQ6u7AqN4jMe8jJM4WYxik4C1taipMbw6OTklJiayrnJycmzmkWpHXVxC3TcPJ8msUT%2BxHdvJ%2FiYyiTNncP48KirUPt6IRh1N8InDhGIMWQDGpX3KIPsLmXeGM83sWg62jtbmCFcJas%2BIhNc5GKePjo5aX0UGOWcQgyy5rdg6G7ONvgUEYP16Ya2tOgEoKxN6UFysLS21nIpfmb0gSQ20jh7Exax3D5nl1CmZ%2FdX7MAqfm4v8fGzfDm8ds4cgJAhB8nMHOnhmZWwgAmksL%2Fu3GCsd9I8dPZCrq1Zm%2F5UrFR9JQWZ%2FErT9kYaGhh5KsDbIy0u7cSNoEmT279P0Obprs4hD3M7mnTtObVw3ay6%2BA%2Fjo%2FFvuoevCg64L564WXp2ShaYcVu84zaz3b4FvFRWVP3lSeO9eT1aWaIYJ8ITnDIk%2BCBL%2F%2Fv40p37BLEUouoRL13E9F7md6FRPSb6eXBRQtC9g3%2FKNyxXnFmwpQ1khCvtg5qae4Ekb2l6Evli7dO3yhcujL0dTNAh3CUZDT6L8%2Fyy%2F%2F%2Fj%2BrdxbX3Z%2Baba6qqsFzXZ2YtYsnWfx4sXLly9nXY3boleKEGtL0TyYtjz7crr11JN0DuEQBcDIe%2B4cTp7EjRv4KiBrgE7jJQHwMjNKcJf2De1AI%2BFNn9Owisb0Is7ibD3qK1G5DutWYdX0ibdGJaClp2NgACUlKCoS1Pr4sTYnB8PDFnXRuBqkF4cF25wAFBSAHXjvnplDmhTYy5eoq1MEYJYocl2ZN6O5CU3KQKp9BCIiEfkCL%2Bzc2QpgpX2ZN3qT2X%2FdOsVRi1qZ%2Fe1f2n7o2D8khM8P8TALWQ81D6ck8gqs2I3db%2BPtuGdxOC11%2BrcxOk26sA%2Bw9%2Fzero6uLnSR8qb8UG%2BS%2FS3ir%2F8RlXnuZXl%2B%2BUXh9xF%2FAw2v8MpkjAc83KGj4D%2Fj%2F20z8X%2Fw%2FLlHcfQ0Tr%2FEy4lhyfJ1Z%2BqG%2FYenB0xPTU2Vnew29uF93Od9mdmKi0vN1pR%2FXzfv8Yro5YvC093wTUub3oefZgTefxxWeG8ubsTjRoPZUYWFoqWUkoyIiNi4cWNlZeWFCxes5G4%2F9u%2FF3pVyE%2BTrdHN0VJgef2s946ux%2BiAOmmH%2FI0dw6hS%2BIrQbC8AM8wKgwl9Z%2BrBRlwR7MQD8K%2F7hqzqnKYxl4BEelaAkD3k5yFmCJQuxMBCBZmZ5eGDRImGbN%2BPhQ9y%2Fj%2Bxs3L2rvmQD3xmr5tQJwP1O3H1p5VyGNTs7QRbSg8rGFpWfSbs1qOGGnOAke%2BIRn4hEO1l4nsT%2BKY6eRmb%2FTZsURwtajmmOkSDKtGWYamjnzRPsv349n%2FvQl4nMTE3mlETegi3s%2F33YpxNUFoAHXvi8uPju3B%2Fw9Xdw1biSHSgAtHKUq6bqOC4Z%2BrwbocDoz5tBnX2fNRpMmwZvb7i6Su9%2FgRhNTAxiqKjZyE5AwlmcrUCFeqorXN3gZnjPRnlQ%2BYniE5%2Fi0za0WVqwc6jzzLkzIaEhMTExnp6espNNloY0MwIQGIh9%2B7BzJzswz9k5T3CIXOmdLS0tr14JTZoxY0ZwcLCXlyCyD3x8kJGBJUuQkIDwcJw8if5%2Bk5CPHyMnBytWwE2%2F97e2v9Ve2z5eN34p%2F5JhnL6vIhDBAqD2v4W3%2BPry5c3INJ16DA0Js0dp4xC3G7tZQk7qQjh7VrD%2F8eNv4NotwVUyBS7mOUeFw1a%2B7bZbAwZ0gf7DBECGwtZavMKrK7hyD%2FcWY%2FECLEhGchKS5mHeDCGKExASgl27kJ6OBQtEaV28iMZG02sXhD8%2B1QJQCDwAKu2bPTyMkRFVLBcXfcBhDLN7yU08oexhv%2FHk7O0e9NgMvApBK%2BHuSIIh8vW1r2m3b1e%2BkBxJ%2FcdwrJCn0pibrXU0XcZTyf40CWT%2FLE1WAxqUAREREQkJCeHh4d7e3i4uLoODg21tbS9evHj69GlfX5%2BVyGz7d%2FHuO3jHRXU72ZnZF30uXvRZ%2ByfbtomltQjQBMga8BE%2Bos7pBx5W6PV%2FakwO%2Fc%2FK0x68QZAxWy19uyqZSgDIn7NnIzYWaWkIkK5jGqYxrRGaCB%2F4kNnLYFBuZzjT1PGu4dp5nLfC%2FjJqa2tv3bq1ePHiTZs2yR5%2F%2BFNjIhH5Ei8N4%2Fz88PWv4913tSR0PfLz83Nzc8vKyhobG%2Fslcif1h4aG8nLT09O186TynjkT%2B%2FdrAgLg4YGPP8bgoHr1lhbcvo3UVGzdqndp8M0d3%2FSu846pi8lry6tBTb%2B2n9oWhKB4xC%2FF0vVYz37huM7OTQ0nD0d%2BBBSLeQMDwmBH6W7F1h3YMRMzDa4zZwT7nzjxJi9%2FIvyZVtVrt2QTwGrQ6KrV03o8T%2FuWHTA8aiW86XPaWEXfij3anuu4TiMxJiKR1x2L2BjEULB5%2B6azAgNx8CCio0WTfPEFSkpMloRqRenF4WNOEIAHkk0FSlBC5lUEgEK3BmvoOYVT1ieuxdoMZDA7Diy2ejX27MHbb4vnHOADFsAAqZ%2F2CI8sztLY1UsTIWZkZAj2j4vjI0kqU5OZhSz5q4%2BPz5YtW1atWpWamhoZGTlr1iwKwMDAQEtLS0VFxePHj2%2FcuEE%2BMht5AzaQ%2Br%2BOr6udJ3HyDM6cP3W%2B26ed0TXLl8sawNJRNGBYMyyN3SPvztVV2A4lxGgWRkfxVYEaYEa9n0k2ASEhSEjA0qUinUyqjDht3NfwtX70%2Fxq%2F7kSnfFMSSRhE7Sme3sM9tUJYwaNHjwoKChQBIMj%2BczBHFgBdCezeLfpNxf4nTpy4dOlSdnZ2VVWVScDExMS1a9e%2BJUH2aNeuxdgYenrw%2Beeqlhe4dk3XxSkpOo8mTPP2jrcX1i8s%2Fm1xIxpf4RUFgLIUjegU6AYNDeHkSdfUU67QN35fnzCbWIVV67COnGJwZWXh6FHr7D%2BOcZrh3clJ2GvBXRIAlQjpBWBMZGrM4BbK7jzJReREfwM4DESb%2BT4qQe1xlTA8PDzpg7lIsLzKX0m7mWGFc0pRSuMjb5yNzMtKQMJ8zOftG8k2sWgR%2FPzg7o6PP0aZqtrFdY1bvL7JC0DZpNNihCd4QvIl6SvKRnarRS0JiwJoaVY60vdh3w4Vd9mBZOwlE%2B7VvS3DWMPY0Yajx64cI0HYnq1xYCUdU4SGCrqiSchEJk1%2BDg8Pf%2Bedd95%2B%2B20KgHqiu7s7lSA%2BPn716tXz5s0LCgo6fvy4SXAWwS7s2o%2F9aufv8fujOHoRF8XlnjpFAcCsWZink9UlWMJ80jhGdR7tjBnw9FRFGRwUpj6IBEwRJkbT2p3XRvJfIx48wPPngjyp4zLYGNuwrQIVX%2BALsyJdhO6naLJzh%2B3t7ZWVlXV1dWFhYbInGMFyZepir1mDbduQnq5MOXr06KeffkoBMBuwREJra%2BvY2NiuXbt03g0bxGF4kpwcdQZGRnDmDGbOFCyXlKT3piM8PTwc4Wbjd3ZqTp7ElaMe6fc8FGd3t0iRTaQhbSmWGt7b2oQAXLhgfdaI2OaI4d3VVdhrgezvZ%2BzRCcCQULchg5vs5qE7ZoGNmMbfVUU2w8D%2FqeohgxLUHjajh4fH6wgApzOI9VWUygIqgVjTbes%2FVqGKdgVXIhCRjGTeHZt6OZYHItAwPjISBw6I6%2F%2FlL9Hbq3O%2BEQH4EPgIUwIttHdxdzEWH8ABxfkO3tFA4w%2F%2FO7jTgAb1%2BFCE8thbsIVcPgMzeBgn%2FA74tq11wjBrj2D%2FmTOVfGt3HnvVcKy94QaeTs1ZTO4TGRmC%2FSWKpZhlajLLJNmcOXPmwYMH33vvveTkZHlgV1dXbW0tS42fYmJiNBqNt7c3FUKuvzNkBRXWYd1mbPaAoeHJfZ%2Fj80vQc1BHh9AACsC3v43gYNm3CZtkDWAN6edp%2FPy0vr6q0KQNpW4kjElQXp0k2J8KjQTldVSC2XTZKQOvXoGC6OaGkBADCa%2FG6lzk3sbtFrSYjOdhioBiR66voaGhublZEYBZmOUDH903Mt3KlVi3Thl87969c%2BfOWWJ%2FwwV98YWXl1doaOiiRYt0LmpAQQFyc2GsiLW1%2BOwzocI7dqjXMY%2F8fM2XX%2BLcOcTd82IvKP72dlEC1uEHvxjEsJsMrrw8sZ%2F%2BfhtXIC7hleF9%2BnRh5mDnnUoC4G%2Fs0QlAH%2FpoBreXlzAJh60F%2FAcr7K%2BaeFo9qq%2Bvr9e4%2BL0kdJNPJ4sZEkxWISzP%2BDrwmZnNq2qkBjW0a7i2DMtWYRX7ej3WGz7HxGDLFpSW4uxZnYcFpqox6UXr6EFczPi0DtywdVAAEpEYjeiFWCh73OH%2BHt5jga7EygpUtKFtGMN0BiCAwxZh0QqskEfm44uFJEAbAkAKpl7sRUSE%2BuguLkd37vyygQrTgLa2KTiIUV6XLhXsv3gxH7lCJjJp8pfNmzfv3LlTYX%2FSx%2B3bt6uqqgYHB2fNmkU%2FB6SmpvLTrl27SEaVlZVFRUXy4DjE8eITkKCsk4OcczhnYH8Zz5%2Fj5En4%2BAgNcHeXfUxBl7arS9P1AA9kz%2BzZmpAQ1a5JG52d6jDDElQZE7A%2FISbjTaJZwDPgHeCglRFZWUhLMwgAkYxk5kQWgFEKDXQyI9hfo9FqHKjUbgnKK%2BnNoLW8soUL4eenfL1%2F%2F%2F6NGzfsCZuVlZWWlmYQACoYn3nL%2BfkmI1%2B%2BxAcfiN%2BnT0X5JCQIKVdjaAhlZXj8GNnZIhXkg%2BXw84WvUn8tLWhttbGfIASFIMTIVVGBZ89sHqQHPd1QcaKHhyizadPEtiYJP0sC0IWuTqgK0tkZvr4iHZ2dpy3ST6aVlb5heDQlwa6urk7j4veTUFdXN9lzcbO%2Bs4wvj0tMRlE0pvslH2YjOw95z%2FGcWdqDPYZva9YgJwe3b%2Bt6eXxcmB7Sy7ij61vo%2BanTgIu4GIxgb3iT3xUnWZ7Gru5AxwhGpmGan2g%2BQ%2FtdxuUgnBR%2FJ2bICHuFpabqRzzEiSU4wIdzERGanTuFAPzud5PZtsUlvbwE%2B9MkZCErU5PZB6H8wcHBK1asWLt2rfzp9OnTn3zyyYULF0ZHdZwVFhbW2Nj4ne98Jykpia9r1qzJzc1VBGAe5iUhSb3UbdzONFv0T56IVmFzHjokO5zhLDSApY6uUpSylSIjERioTx2pualJkIcKAwMDr169Ul7dJdifH5PxAxLMjuQBDgN37Avb2IjiYqFxUVE6z1zMjUCE%2FDyIQZr8vJwC4OYGmt0YGhoy0jyqmFL%2F0dGIi1M%2BUbN5L01Mmh2oqal5%2BvTpixcv5s6dq3PNm4eYmIkCQPT2Cvl%2B%2BFAIBBcMDdVxLHu3p0ccv7ISBQUama5nYiZ7h7%2FyXF4XB7S12djPLFEcKm4aGRHT2Am2wGZsR7uRy9%2BfZYTaWpORrKq59qQm0l%2FSAAX9VJmXkoS3olUWdQMonLNnw5ippwStEtSeoKCgkJCQgoKCScdkhEBmxuoq9sIcw5FSjuGYK1yp5elI13kpk8nJSEjAvXviVasVpseUCoBCga8tAw1oOIETPMl%2B7E9AgvpToCiuwIlTLuESD%2F9n%2BMKO8J%2FAF%2F%2Biew4%2Bffq7Sz4PCTsYJm1em56uYdnTrl61HUhr53lI%2FRkZoliF2jwkQfNX%2FpKQkJCSkiI%2Fl5eXX7ly5cyZM%2BqpdXV1Z8%2BejYyMlAUgPj4%2BMTHRz8%2BvvV10XRjC5mCOMrgYxfnIb0Sj%2BW1kZQnmoG3fLjson7IGfISPYhKbSEEGVFeTpUwC9EpQXmdIsP9aOdjT01Mdra%2Bvz76pGuspr68XaqUIgD%2F8fXnH8iro7UEPOVF%2BraIYz5xp%2F541EpTXMYzRdC%2B8UJKxHg0NDbws%2ByNTA%2Brr6w0CwFBShegPa3pS3oZ8Id7e4g6pYuxd3oak0YYdUvxESehnm7tGM5iO6Z4wXI0Qlq4ue07RjOYmGGseD0KbIACQRN023vLHEn%2FVe%2Fc9dH8gPbGw2ZpGg%2BfMQWQkiovtTbrd1DQwMMDbaWlpUSg7PDx8zhxDr00CYWFhoaqCaWtra2xsfEWJhpR6TzNT%2Bq2EY%2BeZ654buLEESwwCQLDGwsP5N5f%2FBeGPS08yplYAZGinQANKUfo7%2FK4TnVuwZQ3WeMDD0sgqVPHMl3F5BKf1bWODmX3RIVXjz8%2Bdw%2Befn286HfI9fM9J4yRrwI4dkDWgqEg9STPJc5JWKQAbNkCS6CxkZWoylY8siIiICPn52bNneXl5EwM8f%2F68oKDgxYsXMllwPGfJAuANb4XpIAknWcLaZk6d0mnAihWyIxrRsgY4pX2UkjJoGFlejspKEyrq6urq7OxUhvj4%2BMyaNcv%2BO%2FWRAFW0LvtYxqYSUEf6Vb1COlMKph3tbWiLQ5xump8fAgLsL08PCcrrIAZpuhdqCclYD%2BpZd3e3%2FSfh4B7yrAKGMlImkz0azstFVOuYHmUe5sVqY5XXqirWj%2F7lvMXNuMGtHW6q70MYGrLnFHWoq0UtScQJTjoXGTk6Gg8eTBz8vs1wrq4ICsL7gYrjKdrO8w4lUGxe4AU5YRb0VRcbi%2Fh4XLz4eqxjni6qq6vZdGoBiI2N9fPzk1vPUbi7u0dHR0dFRanjE%2FKzkMY%2FBoKMpuQDnzm%2BUD3qK1HJmveHXkcDAsCyl1fRanGNpj671tElXCaZZwfxHM9%2FhV9RCXKRm4IUUlUgAmdghgYaNmEHOlh85SjPQ95d3H2KpzsdjH%2FpEo4exYkT%2BX04Pxuz38bbst%2FNDYoGdHRYq5JS0W%2B2QPbPyJAfM5FJY2Dlo7e3t8Khzc3N9fX1ZmM0Nja2tLTIAsDx3nrecYGLi%2Bo6hjFsoKcJYHtoef2KBiQmysdapFnUtbCrcVlXePgR5Zia4mIqkgnHtElQAgYEBLA9nJ2dx8bGbKZBo9FwvL%2B%2FviilaLpe%2Bhv%2B%2FxG732jCDeCOlXj%2FA%2Fi%2FLX3TijLXHaQJTY1oNHxjP4eFab28NL29sANseLXIkXt7oGdtZ2dhyqISYDfGx8eNxvMmVdEsK581%2BMI3FanJSFY8paVCynU4bHFiI5wOKwzuCEYwUoUqMo4isYKRExKEOtqXYSPMmYOICOONNfIGldcKVJShLB3punfyWmoqkpLAcrUJB%2FWhsrKyvLx82bJlimf%2B%2FPmpqanXr1%2BfRKKSk5MTExOdnAxJrqioqKI%2BS%2Fgr%2Fh8exneGMctT9tRiWincMSl0oYuFahAADw9hwGX%2B7x3H5XHV2HHJHMMbEQC5Fci3%2Fw58CMhFSzq7jMvZyE5EYiQieSRPeMoCwEOSSVl8L%2FBCjkDidnU1MDXZkGZpuatXBft%2F%2Frl45hIUgBCELMVS%2BWtkpE4DPv7Y2p5%2FQXqXbIalEaR%2BCgBbAmDhkv2zkGWUSgm6DQ8PDw0NmQ3DTyMjI%2FKzqwT1Gd31hcIHXrWVDYsW6OzUaQB5LSREJEuLjD%2FNeLGyS1SOPObRIzx5IkYagzrU0GBQLyIsLCwiIuLFixc27zc8PJyDnVUcx2hNTVJvH8YoRkfxf03Tb97tLqbdsx7PiK2mT5crXIdXeDWAAfm5GtUv8dJoalwc5s3TPnxoDydwz7Nnz1ZeW9DSilblVsD7ctcl38PDYzr3YTc42EO9aYaycPv2YxVWpWvTqUvya0kJiorQ0aH%2F%2FMTixCcin06TW7QUpSUoMQgArzgtDYsW4eZNh2PxamJi1A7eXQ1qlFcuVIQigwAQS5Zg%2BXJZALQTLzRTMhvwFso%2BAc%2BePSsuLu7s7JzFTpGwaNGiJUuW3Llzh%2F3o6MkWL168YMEC5bW%2Fv7%2BkpIRLGEZ0dYmr0q9FrgtEICYLjToTWq0wHUwYfzIC4DTpbdmEL7AH2E1p1zm%2Bzv996MtF7nEc%2FyV%2B%2Bff4%2B7%2FD3%2F0L%2FuUTfEI%2BVdifIKfRFPSgpxe9Zle53oHPL%2BjYX8Z5nKfVUnf1WLFCaMCmTdZ2%2B6%2BSBtAemf1M4iD70yTo2F8zlemiznfCQNOsGMqY7Wnka2oAbWBAt51%2Fwdy5e4GLugH37iEnZ%2BK8tra2mpqaLlaqHtHR0bGxsfZsNSYmJioqSnnt7e2tra1taWkRL07odertduqGk5Ns%2Fv5OgYEyJVkyIwQFISDA8NqBDiUtXeii9KrrBCkpWLgQdrB%2FZGRkfHy8n5%2B%2BGEEqqqlDnT773VClIjAwMDg42P67CwkJ4RTDO0N1m6EhHf4Mqns2jyRt0ibtpnVYp3hkHbcPzpLZkxVTFKIwH%2Fn96De40tOxciW8vBwL5OIiriYpSXG0oa0c5equrETlEzx5jueGWQkJWLtWrChBK5kjmAa8Y%2Blbfn7%2BE1UG%2Ff3916xZs379ekdTtHTp0pUrV6rrPy8vj8FHR0cNgxoaUKcvLcADHtTUBCTAcfjC11uomh59fRQc%2FQvT89fSLctGuf29o%2FHfiAD8DBiUHmL1GgDsAvbZeaFubggPJ%2BUaBregpRWtE0feBsj8RwF18jlY1oAxjCnOnTuFBiQmWls3C%2Fi5pAHMYpPJN5n9PT35eB3XKQClKJ3apDWisR71ymsMYlgxnvC0PTMvDydPUgNWGFyi838KJF6%2Fjps38fKl2XlVVVXl5eXKa1JSUmpqqkZjmzVSUlISVamsqKhgKOW1CU0NaFBe2Snx8XLmbGP6dMTFQdVcZOg6dbQiFBWgwPA5OlrQ05IlNiMvW7ZsoSQVMoYwVIGKKui33dgomlalhfPmzXN3d7dvz9M5mKJocNXXo6nJxjStBYbTIlobvQ%2F7dmCHRs%2FgpaVCxwsL7cohcIpXpGd%2F%2FoYCv7Fz5gAGHuJhDnIMLkpmRga2bIFDWLVK8LiPj%2BKgrlBdTEY9wIO7uGvk2rwZ27djzhyTPNkBjcT%2BRgLwQPWcm5t7%2F%2F79fgN7sqE3btu2bf78%2BfYfi0q%2FdevWDCZEj%2FHx8ZycnEfUZzUqKsSdqbAES1ZhlWM5BCIRSeXwg5%2FBxbpqadG%2FDDoacCLeiAB8CVzRP1PN96xfv2fPPkkLYM9tpqWRjLTOzgZPNapJBBNHyuw%2FMQ3kCFkDFM%2B0aUIDaKqaNANywMeSDNBuKt6lSwX7L14MiabJ%2FllCLEwxPDw8NDSkX26aJfqgn1%2Fl55GRkVG9dpGMymGgYw94LMfy9VhvV8Zv3Nhw6tR7Fy92qXx7K1%2FsvXxj9tUcS5NKSkqKi4uVV39%2F%2F%2FT09DVr1lhfavny5RzGTlDHKVWV%2B3M8r0SlOvOkgnXr7DoHeYNpdnU1eMpQpo72GI9zkduGNsMIXs22bQgNtRKW1M%2BmXcp71IN89BRPhzGs3%2FRzqLTQw8ODgrF27Vp79rxu3TomxOi62f8qRbQBrZEtxdJv4VuHcIjNrwzJysKtW%2FhqQEa%2Bjdsd6DC41q%2FHrl3YsMHeEFRlCobqyqkrvDXencnAPOTdwi3ehcEVGIi9e3HwIMLDLSXJAkj9XwMM1EwFvqz63NnZefv27Rs3bigeNze33bt3HzhwgPptz7ECAwMPHjzIKcHBwYrz1q1b2dnZjY2NRkOrq%2FH4McrKFEcSkrZj%2B9t426G72IAN6YJBVWBpvXihdri6uoZLcHFxgeOwY45WElfVm01cBaJYBkAyXxYtemvfvu5Z%2BwcHcfmy7bleXli7VrtsmcHTic5SlJIfJw7%2BFfBrC3Gu4MpszA5ByDLoYs2dKwSgoQGffmpjD7lAqWTPSC9eXrEUfLKMBLI%2FrRe9E2exwtrb24OCgvhMfuSV1NfXTxw2e%2FZseYw8patLR9pFKGI%2FkPG5Z9mzBVsoe33ou6kSo4nwgQ9H7jy1c59PhjvlbaXOP%2Ffi3L0X9nb1d32ID9mBEy%2B0vLz8yZMnGzZsmDNnjvxl48aNVVVVbW1tamFQIzo6evv27RtUXMDSz8vLU4%2FnQdjSGcgIQIDs2bwZNTXo7cXt29bSTurfsQMZhhZGBSqYE8q%2F4iFl38GdhVi4H%2Ft1LkrR3r3a%2Fn7NF1%2BIxpuAlJSU%2Ffv372BoQwK093H%2FIR4aBhUVoaBA3LK%2Fv5KKly9fdnd3P3jwwMqeV65cuXPnzk2bNhlcra3IzxcBHUQCEtjt67BuK7YGIlDxnz%2BPK1egUli7EBMTExAQMDo6WlNT09zcbP%2FEbnRnISse8e%2FiXYP3wAGMjlIYRQ%2BPj1ubn5KC3buxZw%2B8vRXfDdzIRraRqOhxDddiEBOBCF%2F46lxJSfjmNzF9Oi5dwsOHE6cYExKEVLDCuGL0NrX7srEAENevXyfXs4YTEhJkDyv%2FG9%2F4BvX%2B4sWLt6xqbFpa2rZt2%2Fbu3btgwQLFWVtbe%2B3aNbWoGHD3LhYuRHy84tiN3aMY9YIXj9wMGzfCpt6BHXuxl6Vu8La1mZQWyy8jIyMiIoLPLNfMzEzr5ToRkxENe3BF0oCouDjP%2FWzV%2Fe8GTndyEuTOO%2B3rM71BBV5eWlYaW1Ut%2F2xUssAk9nAe50mmNJaXPl8gJ1MDsrJszO0BTskyQCZYvnGjT4gH8AiPyP5GxKECq4F3kJiYyOf58%2BcvWbIkJydHqzVSTLZlamqqfGGQ7qyurk75ehd3ed%2FqxuPzNEwLQxgJa6IE%2BsM%2FDWkrsIJsuwZrxI4pALMAsQXgz7Dgzxewhqign%2BEz4Zmg3iyXO3fuKAIwc%2BbMgwcP8uHSpUv3798fGhpSRjo5OS1btow9cODAATKLqs7vmtQc6ZUHWYRFB3BA9mg0ePdduLkhNBT37plh6eBgUPK3bMG%2BfZg2zeC%2FhVv3cM9kMKmEXBmN6AXQt2JqKpydBXffvCl4vKmJPldXV2ow23X9%2BvW7du2iJCsR2IGkpFrUGoKS1LgzShB3IMHNze1rX%2Fsag4SFhTEVE7WcwdPT07du3bpv3z5nrq6Ae2DzS%2FduobuE2xnOHvCYiZmUyXCEkwSTkLQYi%2BdjvnooueXUKVy4AIfw9a9%2FnSLNnY%2BMjJSVlZ0%2Ff%2F4md2U3KLFzMIeNQzXSudzd8a1vgfceF4fcXDx7hg5jNp85E1FR4iLYY7xIfYUTRSi6gitsHLNr1aDmHM4xCe%2FjfRclYcnJ4jYZkJnMy0N5Obq71bNEcgMCNFxl3jwsWoS1awXbqnANeZfQbNKoY2NjJPrZs2f7%2BfkFBuokNioq6rvf%2FS5%2FFy5cmJ%2BfX1VVRb2UK5%2B37%2B%2FvP3fuXLbz8uXLmdII1bkGBgbOnTvHTunp6TFzsJISIZZhYYLO9CAVspd5xeSQEpRUo%2FoVXqknsSo4IBGJS7GUTb0aq41iXr%2BOO3eEEksgmbzzzjsUsFmz2PNob2%2FnbltaWp4%2Ff27%2FXdsnAHrG1tod9yU1ICQkav%2F%2BfRSAoCDO%2FtrX%2BJebFndaUKDt6jIaz7Zn8fAema41awz%2BJjTdxm3Sn62tTYAGrdpWWQO%2Bh%2B8ptbVzpxAAGmvYJkowr%2FRsRmn%2FhtJSbNzYl7kg01IdSzde8vTp002bNrFuIiMjSQ2tra0suN7eXnkAK2n37t0sI%2Fm1qKiosLCwQ9VIPCaJYDZmr8Va2TMd07%2BBb7AgyO8VqGA2etE7jnFyRyAC52Iui2kJlvgI4geY0tNCAK54158IDf1Qys56zfoudHVpuy7i4sQ9P3r0KCsrKz4%2BfjG5TwLF4Hvf%2B15cXNzatWupT93d3dQwCgNLn9K1bt06NfvzvJx%2B754pR5NBYhEbilCKk%2ByZMQPvv4%2BEBKxejYoKNDejv1%2F4PTwEq0RHIy1N3L4aZA1aIQonbvsCLvBaZ2FWJCJ1rvnzfzR3LpYsAa%2BquVkzOjp9%2BnS2OvWYNK2em498Tv8SX5oGvX1bsFt4OJYulR2%2Bvr7%2F9b%2F%2B16SkJKaisrKSrfXqlWhXRg4KCmL7kTLIC0ZBmAq2PbtUwmHzlfJ9shdb3R3uFACqOBMVhSgex2Tcl1%2FixAkcOwaHwDuiSL%2F99tvyK%2FWP%2BkReq62ttT%2FIGZxhUbHMlmGZwcvmXLBAx8iNjWBhj42RJuHlJW5xzhwkJSExUR3nOZ6fxElS%2FChGLa3FsveClxvc3sE7%2FNV5KdjvvYcVK1BYCDIaRV1ejlpLNaLeBARoSa%2BxsZr5OsmM1gdk%2BcmLTlyL5Hjy5Ene4KFDh0iXstPb25sqvmLFiuLiYtY825YXzbL38PCgVFDpExISqBDqOMPDw8eOHTt16lRBQYHFJJ47Bx8fuLlh82bFl450yjyLsBzltahtQ1sf%2BpgcJzgx277wZfuzdxZgAWvDKBol%2FOJFZGcrDu6KtS2zP8GtshrZj29AACaBGbi%2Bv3HO%2FsagmKZViJF969ezT7FyJYqLUV1NyWIe4eIissSrJDuwVfmggEwn9ypzZGUptSyZiMFTPKUGMKd7sEf2kHEUDejutnmMjePjG69eFaxSWppZvTGzYWMDAsyLT2dn5927dxcsWLBlyxa%2Bbt%2B%2B3d3dnZfE%2BxgYGPDx8SGVZGRk0MOvo6OjN27cmEidp3GazcBqUIv%2FQiykkfqb0dyPfqaF3EHiCDBsRYfhF8PnTp77wrvxxLe%2F%2FZGnp8iMliff04lOysBd3J14wkuXLpEo2QOxsbGyh3RP%2Bti2bVtdXV1PT49E3zM4hm2jnlhdXX327FlON5s45SCseMVJaqV1dqK1FRKXil5mG%2Bo70YAsZJ3ACdKQ2eC8PX6dhmmkDFKn7Pyxp%2BdQRgZo4%2BMUADc3PZUY18MxHCM7DGHITNwzZ0gGoiKZbz1WSGhvb29ra%2BM9SiXkQRWkPJhOz8nB8eMiiB7%2F3WJdUQN8rJQd2ZVVd%2BECTp8WpOcQZGVSXnlrKSkp0dHRDgkAy%2BwojvJhEINroVLmUKpVqHjoY1P26QSA8m5cGzKKUMRUM041qq0vdxVXWdVcdBd2sVvVhxGmXk4WAEoOHyRojUNdxmXWHm95GMNm13r06JGTkxMZfM%2BePUyL4g%2BRID%2BPjY1RAFxczNNjS0vLmTNnTpw4cf36dRt5PHKErS6I5q23lBS5wIUaQBPHQh9PrQiAj6WqyMoSpXXypNrHm%2FViHlRg5043dxFW8MYEYL%2BwkwtOTsd0Xu0arJHdAQFkRmEtLYIIZAGgnDPzTk5GAZgUuVcf4ZH9y2onaAD1gyUVghCFiXjpsgZ89pn1YBkUACCeTzU1ZR99lIVnWSiVfKvNT%2Fjyyy%2FDw8NJplRmvm7YsGH16tWk0cHBQV5VmErcvvjii4sXL1ZUVJhEYEF8ik8HMNCGts3Y7AlP5RP5lGZlu%2By3TGRezr98lfzm7a197z3l017spQDQilFsMqu5ufn48eNsCfYD1Uvxk0CjoqIsrVVcXHz69Oljx47V1NSYHcC1fo%2Ff8yCtaOVBSNbKp1mzhFlCD3qu4Mo5nPsCX4zBIvmVoOQTfMJ07cCO5VguO3VrsJLMsT%2BTcwEXWFHUD%2FNB29pETQwOCoHatEldkX4SLG56ZEQQ9vnzvFdR1q8Brpybizt3QG7hwyRA2nIlKavAV0tcZgXtaP8dfsd7ZLo2YmMAAow%2Bk%2FRpFkDZuIEbvMezOGuT%2FWXwdjrQUY96rkW60Jj0sdXlZLC2b%2BEWtYS3bKVyiNzc3J6eHvL4li1b1q1b56zXEgUTPQpycnKuXr164cKFXHuuh%2BxPDWhuxosXWLcOS5eafJdOZfVc5Cmy%2F6VLOHNGVKYKbW1t9fX18%2BbNUzykGjrhCN6MAOyTBGCNaOaP8TF%2Fea8bsCEIQcqQwEBhllCDmku4RCXndb7%2Bds7jPAWANgdzZM%2Fq1SKxtBs3LE2aLTF9hv41U9h9CAF4JtkmYK7pnJGREXKiVqvt6Ogg%2B7u7u7P35s41Gsc7o06QPflrduFe9P4Wv2UGyHErsCINaSRMK6cbwQip%2Fwme3Mf9m7hZhSrcgtbHB7Rdu%2BQxfFE0gHdhEoE69OGHHzY1NWVkZFC65syZY2W5hoaGBw8eXL9%2BnQL28uVLKyPZz7%2FBb%2BSDkKMXYIF1AePeeIq7uHsd13kQm9daitIP8MFLvCxE4VIsnY%2F5LubqmfnkgFzkkh2%2BxJfUJGtBm5rwwQcUfJSUgCqelgYPD2vj%2B%2FuRn4%2F79wVhX7kCrRaTQkuLoIiyMhQW4vFjEc%2B42R0AWaC8vDw4OFjxVFZWsuomEaof%2FZ%2FhM2aY3MobXIiFbCLrU6j3BSh4iIfZyCanszjtX463%2FxzPudYjPFqMxclI9oWvzVkUqjKUPcVTLsri4bM9a5WWltbW1paVleXl5S1dujQ1NdXb29vK%2BMHBwcLCwocPH965c4fF30xOtx9k8NJS5OVh2TIsWICkJPj7255VWYmCAgoObt2CObF5%2FPhxZmamp6dnTEwMpC6mMnGHDmzsTQkA2f8t3WMf%2Bj7Fp5WoZFkswzKyQCQirUwlLfP65erJR%2F4kFmcLaow9bWiTNeB7%2BJ4rXGXnjh06DSgzXzAbJZPF%2BTrvUOJ%2BoBM4IT2WSt8ngNT%2Fm9%2F8prq6moWVkpISGRnp6%2Bvr4uLCAmptbeUlPXny5ObNm48ePbJ%2Biixk8fh3cIdtEIe4cIQHIGAmZrrDXQMN%2B4qyynORzcn4pEIOVkr%2FA%2BA3Z8%2BCBd3Mml6rDxkZjr170fURPmJjT6R1brugoGDx4sVJSUkUraCgILbEtGnTNBrN0NBQT08Pi56MX1JSwsq7e%2FeunddBzlUOEotY%2BSBUgmmYxq9DGCJBt6CFOlGOcrZxDnI6RZbtAjNwBEdYMOSmeZhHgfeH%2FwzMcILTMIYZuRnN1ah%2BhmeP8bgOdXYFHRnB%2BfOiXRcvRnIy2F1hYaJjvbzg5iYGDA2htxdtbeRatp3gbHZdY%2BPESLctLfEUY2MiDOWDmtzaKuqQYspgpVKVvQ7IUHFxca9evQoNDR0dHSXTXb58%2BdmzZ5MOSFYlNVNiU5Eaj3gmOQhB3vD2gAdLcRSj1FSKNy%2BxFrXsdDI4s035n8RajHMap%2B%2FjPokiCUkxiGHBBCKQy7Hyea3jGGfNsIA5kmLDDqY%2BVaCiCEV8cGit%2Fv7%2Bc%2BfO5ebmLlq0aP78%2BaTRiIiIgICAmTNnymU%2FPDzc29vLtqV8VlVVFRcXs3lfUKgnAQrw0aO4fRspKUhIQHS0KKqgIPj4YPp0ODtDqxUF0deHzk40NaG6WldaJIrxcfO56ur67W9%2FS7GfPXu2VqvlJtmV7FN%2BOiyPeKE8WQSpsvOHP8Thv4GX3nUT%2BYdx%2BBZuGQ2cJX5M%2B3LtWhw%2BjLR1%2Bvfe%2F4XDP8PP4Ak9zRpA5qWqpyCFNUQNIB37wIeXCokFSGfsVbKAzGUP8IAcZ7ZANmIjt5eElTrPeIfYw89%2FPmGzptvdjM0UgL3YoHgqWvHBB%2Fi3fxPtrEySsAT4E%2BCb0jMbm8F%2FwdOZnEcIwGWLmSV7JiQkhIWF%2Bfj4UADIoe3t7ayeQl6qg2DLhSKU1EYBIG%2FKAkB2a0e73AAmuZot%2F5kxAzO%2FBXwbSFN9vAl81NDwqZXlWE%2FsBAoAO8HNzU3uBBYWO6Gmpqa2ttbaXrXWPkYhSj4IBcANgkxlmmYnU8leYFKtpSqwMIT5wc8TnmQKOUUyR1ifqNVY%2FsbOjIpiRuDnJ%2FIpC8DwsKiY9nbR1c%2Bfi9a1gA1mvev%2FjH05NuYjC0B3t5CSgQFHj2tl0%2FD09Fy4cCG5bGxsjFeWRzGzCa1dq7Jt1YzMUhzD2Cu8Yv8y1ZTYJjRh6sALZcEEIICVrxYArkgBoPw3opG%2FZma2Sdz3rw6sFRkZScn09%2FeXBYAeln1fXx%2FbltzKzmUy7YljVyKDgxEaioAA0oRBAFhXsgC0tIBd1mtMOMbQ2HEgKQXvqzz%2FInmMaNFFuMZsC4UMM6POSGaCfzIzlw1JYaexRSMQEYQgCgDpDJIAyL1ai1reqM0dnJDMCthh%2Fzxhu1dxdTZmh%2BD2cr0nFtgBNOzEkSPqgV4StW%2FUv2ZKNuEyRqyxP9Hd3f3gwQNMBapRTbN%2FvI7wWEx9pwAfySL1H6nWXYA1AWiQMCU7N8FzwZfP30RkSAVGCXlNFTEFe76iQtikcMMB71Siv78%2FOzv7TURme9ro0CkFFYX21az1UsJXdLAmCuVUKqXZAwH%2FRTJrEELyQ4kqvfSum9LrLbvWWCuNXad%2F7ZVef2afCE4KYr8bpVVW6l0d0uvP7ZntB3xXskiV83PgA%2BnU%2F4n%2FxH%2FiP%2FH%2FKzghHD%2F7W8zsh0ars%2FVa3DoPbLFnOmVivcTKss0U7A%2F5bTs0lw1BhXGNv4UmPEyDX2igVVmvBv9NA41GFcmSCWQCq1QuP2P2dwH%2BBngFoUKK%2FQII47d2%2FODHaJtrWPmZBu8cmiT7fxuoUS3RBvxA%2FvCXkhJq35j1SktIOAjcM%2F5YBXx%2FCurij4AS48D3pNUEfgj0vMnz0aKAj4w9XwBpjh%2Fjz4FWfYSfSaXiCBYDZ4138ZG0NeJ94MWEXU812IL330x%2BD6uX%2BS7QoP%2FQLHWP72tt26QxGqQV9NgJPJ6wnX8AAqY6ecHAP05Y6LG0AYE%2FBTpUH6qBb03Fqv8FeKkK2%2Fpa3ZgqFW278RGuAO%2FqB%2BwFnpq7XovYO8HjgtpDG68hMB54W%2BXeCJTS7qK62mygI%2FKfQ%2BaXiUJUugix0dh9DS3XkFl75BAKcYhx5%2Bg%2FzAASaPkoKbGekSNWFpWRgsT5SAQ8VD4uVYQjdUf%2Bp2BoUw7gMY9N6nZY5uFGjnZJZ1Bha4tThSM4FHwdGxYBNDe9l%2Fy0shw5j%2FDIehatbDIlBfNXSleiYBjIBm5fP3KoyaGzjY9jZAT9%2FejqQksL6usxNGR71iGXGhwkh4wDTnpfeA%2FCLiDffB7MRgkOxoZowF%2FJTAWiHopbMpsQMzF2h2F6mPowErHVHAdGzYz%2FgY1DjWFsEIM96GlHewMa2tBmKwuQJMBB0bIfR1TrKAgENrOGx3H0qI2ph2xs3dw1HRH06zXxW2oLUjORaeee7arArWnwTZvo7gXOW93ka%2BHQEUfCWs1ibCyWHAAOGqvxHeDEcZwYtbFVasD%2Fpn5nKyQnIzmK4kRJOoV%2FM3xyAQ5nZuL78fhBPJzn6d3uZO9%2BlHrgww%2BtFc9h8%2BtvxMYfYKO7CK7HWCl%2BcQ1HxB0fOUw%2Bri7Ej%2BYgXvme2IvEH9snAIetjUhE4l8jUU3%2FKCvETwrldYk%2FUbdUqY1oNvAdgwa0K5GEAIQA38MbhXSFh5uOoPs2%2Fnwh5qi1duW%2F2iUAFk%2B%2BciX%2BYqWx63Y1bv8TmpqYw2CT4rIKCsDwsE4AmptRW4uKChQX4%2FFja7MOj47CvQY%2FIt1G6n3h%2F2iit6rjmD9JdDS%2BEY0Y3dsgov4fIQAPLSTETIywMPypWgCqyf4%2FAfcm4Ar8d8OnNtupoAAMYIAC0IrWetRXoaoEJU%2FwpBOdFrIg%2F%2FmTN6IBKvqYAfyV%2BtMq1vAdcU%2BWL%2BmIjTYkffzIyPEP8oGkVf9yogakfYA0%2BwXAdstqNEhNxXdSTdy9RnP9TUX7x6%2Bd1cPcnxvw34yc%2F%2Bx4FkNDcfAg3if7h6o2%2F%2BRjnPidYP9RO7Tq10CTu7vE%2B3oLTGo9LC9oLACx%2FHPtGuIlDWDqdKB8btyI0lLcvWtxlVgzvtVYnYEMrmjk%2FQXvV3%2FBsRSAItoO7FC%2BJw4iMRGurhgZsZXlWItfPOBBAUhAgqvae7IIhYW2gk4ddNsLkTrrzaBPtdTt21i4EH%2BxCLNm6T9HrMTKHOQ8wINJ5JHBKACx6o%2Bdnbj9qVhIPyl4YgvbB60W5eUoKEBOjoj36JHlndXUoKEaaxUBCAlHOO%2BXHGrvSSgANP23fkRFIcr%2BbMyYgfBwxAaqXDW3xK4McFXpk8NoQlMhCnORm41s9gblwfKOYie9ip2YIdWrAZunCwGg9fRYnBPH67QSkhqgF%2BxGmwfyT0MaGYMJsWe3ttNB9k9LQ%2BwsE%2FcT03HUAP2YmqnIo25n1IA5Ok%2Bb42fx9RXsf%2BCAugnLUHYCJ2g96LFnI3FxZPxghfrlSIWFrSasTDjJf9iW1ACaESgANG7IGBozT0pG%2FaU5G428cuiyMsXRjW5etvq%2BKVYJZO6E18q%2FFIDsr%2BJ%2FsUihtTr%2BD4NG6iFjHf%2BUtGUmq9bQ24vsbB0760EBoGlsBDL%2FVcxcaexicC7BhcziOfCevXvWaBAfL8r7L%2F4CP%2FiBKHJnZwtDSbVGbEs6ISGH25sWNzedAOjhCU8KQKTdlB0WJsz6ll4HwQjehE0%2FxA%2F%2FFH%2F6x%2FhjrjZVkY2hkWztBD9Z%2BX8AAeYnhYZi82Zs2vRmtmQGqYKzU6csHNmf9gcNCw1DHmRXsENSDdmoRa3M%2Fo2KllpAUJAgXzbXj36ks717VTqSbGaKi%2FKUmSmakzZHr17w9xfxnj3D8eN2Hktmf1%2BoNIM9Y0ZbUIQiWrJqU4mJwp4%2BnXxSpQCJRi5ZAL5KSDyp1f21BMP1e0n%2Fe9WT5e9au1ckQS9cKCxcx4%2BzMZs0noOcO7hjZ%2BHJWLZMsH%2BkmiRra0V8Y4Ex3muvUWTjbTvBaTqmT5Qicuv77yM4GJ6e%2BPRTjI1NiG5BAMpRbjabptmKihLsbywvFADaS7w0lxDTGFzMHgEwTYJluMLVHe4mTg94bMf2UIT6wOcIjjwXcup4aPNQch4BbAN6vDBTqjYZlyVrszh73TqUl6OiwlpDOlSlVjEf88nZX%2BLLVrQ6ypmmCAkR7Dlv3tTs7I3A8klI%2FbT0dMXRgQ5S%2F3Ecr0KVpUlUjeRkIwsMtHcrBgEYGNBpwB%2F9ker7qlUoLRWmrwON5SKghpP9V2CF0QCZ%2FRndGBIxF76Ft2ayLiXIAuDhMXGs8coWys4LXqYC0NMjqUwRvkocFrs7bPGzUf4WAYf456fK%2BDNAvsPdNT6O7GwsWoRDhxQfb4ECQBvBiP17J%2FvTjMDINC5h5qAy2LH%2FaokUnOFMAfCDH7l7nmhKo7bcsgVaLfr68MUXE6IPDgq2ratTaDgMYQxibyuR%2FWkSOjsx638B%2FygJgDbqOq7bkwouG65ejULI%2FXBXKvyl4XEI%2BLH1gBQAlnoIQmIQQ7LzUpExG2capvGmPsSHbQopS%2Fk9IZmDMEnKtvewLVXusp%2BKnxu4UYwrwCMbYTZvFgJAs9CQr4%2Fe471eh71QIracpk1jWkgW9hzPWmekpmoYSRqTyiy2tu4JCHhD%2B39NmJ5i%2F34cOIANGxTHIAZJ%2FRQAUqXZCHFxRrwfG2ucpu9IVRRmbQ8u6pf8fJ0GrF6t8m7ciGfPhAYMD1sJxAom%2B9OMvHfuCPbP15Oa0eG1EjcXKYLh4qLTgMePJ5NNU%2FYnhMQUCo75KvEz%2FrMEo86MlQRA4KfqKdSA5w5rwMOHuH0bCxcKjpUQhCCSOQXgJm5apkujBWT2D1OXCy%2BdYRncHH5qiEcN%2BNRKg%2FrDPxKRLFHe9WZsjkCE8mnrVjQ0CJIpKJiwAAmXpt8Q2T%2FMci2brkn2j4qSHxsazs5qeJsP3EOUJsoTnv3ot5lYLmuUCnkz1qRnyEgIzYE9EopQquASLFmP9WuxVvlE527sbkTjJ%2FhE5%2FoZvoQwR2C6KWb7fxfsTybUJegFXlzGZZqlEC0SafxK5CtSpwFnz06WjK1jR77LX692WS3vOlWTyn3qBGBSMUUYDZWEOpImvy4kq5B8Nv0tkIk%2FFGjMu7dvx8GD2LFD7SP10x7gwcTh5NnkvUjeoaP%2BadPMLPIKrwrRUYSw71jejZPJO%2BmaGtDSonKxDjZtEtxuFTL7z8Ecg6utTcTKtJh6WQDUnoQEYbazZi6HZgRAhC%2Byvu2vEJo3O4lMnZ2tdpBtSeke8LBnNtVXFgAjMCDDvva229D2CI9%2Bi9%2F%2BHD%2F%2Fd%2Fx7KUrVX9etm7CuDBJudbXy5gY3Uw2wlJzAQCEA%2FBWY3UCFadB9iRKyEKWbqzGJYHgJ50rhcHW1uJlJ3SUlYug5nl%2FCpX%2FCP%2F0avz6Jk%2Bqv6UjfgA06sp5Mxk03FYe4bdi2FVvVm5bZvw995sP8MzA6anhl41MDLPTka%2BVCIL%2FTJR8uuhd%2F%2BJO5yWZGt6OxQQCmA0n91BEfH%2FmNsV1G87kQ%2FiCgsZis9esF%2Bx84oPaxPMj%2B13Hd7IwfSfatxVi82Az7l6DkGI79GD%2F%2BCfATq3syFYCODp0GGEFw%2B0bROxbAppIFwMjLQLT2dkuzXuBFIQrrUa94BIUnwsvL4dT6wpdTYxFrcNXVobAQL1%2Fi%2FwvQWvlmZ4M9eybI%2BvFjxeEHP1kD7Jm9apVg4aAglYuhGJBhJwdz236Kp5%2Fhs1M41YUuxcmyWrDAXHGRc2kqSLQcbntpsj9Nt4lGCsBww7CpAFhFGHUmzOJmJs94enSj%2ByiOfo7Pr%2BCK2s%2F7WoIlU0IrrnAl%2B9OmwUAPpH6uWIQii8Gu0jqMPBQAmovLax964rbrXVzyy1zKFBcFgGYnbZp3k%2F3TDBFcCgq4BNA%2BFZf2%2Buc1gqHlly0T1G%2FM%2Frwmsv95nLcULgMInOBkjV7Cpb%2FD30nU%2F5OfoPEMUGl1W04TXffvC95WMQkT6YJNmwTDWwCpPwMZLlBVyZMnIsq9e9azwlo0KUdZAxyFNMl4mghc5HCgrx7aqQtFvqapQPYnp3jBhqJ6eAj2X2miFBOiObx3c033HM%2Bv4Vo2stXO%2BHjExk4Y2tcnOLepSXE4LgACjUICGnRfED0ZAWhsFDvp78eU4hzOXcXVWtQqnljEzsf8AATYF0BjhddI%2FVuxNR7xiucZnlEAaNZCCgEAKioMnpgYnQZMciPW4OKSly8IWockJKUiNdAMs9mHkBDB%2FvPmKQ7n%2FHxn5%2FxJRvtqkJyMgweFTZ%2Bu%2BNh4x3GcAmBnjA50cMov8UtB%2BpqfkP1%2Fj9%2FnI3%2FUjrlOZr2kbhob0ID584UArFkzcfBqrKYAJCPZ4GKryCFsoRCFNLUnIUGYozAjACJwocOB3hRs94f2tWZLIEllZ6tZ2xveErGvtD5PZn8%2FP5WLQRiKAV9Tv8ztPBe5BSjQqqZGRCA01MKJVHsgLdsWABcXtQC0tkLQ%2F4BOAHzhSwEIRrD1GEJnwo23UV2NqcYIRh7gwRM8UTu5vUhE2jHbWk2kIEUWAMUziMEruHJZc3kUVmlhVNaAq0ZOWQDMSPTrQNy%2Bi0s%2BBaALXYo3DWnUgEmGJPunquY2NYnwLiX21OkbhoXLoriS%2Bg8cUPfeIzwi9dPGMW496DBYOiOf4BPB%2B5L9SvOrbGSr82kT5gWgvt4cgW%2FaJDQg0EifAxBA9qcZjZQn19XZXL4d7UUoKkWp4omLE1w%2Ba5YD2Q1CENnfqG2ePUNRETo68AcOrSNkag9I3DSVdJPbV2DFLFhM6MyZOgEwgNPlOJM5xARMKP5XePUSL2tRq3j8%2FY3lR4GxAPjAhxrgBz9ry8ns7%2BoqvzU0SAKABuU7GZZmJQBrLywMPj4WtzGFeIZnlahUeyhOrGdb86yxvxe8SP0UALXzMi7TTNaytCdcLTbSAGqqrAFTDRcXLQUgD3mKhwJAm0wsjUawf5pqLtm%2FmAIw5bueAoiWmT1bUD8FIDxc8bMeZPbvQ5%2F1CKeAnwgTvP%2F3%2BHterrqh7G9PJ0sfrl8XHF5SonKxJwTVG3G9zP5G%2FELyzcxEVpaduShEIU3toQDQ7Ic03HiCCFnoQIj%2FEGgdJ1ObaG8XxJ2drTg84SlrgKUZMvtTBgzgdAZhqNc6igoT%2BKoDHV3oMmySu%2FQ0N5G0W12tdoSLdgm3thbpnQKgR20t6usb6lCneKgP1gWAC1AAjMA9vBkBYBKa0UxFVDze8CaDT5r9CVI%2FbQ7mKB4yLAniGq7Zuy2SPwXgxQuDJyFBCMCmTVN7fLLzmEt%2BPvIVD9U9FakpSHE4lhCONINuj48LAXD5AxUAsU9SPy0uTvFVo1pmf5aEzQAS%2B1%2FmYGqGlWE2%2BcTJyjcKAG1sTOVavlwQ%2FsKF8htTnoEMI3LRagX7X7O71IAiFNEGMKB4SOesN%2FthKgCvXkkhi%2FCHAnMda%2FlmtJPpehVk%2Bm421JDE8CsDEDBxrK%2BvTgAM4ERjCbETDknXMIZpao%2BzszBTdHUJ5m1rUxxk%2FzCEWQtN9lcJQGUlra0KVUpTkf1pXM1SALJ%2FuFpiWlvFHrq78WbAylcXvxvcaJaH26iDJVhC9l%2BHdYYUousKrlAAHNjToCQANDUoALTIyMluzQzIzi4uTRSAEpQoTrIKNcDhWGT%2FVNUsISv5zs5dzhbv%2BSuDaV6006YJ6j9wQOz5%2F2WvTcDqus5z%2F%2FcwSCCEBgYxCCSQAAESIAmh2ZpByDHy37HlpEqbsU7TNk%2Bnf%2Fq097ntLW363NveNG2ce5u2zk3qxqks27FjS7EmsCQLNFoyEiCJwWIwEiBAICYBQnDuu%2FbeZ%2B99DmfY%2B5yN7CfXrz%2BLs7691rfWXnut9%2BdQD3ro5q%2Fj9WY0Gyn6gXRyvPcxciW9AYCXR2aAkwgAxqxZMzFT%2BrXL6ak8oKHB%2BPbQCGQGqJnUVOHosbGGhtMOspC1EAu1VE2NiPFxfCpkzv0tYMDoqHBwhkP8UjR5J047JLv%2FrFm6lDyWRSx4T4%2FvM9XmHj3CxIS7sTRfhkMEAMPjRDExwv3j4uRWR4c4w8RHE5rIADkZilCZAZ5qEABJesQ4L8ByBSEoSHcNJzFp93g%2BfJwAMp7uz9Anaf2M27htblm8QQTAyZNaJixMYYB1kgAAYdX8x6HlWE4GLMACE4USEoT7Z2ZqGQkAcv3HIpsJANL6CYCN2n18gAe0fgLgOq4%2FnuWqCvL%2BWPbzZj2TeAElBsjuvxiLtUetre6I4VuSYdfoMwQAw4jo%2FuzrlBI0qX3M%2B2hCdgt7edC5c6ioQFOTmpB8flM84vW96JMyADRxCAdyuEnZTPanVUUhSm3292Nw0ENXZ%2F9NQAIBEI5w953p%2FgyH6P4Miu6vAkD0wlJPACCXeMCdAMBTPZ0AiERkBCLU5ghGGO46%2Bt5j2f3jEKdmLuAC3b8CFUZXoz92BADjto4cubkCANu3W%2FTqdtmgq1FNt%2B5Bj%2FogD3lkgIlKK9ld1%2F%2FOHQGA%2BnoHAOwWLditbOaO%2F7PPCvffuVOfo%2FUzLuGShcsy%2BM4%2BAPDwoTtL37VrCQGQIQDglJe7jo6aXWsjGunZXehSM8YBIHXUde3sFDSR7%2F0nryknw8xRtAditGfOiHAoGMEyA%2FRdZPcPDfU4yhr3n%2FIa0YhOQ1oSNJdtbxffzb2cAUARAAz3nb0CYBzjcp7u7wEANlq%2Fk%2Fu7W4CFIs8YMzBDzfSh7z7u%2B2ExT%2BAJuv96rFczneik%2BzP8XNzQkMIAvQgAxsKF7ofYzM3gMGhUoYoMUPO0czLAaJWgIOH%2Bebr%2BdH%2BGrv60yWauw5499n37UFKi%2F7Bv2N5gnLadVr6zzzAwlXGbCfI5YU2NrazM9v77Nq20zbZLEm1FncpWUSH6Xbvm3%2FprhG3XqE1e8awscTm8KwUpdP84xGmpWqKkNvAPa4UCcv9AGXDtGioqxKY6tBEbafiq7fIKywDQxM4cwoHT6f7UZmxegzX6DG26qclDhZ4e4b%2F3NU%2FkK7gHAI1AB4DhYVGWxk89wiOZAfKjRCQSAPMwb2oNVwD09orZ793D9GgFVmQiU59pR3sHOnSJDUbqcEPo%2FsUo1idl9%2B9Bj%2F%2Frq6oSAOCpUBUZqTDACqkGLRm2BoBoRJMBucg1VIXWz5jn%2BJrj4yoAgulQwZas1K1M4m7rVjz%2FvAhZK8U%2FR3DkDbzxLt41N63NsncIMtKprExEZ6cyMy%2F1rqysFbtWyNdbZLu7UV4uwl9Jtu1k3Nm09mwfo6Quzp0ER2os2x7%2FFemasPtZyG6gtnudOSNCJ8nwFcuX3d9m89bfp%2Fxw%2Fw3Y8CSe3I7taubBA3FbvVG7tVW4sEM0OxVjTpLdf%2BZMuUX3Z6ii%2BzdBgwy7kgFTaySzuh4unFc3tbWKR%2FwTeKIABboNs3PVzWh2JI4bLEX3Z%2BiRdhqn6f4f4APTy3L5agQAo7NTy6xeLQCweXPgO6ACgJSiZ1ejWn1EU18pe6RPrWRHXU8eJnJrcFBffxrkfPb%2FwFeftWuF9e%2Fbp1y528BenI47%2FTpeJwCsXY4ppzEEgP5%2BhQGSNvD%2FXcr%2FeELOyY97e%2F1efyc66dw8%2FWrGHwA0Ngoj6erCJ6zvuybsAZWzG5jBjeh%2FNPQLF9TEWqyl7acgJSVFuP%2B6dbrO7MbOessMUFMqhSK0GMVfxpf3YZ8%2Bz2nPncPQkOdSzi4sWXSyG%2FjIANC9vf5t6P5kgNqk%2B7sFQBLZkvQ4ALAAC57Dc2ThHMxRk1Wo4i0YxrCpUoUo5Mbq7bIFLXT%2FYzhmwUL7%2BhQG6EUAMOLi3PS3maitN2gCgKE%2BWo7lZAB3yUeJxETh%2FsuWaRlR5urU%2BpbK%2BSV92t6KFcL6n3%2FeHhGhZJLwQcmlN0re%2BGTdHwYBQF26JBz%2B0qUofnygaz5TkeLFC4HYK1fEs%2FPnA3yLWmHetWozIQFZWeKue1I60un%2BUYjSUjW8PjUWbKi1sn9yNSoqhL8%2BfKgmCAAR0h9N7MBu7GxSwVoEu0al%2BJemPw%2FzMpBBh%2FoT%2FMnv4%2Fe%2FgW%2FMx3y1wo0bOHYMJ096ncbZhWdgBgFAo3btRkv3DIC7uEsAdKPbCwBoaHR%2F9ZJOEwAiELEFW76Fb5GF%2BcjXPzqLsxdx0VQ13oI92MPQJ%2Bn%2BjEEMWrNiXn4CQH%2FBo6IUBgSmkBC7atDXcZ3Ozc%2BkPiXS9FRzrzxiIk9rtrYK9791SwcAK66fk5zd33f5JbR%2BETEx%2BmxBwRvFe9%2FY8dQDa5djVib4SJNftqyQMXeugmVab%2BHQUH1Z2QE%2BC1gyAJ7CUyGOVWXT4LPR1ua%2Bv%2FQwW2vTxUSB2sBXYqWsO352P751R4dw9tWrsWuXnFiN1ZvSaP8X8%2FN17sg%2BDHY2o78FSpWfGdpPVaTJGgQtD5qFWTGIWYzFy7HcidZAUxPefBOHDukJ5U6dncKFh4Ywe7acIAAYt3Fb60NLovsnJMitlhbh%2FgMDTmUIAEYsYvk7EpFLsZRF2qAdL7o%2F62rieM57967LcjZ7XKjnJ%2BKmhXDSBViQitRc5G7ABm6LvsMRHClDWTOajX8C1pTdPwxhavIYjtH9a1ADvzX1qBEA6WRNuuZi69ahsRENDbh40e95JIPWmgQAYzd2y01aOwFwAic8jg8Kkhihg4QocFVfPzgYlsrsFUxA5PPYtw%2BLFmlOcBPI4p83Skq6eed4ui9f9nc5uU4tP8zGBAASOlfFlxXOXbYZz2nJDWWzG8oSGu4kXMYdBKZhDPPUMlZhlZyRAXD8uPv%2BrgAQQ2swMoJPj6xzf7cX08hhtFdUID9fxPz5cmbTJgEAwAGAvj6wT0WF2aP9F8rfJdpPvSqBAmD51AfKPLynb7%2BN115Dc7OB%2FaIRM7KVzy0D4DzOax3o%2FgyH6P4f6QAnSwbAeqx3rHsJwwUADNdJp6jU%2FRKfkcKj6HWzMVtm4dSnp3DqTbz5K%2FzKKfvn0mQzPX5pWn8xijORqWbqUEf3JwM8rsPsZ5bV3a0wYP9%2BLVlUJABADPT2%2BlXUPQCKUGSTVhmNaDKAsKxGtfvxsvvPnas0R0ddAED3DzHhcD41Ze98XHAubB%2Befx6ZmY6OLzQ0fDPj1QL8DX%2B3sODevQIAxMCdQO3TT7Mxuj2zMKsQhUXvF2EZ9ABAOQpPFtajnjGIwQDfoRa1DBUAsbHiyvOaNjW59pTdPxKRusHS6E%2BPrHZ%2FtwzwKdvAAM6cwerV9qeflpeU%2B2PeqU3Ay0oHPmWwm7WqByqANUC%2BPvvPQFpn50ckTnk53n3X5dx7frPWVj0AaNQEgFMHYwBoQtMkJoMQBAcA3sf7ageDANjpZn0x7tMGNIYx%2BvXbePs1vGY3c2hykEMAMPSl6P6McYzDcp07JwDAKChQMgsWCAYQAAcPOvW0GT38LgDoQ5%2FMANUBJINf6REAeQREntaU3f%2FBA0%2F1A5NZ96eeF7FqlaOjralpwauvxn%2F91fjk7yZLw%2B3x8SgpsZEBL72EiQmTK3rLArMJMtiPWCYAxK37N9GULhcJJm50IhL5iIGAdQM3alDTi141k5UlYqpkAGjtnh7U1KCuLvA1WKPpcX8%2Fa9PfKyoybt8%2BIDdp%2FtjI%2F9lkko9Eh%2BlQpcQAna5f33Lw4Jbvfx8vvihOvLP7e5WzF8%2FDPHp1NKK1PdEBoK9PuD%2FfzEUP8ZAMYMhNuj%2FHhCFMbkZEIDkZcXHOkxI80yb69Tmc%2ByF%2B%2BC%2F4l5fx8ghGjI%2BdjdnFKNa7P0XrJ0sa0ThdKz5xQsT9%2B1pm82bBgPx8%2F%2BpNNegqVNHF1SbvOAEQhzg3gxMTBR2WLdMyMgC81vdXfrg%2FtQ8xm%2F63owKP0quvdr118NChjw4JQjtKEhAlJSKkosbDGhnaHpow%2FX0XdsnzrgC%2BDaShHPhfwDUmt9u216O%2BAQ21qA1wQazA2IItclPYfDbefdepTyhCmeaqdMOkcZ8STaf7qzPYjPeenBQWv3o19u8XTcHN5coj5hnsYF7nlb9NwF33PVolBhRgg0DOBv7%2F98tzqi9vuVb%2BoctF9S3aOe14dBRhil8nI5kMuId7oiG7f3i4%2FIjuz3ArGQDpSJebZADjBm7wdxLLJem6PnggZmxvh6V6gAdcczvaW9BSh7pruHYBFzrQYbYOrZ%2BRghQ1Q%2FMjAOjQ1izU7Qnr6BAASE%2FH889rSQKgkdBpxMCA2Ukkg3aaiTbCF%2BH%2BJCJRzuQhj%2BHmvej%2BDFVNTeJQtbQ417dbAQCbvwMLYxwV7tyh%2B4u4Xld9GIfjEf8snlX78Vt2doq4cMGfaQLxG9%2FbE4zgQnshAaDfjPKKisyJsm3bqqWEnf8VoYgAqLfVC7gFoBrUMFQAzJ8vAJCRgYYGrQ%2BtnxGOcN0wadynQdPv%2Fv4w4IMPhNHn52PZMi1ZXy%2BSfOSXSrWf%2F%2BKRARXYvgar12DmTDaOv8J%2FtmzBh%2BYBQNGOGTwKkggABg1UNGQAOOQTAGpTDwCWcwIA52ptNbayf%2BwBfuar0wQmRjE6hKFe9NLx%2BTK8L2MY82Pn12AN3X87tquZfvTT%2FRmGa4xKH%2FDvTM%2FNA0MA8Cuo5rtwoWAA7%2Bebb2rdbIYuggQA1yQBUIUqFQCSza90BUBwsMSFPN2wq1MPFXsxApO7S2bijvNolNLZaf0HD%2BL6dZE6juMEQAISNmKj2q%2BkROCVYfTQWeQ3IT4L0Ppp7ulI11Ld3WXl5ZkT5ZmZiI9XcrxI7Flvrz%2BCI4Es6DZu16K2Fa2LsVjOCLPPcgJAtoBCttZubkZtLdrb8Zm8qKICW5wBcOaKSPqr406X44T7Tl0IrURBAXbudGRSUxUGVFaam88dAJRHtHEHACYnvQGAV6wJTbTgKESpAJAf0f2THfW06QxJoLDJFwMIANo9%2F0VgikEM3b8Yxfokrf8YjrWhzVgN3vkx%2F1dw4oT4CsRARISS2bZN3M%2FGRlRXm6pks4lwkWTkV3djN%2BnAJr8UAUCzV2Avi9ZPLsydqzSHh8Wgqioj9R%2Bj%2Bwv19Aj3Z1zTLf8QDpEBDPX4xcRg714QFS%2B9hDHDHydA96eCvD%2BWbZ3hlC0rGygjAnrLy53Scs80pAW4JgKAoTaF2evcPhzhrgCoqRHxmbxr%2FAYtH7iiNK9IrRvj0z0tEcPo7xe%2F7fKRJQAYs2aZK9TaqnfkBCQQADwMmDdPuP%2FChXJedn8vV%2BgWbjHk37GIXYql%2FBcSABiaTABgUI5Br%2FEADwJ3f4ruz%2BDrq5kLuEAAnBGf06fsJkzDU8e2NsGAE87ILyoSER4e%2BAsOYEBmgJqh%2BzOcOtH9GapE96t4%2BDDw2XWyBV6ir09Y%2F8GD%2BPBD5zz6yAAGT4WaXLECJSUiDCpw94dPAMiePgMztBRfhcZ%2F%2FvzFi%2BLv5cvaExKbp8CVFuYl2blm6JGRTgyQ3Z9zKe3JSYkXtVbsxq%2B9KqRw%2FTmtGhhQGKDKHhtrlxlgSrIjP3qkJujYZIBwf4ZDMgC8SA8AagmWMGj9ycmYoR5zWokzbz4l2ozNdP8N2KBm7uLuMRwjAAyMtsQxJL33ngCA%2FtKlpCgMUBWAf7oAgPedfh%2BHOKVN2JMIGRmuALBSHlZvZgsHgVcn8Go9Ll1y8%2FQmbh7GYTJAn6Tb7t2LzZt9F7fqW3oDwDZso5vnIEdLDQ%2BjrEyEJP4lA4aGtOf8VByyAzsCWVM%2F%2BiVH147XVABovQUsajA4aKTyOMYZWps3fuZMP1fJgZphTKn8KVUrcEb5eUZqBSaDp7CyUsTdu7rUli1kgH3BAhPnmKSXGeAQHSEGMcLAAwNAKlJjYxEXp%2BvkPNHjM1avIvDo%2FsUo1idp%2FYxudD%2FuRRIAjLExLUP3IgCysszXcl0bvyEdnd9AzRAADKVB91%2Fp%2BE01NqKqCm1t1r2yzZIdehU4CJz33OEkTpIB7%2BN9fbKkRITuRE%2BvPAIgEYkEOt3cKUu%2FZ9y%2BLbfa2xUG6MUhDB7WQJYlmXqN2uShYoSEYA7m0P3Z0roKUtQaLDuM4SHoeDV3LubN83OJHMtwaBCDTpU%2FvXrL5W%2BAMnLJHj5ERYW9okKXCg8nA0RIFdTwIWdfjkY0A8nJWLRIzpAxdP%2BuLm81RjBCADShSW4mi%2FHJMSRJjK5Ta6sZADwmBtD9GfMxX82cxmm6%2FyVcmq7leRnX1KQwQC8CgBFiwctWoYoMUJt5wvXzxK%2FgYIkFOgBcZcerFkypyBr3hwSACl99DuEQox71aoaGtHeviIgI697JszwCQPZxGq6Wqqub6vcnT4ocn6iajdny2ECWJZl6LV1VbtIusrOlkP9Rdf%2B%2BIIVhANzDvR70aG0aSGIiZs82vb4FC8TAsDA10YUup8r%2FL8mIu5w7h8pKtLToUps2CQAsWaLv9ifeqzgDIApRUdFRwv0dFKf7M3yK7k8GyL8jEZmEpBghjxN98gywYxd2FaN4FVapuVa0HsMxAmAa5%2FUuGQD6y5%2BWJjHAgtqSqV8dw5jc5Lem6wsG0PrJgjkOX%2BrvtxQAXt3f5Bc%2BZaDPEIZkBvSjX01mZqKkRMRjkHsAbMAGOvgarHHK0vqd3V9NkwF65SOfwzdio9%2FLmsSkzAA14x4Aokut8bLtaL%2BN206pjAxR0qyyspCerk%2FQMFwrfxplnybLMlKpokIwwEkEAMO4nH05mgBfFC0A4JBBAND9VQBQEgCSNQBMTvoFgGlkQBrS9mAPQ5%2Bk9TMGMfiJkcluVxgwMaElBQByIV8Om%2F%2B1H%2BABfb0KVWqGAGAI9%2BdfVbL76xfgv6x0f%2BPimT2Mw2SAPrl9O%2FbuxbZt0zWpKjcAIGxp364cl22%2Bvn5q%2F4YGNwxgBUYMYvxeWQ1qGGqTlpuVFZ0dls3LoOsk9TKsJjRxu51Sq1Zh3TpzK5s5UwzhQIdGMVqP%2BkY04tMru%2FsjbLfsZNt9PfzwQ8GAujpdmpeZAMjNlVs%2BnQxjY3prnoM5UclRM5KT5ebIiFEAENUEwH3cl5vJwXT%2FpOhox%2BPWVjHFo0fThkJzCkZwMYrp%2FuEIV5PHcZzuX41qfz66heLllxmgKiREYoAFmyFZ%2B1W1SQPIW5gXT%2FfPyHAFgAWaFvc3OK4CFWRAOcr1yZISEcuWWfFynuUGAPx69O5YxGqptjZh8OVO69OLTxjspYrWLzPA75U1o7kWte1ol5uhociW5LSq2lrVDoxoEIMkhv5UISUFO3Zgzx4TK3vySTEkLk5NXMGVa7j2EA%2FxuGU3HI%2BvjBdVVopwEgHAMC4dAKjoRdFRixbJv2X3txu7cwQAQ%2F6dFJNEAHiawt%2BPYplo%2FQzan5qpRz3dn%2FE41uCzkgwAPXizsgQACgOdmQ7Aq8p%2F1czKlSvz8vK0HnV1wv3b2wP27Glxf9%2BjddMewiEGHU%2FNzJ6NvXtFzJ2L6ZMrAFZhFV17MzY7ZenuBMCDB56q8InMAL02YRNLrcZqvxdHs2ao26gBQN5U8bDGbM1LuHQe551S3OPnnkNRkaHxhDI7796tJkYwchZnL%2BACPpMku%2BfEjRuoqBB3VtPSpQIAGzcara66M6tGImpRVPSCBfITGQAGRfdvQpP8OyEmISYmGQhXlhooAFygGpCWY7kMADUzhjHZ%2Fccx%2Fhjw41vj4woD9CqKhbH75N0nCQCG0gjGyjwiYKXu8VXnwzQNsmIv7QZOAz%2BrzIAe9KjJtDThN4zpkxMAIhBByy50Yfe5c8L9q6q8F%2FrwQwGA887WKldjWf8WRx7qkBifnZ21OHsxr73jsfTcpOgSJ3HyFE7p9iAIX%2F4yvvlN%2FM7vIDcXwcFuhs2YgdWr8e1v44UXsH%2B%2F%2FskxHCP7OtGJz%2BSQ80G36RuVlYIBTiIAGGFhhkrr3TkZ0cnRUY7p3AHA7smQ6f5kgNKIQUxMEpCkTdHaaulm%2BOkivDiy%2B9u4h44aPG90%2FwY0PFbr916YYCcAeP9V8Wt%2Bx4I5ZAAMY1g0VmL%2Byvl5c%2BYoBOjt9QwAi%2FZhGrbTS8lWtB7GYTJAn3ziCezdi127rF%2BJrBB9g2ZdhKJkXixV3GV%2BV%2F2n9Sz2yswUMX%2B%2BkklCEmvysP4Sv%2FRjcYRhDWrqUMeqQAdQhixgQHp2%2FTpqatDX50dZ3h8uLBrRuch1bEMInn0WK1YIJ6qvx507ovLoqHgUHo6oKCQliRdbswZLluhLncbpd%2FBOGRf2mTzK6cw3NQkGFBRg%2FXpHKi5ObPuHHwoT8anhYWHQ7e1ITMR1RJ2LOiOlmaP7379vdDlDGLplu9WClhR7Cpsx1XR%2FyVLb2kStsbFp2ASb2TGy%2B6ciVTT%2BCPhDXMO1UziahRNZVhjVi8r%2F%2FryB65T8dhkZSE%2FH4sXW7JI0wRjGhMfbrm7CJgIAefI%2FBAP%2Fv2rXub%2FN%2F92QdhaYI%2F%2Fxqwz7%2FhBGd9NpI21OE13AhXjEJyCB311NlpSgs1NEbS0slwaALGTRrHdip9PzMppbGbq7PR9kbfldXQoD9u3THrMgAVCP%2Bhu44cf6asVb10oAoArx%2F6kPav3ej2EM%2FwK%2FCEPYBCZWYZX2YNkyEePj6OgQXiK7QFiYABrtJijIpc5JnHwNr7GUdZ%2Fj10deDK%2BiQpCUEaKePhkAjJ4e36Vp0Ax%2BEWBVcoyco%2FszTOmW%2FdYt3EqBBICY7U7FpxGExjGQn4Y9m7BDaZViAAOLcbQURwO3furv5T8v%2BvNR3cw6MiIYQAC88IK1B6cKVXR6AQBJJN%2FLUhAAqKrysMmm9APgPt2%2FNAD3d4x9MfDbcQiHyACGak10IDKAnsS4dw%2FWSrmCwQguQhEB4PTw2jXh6JWVxsudOSMAwMjJ0ZIsSwAwaLhm1ycD4Ck8Rb%2FWskNDqKkR4a9u4%2FbP8LNBDLIyl8fX156FhmLRIhGe1YveEzjxK%2FzqLbw1ghF8JjPiOeaZIgC2O1wXEREKA956y%2Fd42aPXrxe%2Fk5PlnGcASHfN3X2m%2BzN2Yid%2Fx8Toire2Tufb2w0zYA9QrLXmYQ7%2FE%2B7%2FcYDWT41Nx5vRLmQGbNtmDSsltaHtKq7y86YhTctevy4A0NXlx7a607x5ARCkD1ZqEpOHcVhmQAIS5GRKCvbuRWcn%2Fv3fLZ0MCJL%2F0AQZ6UjXnoyOoqxMxBTZvYKSyGCMj2sZfjkWJ2D8WN8YxiSnd%2FZ6AYVaTEwE8ubtaH8JL%2F0z%2FvkH%2BME5nBvFqJFRPeg5juMv4sUf4Uf%2Fif%2F8zP29yMtVqqgQDCDHNT3xhGAAT7pPyQDQqb9fuL9zzkAZfNyEpkEM8veMGR6LP96N0eu7QOKU5PvScPs0r9BfEQCMO3esrUoAVKHKOcXcVSvnWAT89LHuq5ep7uAOGcCw63qtX4%2BSEhQXW7yMEDRiCZbQnTNQ2Kh%2FUi8ZeWur1%2BGNU1NNTWJcZib26IBdiIwGFNajnlfO7BIls6%2BdhwItJYhQE%2FjLj2P8V%2FgVz1YlKvOQtwzLFmMxwRuFqAhEhCJ0AhPsQ4%2Bg7xMYzWiuQ901XLuIi7JxGNsSkzs4raMbA982dEoRyJR9fYIBa9YgbY%2BuFwHw4YdoafGxRvo9PbqrEQuUxMBHAgB%2BvPUt3GJEYKUj0SEO%2FPCwsfcaD2A3G6R%2FM3wverphJM8yZPhVuPAMz30HBgQA0tPxtc1eP0KjqSMjmf3VldgNzJES3aiq8uAAUyp7Oxg9UlgnafKHpo5Fg%2FveV3DlEA7Ri%2FYiS03uXYHOvejsFNth4gJ67RqCUqxH4WURM5y3rQxlZb5ql7rNclzmPGQCqY4MSxeSKVj%2Fb%2BYB0ICGctSUowvKje8QUGgyXceTyFvGERxJQ9oiLIpD3DzM0wNgCEP3cK8TnS00J7T4tSXu9a4UAajUXPeA54N0nEqtWGRlJWLJ9DVArNROh0BqDH%2FtL8UBHyUJgI9LVQDAJwA8rJju%2Fz3%2BowHgY%2FQbdNxx09vgRvvh7U1LhfsHPokPlQr3t%2BSLyrpyRWJAOTZ7GvV9sxM8wiMCoJQgwBYpcRV3r7qMOOB25Ede1tpj%2FeaWCvcvtWgr38W78ZgbD6x1ZIKBEtpfNjo6UHrXWP2%2F9fE8BAe2HxDmvMI5T%2BsvByZ9lXd%2FfMfHUXZAAOAFXXKFwgCcNr%2BxB%2Bj4InZIrRopLNZDPLyBG4xACx0w2rHRPfunZzKL5jM5pbcRIyM4UCEB4BnzU3z8jjDHNY7mR1KYX3QVbjH0daWYnm0wrQOPYxK%2FZvEx4sRBgXNG3NRRh%2F2b4Ihwfx0A4AoA9yMPPN4v6Mdeeh1wGAcIAMYiRyYJ2At0Av9mpPhPfHexWfHeX5ZAlupoDkjNf5J%2Bf1P6neB41C41fxzAXL8rVVjgaHZIzZeMjydC%2FxIokH5fAL4rztZUfUXqtVT6fQL4G%2BCsc4dnpHlzrdg9qlqq9kv%2B%2BgvpV7BFdeukaq9Jv39f%2Bh2je%2Fo14GWLJtLpBWmeREdT%2B%2BJ%2FJv0Ks35GIT%2FOcQjw59KqZgP9wN9J4Y%2Fs0%2FNKVtzRKOm7f9txYUakT%2FA%2FfY2aCfwV8F8CWPIlaaKjWuL3pESspfvSLdX8UQAVXO7Eeal5wq9ST0tjV3raAP0ZuSo9e8fSvfCq%2FdKE6Y7mRal5TG6EiE8dmL6s835FRMA%2FoVGeeoq8U3m%2Fz3dxW%2FCAtw56xWO%2FiiPSo%2BMmUKWU0YaKLlqvC%2Bhoci5C%2Bw%2BHlRqR7Z9L2G9pXWpCIsD%2BA763RtbkJMbGMDiIe%2FfQ2YmODuNT7ff2gUy%2BmryM4WH09aGrC21tImPyYHhXLlbnIHO29HuuBPPcWlRXm67j5UQHISgTmYuxOB7x8zF%2FFmYFI3gSkyMYuY%2F7d3G3BS31qH%2BIh9a%2BmqpCfKEIwQuMrPevtGwkYiKFOQamS4oB7sdfW3%2Bqde%2Fi8jYFBQXx8fH80dHRcfnyZTX%2FB1PH8hWDnRJ1bu3%2Fh9rPnJwctXhtba3nZQU7lZ45E6mpiI1FeDgmJtDbixs3xPH2pVQxLJWHJxKRIQh5hEdDGOpBTxvaGtE4jnFPA7%2Bjb3DzE52e1sr2%2Fw%2Fid4iAQcD6ip4BAxJgIAFgtsta8D3vhQ74Wg5v6h87Jf7B5UzzR4PH0TbYEpCWgN%2BUm53l6Dipza1MHR2NtfF4cpbcehMdb6Nzaqk%2Fs44BI8qGSUtYIhHVKk04SpdyX%2BYDf6g%2BafU0hD47OioA0NMj3L%2BlBfX1qKlBU5PP2cRUEcCfOiW%2Fp75aMvANwyuXATA0JABADn38MRoahD3z5nic25xykJOLP1cvas4Ycv%2FeMgDwxm7ExnzkZyN7CZYkIpEAiEAEATCBCQKgD32d6GxC0w3cuIzLlagcEDfHmleTtQqrilC0GU84Zf%2BPh96legBERooL%2FRU%2FJ4bk%2FpfU5f815gF%2FBOv1A%2FGPuu6QkJCvfe1rxcXFKSkpdru9paXl2LFjL7%2F88qNHjyDZeO%2FUCn%2BpGXWd252O0n5%2B9atfLSoqWrx4sVz8%2BPHjr7zyinjwX%2FE0sMJpWMh1hLwtVhiBbduwZg0yMhAXh1mzwMV0d%2BNnV%2FDOeeCUpzfbgA0FKOARTRN%2BlTAXc2UADGKwG92taL2Jm1dw5SzO9qPfzcd0aX9TY0CtFEIKAKZN6fIfMiBBybQbH%2BVFZMAC5WeH2w4ZgN39ULKUuxksTTI%2BLvytU%2BftytQkfEKC3LiHex3oeIAHfi7VmKpdSi7RDmWgqnNZKxkQY65Cfz%2Fq6nDtGi5dwtmz4rdnKZNEaKet3eUhGRDm14s8fIibN1FVJdbw3ntobg7wY8QiNhe5mchUM7zAubmIikJvr18r1IlXl867FVvXYd0czHF5SgbMxmxGMpLZcxjDF3BhNVYfxVFeaavOGWHDNRSiUNp0h0YMjZUAEAmLpCyfDIi1qqSkbhwCvqdLbN269ZlnntmzZ4%2FczM%2FPnzVrVmtra1lZmZyJcmsM8z1PYdN%2Bbtu27fOf%2F3xJSYnc3LRpU2Rk5O3bt0%2BdOiXb7XMaAx7VIbgUwUszl9763WdQXGzfuBHh4Vqtq2KxgHsALMXS3di9Dds2YuNCLHR5SgdLRzof8dhcxEVPxyZiat0I9684jQD4RMTzLr62zT0D6P4JDhzR%2BjvcAkR0UfrQ%2FTvR6XPScQm5%2F90jdwLQVan0O9NR2pjmzsU6%2Btg6bN6MNWtQXo6jR%2FHggQWVr0uv9gtjrzZjBvLyROTnIz0db72FixcDmZzuz3BJ5uSI7OnTAb3WHux5Fs9%2BDp%2FjXTXSn069Ezuzkc3bTlqccmcKfkh2%2F2S9%2BxuWKwCqpS%2F1y0%2FuEEK60eTHd4A%2FVXx5ELgsharU1NQcfkKdVq1alZaW5gDAk8ARm%2FGXkGZZB8jnjHVWrlypf07AZGRkCAA4TFT9G2wLDl4cfOurv4nf%2BA37smXuqkcDT03Nrsf6Z%2FDMU3iK58H76nhsdmBHFrICPDa%2FbgCgzpLPcM8AWrt6Len%2BOgDYPAGA4WvCQUGAUa2KJddk0OWv9aUH3T8NDkZ4OGw213w2z2Q2MjKQnIxf%2FhKtrdP6aiEICUe4m8G84YmJmDULjx7hyhW%2F10D3z4FkFj8Cfs%2BRzA0UAE%2Fiyd%2FCb30BX7DBeQM7O3H7Nvr7MT6O0FBER9OuBFwd4pn7Cr7Ctx7D2DmcQ2BajuV0f3LFv%2BF6AEzy%2F%2F5JDEgNvw7hLeXvgBTmpW7kWilsS5dKrQ9QcxnNo7qOIZL0Q0NDQ50zl1jC5WTb3XmArKMS%2BNRSM2fO1D8NCwubMWOG29UGhwQHPx2Pffvg3v3daxM2fQlfeh7PRws8aGpHeze6xzE%2BEzMXYEEc4tRH8rEJRrDfx%2BZTBwCbFS5nlz%2FElPMqWbvD3DvErdR%2FeWVqdolXINGJTgMAkA7J3ykMsOoVHCeP1%2BcVK3fn%2F1d%2F9QI%2FdNOBAKC9zp8vfJZ3bcUK6E%2F5jh1YsABz5uDAAXz0UWCv9jHwU0%2BvRiuMQEQMYhZhEe0sFanaM7onr1ZvLz7%2BGN3dfixgGZbl2HKUi%2FS7aG5r%2Bx%2FJyS9BvDH5kpbm55utxdrP4%2FNfxBedstXVOHcOtbVitX19AgDcz9hYpKdj3Trs2iXMVhKBx%2BG86i1o4Z2HZ2PyrlCE0v2LUCQaW3Gv9N4PtkV%2F10wFFQD%2FTW4PHMXARb8PYani%2FqWmN1T%2F4rOBgjQUfAfSfbDDfhmXPyAFdLpz505jY2O84%2FJSN2%2FebGtrcy5qd9lQ5W2mbDKTx3TNjo6OW7duLeDhd4hzcUa3Cw7eFRy8ezeWL1f3qQtd93GfJs6DDUQAUcAs%2FdAVWLEP%2B%2FZj%2F1zMVZMXcZFxEzfv4u5DPAxDWDzis5G9ERtXYqXch8fmOTx3D%2FfawFdt87mpE5hgqM1PHQCslw4D3D49ADqmejuNjwdo9mylj9TLbSmd%2FtHlryVGrStGBrxjTWnXU04GvOy%2BZ1QUkpKQkYG8PGzYgO3bERSkPJKRMDmJn%2F4U7e2BvRoZ8AtPrxaEoFjELsESnvVt2LYXe3kBlGdxcdi5E9eu4a23%2FNiBHOTkIlfJ1NKca68nJ8uT5%2BYKBvgBgDmYQ899Ck85ZQ8fxqFDOHUKt25NWYkNW7eipQVf%2FCISlDMZhaid2FmN6oM4CH9F92csxVK5WYGaM9hmqoIKAAUbAwMYeB2o9%2B8Q%2Flz9x5RczuraHVi7HxG0TgEAuj%2BjBz36LmfPns3KypqcnExJSWGzubn53XffPXPmzJTSdp9Qnfpy58%2BfP3LkiM1mS01NZbOpqenw4cOVlZVuFpwiAWDXLhaha5%2FBmWu4Rqj3opdNAiBCACAGiFWHzsbsz%2BFzT%2BNp1f1JuNfx%2BmEcfh%2Fv38Zt%2FUpSkboDO57BMxwiZ%2BZj%2Fm7srkPdf%2BA%2F3LzMrFkID1dbgxgcwpDa%2FLUFwFTQx9nj6P6hCGWLEOzslAHgfBR4FR23sQ99dP9hDPs6Le4VIAO8HVL%2FSpt6i14e115UV6OsDFu24OZNPP00kpOVpwTDs8%2BKDv%2F6r4IE0%2FNqk5i8i7uM8zjfgAae2q%2Fj61rP9euRny%2BWNzho6t15%2Fej%2BGgCuCwDU7tkjt8SDXBw9itFRcy%2B1ERu3Ymsc4rQUq7zyCt54w8Mu2HH6NPr7ERqKb30LIcpNXIu1a7CmHOUu7mZQaUij%2BxNFcvNjfEz%2FqzB5ZFQAKF9KAGDA4vPtRVMPR3AwCgpEOOaUAeDSq7e398c%2F%2FnF1dXWCdIXb29svXrx4%2F%2F59%2Fk5W%2FvesZDe%2FFLWJ%2F%2B%2FevfuTn%2FyEJ0UtfuHCha6uLjeldgkAvDxjRhva3sSbJ3DiEi7dw70p%2Feaov7ZjO79aCtHh0EEcfAWvHMXRqeWb0fwT%2FGQEI%2BEIJwnk5Cqs4gk8h3ONaHQdEBOD6Gi11YnOLmjLDlG2e5q%2BpUHZ3LesXVSCLSHBrpi77P52u%2BtZs8XH2x0AoPt32Dqcn38VeHlKYY%2BGNn13xHRpm78T0aEOH0ZrK%2Fr68KUvYckSJb9yJZ58Es3Nwuam%2F9Xew3tzMTcDGZuxWUnRFDIzkZaGqipTb52DHJp8KELlZm1v7fXa2gESLiuLzbAwAYCcHHzwgblV8wbSorT2Rx%2FhyBG8%2BaaPYVw8N3DZMhQWqrlMZKYj3T8AyO4fAgUnZ3DmDJLMHkIVAIrcAsBle6066G4PKq1%2F7VoamTxJHero%2FvTBqR37%2BvqOHTs2NV%2FK%2F3OAZz3PWyr%2F%2BYJr%2FiUZAN%2Fg%2Fx0dHW%2B%2F%2FbbHCrodSG5L7vtG36s%2FffXn%2BHkNajzsj7KlsYjlqd6KreoDfrV38I5b91f1Nt5eiIU8KolIlDP5yM9DnisAEhORnIzwcLk1hrEmNLWiVX0eMv1e5Vk2o8%2F9W5qLMSeA1u4wd1p7h7sxooujj62DtNQ9a1GPyfQZtSGwPP5PVl2Nhw8xYwZ%2B%2B7cRHa0k6Vn0TT66c%2BcxvNpFXKxGtQYAKilJnO%2BpAPB6ruj%2BZIDarEUthevXZQCIDuyRaw4AJBOvIhGlpS5dQkUFJid9Dz53Dk88oQfAIizi3YZ57cROun82suUmt4tWcgX7TRUJRzjdX0WI%2FdEjG91%2FeNjHsMBPo5evtnatvUCDK92fYar21%2BU%2F%2FOwFXnpskEInDSXfMPs2J3DiMA4r7u91f1ZjdQEK1A0fxvBpnOZw7%2FUf4MFZnN2ETU%2FjaTmzHMuzkBWEoEnoTl12NpYtU1tczw3ceIRHaiZI%2BvePlSXazL5mALJNU1%2BPorXH2%2BLlenR%2FTwCwxUt9bPT%2BTvZyPPB%2Buu3eF2%2Fzd3ftPvclkOqmVFeHd97BkSNahjzYvBkbN%2FpXz27yk9%2FBnTa0jWJUS0VFYf58NxviWUlIor0vwRK5yct2Hddr6f5kwKhSOS1NACAhwcS7sOxiLNba%2F5e9LgGv6rrO%2FS9oRCOgEY0gBAIkxCQxiMHMMxhjKQkZmsQvSfvS17zmtd9LmzZVEmdqv%2FY1r03S2Hl2XCfEYBsBBplJDAbEIGYkEEIDEpKukIQGNAtJ9%2F37nHvPPXc%2B9%2BrKTtP%2BWrrn7H32Xnvttdf%2B%2F4EBozRqQUcHKitRW2veFiaFI9zdfCYggey%2FHkYhGcDASZw8iQpN2VaB7E8zt8n%2BNC0YTQU6mZuZacjORkKC3KpHfQlKqG2IHMVyIh%2B0fwUilC5y%2F3HTh1GCQRaj%2BAIuaBmcjnTWpNK8iZvcYDvaXU68jdusXqUZgAAWdjKSzSPGjcOCBUyg0kHhpH%2B1k3Gml07j8%2BPRAN3HMMMaMYihBsjvZP%2BmJpsRYWHi3oeGGseIUXrN7g0ad%2BHuRgxu5WhMleDSJRQV4dYtc8%2BSJcjKQkSEZ%2F7c1YAudHWj29wODERAgFuZ5U3LQIbSLBXEXzpMvhbPUvMwjpvrxkYiEBGpJqTGRtTXw6D56Fpb0damtHiTae4mU2b%2FIATJTYn9Tz5y18toBAAelZ%2FTKYKOyf6sMRNIYTR3N9VvNup8f79Osj%2Ft7281yT47L%2FX3bzR9koap5rmHmzDcUBeqYwqLR3wqUidjstJTjnLWopZVetBTi9oGNCg9cYibgimSEwnLl4sbarqe13GdslSFKrUTH8ts68yBjl4HHUHn%2BTyHQW1V3tYDfrbfo0Duj%2FWHv9iZYSvZP1OPTKtBVIeYGPm1c2sn2X8lOccyF0edBWjQuLcxF9mxW%2BDiRSxdinnzzD2ZmcjIwJkz3l%2FL5rANglMte3XubZXsT25XmmUoM142WQAWLTIOyxACcPy4VrfBCLYmzY4ON8KiAg0OKq0RjNDc2tcKrCD7z8d8ufkQD2UBEF%2FchJUA6NwSAHfLzyn1C8yYAQoAfyV0otNCAH4G%2FFzTOvnG5%2FuSqfEXFNwfS0NuAofgBfQBNyTTggQkJCJRaQ5g4BEe0RxdBauEtaClFa3kfbkZicgIRHD0L3TYFBW1ae1a3apV8qcudBWh6CzOWnn2cUhhYyQDLorD4HyQQw3IVzf%2BWtEAZT8xEr3L0Ovzt%2BixZdhm07HmQfp8%2FWegt1rkZ6MvfHX0tVLYv%2FbWbbJKzHetkuIdVFbi1i3U1SHRVLWzZyMtzTMBcFenwhBmwbPd3cI0Q2b%2FcITLzWY0k%2FUrUSkaDx6grAxPn2LyZLb4QwGYM0f0ucY%2F8Bb5vGNxlZ7j%2BXMnM%2F7Squ3vDz8%2FpUWaI%2BlaDPga8EuH3qIRTfbfgA1Kj8z%2Bioq4dYmtBAAOBcDKq7uH6Qxm12T%2FrCylJbP%2FIAbtMpYT%2FET8FEqmxtflx49NQ6gBJ0Yd%2FE3Jeu1%2Bs%2BKv%2BYhCVIwgJyNYk0%2FwBCYht82y1XZJ6zSlyQsSdiMMkixWZ2%2Bpidi4qWPStEni02EcLkThYzy2isjHXvJ1GhjXI2hifxenaj%2BiRQ7byuBi08uUKYum%2FAL4hb2Vy43PtEVpwF7JjKgdJZsZxiBh3tdnDSgvR0WFWQDi45GSgvBwdHSMSS2YkIKUqZgagABzV309mpq0r0j2pynNMkHvKoIvpRyUYtUquZWRIUZrEoB8%2FMbNFFoLQESELDwyGtHYBDf2JbP%2FREyUm0UoIvvfx314BLUAiDMi%2B3d2Kl8nTRKffX0NIyPo7UV7OwYG5C%2FqA9MmBvZGWRx7QoJg%2F8xMuUU9kwUAo4Q3pcoOlgE3nK9%2B0%2FSezzObqBwc0YGOdmyHMIfXW02OVHiDatSEHRMCEciXIaw5cmRLTc3imhps2oSOte%2B%2Fh%2FfO4ZytNx97S1QAM8ZKAxzCudSNBrKfP1qGvxU0IlAIfA%2B4olpUHvPnSPsOEM633wHfh7hDhtHXlGGMCvWTYH%2BCNVVrqYa8qHFxbgmAzv2d5SBnIRZadN27J6RIG3jNyP7pSFd6JL4vhQMBIPtTAwoL1eznAL38GwWCgzFtmllQgUpU1qBG4%2BxsZJP9F2Ox3KxHPdmf5nE4igAYz%2BjZs3HPns1bgFmzkJSE6GgDP%2Fv5QRaAp0%2Fx%2BLE4hFu30Nam%2BLC6Vvbgkv3F3ri5bKVVghKy%2F1M8hVdhcBTeKK5XnUby2oEJmBCEIKWjAxk0l9fbETn6iZPxk1630srKeFk7a2oKntcUHN50GPF2pvg4WGIPsNfLGuAsJQZ3tmkvHFXB91i0FA8xOYidYByrB5pUnuQxwRyD9eHrpRFNOKl3tNZ6d3Y9Viz9CbE%2F0dgIvd6iJzpaGMttzHa2Azu2Y%2FsCLDB3Xb2KK1fQ0KDpppHQMTfDdLWIR3hUhrJGNJpH1NeLLdTVyVys0wkNoJ0%2F7%2BX8We9v3jykm2WpGc0MrApVWlyFI5zsv15VkTL794hL4CEUAZCxrLNz%2Bc5nixZhzhzqlCEgwHo803b%2FPq5dE4ni2kNDtnu1OSKdhjOPiEBWlloAyP7UAIwSDsvFoJG0NcKZu%2FnATuOrL3x9VCS8Ajg1ivuvE2UrL0sBINtV9%2FYWvP%2F%2BQVRfQA2wSVrAEj5e3PMYcJnmU8k3PnvMr2pMykPsesj8j6toKoRCYWaFwB%2FHQqL37vxuPU524KL9tawFQPefiP2J58%2FR1obOToSFGXsmTcLEiWO0szmYsxzLN2PzTuXSEPX1ug8%2FRFGRdsdkf%2FK50ixFKc16kOgrlQWAIPtnZHhfACxAQs3JweLFSgdp7iZuapwts38MS1fCRVwk%2B9%2FADTdrxaKAFQGYCaymTXy26pvPqO%2BOPMXHC1u5UgjZtGk4cAB6vXsUbN8vqZ82bpzcuod7zEwtal255u3%2FjqrnLannkaMJBidsw9cPMRo4I69DFqyt%2BnBWCvjcqK95GrBbcvW%2FhN0sx818%2FHCf7TjNAqAbNe0st3pqrE9tGlBs9bSotTmIVS5JM5r10Bdj0NrDiljEGMc0FTc1ocnambsYXbpWqBO13CO%2FF%2By%2BegNdXcIUARCMEaJ9Nol8h7m1w%2B7OfOATitApmJKGtEVYNAuz5H5xonV12L9fMA1PSRtSkEL2j0Oc0lOGMocCsGWL3EpIEBowdSpqaryWOevDW78eq1dD4leiDW2XcOkKrtiZSVaNteiYh3lk%2F5VYKTdb0Ur2p7kZkfXlUgTgz8j%2BQ0Oz8p4BPS6rzt8fmzeLfQQF4d%2F%2F3fHJ6LRdEXrJyhJmAtmfhlEi2%2BXqlmyzGVg8qgVdkpcBBoMUyA%2Fl9vnxwszJ8pBE%2FgYS%2F88y9zwEBP2%2Faj3Sxw2vo9QAqhHwKU84UpsGOAbZP9Z0e8jsErnbDopBbKwcEBWCptn9NouH2%2Bx%2FxM6bMVsS%2Foen7K9i%2FXXwKvr7MTBgbgYECALQDPPW8NeOdkYBIA3x4AIQIPcYK6C4GB9%2BiEOHcPeu9hUzkEEBUJoy%2B3ei03pce7sQgPv3Mct4dSgAGRleEwDrw6N3subGjUrHOZw7j%2FO96HXpagImkP03YIPSQ%2Bo%2FhVOUAXcisr5WwQhm2nVS%2F38Xx0B%2B%2BL5kUnJ4dSj8w8Pw88OkSUhKwrhx6ukLFojfnh689hqeP7d0HeUqG2pkZwsLDpZbj%2FGY7G9HsN1CocbVLdnmyqjWVBZyxF%2BDGByAuErGS8HEXvDHKeW7h5wrvOl0%2BLQOaaL5UPE%2FKgEYJdZiCoR5wJEeaYB5PNmfVCK%2FOyR3sn%2BMcYxDkbAPkduXJHN%2FZ%2F%2BqbqgFYK38mOehqqjZ3%2FsgBdAUkCZ83Cik%2BcbnHO07e%2FX58y9ev1517VrZhQttRUVodYPm%2FOBH9qcGKD2yANgfXVYmNEAlALTCQgwNjTZn1luMjsaOHdi2TekoR3kRiqgBWrzJ7J%2BIRLl5AzcoABdx0Q2StbpQJ4AkhCSHhPiHWA%2B8eRNXr%2BLBA3F1nj0TuSBPRUYiJQXz52PVKgQFKWOpAc3NqK3FEXU1%2F1x7VBCikpUlzASyPw3eg8H7bOOhDHSjm8aXQflrWJgwC%2B3UOQhZ52RP4%2B282YebAuChICkg%2F78mmQfwfGGyPzVAfrdP7oGBgv0jIuSW3qBv0jVp3vRCX%2F57EmathjFUgIP4gwT5%2F12tY7%2F99z7VNyIfXp9%2Bu7bnMgZIlF3o0jhX4vC5EzBBbvail%2BxPDbAdKQ6a7E8jLwcGsofMJmvAjRuj2qt1UZBAd%2B3Czp1ISJA7BjBwDMdOCBp2jVmYRQFYh3Vyswc9ZH%2BaOxHZcNGrRgHwSQ4pSkayZOMxjIICweXnz6O62npKcDCWLMG9e2IvFAMT1q8XMsqMNTZ6dI1J%2FdnZQmAktKO9BCU0eAkGraO8rAF2nbah7SmeTsd0Yzs6GrGx9qbqXEXlITX7eH2TzsCCyAded58rlV3%2FieQhysnQk5KZQUkl%2B4cgRG7qobcjAGR%2FU9770McBrWh1el0sQQX4gWRexy1pv4fclZbfb3SInzJ0cGfvmfrsbG78eEExOpF73bd1KTpyTAqJ7yN8NAMzClDwEA%2B1rEYCz0CG0iT1k%2BOf47ndwbrBQQqAgQS2aJHck5HhgQBkqRt2trZ7N156SVmCOIIjhSjUsqPxGM8kbMAGpUdm%2F3rUaw7PXjmfF1aBkFeTQ2T2T05uSYotSC4oSD52LNmum%2B5unDqF%2Bnr09uJLX1LEjOdGXeDmDh%2BG%2B8wLwf5Z5gRewzXaEIbgDRhGRddeDkAn0VEDGszrTZyIadMwZYp98bSM51cSMXxgbKUB%2FwR81e6irHZHBf%2BxCQCDE%2Fz%2FjgeiZX0Kn6MCfNNm1BclqkyymREj2D1GfqfYktx70Ws9mewfYxzDAXqdXvWNIV6RfB%2BzG92w%2BH8uDfihJ2VmkyU1yP%2BnrfLweygDBoMw7ciXH6z7153Vgo%2BPEIDoaJD5MzNhiIZEf6uxOl4XH4zgt%2FBWFaqcL8WjJ%2FtTMJQesj81wNmc0lIdNcDEzmlpQgCiotDc7HJjOk2Ms2MHXn4Z69crHRdw4QN8QBLXwkgy%2B6ciVe67j%2FucWIQiRwEZXAb5NeCXSiPk0SMaXx74%2BBQkJRUkV10l%2ByvG%2B5VgNb28HO%2B%2Fj8hI%2FMmfKH08rvR0CwHQWh%2FMNQUgMVFukfdlAYA3YPBkhvc1QI1HeFSDGosIMzJ08%2Bc7EADrvURJdnjixJb2HcBOIBj4Z4DsmASdTpiEfvTT7PpxXwB0nnEQYwrlo9xdDbDD%2FkZ3GhEr2D1WfhfkDjW5mxATo4uNlQMh%2B3OY9o0JNhsBvueFHCnUqMZHag0YjW8vgtTso6qc4WFh2vFT5Y0a8J6znbGCeXozZghSIGOuWyd3pxpS85DXic5f4BdCzh1fUrL%2FXMxVmq1opQBUoMJZeBUVQgNaWxERIceTkSF46dQpJ3Nek8wC9k%2BJW8jNxUsvKR1UowIUHMRBLZmbhmlkf2qA3BzBCNnfuXK4qBe9VdGFSEb8v6GhgqqqSllg%2FVUCoIjBUmXSnTs4fRqkrSVL5A4Kd2qqEO6qKjerlQedlaW0ZPZvRztGDU8vzRagcPSrOwK3Rgl%2FiIeKomPxYsPy5bqbN51ogLKX7ZIARO%2FYcejazrKyFFP3CavxAxig2XXlM3Z7s0GXxUOBkwr1VH3Vwh1DduePBLK%2FfXIny8RIY3RWIuG6bF6VH9SAH46ep7s09X7iGhAQIEyBqK4BN6YbHJ6s9c4MBnENaJcvo7YW%2Ff3Ytk3%2BMhMzN2ETqfwDfGCcY88n2V8tAGR%2FEq7rCEs5sBQvvGB0MtelAGgjmpwc5FG58pSOOtS9j%2FcP4ADFTItzmf394Cc3ZfYnfTifpcqqzjpW69sgC8ArQAFUtMvTfSAZMcEkAEfV865eBTnLJABEfDzi4oQAuAGKBgVg5kylQxYA55Ni1fuMsTOAl9mgdycMM0ow9riJm9dx3SwAvFnr1xuqq%2FHmmxgasi1qqwJbvGtX9K5dUfOXHTqEM2fYce73VgAcwy6jucX%2BCcZ%2FW8QKdjcWiUzuNuN8BftHR8t%2BOKANTba%2BHntnV2OZsY8NoaEICTE3u7rQ3T22OyP179uH8HBMm4bZs%2BW%2BVVhVgpLzON%2BBDtG2kYFZmEXqjkCE0iPxeqmNdxtF4qiyMgqAHExUFDIykJaG8nJnkbs4kPnzkZsrzM9I381o3o%2F97%2BLdR3jkLB0mrMEasn860uUmZ8kC4E5qXWKvZM7QC9yTzAJ1daisREeHOCMJTFpEhObQZJD9s7KUFk%2BK50uNdD4pX934Y2sN%2BJH8%2BBpGj9jY2MWLF%2FPXYDA0NDQUFxc%2Fffp09G5v4MZFXFyIhWYNWLgQL7%2BMwUEcOGDg5XKEoCBs386KSt658yu9IuHR0fpDh0709UkCoNMJk9CP%2Ft8HATA4K0Gre69z86aJKlgLrLDqDpbqIRzGohyE%2FltUAet4YiWTBuQPBqIpH0%2Bs%2FLzriQD8gWpAYCAmT7YQgLY2tLe758SdWjDj%2FHksW6YIgC98ye%2BzMbsYxXaK42%2FArxnIUL7UorYJZV9Eg71SslKPBuhLUVuLpCS5PZe%2B5joTgO843y%2FVIy9PmIkfn%2BEZ2X8f9tkTJDtXIB7xZP8N2KD0yOzv6GK7jTjg74CvaFYKW%2Bj1ePJE2WBoqDA3EB8v2H%2FePKXjGq7RXM77quP2W8rbqAUgOjr6lVde2bZt29SpU0dGRiorKw8dOvSrX%2F2qg5o3ahShKA1pUzHVRyHkDRvg789VcfYsrl%2FH8LDFBB8fzJ%2BPF17Apk1Ys4YdEybgM5%2FBQPTxqqiTJYc6WetqsEioAXaX9kgAPKcebffeXfYnviw%2FqAFJ6pViFGoX6PiyYP8ulRtlVIw8wu%2FLTV%2BG3mqpK5IAeLSlP0QNiIvDlCkWPbz2zc1u%2B%2FFAA%2B7dQ0UFBgbE3ZAwDdOSkGQhACaEvBpC9idvY0ihuNJ8C7Y1OI2pVDKzAGRkoLAQ3d3ubygxEbm5wmKNxcgLSeqn2Sc4e15k9g82BMuNj%2FAR2T8Kd9bZuRyO0rrO4qHa%2FSn%2Bd59Cj8oNz%2FO7wM%2FhBrq6hJkQEKCckjZkZwszgWrN5NzDPfx%2BYNmyZVu3bl28eLHcjImJGR4evn%2F%2F%2FtGjR0fv%2FD7uf4APIhGZhzxz76pVSEnBwoW4exe1tWhrw9AQ%2FPwwaZKoqPR0LF2KhARl%2BIf48MiaIyVRJYgC%2FsbCP%2BuNZndpn489k67uPdxnf62Dw4F%2FlMzJqETgV5J5a0tjrwH4eGVg2jQkJ1v01NcL8wAG1yduDYpNSwvi4%2BVWFKImY7LdgaR%2B2niMV2rcB1shzJMS8%2FExasClS24GHBmJPN7rPHGZTZDZ%2FwIuWA92kI0c5JD9F2CBaFzEk%2Fwn43HyGzjpIGxHac3n%2Fw7J1HhbFoCeU1Br20TJ3MLz54KhTBg3TphWTJ6MrCy1AJD97avjJ4S4uLjp06ere2bOnJmg4t9R4jiOByGI5bobu829rHNWzo4d4n51dBgFIDyc0Vip6ymcehfvFqAA6XBPAFL5k2rnw8MxTKYH994Vy9VZPWFagtn828TETNH%2FUR2%2BBxTZhPAV6P6WUprIyUdQxyElzpdL9N6WvIWPUwZmzWLtm5t6Paqr0d7uoTfHibMvmz096O1VWhMwgWZ3egYyKADmdinwI2Cv5ixx%2BT8CvgWkGTuEnsx1UwCCgpCbKyw9Xenbj%2F20ImMhOuH9RomyX6OGpGPDC1hv7M5BNE7SgA7Hp26w5zcnUMy2QJPyRuruAfqBAKnpKwlACNClebMUSR%2BT2ALDw8K0gtRPGz9ebrWh7fdNAIaHh4dU8iYSNjQ07MYOXeMADpCm29G%2BGZvjEGf%2BEBAAS%2B1Roxvdx3DsIA5SAEYwIrqipA86nTAJ%2Fein2Z3uwxLDVgOy1GWkK4ROuwBIx%2B6jTpWGk3ebMF1cW7ENfNfmSk1AzHcQizek702X0XTM9srFx%2BA7sXyKQXoc18PVFX%2FDgy3pPg56%2FhgkiEQ2fz5iYsw99%2B6hvHzsNuRZ1hKRSLpOQhLf78hdpXdQpk0slTSWSpYmVIT%2FyclCABIS8PixtiDGjUNenjBSmwmHcGgf9h3FUadHJgenNzU3QLD%2FZNWAz0nmEjabpAL8RDI7%2BMIXuiUNCDB1UAAmnUNXrdakh4QgOFhpUab7%2BrRNpIhnZQkzoQQlZH%2FyCNwCE05T4TmeD8GCtT1GVVXV7du3Y1SVf%2BPGjcrKSq84V8DC0ENficoVWMGMRBm53D560HMd1y%2Fi4imcOo3T6k%2FDlm%2FUFZpdJz57RJ6eY8NzRBi7HsP%2FtLkKXCMMYaEIVcXVIw7fNdzQANcs8CZ%2BbdPnBz%2Byv0jiG%2FzOC8XcHgLa1GNiJPangglefxNNaGrC23BeNG94T9a8DatEDUvK%2BKoXF1i%2BHEuWWPTcvo27dz13qHPz3MkyQUFKqw99%2Fei3HUX2p8nvQvtZk2XvorTMtbao4xECMBfbZiAg4IDsVvKrVQByc4WtWqV0HMMxsv8BHHC6cduw%2FkX6beefu3ldJW3%2FBVI56bxdpCsf%2FX9vf5l8XRf%2B7plKaCLuIqIMtZoFIDISk80q1dEhTBMokDSerIRBDJL9qQFwF6GhagUSMaCjE50OxxsMwkywkQ8LnD17NikpqaOjIyEhwWAwPHr06Pjx42fOnBHfLomfPuNztLiBG2Uou4IrC7BgFmYlIzkGMeTYAATooCOPd6GrGc11qHuAB7dx%2BzIut6DFykm%2B%2FPit0uFYAMRPVxeePUOEUQEmY3IkIjWGOxET4xDH%2BMxdT5%2BirU3bbE2EafA0lbGIZe6MDWoSud0msNhYKKJO9qdEDJnYX%2BfR0o63pBvFVryfHE%2Bwbp2wmTPNPdeuoaQET5546NBd9vf3R1ycODMTSIq85FajeJFJ1BnIkJsF%2FC8rQ2kphg%2B6Fx6vTOk4MXHRIrkjI0MIQGGhmjccYMcO5OVh82al4yzO7sd%2BCoDTXdv1K13nH3ma1F1UAD5%2BamKFH8OeZHJAaytaWpA91dQR346kJFy%2FrmlVUj8HR5p5g7etuVlLuDpkZQkzgexPc0bcjsCbHB2ttNrQ1ohG0qXD8f396OtTWuHhav2yxuDg4Ouvv3716tXo6GgKgF6vL2VhyMgX7J%2FvdrgOQbJmtdDI%2FolIjEIUCdYf%2FhQAqiN3RMavR30lKocxbNfDq%2FzfZ7FVOBMAHhTv8LRpctcETJgmGtOqUe0yVl6zNKRZdDU0oLFR82blitd5ld2M3sj%2B1ADZi6GpSafX2w5lzUh8IgaR%2FakBGDU0yZo38LGyP6%2Foiy9i61Zzz%2FAwzp9HcbGHDnXub23BAsyZg3HjlA5eA15yq1Ey%2B4ci1NzFu0oNcKnItiFxokoAwsKEANBu33a6Ncpkbi5eeknpuIRL%2B3T7yP4jGHH%2FPP8vfulpUldJAiDwU7oxO7SDn9bXo64O2dmmjhkzMHs2jhwh%2BbleODNTHI0KtbV4%2FFhDxKwrLhkVpXTIAgAPQNKiCJlQgYoqVDkb396Op0%2BRmKhsd948XL2Khw%2FNQ8gPTXGASQRv2z34E%2FwbEzzCI5qns%2FdZiYBdSALAY6%2BpwdKlSu8CLFiKpS4FIBzhy7E8G9kWvcxfdbWbsVrLwCiozeyE7B9jiDE2yP5Ndsid7B8TY1ytydCk1%2Bk9X9neVda5oJz%2FIOy%2FfDlefhl5eQgIMHeePInTp0XxeAAP2D86GmvWICdH3fcQD20vOdmfLG1ut7QI9ldfa7sHYjekBw%2BEAJAmJk82Os9wJQCMkImimXBDd4PUT%2BtF75iep87NwVZLVlWhogIjIyaFDQ4W1LxiBYqKXPiaNElUiFk6xG1j5hobNcTBWdQAE%2B7iLtmfuu7J%2FqlAaWlK6w7ulKHM2XhZ8ebPNyZEhx074OuL8nL09iIwEJGRuDEFhVOAF12ufUgyN6HzZJfehSQAPCvekM5OhIXJvQuxcCM2NqLxDM44mhmEoN3YvQVbIhFp7r1%2FX1yO5maPgjHIKRnFVUhWN8j%2B1ABjo6nJoNfbJNxAhY81DdFDTw1Qn8roCdvg3kEbNI41eJha9xEfj1WrsHGjuBym8hDgKR89imPH4G3Y31pyMl58UViMSdGBGtTcwi3%2BqgdOxmSy%2F2zMNjssK9OVOSYCnavklJUZqAFMggSSDDWAckBRsAOySW6uMD8%2F2fk93NuP%2FWT%2FdrSPqZTrRl0D3d3iVK9fVxEyFZfCyet8967DaaTMnTtFhVAGTKCTW7c0BM1UUgCSkpQOsj%2FNk%2F0z6AULlBju434JSqpQ5WwKmZ77YuQBAXLHjBnCmprQ1yf66ifjhp8nsfwHgiQAw8Mi7ZcuYdMm5cPLeHkYw7xOF3GRzGg1LQMZa7F2J3bmIMfiw4ULuHLlE9rLr41P6UKNx3iyfwxMfKHXi4O1BBWe7O%2Fvb2w2oUns1OB9ZVbJgEtNcb28weMgNO5r3DhERYlrOXOmuFRLl4pbqgZJ4f33cfAghoY8iUSneWuk0cREpKcjJ0cUJ19UOIdzxSi2mkH2p1l0kf3J4B6Dc1UCIJaQ1jhzxmZkWhry8oSFh8t7JAGR%2BmksrbGjfrg%2BWIOjWVYX%2B%2FJlcYN55uPHS%2B2gICFmIyMoLBQfnj%2B3dkFh3rABu3dj2TKlr7ERFy9qowHWlVlthKKTtcndbu2dQjOPIrRihTqGj%2FARicvFzK4uFBfj9Gls2aLujjFxRj3%2B8OFjfH70kSjq1FSkpMgdgQj8Ir6YitTlWP4QD5vR3IMeHXQhCElAQjrSl2HZdEy3cFZUhJMnce%2FeJ7MVyyKX2V8nX42BAcH%2Bzc1WE8j%2BymG3oIXsP4ABW8K%2B7L0AtWnANyxayRYdnnDGT43%2FYvL%2FVH8Is14LEucGBwttjI8X9UBSs8Ldu3jvPbzzDuo9vSDmNePUDeut8VaTSePiRAyLFsHHR%2F3xFE4dw7GbuGk1ieScgQxzu66O9G1oaIATlnQuSNwmBaC2ViiiSQAyMmwEgEJFrqSxqoiFpI96Uv9R7JuMR5M95v3r%2FHMB7Xpq7jDNYaxfg0W2Tp3C9OnYvt3UlZCAr31NVALptaICT56gtxc6HcLCREIyM7FypfhV4dgx4WRAuknOwGUoAKoCu4ZrNLiJXwCbNmzYtHZtIEOVcBqnWR6ahOT4cVHngYFYvdrhmHb8AcN0qfr7ceQIoqLwuc8ZK1hCDnJoT%2FCkFa296CWfBiOY3BomuMMSly7hwAF88MEoAzJ4aRrZn3EaG2R%2FvV5FwcYJZH9lr2T%2FJjTZ8anDElaYl9KtTQP%2BWfrtED9k%2F%2FzRJecf5cdPzb4lxxL759sZT9oNCnLojQLPOjl4UFCFxzAuG6cOwOBOJGdwZj%2F2F6DAqj8VqWR%2F87kT5O6yMsvz1ASLeOiEZhIA1gw1gJT48KEyIhJ5ecJSUkTrCFrzW29h%2F1zsm4sHnlc3L9N1bHc6ROfZHVIpwS8tvxQWIjoawcEqSgwJwc6dWLcO1dVoaUFfnxAAdpI6p061clxQgEOHBJG7Btk%2FK0tpkWE8E4DXkFEzuKWmfNOmZMyejdu4fRiHC1GoafLICH77W3R14cEDcajcEXdOUOSePkVDC2qAavwBw8f8Wl6O3%2F0Ow8PisGfNUg%2BKFiUR7czNiRPi5PftE0Ly%2BwGyADXA2CD7N6nJ3aDc5BjTELI%2FNcCOI4mzj3kvMJUGPHI6MFz58VwXhx06NrvWiNu38dFHOH0ax46N9pQtA3Bra21oO4mTR3Dkfbw%2FiEGrr3PFJZ5r0UX2J3eroEUGrEOSBWDrVvNCc5GRoQgAVSoXE3IxJ934eVtXBPZtwz7gjufarZcEwD24v4q9dLzzjvjt6RE71imfKMbcs2OQMz%2F4AO%2B%2Bi8OHNawbFyfYf%2F58pUNmf4Mnlb715Mmt1dXjamqwadON85v3vzfuvV70ap3NuLnhq1eRlibogNskKHJtbYI3Hj2yywp%2FMPCxaN28iWfP0Ngo1H%2FJEkGQLsGLcf48Tp3CkSMYHPykt2MG2Z8aYGyQ%2FfV2jpHHrWyR7E8NsO%2FL4Iow3ITJXzLwRecj5wEHP86s2aK5Gffv484dlJSguBhVVd5yPAd4153xj%2FH4Du5cwZWzOHse520HBCIwAxkWAlBeLuqzvd12sKMjtU8%2FHR3CD7Vkzhy5Q%2BjMXBQWylKYJ1m2akII8HXJPk4YRl%2BRMsh%2Bb76JlhaQUleuRGamawfkz3PncOwYTp%2FWtmJ2tjATBjAgC4BH0W8BkliYP%2F%2F5qZqagus1B5o2NWG6mz6qq4X954OPdQcT%2BS%2F%2FIpRg0SKkpyMlRWj15MkIDoavrxhAlqdIkBdqa%2FHgAW7fxuXL4sUGD43PbvOrBrge2imZK5D9%2BxBj9Eb2b1KTu%2BieNEmw%2F4QGYxfZX%2B9E6yuAGdYhPhxF3k3%2Bfm27%2BzEpQ2Os7ZI5xfPnggA6O9HaioYGPHqEigrcvSveNS7SYzc1ouuxOyEPYagPfc%2FwrBnN9aivRGUZysgRvei1u7bM%2FnXwN3fKrO0A6iNVehyeKV3R5vgZm%2F5GDSDxAW%2FgE4JOW%2ByeVeqRI0L6ucH585GWhqQkREUhNBT%2B%2FjAYMDAgauTJE1EgHHbjBoqLUV%2BvbXHevawsRGYr356ghCfLs%2FYoDSuk330jIwVHjx5E9QBqgE3AeruJ%2Bi9YwMd%2B94ULwqZNQ3IypkwRBxYUBD8%2FcfIUgK4utLSI066sFErgAPnip9v41AwXozs1%2BYtBTCVi8o27GxL0rleTu3BB9o%2Fh7RUXGG3UCMA%2BsyjYA%2Bw1h%2FiTUade8acOrNrdfGmEcNqu9p3kaOTQkFEAnj4VSWtrc2%2BRHkcbyH%2Fs5tYoAP3oJym0orUBDe3OpSsf0zH3PWEKBoAyJwIAyyPY4zw8IQCHsf0wJph65mK6UQBS5Y7v4pOC09hf99xvVZWw48eRmoqEBERGIiTESAMUgGfPBA3U1aGiAh0dDp3YiSw7G6U0NflcK0GJp2Fa0vt9yf5p9Fn9TwEfZx%2Brq4V5ir3Kj9uzPP5sRBNi9yLW3IKa%2FY1eYsoQayIHvTRIe4gFGCPs3TtWjj05C68uMmZbM7qfspeUjBRVV5lk%2Fd4pPOpi6V6UkrxMPVyKC04BGkXre2O6O3vQaYn9nBcWIsvTPIZNcIE4lqXKI3GbAmDM43%2Fh48W4sXRuwGsGTDFAZ7I4A143iH7P7edAlCj%2Bb%2BrwTAfDFBheE90U%2FFD10jeBXaZVE%2ByuegpYaRo9B9gnnn8BdKuGFAErHGyNEpAp3UFhK%2BBXhB8q07olR0Zsk2pb%2BXYUyHKas1clUdY5Ne0YD3zfuPTPDIhUHQXt16M8CsUs8DoQp4o1TuqR8BNx911szaH9FXTdqugLocuxzAnp488s5ywE3sVs4DemOH8NzNCYuBekAlEf6V%2FhILAYSTq8ybqT7c9gaDQN%2Bh4M40z9Guy2DruUSGOlc2%2B3DOEYcNX4%2BktpiNMqIJ%2B%2BbXkqbTz7c4hhKb5nGhQoHcLPgHg7W3aS%2FUTg3ywHvyelV9vh7QEqVHFV9GHP96XrqoyZB%2FzW4VFYXUrPTLqTCcJd7LeAfm9UPZ18S1sx5QJlplmtwJ9qm%2FUScMcbcd6RXDmCj4soxo9HaioSEhARgZAQ%2BPpiZAS9vWhrQ2MjKivR2QmPEBeHpCTExCAsDIGB0Onw%2FDm6u9Haivp64Xhw0B13fpKpYPDxQWIiIiMRHCx2Qe%2FPnqG5GY8f2%2FewgX826APOW3ScMA22xArpcsFm6AnrTl%2FJLE5AipPpZZx8HxoSWWhpwaNHMBic7FgHXRKSIhEZghAf%2BAxjuBe9T%2FG0AQ096HH3OOhhBmbEIz4CEcEI9oXvCEb60d%2BBjiY0PcIjPfTwFPHx8cnJyTExMWFhYf7%2B%2FuwZGBjo7Oxsamqqra197OhETPgS%2F%2FOqEFQFzDX1TR1E8m9x0WLcm%2BbhCl6cgYkK6fNlRgsqjriahD9C0jgkqTqq0FOF%2FXhTDGP%2FGngFHUCB9NKE5ceROh34tOorFymlvS1Kwipgy2iDEJQnRq%2B19H4cD4%2FjQtPeL%2FmXYc92wN%2F0YRaQ9hj1p2wDetM2FcQ6zEzATFXHgCC0vWVvDshNFzS4RxIQS9QBe53P%2BrF3UmwEazsb2Vn4zTfwl9hzDdeuoaLCqytY4usWrWG8NCwUXIBnOTwC%2FMJqws9sXPy5oO0kL8VTCxzg4%2F%2FYfnEsAJMmYelSzJuHtDRB1VFRCA01C4DM00zirVu4fBk1NRojIdHT64IFmDUL06YhNhYTJxoFgIwvU19dHcrLcfMmLl4UQmOLb4ufb1pwri%2Fe8CVF%2FUC8JyQYsrMxZ45YgGFTtygA9E4B0OuFtjBmuuYu1MgX7GIhlWT%2FfOuljYxu0w%2F8b4t4DshDs7YBmepRfrjoh7Pi7QcivEWLRCKSk41xygLQ1YUnT1BVhTt3cOmSSLUl4hCXhax0pE%2FF1GhEUwDI1xQA8n4rWutQdx%2F3WeP81XIiEzExBznzMT8NaYqiyALQh752tJP6q1FdilLp3lyDO1iyZMnChQvnzJmTkpISGxs7ceJEWQD6%2B%2Fs7Ojr0en11dfW9e%2FeuXbt2iTt1AJFsntq3K7HILACvY6r1uDftnM2MGfi6hQD81M6kWouecRjHPLyivnzXKvGDSjHY6HulFzSgwyLSCxcwfTq%2BPh1Ri0xdQmjuorQBJ05YB2xZfmuwZg%2FWzjBRjEDzNfyM7H9BinmgFF2l%2BNZCRMof02j%2FgFOOBMCmtlkYf6kWgNYy%2FKiUGm7Mt%2BDqfud7%2FbKFBtTZvT9qBMBryEQmLwvZPxsVvInfILEm3sJqqZavXxe%2FXsVC4DokPm8xd%2FJuDuO%2FAfHifRBDdnb%2Fs3RJ7lWQBn3JGxpQq%2BRbuwAsX47167FiBbKyEBxsZwA5a5FUqjdu4Px5nDyJo0ddRpKRgXXrjF7j4%2B2P4Y3NyUFfH65excKF%2BPBDXLliPcaUQDPn%2FsYPfn6Ulx9i61bDmjVYtkxIl8Q11qCklJRg%2FnwcPix0RsFS8UOCCVJ6TjveyVKnvT2y3hJZ%2FN%2Bl0oCrvsImTAjr3bwbq1eTIEVSROg26OkRBXr2rEgsc2HCJsOmdVi3DMvmYV6gWnJUKENZMYpP4uRBHHyO505OZCmWbsTGVVjFSxKk2roCUiEX4ksNai7h0hmcKURhIxpdnnVqauqGDRtWrVq1ePHixMRE2wEJCQkZ3DtQX19%2F5cqVs2fPHj9%2B%2FOHDh7YjxWQKAM2sz%2F7JSKb%2BMSq7w2VQYVlOiWGm9mSpvBhMXZ2DGcYt03kifM1d70irW4xMdJkBF%2Biw7iDPyxoQHm7qWhOJUipvKRqNCdcp2mAwDklBylqspQaMM3vuwNvHzbKRSGYpZUksxBfkDgrFrFmIi0NDg73ALHcWi9iZmJmIKeauc3RWZnxfBwghCTAH5AD%2BmhOjs%2FDsIajiJH0T9WfPQJxKdebh8%2FPE7ZMFQLauLngDqZKKkkYQYe4cwhBN7hqqEw3bHc%2BwFoBQq%2BcYwZ4A7N6NXbuwZQsmTnTtYMECQbUpKYiOxr59grYcgILy4ovYvBlTp7r2GhiIVaswezamTBECVFTkKGjjq5%2Bfzs8vDK%2B8Ylxj3DiHridNwsaN5Cexu7festCAMUuvErCvr87Xd0rvV76CHTtAoXKCoCCsXIm0NERGwscHxcWhCM1F7k7sJGVT75xMnYM5NLJYCELewlvDGLY7bAu2vIyXt2N7hLpaHYBsS0tDGhlhP%2FY%2FwAMng3Nycnbt2rV169Y0xu8K8RLS09OTk5MPHDhQXFxsZ9CzZ6iqQm0tkpKUeLhBewJgBtmeZqfLSgB0FvRFt9QAc5uLkv0ZgIeQCY1S%2FVXga%2BRe1af3gdfI%2FPLyJHmSNgszL8%2F0ndeARUIB%2BM1vHHkn9Uvsryp4eqE1mkW6HOXUgHa0T4TxRvNYaPYFwBJkf5q5TXVhPPfvm3suAMttkji6ZAmf%2BR56CEKQwvt8STQKmg0vkbJolAFFA6gHWjLiGOMlAZhhU1S8gModJPsPW1xHseNO4Iejz51HsBGAT30Kn%2F0stm%2B36n6CJy1o6Uf%2FeIyfhEkWN4Rsu20bQkLEy5tvWu1PBin3858Xle3ra9Ffi9pmNPeilxUcjOApmBKNaOUrqe8LX4DBIG5fSYmjLYgM%2BvoG%2Bq7bw8gNOTma9j1tmoimvR2PHzsRLa9CxOnnF%2BE3W8QpVFMLoqLwmc8wwkC9fk%2FNxs%2Fis8ul26YF67GeZdeGtoM4aPcrve3BHusPvANtbRgYwPjxQiOTk9UfF2BBGMJYA2%2FgjTrU2V135cqVn%2F3sZ%2FPy8sLDw9X9XV1djY2N3d3dfA8JCYmLiwuiyJkwc%2BbM6Ojo4ODg8ePHnz9%2F3o5fsjA1wCQApGlqwBmccZIBhwJw6pSTWaxti%2FLmujQZFVZP59Cp3nmhts%2BQ2V8KqRvUuQ8k9jfjo48wfbqwBQtMXVlZRg24dUtnI1rLsGwt1mYgw9x%2F4waOHxeOLFGGMmrACqyQm7IAFBW53gMHWghAGT2VWQ8yyHsdrQboFG8XPZkegQg19Uci0vUcUszmzUYZoADISlBe7ln8qZL52%2BRDLQB8owaod2wwzZ0K1Jid6S0eYwZLAdiwAS%2B%2FbMX%2Bl3CpBCUVqKAG9KHPBz5MNKuUKWbxmcetWoW%2BPjx9ioICqzVYzS%2B9hE9%2FWlCKgou4eBmXy1Guh74HPRSAUIQmIGEu5r6AF%2BhfHubvjx07BEvfvw%2BJOuzDz2%2BXX24uTOzPY3yAB01oYsBkq3CEJyJxHubFIc48hxqwdi3u3MGxY2OcZJhq28%2FXd7cv45TZv7kZt2%2BjtlYkbXBQaCMJl%2BSTmYnYWPNU0ujGjS%2Fev59bk6uwPxnp7l3U1wtpJAIDhVKkpAi68FEd6SZsInvdwZ1qVKujYXq3Ydtu7LaIkaxx9apw3dIiBICOJk8WbESnTJTOeD1TkLILu5jbf8O%2F2e4zMzMzNzd3z549pHKls6am5uLFi6WlpY8fP3727JlOpwsNDU1MTMzIyMjJyeGLaaPhnDg4OMgxt5kZK8hETDaUQPanBvjBbxCDlmRrvHaxsTpSfXQ0XzcCf423V%2BLzQFycEAAmi8m3MwmsFmsBoOrQZOSLnxNWtO2C%2BokVW7D9c%2FJl2SslBDUf4INzQgCsQfaWNSA01NQlCwBNxRwElZgXcA3WmLtYDZxPs4E03ywAU6Zg1izx29hoE7OKxsmhZH%2FeHZWjUjsCADXnwQMZ0Kn9uI94xCu8z99gBNuOGQBuiScveyarw%2BJbQACW824tF2wga4CsByMj2tZnkT2BROIz7G1siCdnMJ4dz1A6RqsKMYqHSgBEqf0rxhwqtiB%2FbNki6NYEsue7eLcQhRdwoQEN6mkTMZEJ443MRe4kTDL2btqER48EVasklDRC9qBjhf2ZgXfwjnQBzj2REqfGbMym2OzBHvK13BMTI47m0iUUFTnaxQY%2Fvxf9Vq9m8VBReAMYMMudMfeil1eaEfJOLcGS7di%2BEivN85YuFax38qTQ5TGEcti7hQCwUIkTJ8R%2BSkoEqbW2CsL188OkSeLqL16MzZuxerU5zIyMLUtWr7mwBg%2BEUhw6hNOnRX3W1KCjQwyYMEFkafZsrFiBXbswdap5be56IRZaCUAOclZjtT%2F8zV179wrlPndOsL8aYWHCKRnwU58SUiSBIs3p13G9BCWWY8O2bt26c%2BdONfufO3fu8OHDp0%2BfvnXrllVeFi5cePPmTY7PMSl3SEjIiy%2B%2B2NTUVFtb2yHvTUFdnchVZ6cISeRURw2gUentJpw8P8N4HR%2F09T0IrDCdu%2FxBEgBbyOzvo9wLLsdFubSM36EWwjRTv9Dar2I7C0%2Fx0G%2FoZ%2FHT2tBmO7%2BhwagBublKTElGDThhoTsy%2B5OjzV0y%2BzdYXFVj8lBXhrJ61JMr5Z60NGEqAbADsj%2FN3NbrBfvzjtuFQdm9TiOd62w9uIlUpKqpn5fdbkpv3sRNCAN%2B0ofM32JuJjJpPmoCJOaytOeKq8fbpSgBa8AFvgXcpTbOCLyb2tdnnQxgWPCLkWHI%2FsPDdvROFoATSADSgQzg7w%2Fg44Bq%2F6tWiTojDZlAmn4bb5%2FBGdtp7WhnBbeghWz%2BCl4JQIDxw8qVuHpVLQALFgiajY83zy1AAd2egKqaVYVwD%2Fc6DB1BCEpEoiIt8%2BcjPd2RADCHP%2Fddu%2FMKcBVX92HfYRymMkGV%2FSY00W7jdg96whHOQzZ%2BCwnBrFlITVUH7BD%2Fn702gYoyTe%2FFf4UgqyAgAgKyWSAIKO57gwuYRnvz9Myke5LMZCbL5D%2FJyTmTfzLn5CZxss656Zzk5t7kdrpnMhm704vYxr0VcAFBsVtFFFRkEaEKEJBdAVnq%2Ft7v%2B%2Bqrr4qqogpReyb187H43ud93%2Bfdnuf3025TN4NkfZksO1cPcb%2BHDuHjjwUJkPdVjIyIcqQx58jCPj5C94Bo4FeorWt3keiYRx98gE8%2BQUmJVeiBAWF376KuTmTY7%2F0eVAbORGYa0lgYagpSvOmkWebzZgsLcfiwnV0z%2B48fR0%2BPEPDvfld1U1R4jTYCkJubu3Pnzri4ONVz%2Fvz5%2Ffv3FxYWDg0NTY199erVhoYGEr3JZNosHZbg9Ly8vNu3b%2F8XBckG1CEaU0pCAhIUAdDZ2TipyywAzXfv1sXV9YTpwsSryQJQXm7ndU2KAFicZP8GSy65mB0qAhCwR2L%2FEISoTpn9SceOAlGFmZLUAKa9AlkAaGbCJi%2BT%2FXOQY5lGkqNCcLIDSPNrtALA3D971t7mzelNjbASALJ%2FrcNtC5hsItlXAp2jue6A6afy%2FgqssDvm%2BnWJ%2BquUDykFz%2F8vnGcGyAKQJSkBqcZqWiLTKlHIgKoB1IPWVsd7%2BUOgPi6uRv%2Fdm2G845s3bfhECIBuQj4gv1ihtpg%2FPzojQ5%2BZufCzjM7OTEkD%2FqeddXQu347Ll2kWAGbc%2BvWCFswgQR%2FGYbvsr6ISlfMwjyn1Kl5VXOnpQkIXLkRnp%2BxgHjPVVBhhLEOZI%2FaX0aZrK0XpOtO6XdglexiPLxIWJojIHn5vx1zcyrn1SalQrG50272FQQyewqllWGYRAIL1TsJyTQBmCss%2BfGgVFUIADh50OPzxYxw5Ig5MpgsIYMVfARYsX8CeEyfEPBv21%2BL2bRQXi9TOz1c8vvAlo8UhrhnNsicGMbYZz%2FooK3N2gosXERMjXnbtWtmRjGRWyVzMfYInsicyMnLTpk1bt25VJ9XV1R0%2BfPjAgQOPHj1yFLi%2Fv58DgoODo6Ojk5OTZedLL71EbaisrGxvb7caLdOxWQC4AWqA3bChoYLk481MTgF4fLduAzZIW08WfdT%2BwcGpExnQKqarAmC%2FNGX2J42qnnKUk%2F1LUOI83OnTonBo3KaAv7%2BiAR9%2BKA8g%2B2%2FHdssEnoXsz2mOIZF3rVpTfE8WZnQ0bO7YcocIJfsnIcni4gacC4Cz%2BzG5S2IOAulU3qdZ6ZMZ3d1WvD%2B1uO8yI3D3c3yulQGaP%2Fwtg8LDRRXJMkABkJXg1i0H%2B9KnpOj1mwuwWxKAGvOv0ci%2BcZDzx%2BU7EF%2BqAHh5CcrNyJB%2F9bpM%2FY3FZuKcKfVrx7sgA2YB4PHNdUX0oY80PW2aEmdxNhvZW7AlDGEWLUlKkgTgLFtk7YXMMHOS8T6a%2BE%2FFdvthb%2BFWg65Be4CICCxY4EgA8OT8k5M4ScWysL%2B9W7iHe4zcjvZoRCsuagtDz6DEdW7IrAWjoygtdV6oAr29InNra3PXrGFrteR78ECw9LRTmfSUAVUAiEhERiBCFYAgBAUj2GpLDx86vFkVN26gvl4VACIc4Xz0DnTIzezs7NWrV3sxp804f%2F786dOnnbC%2FDGrAqVOnUlJSVAEQR169mgHtC4AZVDJqwDzMo7TbxCTD02SYTEKKHqkCoHazqq3hDW%2BKJc19AbCDrdhK9s9Fruph5pP9adPObW1VNGDvXrOLmSBrwPXrjEz21%2BqKwv6c5hgsjRrUkPh4eNlDAUhLcygA5FYrem1qEuzPLHxBCECAlvoXY%2FHUMcx8LfUzr51gCEMVqKAxi7RKkAxLHmLuXGzcKIw3L2uArAcWFldA2ktJmYvYlYJIubBGBiZuPpkYnJCHcd4EPxMTtdQvjFnZIIJwQwoOSfY0cEE2JAHQ6UQupKer3mpU86CP8Xja%2BROYqEUts2o91iuuRYsQFSV97eN%2Fr2phmvGwvTl76EJXD3q0JBsUhMBAh%2BMvouI8zpPfpxVDI4zkLIsAhIQgOPjprtkdXH2IL5vR3e18lNjs%2FfswGkXZm8Hkrq4WdOYcjN3WhqEhcWMySPdaxp%2FEJM0ywdcXfn7w9lZz%2Bkd24%2Fb1oWHQum%2BuD3zURkZGRlZWltq8c%2BdOZWUlf125ldra2osXL27atGnZsmWyJzMzk98nT560Gvf4MRobBRMlJcmOBCTQbuKmTUCtANTV4e7d%2BqHhOwMYUO7BgQDI7D8Hc5Q2qZ%2FLDQ9Pt307daaHnuxPUz3DGJbZvw99rtzJuXNCAGhkJgWSAITXtG4f374N2yxDmRZkf06Y9p5RSw3QCgDt7Fn7g9lpJQCkMwrAtDA54h1RzDpnGe8Q4QhXeZ8fC7HQZsDgoBXvV2sIxxWQN2incEoWAFUJtFWj0HRuriIAshL09kp93eHhC8jdsbHqjsORk2PKydExsBCAmxM1E3KSTkzkjusz8LqgfhMDzpunrsC3ZhCy3KNHovmGRKCZ7vG5neu8KcVxJCWSALCIqEj%2B%2Fqq3DnW3cdtq4BcOF2tDGylV0x8qWFXggvrjyna1xyNDUVpMzBiKk9Tt5SXMAZ4Al4ZwyZWrGcQgld%2FSJvfRnhuuUQNceznmVn%2B%2FtstgEKLg0hkHRQ6pAsAT%2BsJX7e1Hfy96rSaQBtatQ0WF3PoLu6n2QBZ0%2B4iNjV2yZElYWJjqIaffuHHD9Yupqqq6efOmKgChoaHJyckMa%2BCxtSAp08wCkCgSN9FGAJjIWgG4e1fYoBCCOtKHcMndPj4YG9NOlAXA0ib7c61pYOeqAhEos7%2BWQWT2ty0rpyCryxpAUpD2F08N2F5j2Fa0LZRVJoMvzXE0F0D2p3FjsnKTsPjyUVHo6LCl7XmYR%2FZXpUJ%2BUZcEYJYR87rE%2BzL1c1c23U1NFt6vqtK1tWk7Ta4uIh19BCNf4AtarClWlgFZCSiElpEiQcQrKAJAO3QF%2BFu9fklKiv4eljAbrXaQmKhLTBwvKBjnxUtJOj7%2Bw%2FEfZmDRoqmbG8e4Xl%2Bv1zdcv15vd5umZ3C%2FkgBERyMmRnWNYawVrS1osRrouPhJqe%2FhkcbhK5mrMGk%2BdDM8Bam%2FEuhxZSh1hWZpOxWWWcYtif1bXRs8znwY1zpY6WR2l84oHdJyROmQapMv24hGvrLMAgJ5eejqIuni8mXx4f5bxMXFLV68WOtpampqmJ49Lairq7MZz5gOBYAblpCABJpNKJnedeYDyAIwoBUAUr88yJrRbAVAXsshHN6QzP4kUNVzARfI%2Fmdwxq1oLS0oKqIAmN54A%2FKjZGzbtq3GsLlmM4zmaaR%2BDmqxrlYzbChjGMNkcWpANrJlDwUgLY0CYDuRm9fuX2H%2FgQHrUfk7gDlwA%2Fl2P%2B2B%2BVsi%2Fv5KMtb8PtYGykxlvqgnT7S8L8xayrVX6pQ27b2hQcecM5zCKbK%2FKgP8DUe4Eo%2BVsnMntuZi3xWppL%2FfkrLoHb1eDz31Wv31h7%2ByvJdXYRZjiNnjL%2BWds16uBz3Ms3rUi199va%2B%2BAdeZdb8JPvp8zA76gEP88%2B9Te6RrDQ%2FHggWqqxvdXeiyHfi5w%2BANeEzTOOZKNh0SEkyLFol1g4MRECBqUqebqQZUSvaVR7qULS8aZIGruFqO8lzkKq758%2FG7v4v0dFy7hlu3UF9P%2FjYZjdZv8QD4nmSYWlQRERGRkZFqs7e3t62tbcCWL5xhdHTUaDS2t7dHR0fLHgZkWNtxbW1obERPD8LCxLqISEQiK%2FMhHqpDZG6X0dws2L%2B3F%2F2SAPDscllOFQBveFvJSXe3YP%2F2dgf7dZinL%2BElsn8OclQPC5vsT7NMNbka7cwZCoBuyRKQQDhtm7%2F%2F9m3bUWOec%2BOGYP8zDnVlalyyP7lcKwC0czacRL%2FUo5lWYyOWEvbx%2F59N1QDHZbxP%2Bfv7zmRKYn%2FzyPXWPf9gNH7z%2BvXrVVU1Mu%2Ffu4fpIG9lyOL4sWTTYQITsrhEIUoIQMhyImt5VuZPM%2FEdeYi3tL318Pt%2Bm76NVorSeZhH6tfrNEoQo1%2F4uwvf%2FB2RrMR2%2Fv828B9oRjMTQ6F%2BkyIAY%2Fox6DVX9YezoQF96m06EoB58wQLmzGAgX7Wixt4LJkKpwLAEsvONqWlISkJsbFkDoSEqAIAZ8njBH8C%2FPCp7%2Bm54OYLXd1MPWdwJhnJYQhbjuVK15w5yKUi5Ap6ZVqSOFtaTK2tuH9fR4%2FRaK%2Bofqq250tQmxSAHnK0m3j48CFnqQJgE9MCUTUNWLtWblEAaKoAMIm0AkD2pxGTmKyTNGAFVoi2dpAEUn884r3gZbWKHdyXKtg%2BGJTsT1M9j%2FBIZn83a8qC06epASQV%2BPvjn9leswQf4Nf5MTws2J%2Fd7uAWblED%2BtA3X6KWuDjB9FFR6OiwjKFGpiKVprS5ENnfjgCst0vSAiZNmthO0Etmn%2FplVDja%2FX%2F8oLeqprfqet%2F16%2F2D1wdwHRrhd4ogzfcPJUb0c%2FHGQlI75i%2FvCF1RFLo8I2z5csSwZP5%2FqxEp0oGkxBnE4DXdtWu4Jp2Tj6ZfsnvJtwr02RHfN4%2B%2BeaigvsHQ0FCikL4BBkuoQCnUEqZfnOKJc3GbjtHnrFMSAD8%2FYWaMYITmzgrDLglAWBh27tywefPpNWuQkYHAQEfhTDM55YyE4%2FnjhW9T0oAhDH2KT00wvYJXcpBjNSCZ0pAsPpgFFIB790wUgLo6XU0Nrl8nSWuGfkf9CggICNQ86NDQ0ODgoLtbeyRBG5OwM85aAEjctCu4IjdlYlfnqQJAWAlAcLAYx5PydBLI%2FjSrVcxdLmIe5snszw%2FVKbP%2FHdyZ8YtRiyUN2Pjaax8Bb8nOXUDj6dMX2cFuN0EBIJ1vwia5SQGgaQVAZn%2BLFvLpyf5jY25v3W4lk%2BD%2BUzKX8A%2FAWsl8RetbyPg2uSMjH%2FnXRToqRlWbZg%2BPJM5%2FxwWNMiM0FGR71VasgJdXjbg8fGgeMgqRdVe0iqaNR35PKajfUYDs7Cjg%2ByjHe5vx28h8efe33zXUXzAM3LljVZWW%2B6E14PlAEgAvvrX5sYEJTNDcCTIqaQCnzJGatgIQyv9paXj9dbz8MjZtchSFi5rka5Av8c%2F5ZnOg03m7uo3nTq66GenVV0EDAKPJ%2BD7eN8BwG7c3YINCi1r4%2BUGvF0Z0dJjIAteuobISpaW6nh6bsd4S1OaoBHf3NTY2Nj4%2BrjZ9fHy0MS0gL5OdmaRzRL4lIpGmdsoCIIOkRvZvb1easgCMY9xbTnt5qF0B4DbkVdyBzP4MqnpKUUr2P4dz9jPHZdwsibyxJH%2FLkvzwDMWTX%2FOw4fSNxpKbD9y9ZYDsTw1QBYClSQE4f94yQFKEpZoJnFHr%2FjrKKd%2BSuFdlyHqp%2BZH07ULpvIO7a%2FFPa7FmjZD8%2BfPlORGI2ImdtGpUCw3QKUrQhz7LVJcK0zS1knkhpHuV%2BqOjbed0o%2FsKrtBuqwKQYudZObegQBggUrC0qLQ4Je23Fy7087uye7fOaITBgKGhKRogR%2Ft8QHYPzODe3YH3LMUhI%2FQCC8xHCQD8qQrKjbLMvvlNfOMbSErSzqFu38O9B3jQi97HePwET4QAWC5xjpQq%2BGs3tvEiyFU3Iw3Ai5eBIQwVorDKVLUWaykAy7CM5JWEJC942Q6OihKWm4uKCmRmmk6cwNWr2u2bJDhqurojCY6aFlBayM40iemDEZyAhEVY1IY2WAsA2Z9mmYdRWQN4UqhDP%2F%2Bcnz7wsRIAUj9tbMzO6rlSVm61fcEc5JD9X8JLqqce9WR%2F2tO%2FVT7y84vyw5eEwywA4afD6eEt7Md%2Bd6M1o5mMzuvipbEZFyf4PjISDyQx4VWkIpWmjH74ULA%2Fr80OKmz%2B2lC%2FBQtlBdgkjaQEdGIq79pHB44eRWmpYH%2FVmIpmyCydb8qXBUA2PrGbVyK2EB5uIX1ZAKaiCU1XcVVmf9qAzM8%2FlswaYWEK%2B3t5ieAduo7i9cXFKa26b36T7SVLTAUFOgrAJ584ujVBfT%2FDM4ckAOPjwsxg%2FduhgGkQBARqmqM05V39%2FfHKK3jzTS37X8TFcpTfwA1mMBORAvAIjyYxaX0Ffy7%2F%2BWv3dvILogEvaKfAduCMtt2gE2x3CqfSTGl66BORSB6MQUwc4vg9F3MtQ%2BfMwdat0OsFW%2Fj5mSgG5hOMS9AMnOPt7e3uznwlqE2bmFaQCdrM9NwnNYCJRAqnj7Ung%2BxvQ1ykhju4owjAwoVidEwMjEYemREsaS%2FHdxmkS7I%2FTfVQXGX2H8Sg06nUk3POg2%2FERgrAuqZ1%2BIHG%2BwOs%2B6N1LB9ulNXk7lXXoIYmCwBBAaDJAsDPVFOq5d3J%2FjT72Kf%2BaGGH%2FZUxxeaPf1U1wKXq6e9HcTHKyhQBWLNG%2FCYmqv1RiNqFXbwlrQzQFIKeDhkZFuqnMbunohrVMunLAmCys2Urz%2B7dgv0XL1ZOWMwDVBb3p7SKlOPmgZwcEwXAYNCVl5vs3d8%2FHsLzgFSlIyPCzPCFrx%2F83AniJbG%2Fv7k5BjwB2VzGli3YsUOwhhmHcOgzfFaCkk5NEthLnBnDowHOcQHYbLNwD3oqdGT0Ch%2BTz2IspgDwNwlJKUjJRGYWsixDo6Px9tsiYUgYDQ3yCR5LUIcESHB3W0ES1CYDDg8P2x9qTdAUABp5kMVlFgX09Qn2b262mkf2pwZY2vIEo5HsTw1wFN85ghEss3%2BgqAIFpP6jOHoXd51OLbVDn9aIRCR5jSZn117g9y9cyNnyv4ED9OTr8rlRysADPHDrqsn%2B5PU85MnNtDQhAKXcjiRm1ADLUGcCwCJ2YbG3rGZM%2FXIVo6O4cEHY6tWKEtC4dTN00GUjm9aGNq0M1KPebryICIXxV6wQv5mZdsaQGWXel80qeSz4HaBAYjwvub1tm2D%2FjRuV7su4TAH4Al%2BgqEVJufnzIYmEwSBkQJOlvcDPgaPAZyRKPHsRkARgcBADFqmch3k0d4IESQKgguw%2FamnxRdatU1uXcIns%2FxE%2Bso3hgAdNz%2FwGZgmUv78AfvSit%2BEG5KttlDjoQ9U7phtrNDWSU%2Fg9B3PIBayojdhIDqIeKINCQrBrF27fVlmyv7%2B%2Fj4xrRmhoaFhYmLsbCg8P50S1yYAMa39oZye4R%2F4uXMgW6ZsGM5%2FLuEv2nUK%2Fj%2FCINUwjzUGdcO4c2d8iAO3t4lzd3S5uW2Z%2FPfSq5zzOUwBKBb87v%2FwyS8tB%2FuebBPuHIxzSkODu7rQzZ9JSzkRGsmUKN4Wzl4%2B1X7ffrfrpQhc1gMwob3vxYiEAvMuuTh1vRrkcguRE9m9pwVcKMhuXlQkBWLNG%2FK5cqe1fhEU0yptWBqpRPYQheUBWlkL9slEJ7F6RlvopKo439G9AKy9LkoHFTCiyP01GH%2FrI%2FkUoEo2ODhQViZR78022qALUAKMR776L8XE6bgHHJKt4bncpCUBPDx4%2BVF0LsCACEe4ECZQ0QMWoRQBYVnq9LHfK2%2BEKy8M2gIPs%2F57ET8nP7TKeBqsl%2B8WDr2TW0CnEMYGJWkEAtddwjQXwm%2FjNRCQqY9LTsWIFoqMFXbJauro6ScdmREVFLVq0aO7cuU%2BePHFxHwEBAZwSoanFTgkOJ5CjaZIA%2BMGPG0uITEhJaWbpyyDNTxUA4dcKAJkvJWVuWFh8j0YAhPw1urjtXOSS%2FbdiqzY%2B2Z%2FmeJLJRZ%2Bsu%2BuwTvUMnDlzpqQkPaXnrbcUD3u53QZTw0VchDugAPBlVd1KSxMaEN65lDcTgABlkHj8WrfC6pyf2oHU6RxKlZMD8AQ1KC0VAiAbxcDHR%2B33hvdqrKa1opUCUIbr7%2BB6Hg6t%2BGOF95ctsx%2B4CU1a6h%2FEoAu7OSkJgMHfv6CgYCPZPzBQ6SD70x7ggdKmblEAaNwBkJEhpII6e%2FjwWeCoxP5NeI6QBIA13GbRN5ZTHOJiEGOE0TLwaw5DLEHgSpiPKyAJwAHpk%2FUZFaV2DGPYAIOtljpImSxg%2FfNl%2F3Ehw%2BOWNpNp7lxXJ6%2BS7KuN9cp%2FLYQAVE4dugG4ZGndwi0veCUhySIAkNgzJkYWAKPR2Nraqg2QlJSk1%2BtrXaaPJUuWcIrW09LSYmBlOIIsABs3yq0EJCSmJFIA5ObwsGB%2FJwJgaaekxNMq43VqIsqRXcBSLCX701TPAAZk9h%2FCkINJrhJdJCLJ%2FjSL6%2BZNnDlTWVGRnqrorwyO4Y4pAxaWcQGkdjIoNz8Hc8RZeJilCCtL5V%2FNoFpBsl9lyGpNViX7q0owb552CNksDHFl4iav%2FwkFwAthe6XEn4JqVGup382t3KAA7N7dWrDekBpbAIkSb%2BAG2b%2FMVGbFclSE1FShAf7%2BbG3cNWAwHKNduUIBGH7O9ycJQEsLmpsxMgI%2FP9lLhUpDmpUAfArcth8iFKG%2FhhANUz%2FC3z5WPgMCLFIIjGGMZjVZ53Bn66eS1TMG9ekxHocgRGmH8DPEpZnU8tXAoue7Xfexj%2F8DTPjjSY3Prxj%2BlXZHn4aWfEgWZFRekT%2F8LfdjrjSSdUNDQ39%2Ff4j5xpYtW7Z8%2BXLXBSArKyudrGZGX18fAzKswwly5T95Ios0lSkpJYE1JUNm%2F8lJO%2FP60EcBaEIT9Uy0zQKgdFM6XBMAJofM%2FgEIUJ0y%2B9ej3sEkk%2BuPRVrfhV3hCFfaExNkf2EQP2mszzT4SizGMRzJ69iP%2Fa7Hf4RHsgYsF%2BmL%2BHghAKERqaldqcqI%2BnohAN3dmAWYrD51sxFSCyO5yihkQNUA6sHChdaDmCdrt9mbzay%2Biqsq7zM9ZraLDegpKPxge7cBBgMKCkZS48n%2BNO2pxUXcv4%2BiIiEAr7zCtUTO7D52xVAGA9Ax2zczHSQBYKHU1eH2bWRny17mxCqsKkPZEzyxjE2zH4JqkYAES%2BeFdnR22h0ZhKBgBHvBaxLm0nSQDauxeiOSUuxnyqynjwJSAy0a0Uo7OhqxsWqvycnaG5ZhTewz2tUsQvD54CDGB1Gg%2BubdRBQlvBe9006nOo5gxCIA1rh169bNmzc3b94sN8n%2B69evv3z5ciNpejokJyevW7cuMzNT9TDUNOJBQpSZWpKNxJDElJTEpCQWuchYWQAcgVVHUwRAr6duJAQk8HgCrrE%2FIbP%2FEixRPWdxlsXMqnEwww3234RNFAAymcVVUiKsqQkSgVADeO6XX1Y6OZL7pgZUoML1Vcj%2BqgAQaWn6%2BUtTg7uClW7eP%2Fvdgc7Fg9urep1bF2QXPT04dUrIANlfVYLFi53M6ESnTPqyALShbcaLx0FUlSisc%2BeEABgMxQW5xduLm9FsZzR1ISWlNCXk6NKjzJn6qHrspowBP8Fzhpfy98YNVFWp3gVYsBVbd2DHtPPTkLYBGzKQYXGxuNSaHxoSjGNZzIsFYzUYdp6dY1haecizt2Cua%2BcyzaD0HuBBO9ot7YgILFtGgpgmUn4%2BduwQev7UMD19iGnR3o7WVq2Dz0G5nXaeH%2FzCER6CEIuLL8v3NaOqquoKS0mD3Nzc%2FPx8Hx8f55G9vb3z8vJycnK0Toaq0iSkfWjIWpeiI40DNJhMLgmAfOG%2BOl18Skp8SvzUmE6wHduZoluwRfXcwR1WMs3BDDfeNhKRZP98Sa8V8MlI%2BTQz5FazhlvkKZzr%2BkJk%2F1rUDmBAbi5dmrp06VKlj%2FpKAXCuwc5g0thM%2BmeOx49RWop33lHsww%2FFa08BxfJTfPr3%2BHvZjuLo07A%2FzOy%2FQG7U1999993id%2FcX%2F7wY3XaS4BHwSXHxe0XvvTf5Xj3qhWu1NH%2FXbN%2FGdPBW%2Ft65g8pKrF%2BP9HTZsQu7qGJMjnKUO5qcjOQ38MYu7a5ZPNeuWQSgowNGo3YK1WIndnagg9pr52J0WId1LK038Wb0j6K1yeFF9fAqfaZ3cR%2F37%2BGelWvTJlRXC9LUMJ28KR3%2F%2B%2FoiLw9795577bU5M17VJMd6XjAYcPu2%2BI2NlR1U%2Blu4xRe5iZtO5uUidyVW8hEsLrJSu0UvjUZjeXn5qlWrtmxRaDEjI%2BO1114bGBgoLCwcHR21G5by8LWvfY3DOFh1Ms7Fixfb2qYrSKaZnGm8w29SghMB2l2Z%2FckDjtCFLvJ1C1oWYzGJnwIAyneVdUzHSEMaU5SmevrRTwYh%2Bz%2FG1FXdZjiZyim3FpfM9yMjqmNsTDhYrN%2F5juLheM6ifO3HftfXkjWAVcnvhITU4LRUhcNk9n%2F0yMU4uqc4r1pRuhnOtxvThMuXhWVlYe1aYaAtZ8914Ao%2BuIIrtKu4Oiur7ZbYe4XGUzw8XHzw4KSBFWfbx%2FQ6Chy7e%2Fdc8V2ReLs0UeTxNbOyKZfgbfmkbGZmIjUVcwSbsdS%2FgW%2FMwZyFWEgNsOJrwB%2F%2B67E%2BD3mv4TXKgKXj7FlcuGBpkv0pLfyNiZEdHMywvvA9h3NknCEoxDoP81iFq0yrtmALw3JR4dVRuj%2BUrNnX10S%2BdQdmZnU5ocj%2BzPp2tEcjWnEtW4avf10QfXm50LaBASFEgYFYuNCUlITsbGzdil3iAUePj%2Fru%2Fhnw78CXM0vj2cl7V%2FDFF7h4EV%2F7mtwKQADlltVXhKJKVPahz2Y4b2MzNpPvXsbLFu%2F9%2B4IgKCQanDt3Lj09PSkpKcb83Dt37tTpdGFhYWfPnq2psc3rZcuW5ebm7tmzJ486akZHR0dJScn58%2BenP8jDh%2BJRqBOLFjFHUsYTJAGALACaG7UjsHWoo1EAmGFlFIBPJS8ljQH7%2BpysOR%2FzZfZnCYgV3hBOUn8ljmWhMctq7PRPypXOWXs2YRN5nIxlcZHFSPbXrtnMra5GSQnS0rBxo%2BLhLAoAFawCFXANTHhqgCQA3O37YUvDKI%2BKANS4ykO6WUlhjQyUY%2FZw44awsjJZA%2F5RsH%2FLFRxijsziIscls4NKyf6Hg0R0OO35QSMALJrPPxdM%2FYaU1EAwgr%2BD7%2BihZ1Lyvh7gwTCGveEdjnDyeDayX8JLHGOJcOKEiGCTN6Qbsidp1IzVWB2DGP6yArvQ9QRP%2FOBHxk9CUhayuJy8rb9obPyz5E%2BAj8n%2B9AQFCXvW%2BBJfXsTFvdhrcZHiFy%2FG5s1oacHQEHQ6IQALFiA%2BHhkZCA0VY5bj5L7PXsdnM2R%2Fk12OemaorERxMRITsWaN7IhD3PfwvWVYVoWqJjTxUfjQrMRABPJd%2BCJrsIY5YBWEBH3pkk3gnp6e48ePR0VF%2FcZv%2FEYgb0nCjh074uPjV65cSQFobW0dGBgwmUzBwcGxsbEZGRkbN25MTU1VI4yMjBw5cuTEiRPd3d0unYV8TaMAMGe8Y4H%2FSzMLwJT71TyLLAA7sVO8sL%2B%2FVTSnyMaeAuxhrorGDWAff85kCfYvd1fNyf77rD2RiCT70yyuwUHB%2FmR6e2BPerqw%2BfMVD%2BdSAHgMVqsre%2BBzUwA60BGFKOC38CuSl3lOAaC5gM2zwv7Wb8WYO2YnnBlKTpT%2BPdCOj2Y39i80vK1apG%2Bmkq8vCgpU31ZBgVuNMHajm7wwB3NCERqPeB%2F4WM0tKkJhIQ4ftl2BNMEKp65sNqcKEI3o1%2FE6PwYwMIYxX%2FiS3tVeUayNjX0ffzzwBx8HBzdKPhOZNjz8mV9HOcozkMHyprxZvAkJwhxBh2Ppx8bHDwEls1kJzxRHjyIsDHPnYvly2UENzkMezQDDQzxUBWABFkjUYA0q%2FfHjuHp1auCqqqoDBw74%2BPh8%2FetfJ8vLTr2Evr6%2Btra2QTKakPOgRYsWhcryaQa7CgsLOf3KlSuuHqSxUVA2M9SM%2B%2FdFpff0TDOvHe0UAP4yFS3e6QWAvLTHQnpZ%2FH%2BL7A9hMtx4%2FbIpHpn9w6FJdHI8raNDo2OWhbq6FA3Yu1fxci4j8Bj7sd%2FFbZDpqQFWr0zqr6nB5OS0c0tml%2F01GqAq3juSzRJa2%2FnzY8k8kOBt6%2Fj4Y0xMYGAAL7%2BMkBDVHSMoPMZ%2BjL4%2BnDolOIUCYBf%2F9V8IDBT5pClUGcFQOMIKZJbDh3sMhT09dRKHiPSKjsaiRc%2FjRo7gSAhCTDCtxMppBw%2FqBj%2FH55%2BNffbq2GeS4xeB%2FYnOTvznf2J0FHv2YPt2bU8sYmkOJz56hJMncegQDh50NKS0tHRiYmJoaKigoCAlJUX1z5fgaFZdXd3JkycPHz5cVlbmxkEoALTHjxEQIDvI%2FnV1Lk2lANAsAsCcJ%2FtTQJyheIonHfgnyZ4Wm7CJ3L0Way0uHoYEf%2Fask1mlpUIA0tLErwxGoADwXipQ4cq6ZH%2FaDqFtZlAAaK5iBBidftSoO3fBkH5PfaEeuABvO74DB%2FDggairLVuwerXgbkcYGsKXX%2BLCBZGmTuq2vx%2F794vflhahAYsXOxxpMOjKy0W0Eyc6lre3tZkSEpSeefOQnIz4%2BOkq9KnRjvb92N%2BHvu3Yvh7r4xBnd1gveq%2Fj%2BiVcKkHJvbF7L4%2BNYZzu8emv9ysCoxHvv4%2FWVty6hQ0bsGIFvJ3ultR%2F7Rr4OiUlzimJKC8v7%2BrqunfvXk5Ozrp162JiYpwMbm1tvXz5MmWjqKjoLilvClqcL0bWpmUp0kJStxfDTiBZAJKQo7QfSloyDVpc25PbiEIU2X8zdlkF5lXTNGDuxyt%2FW7SjhAAEWYbtwmbpMI0d6Jh26Qd4QL7nYB8kS44uwf68UpfwQ2Df9KP%2B3f0bYeAfz9LleuAYDmq%2BtFQkweXLyM5Gaqrg3YgIwcFz52JyEoOD6OxEc7PgDpLCpUvo7Z1mHU758EPcuYMvvkBWluDy6GiEhMDHB%2BPjGBhAe7vIuRs3xKI04F7wz%2Bvq9jdsNEfYD%2F%2BlyE4UAnBJcdW4dMRLLvosoAb8G%2F6tGtWrsCoFKbGIDUWoL3zZNYKRfvSzrprQVKur%2FRJfdqM7ZuxPx%2Br32SuEAvHzZLr1nG3pkpsPasZ9yZzj8WMcOiRecO1aZGZiyRLExWHBAuWhTSaMjoqn6eoSyk1ara4WT8OndwF1Eq5evbpq1aply5YlJSVFRUXNnz%2Ffz89PXOPISF9fX3t7e1NTU21tLYdduuTwpNMQjBCAf0KW9E26uytSyZVALWi5jLrL6AYWyIFcYD0pxH9g1kH2v4f8fQjT%2BM6j%2F4womelOUl%2BPM2eQXoXtZg%2Bj5AONyP85fu7K6jWo%2BRvUQhGAWhhrXN64CyT90exflwezBW%2BHPd3dOH4cp05Br0dsrMIL5GsKwNCQ6CUp1NUJ%2BnYdV64IS0wUFhmpBJyYEPLw4AHu3dM1NpqHJtbV7furSoACkCo5fp2yJHUo6V%2FjqgBM4Y%2B%2Fc22zlaikRSAiGtHzMV8WgFGMUgA60dmus9DMuPFvxv7GbowvBfvvm9k2iQOYGe67uqgAhZx27BiSkhATg%2FBwBAVZBIBPw7c2GgU58qXcxEUJcXFxCQkJkZGRISEhvr7SNY6O9vf3d3R0NDc3GwwG50F%2B5ry78ZowGXclcznQz1AHkGE3S60Gyabbyzk8A2z6uWDstRoPVfaMZC6d5MwRpENYtNnDWI3SeSpcWL4StZWimnYDXkIAhM0aPvJIwFcY3tP0k99v3xY2i7h3T9gU6KwHif8XgQ1mAbDpQ5Gry1kPLHVzs13oojnf6xjvydHaM9wmYZBsRihyf8rwMGprhT0DtEp4FpEF%2BoE%2FlmwmOCmZGzgn2WyjQrK3Zjx%2FCPg7yWaKQeBPJfPgvxd0pqec77BnM7AP2C59m6TvvwR%2BDfgWsE0zbAT4F8nu2Q%2BzR5q60oWtXJNGHpO%2B%2Fz%2Fpe8EsXVK3FO1fZimaBx544MFXA9723fHxSElBVBQCA2EyYXAQ7e2or4fBYDNQpzGrph90kou%2Fsg3p8N3xg3g7CKCtNQfwA%2FKBhp%2FgXTvb%2BMmv7pFGu4ghM%2F%2F%2F6jO4qY%2FVHw888MCDXwpMEYC4OGzfjnXrkJ6OmBgEBQkB6O%2BH0Yjbt3H1KsrLhRKYMQn8lV0BWA3dHosADOrwlzrs%2B8EwDhfi20H4VhBC0s0xMr5A3j3Un8EZ2838ZB9%2F%2Fsg1DSD77zN%2FhwF%2FMKvX9M%2FKX48AeOCBB788sBaAlSvxxht4%2BWVkZ1v5o6KQmopt21BTI7pOn8aJE2rnn9kN7OuLDXOxRXyO4smPMMaPmB8A3d0oLERgIL79bSxeLI%2FNR34DGmj3cd86SorVH6e4Zt2kBiyYpTvqnrXb9sADDzz4CkEjAFlZePttvPWWoHtHyMhAejoSEsSYQ4fQ2%2BtwZGQkIiLkz3700yxdzc04eBBBQfjWtxAeTkcAAvKQRwF4D%2B%2B96AvxwAMPPPjvArMAkIhffRVvvmnD%2FiMY8YLXXMy1uLy8sGcPFixASAgOHIDBYCcqu9LSkJwst9rQ9gAPrAbU1Fg0wNeXjuVYTg2oR%2F05nNOMu2vz1w30SOaBBx544IEDmAUgJwd5eYiLUztKUFKN6i50UQAWYREJegu2WOZt2ICAAAQG4sgR3LhhG3XHDmzcCB8fuUVab0KT7ZjKSiEAtLfflh35yG9AA60VreZB%2B8TPO%2B4fq0eZ6oEHHnjggSNIAhAejnXrsHmz6v0AHxSisAIVPYJKQQHYgA11qHsFryzEQmXQ8uUIDUV0NEpKBJu3tQnnwoXYuhV792LbNnlUH%2FooJDWosbM4J1JCqAGvvsoW1SAPeVSLn%2BKn5hEf49iMjvXxi75XDzzwwIOvPCQBSEtDZqbqKkXpYRw%2BpqHeNrR9hs9a0NKJzr3Ym4pUpWPxYnzve2JuVRU6OjA5ichIrFwpNMCMMpRdwqUxjNlf%2F8gRIQCUgR072MpGdj7yG9DAPcj9xyRzF%2F8imQceeOCBB04gCUB8PBITVddVXC1H%2BdShX%2BLLHvQMYIAasAZrLB2bNwsbGxMC4OurnVKN6tM4fRZntU6jTdyDB4UG0OLWs7UReRQAmnHKQA888MADD2YRkgBERCAyUm53o7sZzZ3otDu6EY0%2Fw8%2F60f8QD3dhl1Wfj4%2FN4Du4cxAHj%2BKo1vlbU4OOjqKwEBNBAC0DCAHy8lDPhV705XjggQce%2FDLD%2ByEwGRhoehI02QGTCcOTA32TfTDRC6tf2lIxgdrwPt5vRzt1Yhu2pSDFbtwLuHAcxykABhhUp87RLnp68JNCIFDSgARgFZAPNIgwHnjggQcePBt47yO3984x7ZszOSkEYHJyfNw0rjC%2BjQDw41MxZwITR3CkAQ3VqF6FVdSAaETPwzwddAMYaEFLDWou4mIRivrQ5%2FJOWoC%2FlMwDDzzwwIPnAe%2F%2Fw59%2FdXn4p5bPWtTSkpBEi0JUEILoHMRgG9ru4E472l%2F00TzwwAMPPHAG76ec34Qm2os%2BhQceeODBDPD%2FyoMDAQAAAAAg%2F9dCsAOTliDCA8QK4AAAAABJRU5ErkJggg%3D%3D%22%2CVe%3D%7Batlas%3A%7Btype%3A%22msdf%22%2CdistanceRange%3A2%2Csize%3A59.65625%2Cwidth%3A512%2Cheight%3A256%2CyOrigin%3A%22bottom%22%7D%2Cmetrics%3A%7BemSize%3A1%2ClineHeight%3A1.171875%2Cascender%3A.927734375%2Cdescender%3A-.244140625%2CunderlineY%3A-.09765625%2CunderlineThickness%3A.048828125%7D%2Cglyphs%3A%5B%7Bunicode%3A32%2Cadvance%3A.24755859375%7D%2C%7Bunicode%3A33%2Cadvance%3A.25732421875%2CplaneBounds%3A%7Bleft%3A.056159633438645884%2Cbottom%3A-.02437761405677056%2Cright%3A.20702396031135412%2Ctop%3A.7299440203067705%7D%2CatlasBounds%3A%7Bleft%3A488.5%2Cbottom%3A145.5%2Cright%3A497.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A34%2Cadvance%3A.31982421875%2CplaneBounds%3A%7Bleft%3A.049409125974004715%2Cbottom%3A.48691155587022%2Cright%3A.2840869677759953%2Ctop%3A.77187750662978%7D%2CatlasBounds%3A%7Bleft%3A486.5%2Cbottom%3A213.5%2Cright%3A500.5%2Ctop%3A230.5%7D%7D%2C%7Bunicode%3A35%2Cadvance%3A.61572265625%2CplaneBounds%3A%7Bleft%3A.037219103997511785%2Cbottom%3A-.02169206718177056%2Cright%3A.6239137085024882%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A66.5%2Cbottom%3A51.5%2Cright%3A101.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A36%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.02956531458715296%2Cbottom%3A-.12381369908983761%2Cright%3A.5324464041628472%2Ctop%3A.8484230740898377%7D%2CatlasBounds%3A%7Bleft%3A109.5%2Cbottom%3A197.5%2Cright%3A139.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A37%2Cadvance%3A.732421875%2CplaneBounds%3A%7Bleft%3A.026481776289942378%2Cbottom%3A-.030073418674698794%2Cright%3A.7137525987100576%2Ctop%3A.7410109186746989%7D%2CatlasBounds%3A%7Bleft%3A88.5%2Cbottom%3A144.5%2Cright%3A129.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A38%2Cadvance%3A.62158203125%2CplaneBounds%3A%7Bleft%3A.03225572125458355%2Cbottom%3A-.030073418674698794%2Cright%3A.6357130287454166%2Ctop%3A.7410109186746989%7D%2CatlasBounds%3A%7Bleft%3A130.5%2Cbottom%3A144.5%2Cright%3A166.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A39%2Cadvance%3A.17431640625%2CplaneBounds%3A%7Bleft%3A.028244602049502358%2Cbottom%3A.49895501673814824%2Cright%3A.14558352295049765%2Ctop%3A.7671582645118518%7D%2CatlasBounds%3A%7Bleft%3A498.5%2Cbottom%3A62.5%2Cright%3A505.5%2Ctop%3A78.5%7D%7D%2C%7Bunicode%3A40%2Cadvance%3A.341796875%2CplaneBounds%3A%7Bleft%3A.042983329377291775%2Cbottom%3A-.250029542422407%2Cright%3A.34471198312270823%2Ctop%3A.8227834486724072%7D%2CatlasBounds%3A%7Bleft%3A.5%2Cbottom%3A191.5%2Cright%3A18.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A41%2Cadvance%3A.34765625%2CplaneBounds%3A%7Bleft%3A-.003159248747708225%2Cbottom%3A-.250029542422407%2Cright%3A.29856940499770823%2Ctop%3A.8227834486724072%7D%2CatlasBounds%3A%7Bleft%3A19.5%2Cbottom%3A191.5%2Cright%3A37.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A42%2Cadvance%3A.4306640625%2CplaneBounds%3A%7Bleft%3A-.011208599684062338%2Cbottom%3A.27785390031593765%2Cright%3A.44138438093406235%2Ctop%3A.7304468809340623%7D%2CatlasBounds%3A%7Bleft%3A449.5%2Cbottom%3A23.5%2Cright%3A476.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A43%2Cadvance%3A.56689453125%2CplaneBounds%3A%7Bleft%3A.01353503347629649%2Cbottom%3A.053493525733368255%2Cright%3A.5499415290237036%2Ctop%3A.6066627242666317%7D%2CatlasBounds%3A%7Bleft%3A361.5%2Cbottom%3A17.5%2Cright%3A393.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A44%2Cadvance%3A.1962890625%2CplaneBounds%3A%7Bleft%3A-.009919475797210583%2Cbottom%3A-.15981695975478%2Cright%3A.1744702570472106%2Ctop%3A.12514899100478%7D%2CatlasBounds%3A%7Bleft%3A498.5%2Cbottom%3A79.5%2Cright%3A509.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A45%2Cadvance%3A.27587890625%2CplaneBounds%3A%7Bleft%3A-.00527594412977999%2Cbottom%3A.24333249267450235%2Cright%3A.27969000662978%2Ctop%3A.36067141357549765%7D%2CatlasBounds%3A%7Bleft%3A52.5%2Cbottom%3A7.5%2Cright%3A69.5%2Ctop%3A14.5%7D%7D%2C%7Bunicode%3A46%2Cadvance%3A.26318359375%2CplaneBounds%3A%7Bleft%3A.051032680313645884%2Cbottom%3A-.027092319686354116%2Cright%3A.20189700718635412%2Ctop%3A.12377200718635412%7D%2CatlasBounds%3A%7Bleft%3A501.5%2Cbottom%3A221.5%2Cright%3A510.5%2Ctop%3A230.5%7D%7D%2C%7Bunicode%3A47%2Cadvance%3A.412109375%2CplaneBounds%3A%7Bleft%3A-.013733006073205867%2Cbottom%3A-.08573505127848349%2Cright%3A.4053345685732059%2Ctop%3A.7356373950284835%7D%2CatlasBounds%3A%7Bleft%3A252.5%2Cbottom%3A206.5%2Cright%3A277.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A48%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.037458384830081196%2Cbottom%3A-.030073418674698794%2Cright%3A.5235767714199189%2Ctop%3A.7410109186746989%7D%2CatlasBounds%3A%7Bleft%3A167.5%2Cbottom%3A144.5%2Cright%3A196.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A49%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.06023674350936354%2Cbottom%3A-.01998308280677056%2Cright%3A.37872810024063647%2Ctop%3A.7343385515567705%7D%2CatlasBounds%3A%7Bleft%3A488.5%2Cbottom%3A97.5%2Cright%3A507.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A50%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.025334353719224725%2Cbottom%3A-.01680925468177056%2Cright%3A.5449781462807752%2Ctop%3A.7375123796817705%7D%2CatlasBounds%3A%7Bleft%3A278.5%2Cbottom%3A51.5%2Cright%3A309.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A51%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.028181041080081196%2Cbottom%3A-.030073418674698794%2Cright%3A.5142994276699189%2Ctop%3A.7410109186746989%7D%2CatlasBounds%3A%7Bleft%3A197.5%2Cbottom%3A144.5%2Cright%3A226.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A52%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.005886103858368255%2Cbottom%3A-.02169206718177056%2Cright%3A.5590553023916317%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A310.5%2Cbottom%3A51.5%2Cright%3A343.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A53%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.055524791080081196%2Cbottom%3A-.02657487968177056%2Cright%3A.5416431776699189%2Ctop%3A.7277467546817705%7D%2CatlasBounds%3A%7Bleft%3A344.5%2Cbottom%3A51.5%2Cright%3A373.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A54%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.046003306705081196%2Cbottom%3A-.034712090549698794%2Cright%3A.5321216932949189%2Ctop%3A.7363722467996989%7D%2CatlasBounds%3A%7Bleft%3A227.5%2Cbottom%3A144.5%2Cright%3A256.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A55%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.018010134969224725%2Cbottom%3A-.02169206718177056%2Cright%3A.5376539275307752%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A374.5%2Cbottom%3A51.5%2Cright%3A405.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A56%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.037702525455081196%2Cbottom%3A-.030073418674698794%2Cright%3A.5238209120449189%2Ctop%3A.7410109186746989%7D%2CatlasBounds%3A%7Bleft%3A257.5%2Cbottom%3A144.5%2Cright%3A286.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A57%2Cadvance%3A.5615234375%2CplaneBounds%3A%7Bleft%3A.029401744205081196%2Cbottom%3A-.025434746799698794%2Cright%3A.5155201307949189%2Ctop%3A.7456495905496989%7D%2CatlasBounds%3A%7Bleft%3A287.5%2Cbottom%3A144.5%2Cright%3A316.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A58%2Cadvance%3A.2421875%2CplaneBounds%3A%7Bleft%3A.046394008438645884%2Cbottom%3A-.029431286627488215%2Cright%3A.19725833531135412%2Ctop%3A.5572633178774882%7D%2CatlasBounds%3A%7Bleft%3A439.5%2Cbottom%3A61.5%2Cright%3A448.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A59%2Cadvance%3A.21142578125%2CplaneBounds%3A%7Bleft%3A.001066852327789419%2Cbottom%3A-.16459733294591408%2Cright%3A.1854565851722106%2Ctop%3A.556198895445914%7D%2CatlasBounds%3A%7Bleft%3A406.5%2Cbottom%3A53.5%2Cright%3A417.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A60%2Cadvance%3A.50830078125%2CplaneBounds%3A%7Bleft%3A.016948142433865897%2Cbottom%3A.0726146348300812%2Cright%3A.4527784200661341%2Ctop%3A.5587330214199189%7D%2CatlasBounds%3A%7Bleft%3A394.5%2Cbottom%3A21.5%2Cright%3A420.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A61%2Cadvance%3A.548828125%2CplaneBounds%3A%7Bleft%3A.051535540940937666%2Cbottom%3A.17620354038436353%2Cright%3A.5041285215590624%2Ctop%3A.49469489711563647%7D%2CatlasBounds%3A%7Bleft%3A477.5%2Cbottom%3A31.5%2Cright%3A504.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A62%2Cadvance%3A.5224609375%2CplaneBounds%3A%7Bleft%3A.047629290940937666%2Cbottom%3A.0731029160800812%2Cright%3A.5002222715590624%2Ctop%3A.5592213026699189%7D%2CatlasBounds%3A%7Bleft%3A421.5%2Cbottom%3A21.5%2Cright%3A448.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A63%2Cadvance%3A.47216796875%2CplaneBounds%3A%7Bleft%3A.016704001808865897%2Cbottom%3A-.027876153049698794%2Cright%3A.4525342794411341%2Ctop%3A.7432081842996989%7D%2CatlasBounds%3A%7Bleft%3A317.5%2Cbottom%3A144.5%2Cright%3A343.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A64%2Cadvance%3A.89794921875%2CplaneBounds%3A%7Bleft%3A.034064457306783605%2Cbottom%3A-.23896750384690937%2Cright%3A.8721996065996072%2Ctop%3A.7165065663469093%7D%2CatlasBounds%3A%7Bleft%3A155.5%2Cbottom%3A198.5%2Cright%3A205.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A65%2Cadvance%3A.65234375%2CplaneBounds%3A%7Bleft%3A-.008838044092129387%2Cbottom%3A-.02169206718177056%2Cright%3A.6616700753421295%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A237.5%2Cbottom%3A51.5%2Cright%3A277.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A66%2Cadvance%3A.62255859375%2CplaneBounds%3A%7Bleft%3A.06464099434422473%2Cbottom%3A-.02169206718177056%2Cright%3A.5842847869057752%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A205.5%2Cbottom%3A51.5%2Cright%3A236.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A67%2Cadvance%3A.65087890625%2CplaneBounds%3A%7Bleft%3A.038439807122511785%2Cbottom%3A-.030073418674698794%2Cright%3A.6251344116274882%2Ctop%3A.7410109186746989%7D%2CatlasBounds%3A%7Bleft%3A344.5%2Cbottom%3A144.5%2Cright%3A379.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A68%2Cadvance%3A.65576171875%2CplaneBounds%3A%7Bleft%3A.06301501010836826%2Cbottom%3A-.02169206718177056%2Cright%3A.6161842086416317%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A162.5%2Cbottom%3A51.5%2Cright%3A195.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A69%2Cadvance%3A.568359375%2CplaneBounds%3A%7Bleft%3A.0652904160800812%2Cbottom%3A-.02169206718177056%2Cright%3A.5514088026699189%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A132.5%2Cbottom%3A51.5%2Cright%3A161.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A70%2Cadvance%3A.552734375%2CplaneBounds%3A%7Bleft%3A.059675181705081196%2Cbottom%3A-.02169206718177056%2Cright%3A.5457935682949189%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A102.5%2Cbottom%3A51.5%2Cright%3A131.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A71%2Cadvance%3A.68115234375%2CplaneBounds%3A%7Bleft%3A.040148791497511785%2Cbottom%3A-.030073418674698794%2Cright%3A.6268433960024882%2Ctop%3A.7410109186746989%7D%2CatlasBounds%3A%7Bleft%3A380.5%2Cbottom%3A144.5%2Cright%3A415.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A72%2Cadvance%3A.712890625%2CplaneBounds%3A%7Bleft%3A.062365588372511785%2Cbottom%3A-.02169206718177056%2Cright%3A.6490601928774882%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A30.5%2Cbottom%3A51.5%2Cright%3A65.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A73%2Cadvance%3A.27197265625%2CplaneBounds%3A%7Bleft%3A.06917965680657412%2Cbottom%3A-.02169206718177056%2Cright%3A.20328128069342588%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A196.5%2Cbottom%3A51.5%2Cright%3A204.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A74%2Cadvance%3A.5517578125%2CplaneBounds%3A%7Bleft%3A.007184947330081194%2Cbottom%3A-.02657487968177056%2Cright%3A.4933033339199188%2Ctop%3A.7277467546817705%7D%2CatlasBounds%3A%7Bleft%3A.5%2Cbottom%3A51.5%2Cright%3A29.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A75%2Cadvance%3A.626953125%2CplaneBounds%3A%7Bleft%3A.061633166497511785%2Cbottom%3A-.02169206718177056%2Cright%3A.6483277710024882%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A452.5%2Cbottom%3A97.5%2Cright%3A487.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A76%2Cadvance%3A.5380859375%2CplaneBounds%3A%7Bleft%3A.06341786132300943%2Cbottom%3A-.02169206718177056%2Cright%3A.5327735449269906%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A423.5%2Cbottom%3A97.5%2Cright%3A451.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A77%2Cadvance%3A.873046875%2CplaneBounds%3A%7Bleft%3A.05911847969322944%2Cbottom%3A-.02169206718177056%2Cright%3A.8134401140567705%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A377.5%2Cbottom%3A97.5%2Cright%3A422.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A78%2Cadvance%3A.712890625%2CplaneBounds%3A%7Bleft%3A.062365588372511785%2Cbottom%3A-.02169206718177056%2Cright%3A.6490601928774882%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A341.5%2Cbottom%3A97.5%2Cright%3A376.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A79%2Cadvance%3A.6875%2CplaneBounds%3A%7Bleft%3A.033395854136655315%2Cbottom%3A-.030073418674698794%2Cright%3A.6536158646133446%2Ctop%3A.7410109186746989%7D%2CatlasBounds%3A%7Bleft%3A416.5%2Cbottom%3A144.5%2Cright%3A453.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A80%2Cadvance%3A.630859375%2CplaneBounds%3A%7Bleft%3A.061550166358368255%2Cbottom%3A-.02169206718177056%2Cright%3A.6147193648916317%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A273.5%2Cbottom%3A97.5%2Cright%3A306.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A81%2Cadvance%3A.6875%2CplaneBounds%3A%7Bleft%3A.030466166636655315%2Cbottom%3A-.14391866037519643%2Cright%3A.6506861771133446%2Ctop%3A.7445045978751964%7D%2CatlasBounds%3A%7Bleft%3A214.5%2Cbottom%3A202.5%2Cright%3A251.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A82%2Cadvance%3A.61572265625%2CplaneBounds%3A%7Bleft%3A.06350329135836826%2Cbottom%3A-.02169206718177056%2Cright%3A.6166724898916317%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A186.5%2Cbottom%3A97.5%2Cright%3A219.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A83%2Cadvance%3A.59326171875%2CplaneBounds%3A%7Bleft%3A.020778681983368255%2Cbottom%3A-.030073418674698794%2Cright%3A.5739478805166317%2Ctop%3A.7410109186746989%7D%2CatlasBounds%3A%7Bleft%3A454.5%2Cbottom%3A144.5%2Cright%3A487.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A84%2Cadvance%3A.5966796875%2CplaneBounds%3A%7Bleft%3A.005480822747511787%2Cbottom%3A-.02169206718177056%2Cright%3A.5921754272524882%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A112.5%2Cbottom%3A97.5%2Cright%3A147.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A85%2Cadvance%3A.6484375%2CplaneBounds%3A%7Bleft%3A.049098994483368255%2Cbottom%3A-.02657487968177056%2Cright%3A.6022681930166317%2Ctop%3A.7277467546817705%7D%2CatlasBounds%3A%7Bleft%3A78.5%2Cbottom%3A97.5%2Cright%3A111.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A86%2Cadvance%3A.63623046875%2CplaneBounds%3A%7Bleft%3A-.008269192599201152%2Cbottom%3A-.02169206718177056%2Cright%3A.6454762238492011%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A38.5%2Cbottom%3A97.5%2Cright%3A77.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A87%2Cadvance%3A.88720703125%2CplaneBounds%3A%7Bleft%3A.011923628617731797%2Cbottom%3A-.02169206718177056%2Cright%3A.8835841838822683%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A220.5%2Cbottom%3A97.5%2Cright%3A272.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A88%2Cadvance%3A.626953125%2CplaneBounds%3A%7Bleft%3A.004098979136655316%2Cbottom%3A-.02169206718177056%2Cright%3A.6243189896133446%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A.5%2Cbottom%3A97.5%2Cright%3A37.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A89%2Cadvance%3A.6005859375%2CplaneBounds%3A%7Bleft%3A-.010793598988344685%2Cbottom%3A-.02169206718177056%2Cright%3A.6094264114883446%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A148.5%2Cbottom%3A97.5%2Cright%3A185.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A90%2Cadvance%3A.5986328125%2CplaneBounds%3A%7Bleft%3A.024196650733368255%2Cbottom%3A-.02169206718177056%2Cright%3A.5773658492666317%2Ctop%3A.7326295671817705%7D%2CatlasBounds%3A%7Bleft%3A307.5%2Cbottom%3A97.5%2Cright%3A340.5%2Ctop%3A142.5%7D%7D%2C%7Bunicode%3A91%2Cadvance%3A.26513671875%2CplaneBounds%3A%7Bleft%3A.05437250871693295%2Cbottom%3A-.17280296457569408%2Cright%3A.27228764753306706%2Ctop%3A.8329592145756942%7D%2CatlasBounds%3A%7Bleft%3A59.5%2Cbottom%3A195.5%2Cright%3A72.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A92%2Cadvance%3A.41015625%2CplaneBounds%3A%7Bleft%3A.0014037126767941326%2Cbottom%3A-.08573505127848349%2Cright%3A.4204712873232059%2Ctop%3A.7356373950284835%7D%2CatlasBounds%3A%7Bleft%3A278.5%2Cbottom%3A206.5%2Cright%3A303.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A93%2Cadvance%3A.26513671875%2CplaneBounds%3A%7Bleft%3A-.020659233400995285%2Cbottom%3A-.17280296457569408%2Cright%3A.2140186084009953%2Ctop%3A.8329592145756942%7D%2CatlasBounds%3A%7Bleft%3A94.5%2Cbottom%3A195.5%2Cright%3A108.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A94%2Cadvance%3A.41796875%2CplaneBounds%3A%7Bleft%3A.006855376669722368%2Cbottom%3A.33229482979472236%2Cright%3A.40916024833027764%2Ctop%3A.7345997014552776%7D%2CatlasBounds%3A%7Bleft%3A486.5%2Cbottom%3A231.5%2Cright%3A510.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A95%2Cadvance%3A.451171875%2CplaneBounds%3A%7Bleft%3A-.017473255794918804%2Cbottom%3A-.09553469482549765%2Cright%3A.4686451307949188%2Ctop%3A.021804226075497646%7D%2CatlasBounds%3A%7Bleft%3A70.5%2Cbottom%3A7.5%2Cright%3A99.5%2Ctop%3A14.5%7D%7D%2C%7Bunicode%3A96%2Cadvance%3A.30908203125%2CplaneBounds%3A%7Bleft%3A.00391839948107648%2Cbottom%3A.5860277898277895%2Cright%3A.2553589442689235%2Ctop%3A.7704175226722105%7D%2CatlasBounds%3A%7Bleft%3A36.5%2Cbottom%3A3.5%2Cright%3A51.5%2Ctop%3A14.5%7D%7D%2C%7Bunicode%3A97%2Cadvance%3A.5439453125%2CplaneBounds%3A%7Bleft%3A.028181041080081196%2Cbottom%3A-.029187146002488215%2Cright%3A.5142994276699189%2Ctop%3A.5575074585024882%7D%2CatlasBounds%3A%7Bleft%3A30.5%2Cbottom%3A15.5%2Cright%3A59.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A98%2Cadvance%3A.56103515625%2CplaneBounds%3A%7Bleft%3A.048932994205081196%2Cbottom%3A-.032187684160555265%2Cright%3A.5350513807949189%2Ctop%3A.7724220591605554%7D%2CatlasBounds%3A%7Bleft%3A304.5%2Cbottom%3A207.5%2Cright%3A333.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A99%2Cadvance%3A.5234375%2CplaneBounds%3A%7Bleft%3A.024518931705081196%2Cbottom%3A-.029187146002488215%2Cright%3A.5106373182949189%2Ctop%3A.5575074585024882%7D%2CatlasBounds%3A%7Bleft%3A.5%2Cbottom%3A15.5%2Cright%3A29.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A100%2Cadvance%3A.56396484375%2CplaneBounds%3A%7Bleft%3A.026227916080081196%2Cbottom%3A-.032187684160555265%2Cright%3A.5123463026699189%2Ctop%3A.7724220591605554%7D%2CatlasBounds%3A%7Bleft%3A334.5%2Cbottom%3A207.5%2Cright%3A363.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A101%2Cadvance%3A.52978515625%2CplaneBounds%3A%7Bleft%3A.026472056705081196%2Cbottom%3A-.029187146002488215%2Cright%3A.5125904432949189%2Ctop%3A.5575074585024882%7D%2CatlasBounds%3A%7Bleft%3A468.5%2Cbottom%3A61.5%2Cright%3A497.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A102%2Cadvance%3A.34716796875%2CplaneBounds%3A%7Bleft%3A.004575110905578838%2Cbottom%3A-.022177918535555265%2Cright%3A.3733545765944212%2Ctop%3A.7824318247855554%7D%2CatlasBounds%3A%7Bleft%3A364.5%2Cbottom%3A207.5%2Cright%3A386.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A103%2Cadvance%3A.56103515625%2CplaneBounds%3A%7Bleft%3A.026960337955081196%2Cbottom%3A-.22888445766762702%2Cright%3A.5130787245449189%2Ctop%3A.558962582667627%7D%2CatlasBounds%3A%7Bleft%3A28.5%2Cbottom%3A143.5%2Cright%3A57.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A104%2Cadvance%3A.55078125%2CplaneBounds%3A%7Bleft%3A.049826556565937666%2Cbottom%3A-.01892352016762703%2Cright%3A.5024195371840624%2Ctop%3A.768923520167627%7D%2CatlasBounds%3A%7Bleft%3A.5%2Cbottom%3A143.5%2Cright%3A27.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A105%2Cadvance%3A.24267578125%2CplaneBounds%3A%7Bleft%3A.046882289688645884%2Cbottom%3A-.01680925468177056%2Cright%3A.19774661656135412%2Ctop%3A.7375123796817705%7D%2CatlasBounds%3A%7Bleft%3A498.5%2Cbottom%3A145.5%2Cright%3A507.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A106%2Cadvance%3A.23876953125%2CplaneBounds%3A%7Bleft%3A-.048979545900995285%2Cbottom%3A-.2324562772148376%2Cright%3A.1856982959009953%2Ctop%3A.7397804959648377%7D%2CatlasBounds%3A%7Bleft%3A140.5%2Cbottom%3A197.5%2Cright%3A154.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A107%2Cadvance%3A.5068359375%2CplaneBounds%3A%7Bleft%3A.044294322330081196%2Cbottom%3A-.01892352016762703%2Cright%3A.5304127089199189%2Ctop%3A.768923520167627%7D%2CatlasBounds%3A%7Bleft%3A58.5%2Cbottom%3A143.5%2Cright%3A87.5%2Ctop%3A190.5%7D%7D%2C%7Bunicode%3A108%2Cadvance%3A.24267578125%2CplaneBounds%3A%7Bleft%3A.05428707868157412%2Cbottom%3A-.01892352016762703%2Cright%3A.18838870256842588%2Ctop%3A.768923520167627%7D%2CatlasBounds%3A%7Bleft%3A477.5%2Cbottom%3A208.5%2Cright%3A485.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A109%2Cadvance%3A.87646484375%2CplaneBounds%3A%7Bleft%3A.04430890170737297%2Cbottom%3A-.024304333502488215%2Cright%3A.832155942042627%2Ctop%3A.5623902710024882%7D%2CatlasBounds%3A%7Bleft%3A116.5%2Cbottom%3A15.5%2Cright%3A163.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A110%2Cadvance%3A.5517578125%2CplaneBounds%3A%7Bleft%3A.049826556565937666%2Cbottom%3A-.024304333502488215%2Cright%3A.5024195371840624%2Ctop%3A.5623902710024882%7D%2CatlasBounds%3A%7Bleft%3A60.5%2Cbottom%3A15.5%2Cright%3A87.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A111%2Cadvance%3A.5703125%2CplaneBounds%3A%7Bleft%3A.025090213094224725%2Cbottom%3A-.029187146002488215%2Cright%3A.5447340056557752%2Ctop%3A.5575074585024882%7D%2CatlasBounds%3A%7Bleft%3A193.5%2Cbottom%3A15.5%2Cright%3A224.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A112%2Cadvance%3A.56103515625%2CplaneBounds%3A%7Bleft%3A.048444712955081196%2Cbottom%3A-.22644305141762702%2Cright%3A.5345630995449189%2Ctop%3A.561403988917627%7D%2CatlasBounds%3A%7Bleft%3A447.5%2Cbottom%3A208.5%2Cright%3A476.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A113%2Cadvance%3A.568359375%2CplaneBounds%3A%7Bleft%3A.025983775455081196%2Cbottom%3A-.22644305141762702%2Cright%3A.5121021620449189%2Ctop%3A.561403988917627%7D%2CatlasBounds%3A%7Bleft%3A417.5%2Cbottom%3A208.5%2Cright%3A446.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A114%2Cadvance%3A.33837890625%2CplaneBounds%3A%7Bleft%3A.045180595002291775%2Cbottom%3A-.024304333502488215%2Cright%3A.34690924874770823%2Ctop%3A.5623902710024882%7D%2CatlasBounds%3A%7Bleft%3A449.5%2Cbottom%3A61.5%2Cright%3A467.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A115%2Cadvance%3A.515625%2CplaneBounds%3A%7Bleft%3A.021669814448009427%2Cbottom%3A-.029187146002488215%2Cright%3A.4910254980519906%2Ctop%3A.5575074585024882%7D%2CatlasBounds%3A%7Bleft%3A164.5%2Cbottom%3A15.5%2Cright%3A192.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A116%2Cadvance%3A.32666015625%2CplaneBounds%3A%7Bleft%3A-.019433670483564695%2Cbottom%3A-.02877457520298586%2Cright%3A.3158203892335647%2Ctop%3A.675258950202986%7D%2CatlasBounds%3A%7Bleft%3A418.5%2Cbottom%3A54.5%2Cright%3A438.5%2Ctop%3A96.5%7D%7D%2C%7Bunicode%3A117%2Cadvance%3A.55126953125%2CplaneBounds%3A%7Bleft%3A.048117572190937666%2Cbottom%3A-.034069958502488215%2Cright%3A.5007105528090624%2Ctop%3A.5526246460024882%7D%2CatlasBounds%3A%7Bleft%3A88.5%2Cbottom%3A15.5%2Cright%3A115.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A118%2Cadvance%3A.484375%2CplaneBounds%3A%7Bleft%3A-.002092396419918806%2Cbottom%3A-.02080579450955998%2Cright%3A.4840259901699188%2Ctop%3A.5491261070095601%7D%2CatlasBounds%3A%7Bleft%3A331.5%2Cbottom%3A16.5%2Cright%3A360.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A119%2Cadvance%3A.75146484375%2CplaneBounds%3A%7Bleft%3A-.002649098431770561%2Cbottom%3A-.02080579450955998%2Cright%3A.7516725359317705%2Ctop%3A.5491261070095601%7D%2CatlasBounds%3A%7Bleft%3A225.5%2Cbottom%3A16.5%2Cright%3A270.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A120%2Cadvance%3A.49560546875%2CplaneBounds%3A%7Bleft%3A-.0046143729128470395%2Cbottom%3A-.02080579450955998%2Cright%3A.4982667166628471%2Ctop%3A.5491261070095601%7D%2CatlasBounds%3A%7Bleft%3A300.5%2Cbottom%3A16.5%2Cright%3A330.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A121%2Cadvance%3A.47314453125%2CplaneBounds%3A%7Bleft%3A-.007219349544918806%2Cbottom%3A-.23645281704262702%2Cright%3A.4788990370449188%2Ctop%3A.551394223292627%7D%2CatlasBounds%3A%7Bleft%3A387.5%2Cbottom%3A208.5%2Cright%3A416.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A122%2Cadvance%3A.49560546875%2CplaneBounds%3A%7Bleft%3A.018007705073009427%2Cbottom%3A-.02080579450955998%2Cright%3A.4873633886769906%2Ctop%3A.5491261070095601%7D%2CatlasBounds%3A%7Bleft%3A271.5%2Cbottom%3A16.5%2Cright%3A299.5%2Ctop%3A50.5%7D%7D%2C%7Bunicode%3A123%2Cadvance%3A.33837890625%2CplaneBounds%3A%7Bleft%3A.011572188891435306%2Cbottom%3A-.20234398020069408%2Cright%3A.3468262486085647%2Ctop%3A.8034181989506942%7D%2CatlasBounds%3A%7Bleft%3A73.5%2Cbottom%3A195.5%2Cright%3A93.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A124%2Cadvance%3A.24365234375%2CplaneBounds%3A%7Bleft%3A.06315671142450235%2Cbottom%3A-.15466084787519643%2Cright%3A.18049563232549765%2Ctop%3A.7337624103751964%7D%2CatlasBounds%3A%7Bleft%3A206.5%2Cbottom%3A202.5%2Cright%3A213.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A125%2Cadvance%3A.33837890625%2CplaneBounds%3A%7Bleft%3A-.010156326733564695%2Cbottom%3A-.20234398020069408%2Cright%3A.3250977329835647%2Ctop%3A.8034181989506942%7D%2CatlasBounds%3A%7Bleft%3A38.5%2Cbottom%3A195.5%2Cright%3A58.5%2Ctop%3A255.5%7D%7D%2C%7Bunicode%3A126%2Cadvance%3A.68017578125%2CplaneBounds%3A%7Bleft%3A.046984728997511785%2Cbottom%3A.1766063915990047%2Cright%3A.6336793335024882%2Ctop%3A.4112842334009953%7D%2CatlasBounds%3A%7Bleft%3A.5%2Cbottom%3A.5%2Cright%3A35.5%2Ctop%3A14.5%7D%7D%5D%2Ckerning%3A%5B%5D%7D%3Bimport%7Bserialize%20as%20Se%2Cdeserialize%20as%20Ee%7Dfrom%22%40ungap%2Fstructured-clone%22%3Bimport%7Bvec3%20as%20Be%2Cvec4%20as%20Ue%7Dfrom%22gl-matrix%22%3Bimport*as%20Re%20from%22nifti-reader-js%22%3Bimport%20Ne%20from%22daikon%22%3Bimport%7Bmat3%20as%20Pe%2Cmat4%20as%20Le%2Cvec3%20as%20ke%2Cvec4%20as%20Oe%7Dfrom%22gl-matrix%22%3Bimport%7BDecompress%20as%20Ye%2CdecompressSync%20as%20Ge%2CgzipSync%20as%20Ke%7Dfrom%22fflate%2Fbrowser%22%3Bimport%7Bv4%20as%20We%7Dfrom%22%40lukeed%2Fuuid%22%3Bimport%7Bvec3%20as%20He%7Dfrom%22gl-matrix%22%3Bvar%20Qe%3D(t%3D%3E(t%5Bt.UNKNOWN%3D0%5D%3D%22UNKNOWN%22%2Ct%5Bt.NII%3D1%5D%3D%22NII%22%2Ct%5Bt.DCM%3D2%5D%3D%22DCM%22%2Ct%5Bt.DCM_MANIFEST%3D3%5D%3D%22DCM_MANIFEST%22%2Ct%5Bt.MIH%3D4%5D%3D%22MIH%22%2Ct%5Bt.MIF%3D5%5D%3D%22MIF%22%2Ct%5Bt.NHDR%3D6%5D%3D%22NHDR%22%2Ct%5Bt.NRRD%3D7%5D%3D%22NRRD%22%2Ct%5Bt.MHD%3D8%5D%3D%22MHD%22%2Ct%5Bt.MHA%3D9%5D%3D%22MHA%22%2Ct%5Bt.MGH%3D10%5D%3D%22MGH%22%2Ct%5Bt.MGZ%3D11%5D%3D%22MGZ%22%2Ct%5Bt.V%3D12%5D%3D%22V%22%2Ct%5Bt.V16%3D13%5D%3D%22V16%22%2Ct%5Bt.VMR%3D14%5D%3D%22VMR%22%2Ct%5Bt.HEAD%3D15%5D%3D%22HEAD%22%2Ct%5Bt.DCM_FOLDER%3D16%5D%3D%22DCM_FOLDER%22%2Ct%5Bt.SRC%3D17%5D%3D%22SRC%22%2Ct%5Bt.FIB%3D18%5D%3D%22FIB%22%2Ct))(Qe%7C%7C%7B%7D)%2Cze%3DObject.freeze(%7B...Qe%2Cparse%3At%3D%3E%7Blet%20e%3D0%3Bswitch(t.toUpperCase())%7Bcase%22%22%3Acase%22DCM%22%3Ae%3D2%3Bbreak%3Bcase%22TXT%22%3Ae%3D3%3Bbreak%3Bcase%22FIB%22%3Ae%3D18%3Bbreak%3Bcase%22NII%22%3Ae%3D1%3Bbreak%3Bcase%22MIH%22%3Ae%3D4%3Bbreak%3Bcase%22MIF%22%3Ae%3D5%3Bbreak%3Bcase%22NHDR%22%3Ae%3D6%3Bbreak%3Bcase%22NRRD%22%3Ae%3D7%3Bbreak%3Bcase%22MHD%22%3Ae%3D8%3Bbreak%3Bcase%22MHA%22%3Ae%3D9%3Bbreak%3Bcase%22MGH%22%3Ae%3D10%3Bbreak%3Bcase%22MGZ%22%3Ae%3D11%3Bbreak%3Bcase%22SRC%22%3Ae%3D17%3Bbreak%3Bcase%22V%22%3Ae%3D12%3Bbreak%3Bcase%22V16%22%3Ae%3D13%3Bbreak%3Bcase%22VMR%22%3Ae%3D14%3Bbreak%3Bcase%22HEAD%22%3Ae%3D15%7Dreturn%20e%7D%7D)%2Cqe%3D(t%2Ce%3D%22%22%2Ci%3D%22%22%2Cs%3D%22gray%22%2Cn%3D1%2Cr%3DNaN%2Ca%3DNaN%2Co%3D!0%2Cl%3D.02%2Ch%3D!1%2Cc%3D!1%2Cd%3D%22%22%2Cm%3D0%2Cu%3Dze.UNKNOWN%2CA%3DNaN%2Cf%3DNaN%2Cg%3D!0%2Cp%3D!1%2Cv%3Dnull)%3D%3E(%7Burl%3At%2CurlImageData%3Ae%2Cname%3Ai%2Ccolormap%3As%2CcolorMap%3As%2Copacity%3An%2Ccal_min%3Ar%2Ccal_max%3Aa%2CtrustCalMinMax%3Ao%2CpercentileFrac%3Al%2CignoreZeroVoxels%3Ah%2CuseQFormNotSForm%3Ac%2CcolormapNegative%3Ad%2CimageType%3Au%2Ccal_minNeg%3AA%2Ccal_maxNeg%3Af%2CcolorbarVisible%3Ag%2Cframe4D%3Am%2CalphaThreshold%3Ap%2CcolormapLabel%3Av%7D)%3Bfunction%20Xe(t%2Ce%3D80)%7Bt%3Dt.replace(%2F%5B%60%24%5D%2Fg%2C%22%22)%3Bconst%20i%3D%5B%5D%2Cs%3DMath.min(e%2Ct.length)%3Bfor(let%20e%3D0%3Be%3Cs%3Be%2B%2B)%7Bconst%20s%3Dt.charCodeAt(e)%3Bi.push(255%26s)%7Dreturn%20i%7Dfunction%20je(t%2Ce%3D!1%2Ci%3D!1)%7Blet%20s%3D!0%3Bi%26%26(s%3Dt.littleEndian)%3Bconst%20n%3Dnew%20Uint8Array(348)%2Cr%3Dnew%20DataView(n.buffer)%3Br.setInt32(0%2C348%2Cs)%2Cr.setUint8(38%2C114)%2Cr.setUint8(39%2Ct.dim_info)%3Bfor(let%20e%3D0%3Be%3C8%3Be%2B%2B)r.setUint16(40%2B2*e%2Ct.dims%5Be%5D%2Cs)%3Br.setFloat32(56%2Ct.intent_p1%2Cs)%2Cr.setFloat32(60%2Ct.intent_p2%2Cs)%2Cr.setFloat32(64%2Ct.intent_p3%2Cs)%2Cr.setInt16(68%2Ct.intent_code%2Cs)%2Ce%3F(r.setInt16(70%2C2%2Cs)%2Cr.setInt16(72%2C8%2Cs))%3A(r.setInt16(70%2Ct.datatypeCode%2Cs)%2Cr.setInt16(72%2Ct.numBitsPerVoxel%2Cs))%2Cr.setInt16(74%2Ct.slice_start%2Cs)%3Bfor(let%20e%3D0%3Be%3C8%3Be%2B%2B)r.setFloat32(76%2B4*e%2Ct.pixDims%5Be%5D%2Cs)%3Be%3F(r.setFloat32(108%2C352%2Cs)%2Cr.setFloat32(112%2C1%2Cs)%2Cr.setFloat32(116%2C0%2Cs))%3A(r.setFloat32(108%2C352%2Cs)%2Cr.setFloat32(112%2Ct.scl_slope%2Cs)%2Cr.setFloat32(116%2Ct.scl_inter%2Cs))%2Cr.setInt16(120%2Ct.slice_end%2Cs)%2Cr.setUint8(122%2Ct.slice_code)%2C0%3D%3D%3Dt.xyzt_units%3Fr.setUint8(123%2C10)%3Ar.setUint8(123%2Ct.xyzt_units)%2Ce%3F(r.setFloat32(124%2C0%2Cs)%2Cr.setFloat32(128%2C0%2Cs))%3A(r.setFloat32(124%2Ct.cal_max%2Cs)%2Cr.setFloat32(128%2Ct.cal_min%2Cs))%2Cr.setFloat32(132%2Ct.slice_duration%2Cs)%2Cr.setFloat32(136%2Ct.toffset%2Cs)%2Cn.set(Xe(t.description)%2C148)%2Cn.set(Xe(t.aux_file)%2C228)%2Cr.setInt16(252%2Ct.qform_code%2Cs)%2Ct.sform_code%3C1%7C%7Ct.sform_code%3C1%3Fr.setInt16(254%2C1%2Cs)%3Ar.setInt16(254%2Ct.sform_code%2Cs)%2Cr.setFloat32(256%2Ct.quatern_b%2Cs)%2Cr.setFloat32(260%2Ct.quatern_c%2Cs)%2Cr.setFloat32(264%2Ct.quatern_d%2Cs)%2Cr.setFloat32(268%2Ct.qoffset_x%2Cs)%2Cr.setFloat32(272%2Ct.qoffset_y%2Cs)%2Cr.setFloat32(276%2Ct.qoffset_z%2Cs)%3Bconst%20a%3Dt.affine.flat()%3Bfor(let%20t%3D0%3Bt%3C12%3Bt%2B%2B)r.setFloat32(280%2B4*t%2Ca%5Bt%5D%2Cs)%3Breturn%20r.setInt32(344%2C3222382%2C!0)%2Cn%7Dfunction%20Ze(t)%7Bconst%20e%3D%5B!1%2C!1%2C!1%2C!1%5D%2Ci%3D%5B!1%2C!1%2C!1%2C!1%5D%3Bfor(let%20e%3D0%3Be%3C4%3Be%2B%2B)for(let%20i%3D0%3Bi%3C4%3Bi%2B%2B)if(isNaN(t%5Be%5D%5Bi%5D))return!1%3Bfor(let%20s%3D0%3Bs%3C3%3Bs%2B%2B)for(let%20n%3D0%3Bn%3C3%3Bn%2B%2B)0!%3D%3Dt%5Bs%5D%5Bn%5D%26%26(e%5Bs%5D%3D!0%2Ci%5Bn%5D%3D!0)%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)%7Bif(!e%5Bt%5D)return!1%3Bif(!i%5Bt%5D)return!1%7Dreturn!0%7Dvar%20Je%3Dclass%20t%7Bconstructor(t%3Dnull%2Ci%3D%22%22%2Cs%3D%22gray%22%2Cn%3D1%2Cr%3Dnull%2Ca%3DNaN%2Co%3DNaN%2Ch%3D!0%2Cc%3D.02%2Cd%3D!1%2Cm%3D!1%2Cu%3D%22%22%2CA%3D0%2Cf%3Dze.UNKNOWN%2Cg%3DNaN%2Cp%3DNaN%2Cv%3D!0%2Cx%3Dnull)%7Bif(e(this%2C%22name%22)%2Ce(this%2C%22id%22)%2Ce(this%2C%22url%22)%2Ce(this%2C%22headers%22)%2Ce(this%2C%22_colormap%22)%2Ce(this%2C%22_opacity%22)%2Ce(this%2C%22percentileFrac%22)%2Ce(this%2C%22ignoreZeroVoxels%22)%2Ce(this%2C%22trustCalMinMax%22)%2Ce(this%2C%22colormapNegative%22)%2Ce(this%2C%22colormapLabel%22)%2Ce(this%2C%22colormapInvert%22)%2Ce(this%2C%22nFrame4D%22)%2Ce(this%2C%22frame4D%22)%2Ce(this%2C%22nTotalFrame4D%22)%2Ce(this%2C%22cal_minNeg%22)%2Ce(this%2C%22cal_maxNeg%22)%2Ce(this%2C%22colorbarVisible%22%2C!0)%2Ce(this%2C%22modulationImage%22%2Cnull)%2Ce(this%2C%22modulateAlpha%22%2C0)%2Ce(this%2C%22series%22%2C%5B%5D)%2Ce(this%2C%22nVox3D%22)%2Ce(this%2C%22oblique_angle%22)%2Ce(this%2C%22maxShearDeg%22)%2Ce(this%2C%22useQFormNotSForm%22)%2Ce(this%2C%22alphaThreshold%22)%2Ce(this%2C%22pixDims%22)%2Ce(this%2C%22matRAS%22)%2Ce(this%2C%22pixDimsRAS%22)%2Ce(this%2C%22obliqueRAS%22)%2Ce(this%2C%22dimsRAS%22)%2Ce(this%2C%22permRAS%22)%2Ce(this%2C%22img2RASstep%22)%2Ce(this%2C%22img2RASstart%22)%2Ce(this%2C%22toRAS%22)%2Ce(this%2C%22toRASvox%22)%2Ce(this%2C%22frac2mm%22)%2Ce(this%2C%22frac2mmOrtho%22)%2Ce(this%2C%22extentsMinOrtho%22)%2Ce(this%2C%22extentsMaxOrtho%22)%2Ce(this%2C%22mm2ortho%22)%2Ce(this%2C%22hdr%22%2Cnull)%2Ce(this%2C%22imageType%22)%2Ce(this%2C%22img%22)%2Ce(this%2C%22imaginary%22)%2Ce(this%2C%22v1%22)%2Ce(this%2C%22fileObject%22)%2Ce(this%2C%22dims%22)%2Ce(this%2C%22onColormapChange%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onOpacityChange%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22mm000%22)%2Ce(this%2C%22mm100%22)%2Ce(this%2C%22mm010%22)%2Ce(this%2C%22mm001%22)%2Ce(this%2C%22cal_min%22)%2Ce(this%2C%22cal_max%22)%2Ce(this%2C%22robust_min%22)%2Ce(this%2C%22robust_max%22)%2Ce(this%2C%22global_min%22)%2Ce(this%2C%22global_max%22)%2Ce(this%2C%22urlImgData%22)%2Ce(this%2C%22isManifest%22)%2Ce(this%2C%22limitFrames4D%22)%2Cthis.name%3Di%2Cthis.id%3DWe()%2Cthis._colormap%3Ds%2Cthis._opacity%3Dn%3E1%3F1%3An%2Cthis.percentileFrac%3Dc%2Cthis.ignoreZeroVoxels%3Dd%2Cthis.trustCalMinMax%3Dh%2Cthis.colormapNegative%3Du%2Cthis.colormapLabel%3Dx%2Cthis.frame4D%3DA%2Cthis.cal_minNeg%3Dg%2Cthis.cal_maxNeg%3Dp%2Cthis.colorbarVisible%3Dv%2Cthis.useQFormNotSForm%3Dm%2C!t)return%3Bconst%20w%3D%2F(%3F%3A%5C.(%5B%5E.%5D%2B))%3F%24%2F%3Blet%20C%3Dw.exec(i)%5B1%5D%7C%7C%22%22%3BC%3DC.toUpperCase()%2C%22GZ%22%3D%3D%3DC%26%26(C%3Dw.exec(i.slice(0%2C-3))%5B1%5D%2CC%3DC.toUpperCase())%3Blet%20b%3Dnull%3Bswitch(f%3D%3D%3Dze.UNKNOWN%26%26(f%3Dze.parse(C))%2Cthis.imageType%3Df%2Cf)%7Bcase%20ze.DCM_FOLDER%3Acase%20ze.DCM_MANIFEST%3Acase%20ze.DCM%3Ab%3Dthis.readDICOM(t)%3Bbreak%3Bcase%20ze.FIB%3A%5Bb%2Cthis.v1%5D%3Dthis.readFIB(t)%3Bbreak%3Bcase%20ze.MIH%3Acase%20ze.MIF%3Ab%3Dthis.readMIF(t%2Cr)%3Bbreak%3Bcase%20ze.NHDR%3Acase%20ze.NRRD%3Ab%3Dthis.readNRRD(t%2Cr)%3Bbreak%3Bcase%20ze.MHD%3Acase%20ze.MHA%3Ab%3Dthis.readMHA(t%2Cr)%3Bbreak%3Bcase%20ze.MGH%3Acase%20ze.MGZ%3Ab%3Dthis.readMGH(t)%3Bbreak%3Bcase%20ze.SRC%3Ab%3Dthis.readSRC(t)%3Bbreak%3Bcase%20ze.V%3Ab%3Dthis.readECAT(t)%3Bbreak%3Bcase%20ze.V16%3Ab%3Dthis.readV16(t)%3Bbreak%3Bcase%20ze.VMR%3Ab%3Dthis.readVMR(t)%3Bbreak%3Bcase%20ze.HEAD%3Ab%3Dthis.readHEAD(t%2Cr)%3Bbreak%3Bcase%20ze.NII%3Athis.hdr%3DRe.readHeader(t)%2Cnull!%3D%3Dthis.hdr%26%26(0%3D%3D%3Dthis.hdr.cal_min%26%26255%3D%3D%3Dthis.hdr.cal_max%26%26(this.hdr.cal_max%3D0)%2Cb%3DRe.isCompressed(t)%3FRe.readImage(this.hdr%2CRe.decompress(t))%3ARe.readImage(this.hdr%2Ct))%3Bbreak%3Bdefault%3Athrow%20new%20Error(%22Image%20type%20not%20supported%22)%7Dif(this.hdr%26%26%22number%22%3D%3Dtypeof%20this.hdr.magic%26%26(this.hdr.magic%3D%22n%2B1%22)%2Cthis.nFrame4D%3D1%2Cthis.hdr)for(let%20t%3D4%3Bt%3C7%3Bt%2B%2B)this.hdr.dims%5Bt%5D%3E1%26%26(this.nFrame4D*%3Dthis.hdr.dims%5Bt%5D)%3Bif(this.frame4D%3DMath.min(this.frame4D%2Cthis.nFrame4D-1)%2Cthis.nTotalFrame4D%3Dthis.nFrame4D%2C!this.hdr%7C%7C!b)return%3Bthis.nVox3D%3Dthis.hdr.dims%5B1%5D*this.hdr.dims%5B2%5D*this.hdr.dims%5B3%5D%3Bconst%20y%3Dthis.nVox3D*(this.hdr.numBitsPerVoxel%2F8)%2CI%3Db.byteLength%2Fy%3BI!%3D%3Dthis.nFrame4D%26%26(I%3E0%26%26I*y%3D%3D%3Db.byteLength%3Fl.debug(%22Loading%20the%20first%20%22%2BI%2B%22%20of%20%22%2Bthis.nFrame4D%2B%22%20volumes%22)%3Al.warn(%22This%20header%20does%20not%20match%20voxel%20data%22%2Cthis.hdr%2Cb.byteLength)%2Cthis.nFrame4D%3DI)%2C1007!%3D%3Dthis.hdr.intent_code%26%262003!%3D%3Dthis.hdr.intent_code%7C%7C3!%3D%3Dthis.nFrame4D%7C%7C16!%3D%3Dthis.hdr.datatypeCode%7C%7C(b%3Dthis.float32V1asRGBA(new%20Float32Array(b)))%2C0!%3D%3Dthis.hdr.pixDims%5B1%5D%26%260!%3D%3Dthis.hdr.pixDims%5B2%5D%26%260!%3D%3Dthis.hdr.pixDims%5B3%5D%7C%7Cl.error(%22pixDims%20not%20plausible%22%2Cthis.hdr)%2C(isNaN(this.hdr.scl_slope)%7C%7C0%3D%3D%3Dthis.hdr.scl_slope)%26%26(this.hdr.scl_slope%3D1)%2CisNaN(this.hdr.scl_inter)%26%26(this.hdr.scl_inter%3D0)%3Blet%20M%3DZe(this.hdr.affine)%3Bif(m%7C%7C!M%7C%7Cthis.hdr.qform_code%3Ethis.hdr.sform_code)%7Bl.debug(%22spatial%20transform%20based%20on%20QForm%22)%3Bconst%20t%3Dthis.hdr.quatern_b%2Ce%3Dthis.hdr.quatern_c%2Ci%3Dthis.hdr.quatern_d%2Cs%3DMath.sqrt(1-(Math.pow(t%2C2)%2BMath.pow(e%2C2)%2BMath.pow(i%2C2)))%2Cn%3D0%3D%3D%3Dthis.hdr.pixDims%5B0%5D%3F1%3Athis.hdr.pixDims%5B0%5D%2Cr%3D%5B%5Bs*s%2Bt*t-e*e-i*i%2C2*t*e-2*s*i%2C2*t*i%2B2*s*e%5D%2C%5B2*t*e%2B2*s*i%2Cs*s%2Be*e-t*t-i*i%2C2*e*i-2*s*t%5D%2C%5B2*t*i-2*s*e%2C2*e*i%2B2*s*t%2Cs*s%2Bi*i-e*e-t*t%5D%5D%2Ca%3Dthis.hdr.affine%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%3D1)for(let%20e%3D0%3Be%3C3%3Be%2B%3D1)a%5Bt%5D%5Be%5D%3Dr%5Bt%5D%5Be%5D*this.hdr.pixDims%5Be%2B1%5D%2C2%3D%3D%3De%26%26(a%5Bt%5D%5Be%5D*%3Dn)%3Ba%5B0%5D%5B3%5D%3Dthis.hdr.qoffset_x%2Ca%5B1%5D%5B3%5D%3Dthis.hdr.qoffset_y%2Ca%5B2%5D%5B3%5D%3Dthis.hdr.qoffset_z%2Cthis.hdr.affine%3Da%7Dif(M%3DZe(this.hdr.affine)%2C!M)%7Bl.debug(%22Defective%20NIfTI%3A%20spatial%20transform%20does%20not%20make%20sense%22)%3Blet%20t%3Dthis.hdr.pixDims%5B1%5D%2Ce%3Dthis.hdr.pixDims%5B2%5D%2Ci%3Dthis.hdr.pixDims%5B3%5D%3B(isNaN(t)%7C%7C0%3D%3D%3Dt)%26%26(t%3D1)%2C(isNaN(e)%7C%7C0%3D%3D%3De)%26%26(e%3D1)%2C(isNaN(i)%7C%7C0%3D%3D%3Di)%26%26(i%3D1)%2Cthis.hdr.pixDims%5B1%5D%3Dt%2Cthis.hdr.pixDims%5B2%5D%3De%2Cthis.hdr.pixDims%5B3%5D%3Di%3Bconst%20s%3D%5B%5Bt%2C0%2C0%2C0%5D%2C%5B0%2Ce%2C0%2C0%5D%2C%5B0%2C0%2Ci%2C0%5D%2C%5B0%2C0%2C0%2C1%5D%5D%3Bthis.hdr.affine%3Ds%7Dif(128!%3D%3Dthis.hdr.datatypeCode%26%262304!%3D%3Dthis.hdr.datatypeCode%26%26this.hdr.littleEndian!%3D%3D(()%3D%3E%7Bconst%20t%3Dnew%20ArrayBuffer(2)%3Breturn%20new%20DataView(t).setInt16(0%2C256%2C!0)%2C256%3D%3D%3Dnew%20Int16Array(t)%5B0%5D%7D)()%26%26this.hdr.numBitsPerVoxel%3E8)if(16%3D%3D%3Dthis.hdr.numBitsPerVoxel)%7Bconst%20t%3Dnew%20Uint16Array(b)%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)%7Bconst%20i%3Dt%5Be%5D%3Bt%5Be%5D%3D((255%26i)%3C%3C8%7Ci%3E%3E8%26255)%3C%3C16%3E%3E16%7D%7Delse%20if(32%3D%3D%3Dthis.hdr.numBitsPerVoxel)%7Bconst%20t%3Dnew%20Uint32Array(b)%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)%7Bconst%20i%3Dt%5Be%5D%3Bt%5Be%5D%3D(255%26i)%3C%3C24%7C(65280%26i)%3C%3C8%7Ci%3E%3E8%2665280%7Ci%3E%3E24%26255%7D%7Delse%20if(64%3D%3D%3Dthis.hdr.numBitsPerVoxel)%7Bconst%20t%3Dthis.hdr.numBitsPerVoxel%2F8%2Ce%3Dnew%20Uint8Array(b)%3Bfor(let%20i%3D0%3Bi%3Ce.length%3Bi%2B%3Dt)%7Blet%20s%3Dt-1%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)%7Bconst%20n%3De%5Bi%2Bt%5D%3Be%5Bi%2Bt%5D%3De%5Bi%2Bs%5D%2Ce%5Bi%2Bs%5D%3Dn%2Cs--%7D%7D%7Dswitch(this.hdr.datatypeCode)%7Bcase%202%3Acase%20128%3Acase%202304%3Athis.img%3Dnew%20Uint8Array(b)%3Bbreak%3Bcase%204%3Athis.img%3Dnew%20Int16Array(b)%3Bbreak%3Bcase%2016%3Athis.img%3Dnew%20Float32Array(b)%3Bbreak%3Bcase%2064%3Athis.img%3Dnew%20Float64Array(b)%3Bbreak%3Bcase%20512%3Athis.img%3Dnew%20Uint16Array(b)%3Bbreak%3Bcase%20256%3A%7Bconst%20t%3Dnew%20Int8Array(b)%2Ce%3Dt.length%3Bthis.img%3Dnew%20Int16Array(e)%3Bfor(let%20i%3D0%3Bi%3Ce%3Bi%2B%2B)this.img%5Bi%5D%3Dt%5Bi%5D%3Bthis.hdr.datatypeCode%3D4%2Cthis.hdr.numBitsPerVoxel%3D16%3Bbreak%7Dcase%201%3A%7Bconst%20t%3Dthis.hdr.dims%5B1%5D*this.hdr.dims%5B2%5D*Math.max(1%2Cthis.hdr.dims%5B3%5D)*Math.max(1%2Cthis.hdr.dims%5B4%5D)%2Ce%3Dnew%20Uint8Array(b)%3Bthis.img%3Dnew%20Uint8Array(t)%3Bconst%20i%3Dnew%20Uint8Array(8)%3Bfor(let%20t%3D0%3Bt%3C8%3Bt%2B%2B)i%5Bt%5D%3DMath.pow(2%2Ct)%3Blet%20s%3D-1%3Bfor(let%20n%3D0%3Bn%3Ct%3Bn%2B%2B)%7Bconst%20t%3Dn%258%3B0%3D%3D%3Dt%26%26s%2B%2B%2Ce%5Bs%5D%26i%5Bt%5D%26%26(this.img%5Bn%5D%3D1)%7Dthis.hdr.datatypeCode%3D2%2Cthis.hdr.numBitsPerVoxel%3D8%3Bbreak%7Dcase%20768%3A%7Bconst%20t%3Dnew%20Uint32Array(b)%2Ce%3Dt.length%3Bthis.img%3Dnew%20Float64Array(e)%3Bfor(let%20i%3D0%3Bi%3Ce-1%3Bi%2B%2B)this.img%5Bi%5D%3Dt%5Bi%5D%3Bthis.hdr.datatypeCode%3D64%3Bbreak%7Dcase%208%3A%7Bconst%20t%3Dnew%20Int32Array(b)%2Ce%3Dt.length%3Bthis.img%3Dnew%20Float64Array(e)%3Bfor(let%20i%3D0%3Bi%3Ce-1%3Bi%2B%2B)this.img%5Bi%5D%3Dt%5Bi%5D%3Bthis.hdr.datatypeCode%3D64%3Bbreak%7Dcase%201024%3A%7Bconst%20t%3Dnew%20BigInt64Array(b)%2Ce%3Dt.length%3Bthis.img%3Dnew%20Float64Array(e)%3Bfor(let%20i%3D0%3Bi%3Ce-1%3Bi%2B%2B)this.img%5Bi%5D%3DNumber(t%5Bi%5D)%3Bthis.hdr.datatypeCode%3D64%3Bbreak%7Dcase%2032%3A%7Bconst%20t%3Dnew%20Float32Array(b)%2Ce%3DMath.floor(t.length%2F2)%3Bthis.imaginary%3Dnew%20Float32Array(e)%2Cthis.img%3Dnew%20Float32Array(e)%3Blet%20i%3D0%3Bfor(let%20s%3D0%3Bs%3Ce-1%3Bs%2B%2B)this.img%5Bs%5D%3Dt%5Bi%5D%2Cthis.imaginary%5Bs%5D%3Dt%5Bi%2B1%5D%2Ci%2B%3D2%3Bthis.hdr.datatypeCode%3D16%3Bbreak%7Ddefault%3Athrow%20new%20Error(%22datatype%20%22%2Bthis.hdr.datatypeCode%2B%22%20not%20supported%22)%7Dthis.calculateRAS()%2CisNaN(a)%7C%7C(this.hdr.cal_min%3Da)%2CisNaN(o)%7C%7C(this.hdr.cal_max%3Do)%2Cthis.calMinMax()%7DcomputeObliqueAngle(t)%7Bconst%20e%3DLe.clone(t)%3BLe.transpose(e%2Ct)%3Bconst%20i%3DMath.sqrt(e%5B0%5D*e%5B0%5D%2Be%5B1%5D*e%5B1%5D%2Be%5B2%5D*e%5B2%5D)%2Cs%3DMath.max(Math.max(Math.abs(e%5B0%5D)%2CMath.abs(e%5B1%5D))%2CMath.abs(e%5B2%5D))%2Fi%2Cn%3DMath.sqrt(e%5B4%5D*e%5B4%5D%2Be%5B5%5D*e%5B5%5D%2Be%5B6%5D*e%5B6%5D)%2Cr%3DMath.max(Math.max(Math.abs(e%5B4%5D)%2CMath.abs(e%5B5%5D))%2CMath.abs(e%5B6%5D))%2Fn%2Ca%3DMath.sqrt(e%5B8%5D*e%5B8%5D%2Be%5B9%5D*e%5B9%5D%2Be%5B10%5D*e%5B10%5D)%2Co%3DMath.max(Math.max(Math.abs(e%5B8%5D)%2CMath.abs(e%5B9%5D))%2CMath.abs(e%5B10%5D))%2Fa%2Ch%3DMath.min(Math.min(s%2Cr)%2Co)%3Blet%20c%3DMath.abs(180*Math.acos(h)%2F3.141592653)%3Breturn%20c%3E.01%3Fl.warn(%22Warning%20voxels%20not%20aligned%20with%20world%20space%3A%20%22%2Bc%2B%22%20degrees%20from%20plumb.%5Cn%22)%3Ac%3D0%2Cc%7Dfloat32V1asRGBA(t)%7Bt.length!%3D%3D3*this.nVox3D%26%26l.warn(%22float32V1asRGBA()%20expects%20%22%2B3*this.nVox3D%2B%22voxels%2C%20got%20%22%2C%2Bt.length)%3Bconst%20e%3Dt.slice()%3Bthis.hdr.datatypeCode%3D2304%2Cthis.nFrame4D%3D1%3Bfor(let%20t%3D4%3Bt%3C7%3Bt%2B%2B)this.hdr.dims%5Bt%5D%3D1%3Bthis.hdr.dims%5B0%5D%3D3%3Bconst%20i%3Dnew%20Uint8Array(4*this.nVox3D)%3Blet%20s%3D1%3Bfor(let%20t%3D0%3Bt%3C3*this.nVox3D%3Bt%2B%2B)isNaN(e%5Bt%5D)%7C%7C(s%3DMath.max(s%2CMath.abs(e%5Bt%5D)))%3Bconst%20n%3D255%2Fs%2Cr%3D2*this.nVox3D%3Blet%20a%3D0%3Bfor(let%20t%3D0%3Bt%3Cthis.nVox3D%3Bt%2B%2B)%7Bconst%20s%3De%5Bt%5D%2Co%3De%5Bt%2Bthis.nVox3D%5D%2Cl%3De%5Bt%2Br%5D%3Bi%5Ba%5D%3DMath.abs(s*n)%2Ci%5Ba%2B1%5D%3DMath.abs(o*n)%2Ci%5Ba%2B2%5D%3DMath.abs(l*n)%3Blet%20h%3D248%2B1*Number(s%3E0)%2B2*Number(o%3E0)%2B4*Number(l%3E0)%3BMath.abs(s)%2BMath.abs(o)%2BMath.abs(l)%3C.1%26%26(h%3D0)%2Ci%5Ba%2B3%5D%3Dh%2Ca%2B%3D4%7Dreturn%20i%7DloadImgV1(t%3D!1%2Ce%3D!1%2Ci%3D!1)%7Blet%20s%3Dthis.v1%3Bif(s%7C%7C3!%3D%3Dthis.nFrame4D%7C%7Cthis.img.constructor!%3D%3DFloat32Array%7C%7C(s%3Dthis.img.slice())%2C!s)return%20l.warn(%22Image%20does%20not%20have%20V1%20data%22)%2C!1%3Bif(t)for(let%20t%3D0%3Bt%3Cthis.nVox3D%3Bt%2B%2B)s%5Bt%5D%3D-s%5Bt%5D%3Bif(e)for(let%20t%3Dthis.nVox3D%3Bt%3C2*this.nVox3D%3Bt%2B%2B)s%5Bt%5D%3D-s%5Bt%5D%3Bif(i)for(let%20t%3D2*this.nVox3D%3Bt%3C3*this.nVox3D%3Bt%2B%2B)s%5Bt%5D%3D-s%5Bt%5D%3Breturn%20this.img%3Dthis.float32V1asRGBA(s)%2C!0%7DcalculateOblique()%7Bif(!this.matRAS)throw%20new%20Error(%22matRAS%20not%20defined%22)%3Bif(void%200%3D%3D%3Dthis.pixDimsRAS)throw%20new%20Error(%22pixDimsRAS%20not%20defined%22)%3Bif(!this.dimsRAS)throw%20new%20Error(%22dimsRAS%20not%20defined%22)%3Bthis.oblique_angle%3Dthis.computeObliqueAngle(this.matRAS)%3Bconst%20t%3Dthis.vox2mm(%5B0%2C0%2C0%5D%2Cthis.matRAS)%2Ce%3Dthis.vox2mm(%5B1%2Fthis.pixDimsRAS%5B1%5D%2C0%2C0%5D%2Cthis.matRAS)%2Ci%3Dthis.vox2mm(%5B0%2C1%2Fthis.pixDimsRAS%5B2%5D%2C0%5D%2Cthis.matRAS)%2Cs%3Dthis.vox2mm(%5B0%2C0%2C1%2Fthis.pixDimsRAS%5B3%5D%5D%2Cthis.matRAS)%3Bke.subtract(e%2Ce%2Ct)%2Cke.subtract(i%2Ci%2Ct)%2Cke.subtract(s%2Cs%2Ct)%3Bconst%20n%3DLe.fromValues(e%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D%2C0%2Ci%5B0%5D%2Ci%5B1%5D%2Ci%5B2%5D%2C0%2Cs%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D%2C0%2C0%2C0%2C0%2C1)%3Bthis.obliqueRAS%3DLe.clone(n)%3Bconst%20r%3DMath.abs(90-ke.angle(e%2Ci)*(180%2FMath.PI))%2Ca%3DMath.abs(90-ke.angle(e%2Cs)*(180%2FMath.PI))%2Co%3DMath.abs(90-ke.angle(i%2Cs)*(180%2FMath.PI))%3Bthis.maxShearDeg%3DMath.max(Math.max(r%2Ca)%2Co)%2Cthis.maxShearDeg%3E.1%26%26l.warn(%22Warning%3A%20voxels%20are%20rhomboidal%2C%20maximum%20shear%20is%20%25f%20degrees.%22%2Cthis.maxShearDeg)%3Bconst%20h%3DOe.fromValues(this.dimsRAS%5B1%5D%2Cthis.dimsRAS%5B2%5D%2Cthis.dimsRAS%5B3%5D%2C1)%2Cc%3DLe.clone(this.matRAS)%3BLe.transpose(c%2Cc)%3Bconst%20d%3DOe.fromValues(-.5%2C-.5%2C-.5%2C0)%3BLe.translate(c%2Cc%2Cke.fromValues(d%5B0%5D%2Cd%5B1%5D%2Cd%5B2%5D))%2Cc%5B0%5D*%3Dh%5B0%5D%2Cc%5B1%5D*%3Dh%5B0%5D%2Cc%5B2%5D*%3Dh%5B0%5D%2Cc%5B4%5D*%3Dh%5B1%5D%2Cc%5B5%5D*%3Dh%5B1%5D%2Cc%5B6%5D*%3Dh%5B1%5D%2Cc%5B8%5D*%3Dh%5B2%5D%2Cc%5B9%5D*%3Dh%5B2%5D%2Cc%5B10%5D*%3Dh%5B2%5D%2Cthis.frac2mm%3DLe.clone(c)%3Bconst%20m%3Dthis.pixDimsRAS%5B1%5D%2Cu%3Dthis.pixDimsRAS%5B2%5D%2CA%3Dthis.pixDimsRAS%5B3%5D%2Cf%3DLe.clone(c)%3Bf%5B0%5D%3Dm*h%5B0%5D%2Cf%5B1%5D%3D0%2Cf%5B2%5D%3D0%2Cf%5B4%5D%3D0%2Cf%5B5%5D%3Du*h%5B1%5D%2Cf%5B6%5D%3D0%2Cf%5B8%5D%3D0%2Cf%5B9%5D%3D0%2Cf%5B10%5D%3DA*h%5B2%5D%3Bconst%20g%3Dthis.mm2vox(%5B0%2C0%2C0%5D%2C!0)%3Bf%5B12%5D%3D(-g%5B0%5D-.5)*m%2Cf%5B13%5D%3D(-g%5B1%5D-.5)*u%2Cf%5B14%5D%3D(-g%5B2%5D-.5)*A%2Cthis.frac2mmOrtho%3DLe.clone(f)%2Cthis.extentsMinOrtho%3D%5Bf%5B12%5D%2Cf%5B13%5D%2Cf%5B14%5D%5D%2Cthis.extentsMaxOrtho%3D%5Bf%5B0%5D%2Bf%5B12%5D%2Cf%5B5%5D%2Bf%5B13%5D%2Cf%5B10%5D%2Bf%5B14%5D%5D%2Cthis.mm2ortho%3DLe.create()%2CLe.invert(this.mm2ortho%2Cn)%7DTHD_daxes_to_NIFTI(t%2Ce%2Ci)%7Bconst%20s%3Dthis.hdr%3Bif(null%3D%3D%3Ds)throw%20new%20Error(%22HDR%20is%20not%20set%22)%3Bs.sform_code%3D2%3Bconst%20n%3D%22xxyyzzg%22%3Blet%20r%3D-1%2Ca%3D-1%2Co%3D-1%3Bconst%20l%3D%5B%22x%22%2C%22y%22%2C%22z%22%5D%3Bl%5B0%5D%3Dn%5Bi%5B0%5D%5D%2Cl%5B1%5D%3Dn%5Bi%5B1%5D%5D%2Cl%5B2%5D%3Dn%5Bi%5B2%5D%5D%3Bconst%20h%3Dt.slice(0%2C3)%2Cc%3De.slice(0%2C3)%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)%22x%22%3D%3D%3Dl%5Bt%5D%3Fr%3Dt%3A%22y%22%3D%3D%3Dl%5Bt%5D%3Fa%3Dt%3Ao%3Dt%3Br%3C0%7C%7Ca%3C0%7C%7Co%3C0%7C%7Cr!%3D%3Da%26%26r!%3D%3Do%26%26a!%3D%3Do%26%26(s.pixDims%5B1%5D%3DMath.abs(h%5B0%5D)%2Cs.pixDims%5B2%5D%3DMath.abs(h%5B1%5D)%2Cs.pixDims%5B3%5D%3DMath.abs(h%5B2%5D)%2Cs.affine%3D%5B%5B1%2C0%2C0%2C0%5D%2C%5B0%2C1%2C0%2C0%5D%2C%5B0%2C0%2C1%2C0%5D%2C%5B0%2C0%2C0%2C1%5D%5D%2Cs.affine%5B0%5D%5Br%5D%3D-h%5Br%5D%2Cs.affine%5B1%5D%5Ba%5D%3D-h%5Ba%5D%2Cs.affine%5B2%5D%5Bo%5D%3Dh%5Bo%5D%2Cs.affine%5B0%5D%5B3%5D%3D-c%5Br%5D%2Cs.affine%5B1%5D%5B3%5D%3D-c%5Ba%5D%2Cs.affine%5B2%5D%5B3%5D%3Dc%5Bo%5D)%7DSetPixDimFromSForm()%7Bif(!this.hdr)throw%20new%20Error(%22hdr%20not%20defined%22)%3Bconst%20t%3Dthis.hdr.affine%2Ce%3DLe.fromValues(t%5B0%5D%5B0%5D%2Ct%5B0%5D%5B1%5D%2Ct%5B0%5D%5B2%5D%2Ct%5B0%5D%5B3%5D%2Ct%5B1%5D%5B0%5D%2Ct%5B1%5D%5B1%5D%2Ct%5B1%5D%5B2%5D%2Ct%5B1%5D%5B3%5D%2Ct%5B2%5D%5B0%5D%2Ct%5B2%5D%5B1%5D%2Ct%5B2%5D%5B2%5D%2Ct%5B2%5D%5B3%5D%2Ct%5B3%5D%5B0%5D%2Ct%5B3%5D%5B1%5D%2Ct%5B3%5D%5B2%5D%2Ct%5B3%5D%5B3%5D)%2Ci%3Dthis.vox2mm(%5B0%2C0%2C0%5D%2Ce)%2Cs%3Dthis.vox2mm(%5B1%2C0%2C0%5D%2Ce)%3Bke.subtract(s%2Cs%2Ci)%3Bconst%20n%3Dthis.vox2mm(%5B0%2C1%2C0%5D%2Ce)%3Bke.subtract(n%2Cn%2Ci)%3Bconst%20r%3Dthis.vox2mm(%5B0%2C0%2C1%5D%2Ce)%3Bke.subtract(r%2Cr%2Ci)%2Cthis.hdr.pixDims%5B1%5D%3Dke.length(s)%2Cthis.hdr.pixDims%5B2%5D%3Dke.length(n)%2Cthis.hdr.pixDims%5B3%5D%3Dke.length(r)%7DreadDICOM(t)%7Bif(this.series%3Dnew%20Ne.Series%2CArray.isArray(t))for(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)%7Bconst%20i%3Dnew%20DataView(t%5Be%5D)%2Cs%3DNe.Series.parseImage(i)%3Bnull%3D%3D%3Ds%3Fl.error(Ne.Series.parserError)%3As.hasPixelData()%26%26(0!%3D%3Dthis.series.images.length%26%26s.getSeriesId()!%3D%3Dthis.series.images%5B0%5D.getSeriesId()%7C%7Cthis.series.addImage(s))%7Delse%7Bconst%20e%3DNe.Series.parseImage(new%20DataView(t))%3Bnull%3D%3D%3De%3Fl.error(Ne.Series.parserError)%3Ae.hasPixelData()%26%26(0!%3D%3Dthis.series.images.length%26%26e.getSeriesId()!%3D%3Dthis.series.images%5B0%5D.getSeriesId()%7C%7Cthis.series.addImage(e))%7Dthis.series.buildSeries()%2Cthis.hdr%3Dnew%20Re.NIFTI1%3Bconst%20e%3Dthis.hdr%3Be.scl_inter%3D0%2Ce.scl_slope%3D1%2Cthis.series.images%5B0%5D.getDataScaleIntercept()%26%26(e.scl_inter%3Dthis.series.images%5B0%5D.getDataScaleIntercept())%2Cthis.series.images%5B0%5D.getDataScaleSlope()%26%26(e.scl_slope%3Dthis.series.images%5B0%5D.getDataScaleSlope())%2Ce.dims%3D%5B3%2C1%2C1%2C1%2C0%2C0%2C0%2C0%5D%2Ce.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%2Ce.dims%5B1%5D%3Dthis.series.images%5B0%5D.getCols()%2Ce.dims%5B2%5D%3Dthis.series.images%5B0%5D.getRows()%2Ce.dims%5B3%5D%3Dthis.series.images%5B0%5D.getNumberOfFrames()%2Cthis.series.images.length%3E1%26%26(e.dims%5B3%5D%3E1%26%26l.debug(%22To%20Do%3A%20multiple%20slices%20per%20file%20and%20multiple%20files%20(XA30%20DWI)%22)%2Ce.dims%5B3%5D%3Dthis.series.images.length)%3Bconst%20i%3Dthis.series.images%5B0%5D.getPixelSpacing()%3Bif(e.pixDims%5B1%5D%3Di%5B0%5D%2Ce.pixDims%5B2%5D%3Di%5B1%5D%2Cthis.series.images.length%3E1)%7Bconst%20t%3Dke.fromValues(...this.series.images%5B0%5D.getImagePosition())%2Ci%3Dke.fromValues(...this.series.images%5B1%5D.getImagePosition())%2Cs%3Dke.fromValues(0%2C0%2C0)%3Bke.subtract(s%2Ct%2Ci)%2Ce.pixDims%5B3%5D%3Dke.length(s)%7Delse%20e.pixDims%5B3%5D%3Dthis.series.images%5B0%5D.getSliceThickness()%3Be.pixDims%5B4%5D%3Dthis.series.images%5B0%5D.getTR()%2F1e3%3Bconst%20s%3Dthis.series.images%5B0%5D.getDataType()%2Cn%3Dthis.series.images%5B0%5D.getBitsAllocated()%3Be.numBitsPerVoxel%3Dn%2Cthis.hdr.littleEndian%3Dthis.series.images%5B0%5D.littleEndian%2C8%3D%3D%3Dn%26%262%3D%3D%3Ds%3Fe.datatypeCode%3D256%3A8%3D%3D%3Dn%26%263%3D%3D%3Ds%3Fe.datatypeCode%3D2%3A16%3D%3D%3Dn%26%262%3D%3D%3Ds%3Fe.datatypeCode%3D4%3A16%3D%3D%3Dn%26%263%3D%3D%3Ds%3Fe.datatypeCode%3D512%3A32%3D%3D%3Dn%26%262%3D%3D%3Ds%3Fe.datatypeCode%3D8%3A32%3D%3D%3Dn%26%263%3D%3D%3Ds%3Fe.datatypeCode%3D768%3A32%3D%3D%3Dn%26%264%3D%3D%3Ds%3Fe.datatypeCode%3D16%3A64%3D%3D%3Dn%26%264%3D%3D%3Ds%3Fe.datatypeCode%3D64%3A1%3D%3D%3Dn%3Fe.datatypeCode%3D1%3Al.warn(%22Unsupported%20DICOM%20format%3A%20%22%2Bs%2B%22%20%22%2Bn)%3Bconst%20r%3De.pixDims.slice(1%2C4)%2Ca%3Dfunction(t%2Ce%2Ci)%7Bconst%20s%3Dt%3Blet%20n%3Dnull%3Bif(s)%7Bconst%20t%3D%7BcolSize%3Ae%5B0%5D%2CrowSize%3Ae%5B1%5D%2CsliceSize%3Ae%5B2%5D%7D%2Cr%3Di%2Ca%3D%5Bs%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D%5D%2Co%3D%5Bs%5B3%5D%2Cs%5B4%5D%2Cs%5B5%5D%5D%2Cl%3D%5Ba%5B1%5D*o%5B2%5D-a%5B2%5D*o%5B1%5D%2Ca%5B2%5D*o%5B0%5D-a%5B0%5D*o%5B2%5D%2Ca%5B0%5D*o%5B1%5D-a%5B1%5D*o%5B0%5D%5D%3Bn%3D%5B%5Ba%5B0%5D*t.colSize*-1%2Co%5B0%5D*t.rowSize*-1%2Cl%5B0%5D*t.sliceSize*-1%2C-1*r%5B0%5D%5D%2C%5Ba%5B1%5D*t.colSize*-1%2Co%5B1%5D*t.rowSize*-1%2Cl%5B1%5D*t.sliceSize*-1%2C-1*r%5B1%5D%5D%2C%5Ba%5B2%5D*t.colSize%2Co%5B2%5D*t.rowSize%2Cl%5B2%5D*t.sliceSize%2Cr%5B2%5D%5D%2C%5B0%2C0%2C0%2C1%5D%5D%7Dreturn%20n%7D(this.series.images%5B0%5D.getImageDirections()%2Cr%2Cthis.series.images%5B0%5D.getImagePosition())%3Blet%20o%3Ba%26%26(e.sform_code%3D1%2Ce.affine%3D%5B%5Ba%5B0%5D%5B0%5D%2Ca%5B0%5D%5B1%5D%2Ca%5B0%5D%5B2%5D%2Ca%5B0%5D%5B3%5D%5D%2C%5Ba%5B1%5D%5B0%5D%2Ca%5B1%5D%5B1%5D%2Ca%5B1%5D%5B2%5D%2Ca%5B1%5D%5B3%5D%5D%2C%5Ba%5B2%5D%5B0%5D%2Ca%5B2%5D%5B1%5D%2Ca%5B2%5D%5B2%5D%2Ca%5B2%5D%5B3%5D%5D%2C%5B0%2C0%2C0%2C1%5D%5D)%3Blet%20h%3Dthis.series.validatePixelDataLength(this.series.images%5B0%5D)%3Bconst%20c%3Dnew%20Uint8Array(new%20ArrayBuffer(h*this.series.images.length))%3Bfor(let%20t%3D0%3Bt%3Cthis.series.images.length%3Bt%2B%2B)o%3Dthis.series.isMosaic%3Fthis.series.getMosaicData(this.series.images%5Bt%5D%2Cthis.series.images%5Bt%5D.getPixelDataBytes())%3Athis.series.images%5Bt%5D.getPixelDataBytes()%2Ch%3Dthis.series.validatePixelDataLength(this.series.images%5Bt%5D)%2Cthis.series.images%5Bt%5D.clearPixelData()%2Cc.set(new%20Uint8Array(o%2C0%2Ch)%2Ch*t)%3Breturn%20c.buffer%7DreadECAT(t)%7Bthis.hdr%3Dnew%20Re.NIFTI1%3Bconst%20e%3Dthis.hdr%3Be.dims%3D%5B3%2C1%2C1%2C1%2C0%2C0%2C0%2C0%5D%2Ce.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%3Bconst%20i%3Dnew%20DataView(t)%2Cs%3Di.getInt32(0%2C!1)%2Cn%3Di.getInt16(50%2C!1)%3Bif(1296127058!%3D%3Ds%7C%7Cn%3C1%7C%7Cn%3E14)throw%20new%20Error(%22Not%20a%20valid%20ECAT%20file%22)%3Blet%20r%3D512%2Ca%3D0%3Bconst%20o%3D%5B%5D%3Blet%20h%3Dnew%20Float32Array%3Bfor(%3B%3B)%7Bif(i.getInt32(r%2C!1)%2Bi.getInt32(r%2B12%2C!1)!%3D%3D31)break%3Blet%20t%3Dr%2B20%2Cs%3D0%2Cn%3D0%3Bfor(%3Bs%3C31%26%26(n%3Di.getInt32(t%2C!1)%2Ct%2B%3D16%2C0!%3D%3Dn)%3B)%7Bs%2B%2B%3Blet%20t%3D512*n%3Bconst%20r%3Dt-512%2Cc%3Di.getUint16(r%2C!1)%3Be.dims%5B1%5D%3Di.getUint16(r%2B4%2C!1)%2Ce.dims%5B2%5D%3Di.getUint16(r%2B6%2C!1)%2Ce.dims%5B3%5D%3Di.getUint16(r%2B8%2C!1)%3Bconst%20d%3Di.getFloat32(r%2B26%2C!1)%3Be.pixDims%5B1%5D%3D10*i.getFloat32(r%2B34%2C!1)%2Ce.pixDims%5B2%5D%3D10*i.getFloat32(r%2B38%2C!1)%2Ce.pixDims%5B3%5D%3D10*i.getFloat32(r%2B42%2C!1)%2Ce.pixDims%5B4%5D%3Di.getUint32(r%2B46%2C!1)%2F1e3%2Co.push(e.pixDims%5B4%5D)%3Bconst%20m%3De.dims%5B1%5D*e.dims%5B2%5D*e.dims%5B3%5D%2Cu%3Dnew%20Float32Array(m)%3Bif(1%3D%3D%3Dc)for(let%20e%3D0%3Be%3Cm%3Be%2B%2B)u%5Be%5D%3Di.getUint8(t)*d%2Ct%2B%2B%3Belse%20if(6%3D%3D%3Dc)for(let%20e%3D0%3Be%3Cm%3Be%2B%2B)u%5Be%5D%3Di.getUint16(t%2C!1)*d%2Ct%2B%3D2%3Belse%20if(7%3D%3D%3Dc)for(let%20e%3D0%3Be%3Cm%3Be%2B%2B)u%5Be%5D%3Di.getUint32(t%2C!1)*d%2Ct%2B%3D4%3Belse%20l.warn(%22Unknown%20ECAT%20data%20type%20%22%2Bc)%3Bconst%20A%3Dh.slice(0)%3Bh%3Dnew%20Float32Array(A.length%2Bu.length)%2Ch.set(A)%2Ch.set(u%2CA.length)%2Ca%2B%2B%7Dif(0%3D%3D%3Dn)break%3Br%2B%3D512%7Dif(e.dims%5B4%5D%3Da%2Ce.pixDims%5B4%5D%3Do%5B0%5D%2Ca%3E1)%7Be.dims%5B0%5D%3D4%3Blet%20t%3D!1%3Bfor(let%20e%3D0%3Be%3Ca%3Be%2B%2B)o%5Be%5D!%3D%3Do%5B0%5D%26%26(t%3D!0)%3Bt%26%26l.warn(%22Frame%20durations%20vary%22)%7Dreturn%20e.sform_code%3D1%2Ce.affine%3D%5B%5B-e.pixDims%5B1%5D%2C0%2C0%2C.5*(e.dims%5B1%5D-2)*e.pixDims%5B1%5D%5D%2C%5B0%2C-e.pixDims%5B2%5D%2C0%2C.5*(e.dims%5B2%5D-2)*e.pixDims%5B2%5D%5D%2C%5B0%2C0%2C-e.pixDims%5B3%5D%2C.5*(e.dims%5B3%5D-2)*e.pixDims%5B3%5D%5D%2C%5B0%2C0%2C0%2C1%5D%5D%2Ce.numBitsPerVoxel%3D32%2Ce.datatypeCode%3D16%2Ch%7DreadV16(t)%7Bthis.hdr%3Dnew%20Re.NIFTI1%3Bconst%20e%3Dthis.hdr%3Be.dims%3D%5B3%2C1%2C1%2C1%2C0%2C0%2C0%2C0%5D%2Ce.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%3Bconst%20i%3Dnew%20DataView(t)%3Be.dims%5B1%5D%3Di.getUint16(0%2C!0)%2Ce.dims%5B2%5D%3Di.getUint16(2%2C!0)%2Ce.dims%5B3%5D%3Di.getUint16(4%2C!0)%3Breturn%202*e.dims%5B1%5D*e.dims%5B2%5D*e.dims%5B3%5D%2B6!%3D%3Dt.byteLength%26%26l.warn(%22This%20does%20not%20look%20like%20a%20valid%20BrainVoyager%20V16%20file%22)%2Ce.numBitsPerVoxel%3D16%2Ce.datatypeCode%3D512%2Cl.warn(%22Warning%3A%20V16%20files%20have%20no%20spatial%20transforms%22)%2Ce.affine%3D%5B%5B0%2C0%2C-e.pixDims%5B1%5D%2C.5*(e.dims%5B1%5D-2)*e.pixDims%5B1%5D%5D%2C%5B-e.pixDims%5B2%5D%2C0%2C0%2C.5*(e.dims%5B2%5D-2)*e.pixDims%5B2%5D%5D%2C%5B0%2C-e.pixDims%5B3%5D%2C0%2C.5*(e.dims%5B3%5D-2)*e.pixDims%5B3%5D%5D%2C%5B0%2C0%2C0%2C1%5D%5D%2Ce.littleEndian%3D!0%2Ct.slice(6)%7DreadVMR(t)%7Bthis.hdr%3Dnew%20Re.NIFTI1%3Bconst%20e%3Dthis.hdr%3Be.dims%3D%5B3%2C1%2C1%2C1%2C0%2C0%2C0%2C0%5D%2Ce.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%3Bconst%20i%3Dnew%20DataView(t)%2Cs%3Di.getUint16(0%2C!0)%3B4!%3D%3Ds%26%26l.warn(%22Not%20a%20valid%20version%204%20VMR%20image%22)%2Ce.dims%5B1%5D%3Di.getUint16(2%2C!0)%2Ce.dims%5B2%5D%3Di.getUint16(4%2C!0)%2Ce.dims%5B3%5D%3Di.getUint16(6%2C!0)%3Bconst%20n%3De.dims%5B1%5D*e.dims%5B2%5D*e.dims%5B3%5D%3Bif(s%3E%3D4)%7Blet%20s%3D8%2Bn%3Bconst%20r%3Di.getUint32(s%2B88%2C!0)%3Bif(s%2B%3D92%2Cr%3E0)%7Bconst%20e%3Dt.byteLength%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)%7Bfor(%3Bs%3Ce%26%260!%3D%3Di.getUint8(s)%3B)s%2B%2B%3Bfor(s%2B%2B%2Cs%2B%3D4%3Bs%3Ce%26%260!%3D%3Di.getUint8(s)%3B)s%2B%2B%3Bs%2B%2B%3Bconst%20t%3Di.getUint32(s%2C!0)%3Bs%2B%3D4%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)s%2B%3D4%7D%7De.pixDims%5B1%5D%3Di.getFloat32(s%2B2%2C!0)%2Ce.pixDims%5B2%5D%3Di.getFloat32(s%2B6%2C!0)%2Ce.pixDims%5B3%5D%3Di.getFloat32(s%2B10%2C!0)%7Dreturn%20l.warn(%22Warning%3A%20VMR%20spatial%20transform%20not%20implemented%22)%2Ce.affine%3D%5B%5B0%2C0%2C-e.pixDims%5B1%5D%2C.5*(e.dims%5B1%5D-2)*e.pixDims%5B1%5D%5D%2C%5B-e.pixDims%5B2%5D%2C0%2C0%2C.5*(e.dims%5B2%5D-2)*e.pixDims%5B2%5D%5D%2C%5B0%2C-e.pixDims%5B3%5D%2C0%2C.5*(e.dims%5B3%5D-2)*e.pixDims%5B3%5D%5D%2C%5B0%2C0%2C0%2C1%5D%5D%2Cl.debug(e)%2Ce.numBitsPerVoxel%3D8%2Ce.datatypeCode%3D2%2Ct.slice(8%2C8%2Bn)%7DreadMGH(t)%7Bthis.hdr%3Dnew%20Re.NIFTI1%3Bconst%20e%3Dthis.hdr%3Be.littleEndian%3D!1%2Ce.dims%3D%5B3%2C1%2C1%2C1%2C0%2C0%2C0%2C0%5D%2Ce.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%3Blet%20i%3Dt%2Cs%3Dnew%20DataView(i)%3Bif(31%3D%3D%3Ds.getUint8(0)%26%26139%3D%3D%3Ds.getUint8(1))%7Bi%3DGe(new%20Uint8Array(t)).buffer%2Cs%3Dnew%20DataView(i)%7Dconst%20n%3Ds.getInt32(0%2C!1)%2Cr%3Ds.getInt32(4%2C!1)%2Ca%3Ds.getInt32(8%2C!1)%2Co%3Ds.getInt32(12%2C!1)%2Ch%3Ds.getInt32(16%2C!1)%2Cc%3Ds.getInt32(20%2C!1)%2Cd%3Ds.getFloat32(30%2C!1)%2Cm%3Ds.getFloat32(34%2C!1)%2Cu%3Ds.getFloat32(38%2C!1)%2CA%3Ds.getFloat32(42%2C!1)%2Cf%3Ds.getFloat32(46%2C!1)%2Cg%3Ds.getFloat32(50%2C!1)%2Cp%3Ds.getFloat32(54%2C!1)%2Cv%3Ds.getFloat32(58%2C!1)%2Cx%3Ds.getFloat32(62%2C!1)%2Cw%3Ds.getFloat32(66%2C!1)%2CC%3Ds.getFloat32(70%2C!1)%2Cb%3Ds.getFloat32(74%2C!1)%2Cy%3Ds.getFloat32(78%2C!1)%2CI%3Ds.getFloat32(82%2C!1)%2CM%3Ds.getFloat32(86%2C!1)%3B(1!%3D%3Dn%7C%7Cc%3C0%7C%7Cc%3E4)%26%26l.warn(%22Not%20a%20valid%20MGH%20file%22)%2C0%3D%3D%3Dc%3F(e.numBitsPerVoxel%3D8%2Ce.datatypeCode%3D2)%3A4%3D%3D%3Dc%3F(e.numBitsPerVoxel%3D16%2Ce.datatypeCode%3D4)%3A1%3D%3D%3Dc%3F(e.numBitsPerVoxel%3D32%2Ce.datatypeCode%3D8)%3A3%3D%3D%3Dc%26%26(e.numBitsPerVoxel%3D32%2Ce.datatypeCode%3D16)%2Ce.dims%5B1%5D%3Dr%2Ce.dims%5B2%5D%3Da%2Ce.dims%5B3%5D%3Do%2Ce.dims%5B4%5D%3Dh%2Ch%3E1%26%26(e.dims%5B0%5D%3D4)%2Ce.pixDims%5B1%5D%3Dd%2Ce.pixDims%5B2%5D%3Dm%2Ce.pixDims%5B3%5D%3Du%2Ce.vox_offset%3D284%2Ce.sform_code%3D1%3Bconst%20D%3DLe.fromValues(A*e.pixDims%5B1%5D%2Cp*e.pixDims%5B2%5D%2Cw*e.pixDims%5B3%5D%2C0%2Cf*e.pixDims%5B1%5D%2Cv*e.pixDims%5B2%5D%2CC*e.pixDims%5B3%5D%2C0%2Cg*e.pixDims%5B1%5D%2Cx*e.pixDims%5B2%5D%2Cb*e.pixDims%5B3%5D%2C0%2C0%2C0%2C0%2C1)%2CF%3D%5Be.dims%5B1%5D%2F2%2Ce.dims%5B2%5D%2F2%2Ce.dims%5B3%5D%2F2%2C1%5D%2CT%3D%5B0%2C0%2C0%2C0%5D%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)%7BT%5Bt%5D%3D0%3Bfor(let%20e%3D0%3Be%3C3%3Be%2B%2B)T%5Bt%5D%3DT%5Bt%5D%2BD%5Be%2B4*t%5D*F%5Be%5D%7De.affine%3D%5B%5BD%5B0%5D%2CD%5B1%5D%2CD%5B2%5D%2Cy-T%5B0%5D%5D%2C%5BD%5B4%5D%2CD%5B5%5D%2CD%5B6%5D%2CI-T%5B1%5D%5D%2C%5BD%5B8%5D%2CD%5B9%5D%2CD%5B10%5D%2CM-T%5B2%5D%5D%2C%5B0%2C0%2C0%2C1%5D%5D%3Bconst%20V%3De.dims%5B1%5D*e.dims%5B2%5D*e.dims%5B3%5D*e.dims%5B4%5D*(e.numBitsPerVoxel%2F8)%3Breturn%20i.slice(e.vox_offset%2Ce.vox_offset%2BV)%7DreadFIB(t)%7Bthis.hdr%3Dnew%20Re.NIFTI1%3Bconst%20e%3Dthis.hdr%3Be.littleEndian%3D!1%2Ce.dims%3D%5B3%2C1%2C1%2C1%2C0%2C0%2C0%2C0%5D%2Ce.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%3Bconst%20i%3Dbe.readMatV4(t)%3Bif(!(%22dimension%22in%20i)%7C%7C!(%22dti_fa%22in%20i))throw%20new%20Error(%22Not%20a%20valid%20DSIstudio%20FIB%20file%22)%3Bconst%20s%3D%22index0%22in%20i%26%26%22index1%22in%20i%26%26%22index2%22in%20i%3Be.numBitsPerVoxel%3D32%2Ce.datatypeCode%3D16%2Ce.dims%5B1%5D%3Di.dimension%5B0%5D%2Ce.dims%5B2%5D%3Di.dimension%5B1%5D%2Ce.dims%5B3%5D%3Di.dimension%5B2%5D%2Ce.dims%5B4%5D%3D1%2Ce.pixDims%5B1%5D%3Di.voxel_size%5B0%5D%2Ce.pixDims%5B2%5D%3Di.voxel_size%5B1%5D%2Ce.pixDims%5B3%5D%3Di.voxel_size%5B2%5D%2Ce.sform_code%3D1%3Bconst%20n%3D.5*(e.dims%5B1%5D-1)*e.pixDims%5B1%5D%2Cr%3D.5*(e.dims%5B2%5D-1)*e.pixDims%5B2%5D%2Ca%3D.5*(e.dims%5B3%5D-1)*e.pixDims%5B3%5D%3Be.affine%3D%5B%5Be.pixDims%5B1%5D%2C0%2C0%2C-n%5D%2C%5B0%2C-e.pixDims%5B2%5D%2C0%2Cr%5D%2C%5B0%2C0%2Ce.pixDims%5B2%5D%2C-a%5D%2C%5B0%2C0%2C0%2C1%5D%5D%2Ce.littleEndian%3D!0%3Bconst%20o%3De.dims%5B1%5D*e.dims%5B2%5D*e.dims%5B3%5D%2Cl%3Do*Math.ceil(e.numBitsPerVoxel%2F8)%2Ch%3Dl*e.dims%5B4%5D%2Cc%3Dnew%20Uint8Array(new%20ArrayBuffer(4*o*3))%3Bif(s)%7Bconst%20t%3De.dims%5B1%5D*e.dims%5B2%5D*e.dims%5B3%5D%2Cs%3Dnew%20Float32Array(t)%2Cn%3Dnew%20Float32Array(t)%2Cr%3Dnew%20Float32Array(t)%2Ca%3Di.index0%2Co%3Di.odf_vertices%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bconst%20t%3D3*a%5Be%5D%3Bs%5Be%5D%3Do%5Bt%2B0%5D%2Cn%5Be%5D%3Do%5Bt%2B1%5D%2Cr%5Be%5D%3D-o%5Bt%2B2%5D%7Dc.set(new%20Uint8Array(s.buffer%2Cs.byteOffset%2Cs.byteLength)%2C0*l)%2Cc.set(new%20Uint8Array(n.buffer%2Cn.byteOffset%2Cn.byteLength)%2C1*l)%2Cc.set(new%20Uint8Array(r.buffer%2Cr.byteOffset%2Cr.byteLength)%2C2*l)%7Dconst%20d%3Dnew%20Uint8Array(new%20ArrayBuffer(h))%2Cm%3DFloat32Array.from(i.dti_fa)%2Cu%3Dnew%20Uint8Array(m.buffer%2Cm.byteOffset%2Cm.byteLength)%3Breturn%20d.set(u%2C0)%2C%22report%22in%20i%26%26(e.description%3D(new%20TextDecoder).decode(i.report.subarray(0%2CMath.min(79%2Ci.report.byteLength))))%2C%5Bd.buffer%2Cnew%20Float32Array(c.buffer)%5D%7DreadSRC(t)%7Bthis.hdr%3Dnew%20Re.NIFTI1%3Bconst%20e%3Dthis.hdr%3Be.littleEndian%3D!1%2Ce.dims%3D%5B3%2C1%2C1%2C1%2C0%2C0%2C0%2C0%5D%2Ce.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%3Bconst%20i%3Dbe.readMatV4(t)%3Bif(!(%22dimension%22in%20i)%7C%7C!(%22image0%22in%20i))throw%20new%20Error(%22Not%20a%20valid%20DSIstudio%20SRC%20file%22)%3Blet%20s%3D0%2Cn%3D0%3Bfor(const%5Bt%2Ce%5Dof%20Object.entries(i))if(t.startsWith(%22image%22))%7Bif(0%3D%3D%3Ds%3Fn%3De.length%3An!%3D%3De.length%26%26(n%3D-1)%2Ce.constructor!%3D%3DUint16Array)throw%20new%20Error(%22DSIstudio%20SRC%20files%20always%20use%20Uint16%20datatype%22)%3Bs%2B%2B%7Dif(n%3C1%7C%7Cs%3C1)throw%20new%20Error(%22SRC%20file%20not%20valid%20DSI%20Studio%20data.%20The%20image(s)%20should%20have%20the%20same%20length%22)%3Be.numBitsPerVoxel%3D16%2Ce.datatypeCode%3D512%2Ce.dims%5B1%5D%3Di.dimension%5B0%5D%2Ce.dims%5B2%5D%3Di.dimension%5B1%5D%2Ce.dims%5B3%5D%3Di.dimension%5B2%5D%2Ce.dims%5B4%5D%3Ds%2Ce.dims%5B4%5D%3E1%26%26(e.dims%5B0%5D%3D4)%2Ce.pixDims%5B1%5D%3Di.voxel_size%5B0%5D%2Ce.pixDims%5B2%5D%3Di.voxel_size%5B1%5D%2Ce.pixDims%5B3%5D%3Di.voxel_size%5B2%5D%2Ce.sform_code%3D1%3Bconst%20r%3D.5*(e.dims%5B1%5D-1)*e.pixDims%5B1%5D%2Ca%3D.5*(e.dims%5B2%5D-1)*e.pixDims%5B2%5D%2Co%3D.5*(e.dims%5B3%5D-1)*e.pixDims%5B3%5D%3Be.affine%3D%5B%5Be.pixDims%5B1%5D%2C0%2C0%2C-r%5D%2C%5B0%2C-e.pixDims%5B2%5D%2C0%2Ca%5D%2C%5B0%2C0%2Ce.pixDims%5B2%5D%2C-o%5D%2C%5B0%2C0%2C0%2C1%5D%5D%2Ce.littleEndian%3D!0%3Bconst%20l%3De.dims%5B1%5D*e.dims%5B2%5D*e.dims%5B3%5D*(e.numBitsPerVoxel%2F8)%2Ch%3Dl*e.dims%5B4%5D%2Cc%3Dnew%20Uint8Array(new%20ArrayBuffer(h))%3Blet%20d%3D0%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)%7Bconst%20e%3Di%5B%60image%24%7Bt%7D%60%5D%2Cs%3Dnew%20Uint8Array(e.buffer%2Ce.byteOffset%2Ce.byteLength)%3Bc.set(s%2Cd)%2Cd%2B%3Dl%7Dreturn%22report%22in%20i%26%26(e.description%3D(new%20TextDecoder).decode(i.report.subarray(0%2CMath.min(79%2Ci.report.byteLength))))%2Cc.buffer%7DreadHEAD(t%2Ce)%7Bthis.hdr%3Dnew%20Re.NIFTI1%3Bconst%20i%3Dthis.hdr%3Bi.dims%5B0%5D%3D3%2Ci.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%3Blet%20s%3D%5B0%2C0%2C0%5D%2Cn%3D%5B0%2C0%2C0%5D%2Cr%3D%5B1%2C1%2C1%5D%3Bconst%20a%3D(new%20TextDecoder).decode(t).split(%2F%5Cr%3F%5Cn%2F)%2Co%3D(t.byteLength%2B8)%2516%2Ch%3Dt.byteLength%2B(16-o)%3Bl.debug(t.byteLength%2C%22len%22%2Ch)%3Bconst%20c%3Dnew%20Uint8Array(h)%3Bc.fill(0)%2Cc.set(new%20Uint8Array(t))%3Bconst%20d%3Dnew%20Re.NIFTIEXTENSION(h%2B8%2C42%2Cc%2C!0)%3Bi.addExtension(d)%2Ci.extensionCode%3D42%2Ci.extensionFlag%5B0%5D%3D1%2Ci.extensionSize%3Dh%2B8%3Bconst%20m%3Da.length%3Blet%20u%3D0%2CA%3D!1%3Bfor(%3Bu%3Cm%3B)%7Blet%20t%3Da%5Bu%5D%3Bif(u%2B%2B%2C!t.startsWith(%22type%22))continue%3Bconst%20e%3Dt.includes(%22integer-attribute%22)%2Co%3Dt.includes(%22float-attribute%22)%3Bif(t%3Da%5Bu%5D%2Cu%2B%2B%2C!t.startsWith(%22name%22))continue%3Blet%20h%3Dt.split(%22%3D%20%22)%3Bconst%20c%3Dh%5B1%5D%3Bt%3Da%5Bu%5D%2Cu%2B%2B%2Ch%3Dt.split(%22%3D%20%22)%3Blet%20d%3DparseInt(h%5B1%5D)%3Bif(!(d%3C1))%7Bif(t%3Da%5Bu%5D%2Cu%2B%2B%2Ch%3Dt.trim().split(%2F%5Cs%2B%2F)%2Co%7C%7Ce)%7Bfor(%3Bh.length%3Cd%3B)%7Bt%3Da%5Bu%5D%2Cu%2B%2B%3Bconst%20e%3Dt.trim().split(%2F%5Cs%2B%2F)%3Bh.push(...e)%7Dfor(let%20t%3D0%3Bt%3Cd%3Bt%2B%2B)h%5Bt%5D%3DparseFloat(h%5Bt%5D)%7Dswitch(c)%7Bcase%22BYTEORDER_STRING%22%3Ah%5B0%5D.includes(%22LSB_FIRST%22)%3Fi.littleEndian%3D!0%3Ah%5B0%5D.includes(%22MSB_FIRST%22)%26%26(i.littleEndian%3D!1)%3Bbreak%3Bcase%22BRICK_TYPES%22%3A%7Bi.dims%5B4%5D%3Dd%3Bconst%20t%3DparseInt(h%5B0%5D)%3B0%3D%3D%3Dt%3F(i.numBitsPerVoxel%3D8%2Ci.datatypeCode%3D2)%3A1%3D%3D%3Dt%3F(i.numBitsPerVoxel%3D16%2Ci.datatypeCode%3D4)%3A3%3D%3D%3Dt%3F(i.numBitsPerVoxel%3D32%2Ci.datatypeCode%3D16)%3Al.warn(%22Unknown%20BRICK_TYPES%20%22%2Ct)%7Dbreak%3Bcase%22IJK_TO_DICOM_REAL%22%3Aif(d%3C12)break%3BA%3D!0%2Ci.sform_code%3D2%2Ci.affine%3D%5B%5B-h%5B0%5D%2C-h%5B1%5D%2C-h%5B2%5D%2C-h%5B3%5D%5D%2C%5B-h%5B4%5D%2C-h%5B5%5D%2C-h%5B6%5D%2C-h%5B7%5D%5D%2C%5Bh%5B8%5D%2Ch%5B9%5D%2Ch%5B10%5D%2Ch%5B11%5D%5D%2C%5B0%2C0%2C0%2C1%5D%5D%3Bbreak%3Bcase%22DATASET_DIMENSIONS%22%3Ad%3DMath.max(d%2C3)%3Bfor(let%20t%3D0%3Bt%3Cd%3Bt%2B%2B)i.dims%5Bt%2B1%5D%3Dh%5Bt%5D%3Bbreak%3Bcase%22ORIENT_SPECIFIC%22%3As%3Dh%3Bbreak%3Bcase%22ORIGIN%22%3An%3Dh%3Bbreak%3Bcase%22DELTA%22%3Ar%3Dh%3Bbreak%3Bcase%22TAXIS_FLOATS%22%3Ai.pixDims%5B4%5D%3Dh%5B0%5D%3Bbreak%3Bdefault%3Al.warn(%22Unknown%3A%22%2Cc)%7D%7D%7DA%3Fthis.SetPixDimFromSForm()%3Athis.THD_daxes_to_NIFTI(r%2Cn%2Cs)%3Bconst%20f%3Di.numBitsPerVoxel%2F8*i.dims%5B1%5D*i.dims%5B2%5D*i.dims%5B3%5D*i.dims%5B4%5D%3Bif(!e)throw%20new%20Error(%22pairedImgData%20not%20set%22)%3Bif(e.byteLength%3Cf)%7Breturn%20Ge(new%20Uint8Array(e)).buffer%7Dreturn%20e.slice(0)%7DreadMHA(t%2Ce)%7Bconst%20i%3Dt.byteLength%3Bif(i%3C20)throw%20new%20Error(%22File%20too%20small%20to%20be%20VTK%3A%20bytes%20%3D%20%22%2Bt.byteLength)%3Bconst%20s%3Dnew%20Uint8Array(t)%3Blet%20n%3D0%3Bfunction%20r(t)%7Breturn%2010%3D%3D%3Dt%7C%7C13%3D%3D%3Dt%7Dfunction%20a()%7Bfor(%3Bn%3Ci%26%26r(s%5Bn%5D)%3B)n%2B%2B%3Bconst%20e%3Dn%3Bfor(%3Bn%3Ci%26%26!r(s%5Bn%5D)%3B)n%2B%2B%3Breturn%20n-e%3C2%3F%22%22%3A(new%20TextDecoder).decode(t.slice(e%2Cn))%7Dlet%20o%3Da()%3Bthis.hdr%3Dnew%20Re.NIFTI1%3Bconst%20h%3Dthis.hdr%3Bh.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%2Ch.dims%3D%5B1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%5D%2Ch.littleEndian%3D!0%3Blet%20c%3D!1%2Cd%3D!1%3Bconst%20m%3DPe.fromValues(NaN%2C0%2C0%2C0%2C1%2C0%2C0%2C0%2C1)%2Cu%3Dke.fromValues(0%2C0%2C0)%3Bfor(%3B%22%22!%3D%3Do%3B)%7Blet%20t%3Do.split(%22%20%22)%3Bif(t.length%3E2%26%26(t%3Dt.slice(2))%2Co.startsWith(%22BinaryDataByteOrderMSB%22)%26%26t%5B0%5D.includes(%22False%22)%26%26(h.littleEndian%3D!0)%2Co.startsWith(%22BinaryDataByteOrderMSB%22)%26%26t%5B0%5D.includes(%22True%22)%26%26(h.littleEndian%3D!1)%2Co.startsWith(%22CompressedData%22)%26%26t%5B0%5D.includes(%22True%22)%26%26(c%3D!0)%2Co.startsWith(%22TransformMatrix%22))for(let%20e%3D0%3Be%3C9%3Be%2B%2B)m%5Be%5D%3DparseFloat(t%5Be%5D)%3Bif(o.startsWith(%22Offset%22))for(let%20e%3D0%3Be%3CMath.min(t.length%2C3)%3Be%2B%2B)u%5Be%5D%3DparseFloat(t%5Be%5D)%3Bif(o.startsWith(%22ElementSpacing%22))for(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)h.pixDims%5Be%2B1%5D%3DparseFloat(t%5Be%5D)%3Bif(o.startsWith(%22DimSize%22))%7Bh.dims%5B0%5D%3Dt.length%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)h.dims%5Be%2B1%5D%3DparseInt(t%5Be%5D)%7Dif(o.startsWith(%22ElementType%22))switch(t%5B0%5D)%7Bcase%22MET_UCHAR%22%3Ah.numBitsPerVoxel%3D8%2Ch.datatypeCode%3D2%3Bbreak%3Bcase%22MET_CHAR%22%3Ah.numBitsPerVoxel%3D8%2Ch.datatypeCode%3D256%3Bbreak%3Bcase%22MET_SHORT%22%3Ah.numBitsPerVoxel%3D16%2Ch.datatypeCode%3D4%3Bbreak%3Bcase%22MET_USHORT%22%3Ah.numBitsPerVoxel%3D16%2Ch.datatypeCode%3D512%3Bbreak%3Bcase%22MET_INT%22%3Ah.numBitsPerVoxel%3D32%2Ch.datatypeCode%3D8%3Bbreak%3Bcase%22MET_UINT%22%3Ah.numBitsPerVoxel%3D32%2Ch.datatypeCode%3D768%3Bbreak%3Bcase%22MET_FLOAT%22%3Ah.numBitsPerVoxel%3D32%2Ch.datatypeCode%3D16%3Bbreak%3Bcase%22MET_DOUBLE%22%3Ah.numBitsPerVoxel%3D64%2Ch.datatypeCode%3D64%3Bbreak%3Bdefault%3Athrow%20new%20Error(%22Unsupported%20MHA%20data%20type%3A%20%22%2Bt%5B0%5D)%7Dif(o.startsWith(%22ObjectType%22)%26%26!t%5B0%5D.includes(%22Image%22)%26%26l.warn(%22Only%20able%20to%20read%20ObjectType%20%3D%20Image%2C%20not%20%22%2Bo)%2Co.startsWith(%22ElementDataFile%22))%7B%22LOCAL%22!%3D%3Dt%5B0%5D%26%26(d%3D!0)%3Bbreak%7Do%3Da()%7Dconst%20A%3DPe.fromValues(h.pixDims%5B1%5D%2C0%2C0%2C0%2Ch.pixDims%5B2%5D%2C0%2C0%2C0%2Ch.pixDims%5B3%5D)%3Bfor(Pe.multiply(m%2Cm%2CA)%2Ch.affine%3D%5B%5B-m%5B0%5D%2C-m%5B3%5D%2C-m%5B6%5D%2C-u%5B0%5D%5D%2C%5B-m%5B1%5D%2C-m%5B4%5D%2C-m%5B7%5D%2C-u%5B1%5D%5D%2C%5Bm%5B2%5D%2Cm%5B5%5D%2Cm%5B8%5D%2Cu%5B2%5D%5D%2C%5B0%2C0%2C0%2C1%5D%5D%3B10%3D%3D%3Ds%5Bn%5D%3B)n%2B%2B%3Breturn%20h.vox_offset%3Dn%2Cd%26%26e%3Fc%3FGe(new%20Uint8Array(e.slice(0))).buffer%3Ae.slice(0)%3Ac%3FGe(new%20Uint8Array(t.slice(h.vox_offset))).buffer%3At.slice(h.vox_offset)%7DreadMIF(t%2Ce)%7Bthis.hdr%3Dnew%20Re.NIFTI1%3Bconst%20i%3Dthis.hdr%3Bi.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%2Ci.dims%3D%5B1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%5D%3Blet%20s%3Dt.byteLength%3Bif(s%3C20)throw%20new%20Error(%22File%20too%20small%20to%20be%20MIF%3A%20bytes%20%3D%20%22%2Bs)%3Bconst%20n%3Dnew%20Uint8Array(t)%3Bif(31%3D%3D%3Dn%5B0%5D%26%26139%3D%3D%3Dn%5B1%5D)%7Bl.debug(%22MIF%20with%20GZ%20decompression%22)%3Bconst%20e%3DGe(new%20Uint8Array(t))%3Bt%3De.buffer%2Cs%3Dt.byteLength%7Dlet%20r%3D0%3Bfunction%20a()%7Bfor(%3Br%3Cs%26%2610%3D%3D%3Dn%5Br%5D%3B)r%2B%2B%3Bconst%20e%3Dr%3Bfor(%3Br%3Cs%26%2610!%3D%3Dn%5Br%5D%3B)r%2B%2B%3Breturn%20r%2B%2B%2Cr-e%3C1%3F%22%22%3A(new%20TextDecoder).decode(t.slice(e%2Cr-1))%7Dlet%20o%3Da()%3Bif(!o.startsWith(%22mrtrix%20image%22))throw%20new%20Error(%22Not%20a%20valid%20MIF%20file%22)%3Bconst%20h%3D%5B%5D%3Blet%20c%3D!1%2Cd%3D0%2Cm%3D0%2Cu%3D!1%3Bfor(o%3Da()%3Br%3Cs%26%26!o.startsWith(%22END%22)%3B)%7Blet%20t%3Do.split(%22%3A%22)%3Bif(o%3Da()%2Ct.length%3C2)break%3Bconst%20e%3Dt%5B0%5D%3Bt%3Dt%5B1%5D.split(%22%2C%22)%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)t%5Be%5D%3Dt%5Be%5D.trim()%3Bswitch(e)%7Bcase%22dim%22%3Ai.dims%5B0%5D%3Dt.length%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)i.dims%5Be%2B1%5D%3DparseInt(t%5Be%5D)%3Bbreak%3Bcase%22vox%22%3Afor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)i.pixDims%5Be%2B1%5D%3DparseFloat(t%5Be%5D)%2CisNaN(i.pixDims%5Be%2B1%5D)%26%26(i.pixDims%5Be%2B1%5D%3D0)%3Bbreak%3Bcase%22layout%22%3Afor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)h.push(parseInt(t%5Be%5D))%3Bbreak%3Bcase%22datatype%22%3A%7Bconst%20e%3Dt%5B0%5D%3Be.startsWith(%22Bit%22)%3F(c%3D!0%2Ci.datatypeCode%3D2)%3Ae.startsWith(%22Int8%22)%3Fi.datatypeCode%3D256%3Ae.startsWith(%22UInt8%22)%3Fi.datatypeCode%3D2%3Ae.startsWith(%22Int16%22)%3Fi.datatypeCode%3D4%3Ae.startsWith(%22UInt16%22)%3Fi.datatypeCode%3D512%3Ae.startsWith(%22Int32%22)%3Fi.datatypeCode%3D8%3Ae.startsWith(%22UInt32%22)%3Fi.datatypeCode%3D768%3Ae.startsWith(%22Float32%22)%3Fi.datatypeCode%3D16%3Ae.startsWith(%22Float64%22)%3Fi.datatypeCode%3D64%3Al.warn(%22Unsupported%20datatype%20%22%2Be)%2Ce.includes(%228%22)%3Fi.numBitsPerVoxel%3D8%3Ae.includes(%2216%22)%3Fi.numBitsPerVoxel%3D16%3Ae.includes(%2232%22)%3Fi.numBitsPerVoxel%3D32%3Ae.includes(%2264%22)%26%26(i.numBitsPerVoxel%3D64)%2Ci.littleEndian%3D!0%2Ce.endsWith(%22LE%22)%26%26(i.littleEndian%3D!0)%2Ce.endsWith(%22BE%22)%26%26(i.littleEndian%3D!1)%7Dbreak%3Bcase%22transform%22%3Aif(d%3E2%7C%7C4!%3D%3Dt.length)break%3Bi.affine%5Bd%5D%5B0%5D%3DparseFloat(t%5B0%5D)%2Ci.affine%5Bd%5D%5B1%5D%3DparseFloat(t%5B1%5D)%2Ci.affine%5Bd%5D%5B2%5D%3DparseFloat(t%5B2%5D)%2Ci.affine%5Bd%5D%5B3%5D%3DparseFloat(t%5B3%5D)%2Cd%2B%2B%3Bbreak%3Bcase%22comments%22%3Ai.description%3Dt%5B0%5D.substring(0%2CMath.min(79%2Ct%5B0%5D.length))%3Bbreak%3Bcase%22RepetitionTime%22%3Am%3DparseFloat(t%5B0%5D)%3Bbreak%3Bcase%22file%22%3Au%3D!t%5B0%5D.startsWith(%22.%20%22)%2Cu%7C%7C(t%3Dt%5B0%5D.split(%22%20%22)%2Ci.vox_offset%3DparseInt(t%5B1%5D))%7D%7Dconst%20A%3Di.dims%5B0%5D%3BA%3E5%26%26l.warn(%22reader%20only%20designed%20for%20a%20maximum%20of%205%20dimensions%20(XYZTD)%22)%3Blet%20f%2Cg%3D1%3Bfor(let%20t%3D0%3Bt%3CA%3Bt%2B%2B)g*%3DMath.max(i.dims%5Bt%2B1%5D%2C1)%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)for(let%20e%3D0%3Be%3C3%3Be%2B%2B)i.affine%5Bt%5D%5Be%5D*%3Di.pixDims%5Be%2B1%5D%3Bif(l.debug(%22mif%20affine%3A%22%2Bi.affine%5B0%5D)%2Cm%3E0%26%26(i.pixDims%5B4%5D%3Dm)%2Cu%26%26!e%26%26l.warn(%22MIH%20header%20provided%20without%20paired%20image%20data%22)%2Ce%26%26u)f%3De.slice(0)%3Belse%20if(c)%7Bi.numBitsPerVoxel%3D8%3Bconst%20e%3Dnew%20Uint8Array(g)%2Cs%3Dt.slice(i.vox_offset%2Ci.vox_offset%2BMath.ceil(g%2F8))%2Cn%3Dnew%20Uint8Array(s)%3Blet%20r%3D0%3Bfor(let%20t%3D0%3Bt%3Cg%3Bt%2B%2B)%7Bconst%20i%3Dt%258%3Be%5Bt%5D%3Dn%5Br%5D%3E%3E7-i%261%2C7%3D%3D%3Di%26%26r%2B%2B%7Df%3De.buffer%7Delse%20f%3Dt.slice(i.vox_offset%2Ci.vox_offset%2Bg*(i.numBitsPerVoxel%2F8))%3Bh.length!%3D%3Di.dims%5B0%5D%26%26l.warn(%22dims%20does%20not%20match%20layout%22)%3Blet%20p%3D1%3Bconst%20v%3D%5B1%2C1%2C1%2C1%2C1%5D%2Cx%3D%5B!1%2C!1%2C!1%2C!1%2C!1%5D%3Bfor(let%20t%3D0%3Bt%3Ch.length%3Bt%2B%2B)for(let%20e%3D0%3Be%3Ch.length%3Be%2B%2B)%7BMath.abs(h%5Be%5D)%3D%3D%3Dt%26%26(v%5Be%5D%3Dp%2C(h%5Be%5D%3C0%7C%7CObject.is(h%5Be%5D%2C-0))%26%26(x%5Be%5D%3D!0)%2Cp*%3Di.dims%5Be%2B1%5D)%7Dlet%20w%3Dbe.range(0%2Ci.dims%5B1%5D-1%2C1)%3Bx%5B0%5D%26%26(w%3Dbe.range(i.dims%5B1%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ci.dims%5B1%5D%3Bt%2B%2B)w%5Bt%5D*%3Dv%5B0%5D%3Blet%20C%3Dbe.range(0%2Ci.dims%5B2%5D-1%2C1)%3Bx%5B1%5D%26%26(C%3Dbe.range(i.dims%5B2%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ci.dims%5B2%5D%3Bt%2B%2B)C%5Bt%5D*%3Dv%5B1%5D%3Blet%20b%3Dbe.range(0%2Ci.dims%5B3%5D-1%2C1)%3Bx%5B2%5D%26%26(b%3Dbe.range(i.dims%5B3%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ci.dims%5B3%5D%3Bt%2B%2B)b%5Bt%5D*%3Dv%5B2%5D%3Blet%20y%3Dbe.range(0%2Ci.dims%5B4%5D-1%2C1)%3Bx%5B3%5D%26%26(y%3Dbe.range(i.dims%5B4%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ci.dims%5B4%5D%3Bt%2B%2B)y%5Bt%5D*%3Dv%5B3%5D%3Blet%20I%3Dbe.range(0%2Ci.dims%5B5%5D-1%2C1)%3Bx%5B4%5D%26%26(I%3Dbe.range(i.dims%5B5%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ci.dims%5B5%5D%3Bt%2B%2B)I%5Bt%5D*%3Dv%5B4%5D%3Blet%20M%2CD%2CF%3D0%3Bswitch(i.datatypeCode)%7Bcase%20256%3AM%3Dnew%20Int8Array(f)%2CD%3Dnew%20Int8Array(g)%3Bbreak%3Bcase%202%3AM%3Dnew%20Uint8Array(f)%2CD%3Dnew%20Uint8Array(g)%3Bbreak%3Bcase%204%3AM%3Dnew%20Int16Array(f)%2CD%3Dnew%20Int16Array(g)%3Bbreak%3Bcase%20512%3AM%3Dnew%20Uint16Array(f)%2CD%3Dnew%20Uint16Array(g)%3Bbreak%3Bcase%208%3AM%3Dnew%20Int32Array(f)%2CD%3Dnew%20Int32Array(g)%3Bbreak%3Bcase%20768%3AM%3Dnew%20Uint32Array(f)%2CD%3Dnew%20Uint32Array(g)%3Bbreak%3Bcase%2016%3AM%3Dnew%20Float32Array(f)%2CD%3Dnew%20Float32Array(g)%3Bbreak%3Bcase%2064%3AM%3Dnew%20Float64Array(f)%2CD%3Dnew%20Float64Array(g)%3Bbreak%3Bdefault%3Athrow%20new%20Error(%22unknown%20datatypeCode%22)%7Dfor(let%20t%3D0%3Bt%3Ci.dims%5B5%5D%3Bt%2B%2B)for(let%20e%3D0%3Be%3Ci.dims%5B4%5D%3Be%2B%2B)for(let%20s%3D0%3Bs%3Ci.dims%5B3%5D%3Bs%2B%2B)for(let%20n%3D0%3Bn%3Ci.dims%5B2%5D%3Bn%2B%2B)for(let%20r%3D0%3Br%3Ci.dims%5B1%5D%3Br%2B%2B)D%5BF%5D%3DM%5Bw%5Br%5D%2BC%5Bn%5D%2Bb%5Bs%5D%2By%5Be%5D%2BI%5Bt%5D%5D%2CF%2B%2B%3Breturn%20D%7DreadNRRD(t%2Ce)%7Bthis.hdr%3Dnew%20Re.NIFTI1%3Bconst%20i%3Dthis.hdr%3Bi.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%3Bconst%20s%3Dt.byteLength%3Blet%20n%3Dnull%3Bconst%20r%3Dnew%20Uint8Array(t)%3Bfor(let%20e%3D1%3Be%3Cs%3Be%2B%2B)if(10%3D%3D%3Dr%5Be-1%5D%26%2610%3D%3D%3Dr%5Be%5D)%7Bconst%20s%3Dt.slice(0%2Ce-1)%3Bn%3D(new%20TextDecoder).decode(s)%2Ci.vox_offset%3De%2B1%3Bbreak%7Dif(null%3D%3D%3Dn)throw%20new%20Error(%22could%20not%20extract%20txt%22)%3Bconst%20a%3Dn.split(%22%5Cn%22)%3Ba%5B0%5D.startsWith(%22NRRD%22)%7C%7Calert(%22Invalid%20NRRD%20image%22)%3Bconst%20o%3Da.length%3Blet%20h%3D!1%2Cc%3D!1%2Cd%3D!1%3Bconst%20m%3DPe.fromValues(NaN%2C0%2C0%2C0%2C1%2C0%2C0%2C0%2C1)%2Cu%3Dke.fromValues(0%2C0%2C0)%3Blet%20A%3DPe.create()%3Bfor(let%20t%3D1%3Bt%3Co%3Bt%2B%2B)%7Blet%20e%3Da%5Bt%5D%3Bif(%22%23%22%3D%3D%3De%5B0%5D)continue%3Be%3De.toLowerCase()%3Bconst%20s%3De.split(%22%3A%22)%3Bif(s.length%3C2)continue%3Bconst%20n%3Ds%5B0%5D.trim()%3Blet%20r%3Ds%5B1%5D.trim()%3Bswitch(r%3Dr.replaceAll(%22)%22%2C%22%20%22)%2Cr%3Dr.replaceAll(%22(%22%2C%22%20%22)%2Cr%3Dr.trim()%2Cn)%7Bcase%22data%20file%22%3Ad%3D!0%3Bbreak%3Bcase%22encoding%22%3Ar.includes(%22raw%22)%3Fh%3D!1%3Ar.includes(%22gz%22)%3Fh%3D!0%3Aalert(%22Unsupported%20NRRD%20encoding%22)%3Bbreak%3Bcase%22type%22%3Aswitch(r)%7Bcase%22uchar%22%3Acase%22unsigned%20char%22%3Acase%22uint8%22%3Acase%22uint8_t%22%3Ai.numBitsPerVoxel%3D8%2Ci.datatypeCode%3D2%3Bbreak%3Bcase%22signed%20char%22%3Acase%22int8%22%3Acase%22int8_t%22%3Ai.numBitsPerVoxel%3D8%2Ci.datatypeCode%3D256%3Bbreak%3Bcase%22short%22%3Acase%22short%20int%22%3Acase%22signed%20short%22%3Acase%22signed%20short%20int%22%3Acase%22int16%22%3Acase%22int16_t%22%3Ai.numBitsPerVoxel%3D16%2Ci.datatypeCode%3D4%3Bbreak%3Bcase%22ushort%22%3Acase%22unsigned%20short%22%3Acase%22unsigned%20short%20int%22%3Acase%22uint16%22%3Acase%22uint16_t%22%3Ai.numBitsPerVoxel%3D16%2Ci.datatypeCode%3D512%3Bbreak%3Bcase%22int%22%3Acase%22signed%20int%22%3Acase%22int32%22%3Acase%22int32_t%22%3Ai.numBitsPerVoxel%3D32%2Ci.datatypeCode%3D8%3Bbreak%3Bcase%22uint%22%3Acase%22unsigned%20int%22%3Acase%22uint32%22%3Acase%22uint32_t%22%3Ai.numBitsPerVoxel%3D32%2Ci.datatypeCode%3D768%3Bbreak%3Bcase%22float%22%3Ai.numBitsPerVoxel%3D32%2Ci.datatypeCode%3D16%3Bbreak%3Bcase%22double%22%3Ai.numBitsPerVoxel%3D64%2Ci.datatypeCode%3D64%3Bbreak%3Bdefault%3Athrow%20new%20Error(%22Unsupported%20NRRD%20data%20type%3A%20%22%2Br)%7Dbreak%3Bcase%22spacings%22%3A%7Bconst%20t%3Dr.split(%2F%5B%20%2C%5D%2B%2F)%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)i.pixDims%5Be%2B1%5D%3DparseFloat(t%5Be%5D)%7Dbreak%3Bcase%22sizes%22%3A%7Bconst%20t%3Dr.split(%2F%5B%20%2C%5D%2B%2F)%3Bi.dims%5B0%5D%3Dt.length%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)i.dims%5Be%2B1%5D%3DparseInt(t%5Be%5D)%7Dbreak%3Bcase%22endian%22%3Ar.includes(%22little%22)%3Fi.littleEndian%3D!0%3Ar.includes(%22big%22)%26%26(i.littleEndian%3D!1)%3Bbreak%3Bcase%22space%20directions%22%3A%7Bconst%20t%3Dr.split(%2F%5B%20%2C%5D%2B%2F)%3Bif(9!%3D%3Dt.length)break%3Bfor(let%20e%3D0%3Be%3C9%3Be%2B%2B)m%5Be%5D%3DparseFloat(t%5Be%5D)%7Dbreak%3Bcase%22space%20origin%22%3A%7Bconst%20t%3Dr.split(%2F%5B%20%2C%5D%2B%2F)%3Bif(3!%3D%3Dt.length)break%3Bu%5B0%5D%3DparseFloat(t%5B0%5D)%2Cu%5B1%5D%3DparseFloat(t%5B1%5D)%2Cu%5B2%5D%3DparseFloat(t%5B2%5D)%7Dbreak%3Bcase%22space%20units%22%3Ar.includes(%22microns%22)%26%26(c%3D!0)%3Bbreak%3Bcase%22space%22%3Ar.includes(%22right-anterior-superior%22)%7C%7Cr.includes(%22ras%22)%3FA%3DPe.fromValues(1%2C0%2C0%2C0%2C1%2C0%2C0%2C0%2C1)%3Ar.includes(%22left-anterior-superior%22)%7C%7Cr.includes(%22las%22)%3FA%3DPe.fromValues(-1%2C0%2C0%2C0%2C1%2C0%2C0%2C0%2C1)%3Ar.includes(%22left-posterior-superior%22)%7C%7Cr.includes(%22lps%22)%3FA%3DPe.fromValues(-1%2C0%2C0%2C0%2C-1%2C0%2C0%2C0%2C1)%3Al.warn(%22Unsupported%20NRRD%20space%20value%3A%22%2Cr)%3Bbreak%3Bdefault%3Al.warn(%22Unknown%3A%22%2Cn)%7D%7Dif(!isNaN(m%5B0%5D))%7Bthis.hdr.sform_code%3D2%2Cc%26%26(Le.multiplyScalar(m%2Cm%2C.001)%2Cu%5B0%5D*%3D.001%2Cu%5B1%5D*%3D.001%2Cu%5B2%5D*%3D.001)%2CA%5B0%5D%3C0%26%26(u%5B0%5D%3D-u%5B0%5D)%2CA%5B4%5D%3C0%26%26(u%5B1%5D%3D-u%5B1%5D)%2CA%5B8%5D%3C0%26%26(u%5B2%5D%3D-u%5B2%5D)%2CPe.multiply(m%2CA%2Cm)%3Bconst%20t%3DLe.fromValues(m%5B0%5D%2Cm%5B3%5D%2Cm%5B6%5D%2Cu%5B0%5D%2Cm%5B1%5D%2Cm%5B4%5D%2Cm%5B7%5D%2Cu%5B1%5D%2Cm%5B2%5D%2Cm%5B5%5D%2Cm%5B8%5D%2Cu%5B2%5D%2C0%2C0%2C0%2C1)%2Ce%3Dthis.vox2mm(%5B0%2C0%2C0%5D%2Ct)%2Cs%3Dthis.vox2mm(%5B1%2C0%2C0%5D%2Ct)%3Bke.subtract(s%2Cs%2Ce)%3Bconst%20n%3Dthis.vox2mm(%5B0%2C1%2C0%5D%2Ct)%3Bke.subtract(n%2Cn%2Ce)%3Bconst%20r%3Dthis.vox2mm(%5B0%2C0%2C1%5D%2Ct)%3Bke.subtract(r%2Cr%2Ce)%2Ci.pixDims%5B1%5D%3Dke.length(s)%2Ci.pixDims%5B2%5D%3Dke.length(n)%2Ci.pixDims%5B3%5D%3Dke.length(r)%2Ci.affine%3D%5B%5Bt%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2Ct%5B3%5D%5D%2C%5Bt%5B4%5D%2Ct%5B5%5D%2Ct%5B6%5D%2Ct%5B7%5D%5D%2C%5Bt%5B8%5D%2Ct%5B9%5D%2Ct%5B10%5D%2Ct%5B11%5D%5D%2C%5B0%2C0%2C0%2C1%5D%5D%7Dreturn%20d%26%26e%3Fe.slice(0)%3A(d%26%26l.warn(%22Missing%20data%3A%20NRRD%20header%20describes%20detached%20data%20file%20but%20only%20one%20URL%20provided%22)%2Ch%3FGe(new%20Uint8Array(t.slice(i.vox_offset))).buffer%3At.slice(i.vox_offset))%7DcalculateRAS()%7Bif(!this.hdr)throw%20new%20Error(%22hdr%20not%20set%22)%3Bconst%20t%3Dthis.hdr.affine%2Ce%3Dthis.hdr%2Ci%3DPe.fromValues(Math.abs(t%5B0%5D%5B0%5D)%2CMath.abs(t%5B0%5D%5B1%5D)%2CMath.abs(t%5B0%5D%5B2%5D)%2CMath.abs(t%5B1%5D%5B0%5D)%2CMath.abs(t%5B1%5D%5B1%5D)%2CMath.abs(t%5B1%5D%5B2%5D)%2CMath.abs(t%5B2%5D%5B0%5D)%2CMath.abs(t%5B2%5D%5B1%5D)%2CMath.abs(t%5B2%5D%5B2%5D))%2Cs%3D%5B1%2C1%2C1%5D%3Bi%5B3%5D%3Ei%5B0%5D%26%26(s%5B0%5D%3D2)%2Ci%5B6%5D%3Ei%5B0%5D%26%26i%5B6%5D%3Ei%5B3%5D%26%26(s%5B0%5D%3D3)%2Cs%5B1%5D%3D1%2C1%3D%3D%3Ds%5B0%5D%3Fi%5B4%5D%3Ei%5B7%5D%3Fs%5B1%5D%3D2%3As%5B1%5D%3D3%3A2%3D%3D%3Ds%5B0%5D%3Fi%5B1%5D%3Ei%5B7%5D%3Fs%5B1%5D%3D1%3As%5B1%5D%3D3%3Ai%5B1%5D%3Ei%5B4%5D%3Fs%5B1%5D%3D1%3As%5B1%5D%3D2%2Cs%5B2%5D%3D6-s%5B1%5D-s%5B0%5D%3Blet%20n%3D%5B1%2C2%2C3%5D%3Bn%5Bs%5B0%5D-1%5D%3D1%2Cn%5Bs%5B1%5D-1%5D%3D2%2Cn%5Bs%5B2%5D-1%5D%3D3%3Blet%20r%3DLe.fromValues(t%5B0%5D%5B0%5D%2Ct%5B0%5D%5B1%5D%2Ct%5B0%5D%5B2%5D%2Ct%5B0%5D%5B3%5D%2Ct%5B1%5D%5B0%5D%2Ct%5B1%5D%5B1%5D%2Ct%5B1%5D%5B2%5D%2Ct%5B1%5D%5B3%5D%2Ct%5B2%5D%5B0%5D%2Ct%5B2%5D%5B1%5D%2Ct%5B2%5D%5B2%5D%2Ct%5B2%5D%5B3%5D%2C0%2C0%2C0%2C1)%3Bthis.mm000%3Dthis.vox2mm(%5B-.5%2C-.5%2C-.5%5D%2Cr)%2Cthis.mm100%3Dthis.vox2mm(%5Be.dims%5B1%5D-.5%2C-.5%2C-.5%5D%2Cr)%2Cthis.mm010%3Dthis.vox2mm(%5B-.5%2Ce.dims%5B2%5D-.5%2C-.5%5D%2Cr)%2Cthis.mm001%3Dthis.vox2mm(%5B-.5%2C-.5%2Ce.dims%5B3%5D-.5%5D%2Cr)%3Bconst%20a%3DLe.create()%3BLe.copy(a%2Cr)%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)for(let%20e%3D0%3Be%3C3%3Be%2B%2B)a%5B4*t%2Be%5D%3Dr%5B4*t%2Bn%5Be%5D-1%5D%3Bconst%20o%3D%5B0%2C0%2C0%5D%3Ba%5B0%5D%3C0%26%26(o%5B0%5D%3D1)%2Ca%5B5%5D%3C0%26%26(o%5B1%5D%3D1)%2Ca%5B10%5D%3C0%26%26(o%5B2%5D%3D1)%2Cthis.dimsRAS%3D%5Be.dims%5B0%5D%2Ce.dims%5Bn%5B0%5D%5D%2Ce.dims%5Bn%5B1%5D%5D%2Ce.dims%5Bn%5B2%5D%5D%5D%2Cthis.pixDimsRAS%3D%5Be.pixDims%5B0%5D%2Ce.pixDims%5Bn%5B0%5D%5D%2Ce.pixDims%5Bn%5B1%5D%5D%2Ce.pixDims%5Bn%5B2%5D%5D%5D%2Cthis.permRAS%3Dn.slice()%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)1%3D%3D%3Do%5Bt%5D%26%26(this.permRAS%5Bt%5D%3D-this.permRAS%5Bt%5D)%3Bif(this.arrayEquals(n%2C%5B1%2C2%2C3%5D)%26%26this.arrayEquals(o%2C%5B0%2C0%2C0%5D))return%20this.toRAS%3DLe.create()%2Cthis.matRAS%3DLe.clone(r)%2Cthis.calculateOblique()%2Cthis.img2RASstep%3D%5B1%2Cthis.dimsRAS%5B1%5D%2Cthis.dimsRAS%5B1%5D*this.dimsRAS%5B2%5D%5D%2Cvoid(this.img2RASstart%3D%5B0%2C0%2C0%5D)%3BLe.identity(r)%2Cr%5B0%5D%3D1-2*o%5B0%5D%2Cr%5B5%5D%3D1-2*o%5B1%5D%2Cr%5B10%5D%3D1-2*o%5B2%5D%2Cr%5B3%5D%3D(e.dims%5Bn%5B0%5D%5D-1)*o%5B0%5D%2Cr%5B7%5D%3D(e.dims%5Bn%5B1%5D%5D-1)*o%5B1%5D%2Cr%5B11%5D%3D(e.dims%5Bn%5B2%5D%5D-1)*o%5B2%5D%3Bconst%20h%3DLe.create()%3BLe.invert(h%2Cr)%2CLe.multiply(h%2Ch%2Ca)%2Cthis.matRAS%3DLe.clone(h)%2Cr%3DLe.fromValues(0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C1)%2Cr%5Bn%5B0%5D-1%2B0%5D%3D2*-o%5B0%5D%2B1%2Cr%5Bn%5B1%5D-1%2B4%5D%3D2*-o%5B1%5D%2B1%2Cr%5Bn%5B2%5D-1%2B8%5D%3D2*-o%5B2%5D%2B1%2Cr%5B3%5D%3Do%5B0%5D%2Cr%5B7%5D%3Do%5B1%5D%2Cr%5B11%5D%3Do%5B2%5D%2Cthis.toRAS%3DLe.clone(r)%2Cr%5B3%5D%3D0%2Cr%5B7%5D%3D0%2Cr%5B11%5D%3D0%2Cr%5B12%5D%3D0%2C-1!%3D%3Dthis.permRAS%5B0%5D%26%26-1!%3D%3Dthis.permRAS%5B1%5D%26%26-1!%3D%3Dthis.permRAS%5B2%5D%7C%7C(r%5B12%5D%3De.dims%5B1%5D-1)%2Cr%5B13%5D%3D0%2C-2!%3D%3Dthis.permRAS%5B0%5D%26%26-2!%3D%3Dthis.permRAS%5B1%5D%26%26-2!%3D%3Dthis.permRAS%5B2%5D%7C%7C(r%5B13%5D%3De.dims%5B2%5D-1)%2Cr%5B14%5D%3D0%2C-3!%3D%3Dthis.permRAS%5B0%5D%26%26-3!%3D%3Dthis.permRAS%5B1%5D%26%26-3!%3D%3Dthis.permRAS%5B2%5D%7C%7C(r%5B14%5D%3De.dims%5B3%5D-1)%2Cthis.toRASvox%3DLe.clone(r)%2Cl.debug(this.hdr.dims)%2Cl.debug(this.dimsRAS)%3Bconst%20c%3Dthis.hdr%3Bn%3Dthis.permRAS%3Bconst%20d%3D%5BMath.abs(n%5B0%5D)%2CMath.abs(n%5B1%5D)%2CMath.abs(n%5B2%5D)%5D%2Cm%3D%5Bc.dims%5Bd%5B0%5D%5D%2Cc.dims%5Bd%5B1%5D%5D%2Cc.dims%5Bd%5B2%5D%5D%5D%2Cu%3D%5B1%2Cc.dims%5B1%5D%2Cc.dims%5B1%5D*c.dims%5B2%5D%5D%2CA%3D%5Bu%5Bd%5B0%5D-1%5D%2Cu%5Bd%5B1%5D-1%5D%2Cu%5Bd%5B2%5D-1%5D%5D%2Cf%3D%5B0%2C0%2C0%5D%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)n%5Bt%5D%3C0%26%26(f%5Bt%5D%3DA%5Bt%5D*(m%5Bt%5D-1)%2CA%5Bt%5D%3D-A%5Bt%5D)%3Bthis.img2RASstep%3DA%2Cthis.img2RASstart%3Df%2Cthis.calculateOblique()%7Dimg2RAS()%7Bif(!this.permRAS)throw%20new%20Error(%22permRAS%20undefined%22)%3Bif(!this.img)throw%20new%20Error(%22img%20undefined%22)%3Bif(!this.hdr)throw%20new%20Error(%22hdr%20undefined%22)%3Bconst%20t%3Dthis.permRAS.slice()%3Bif(1%3D%3D%3Dt%5B0%5D%26%262%3D%3D%3Dt%5B1%5D%26%263%3D%3D%3Dt%5B2%5D)return%20this.img%3Bconst%20e%3Dthis.hdr%2Ci%3Dthis.img.slice(0%2Ce.dims%5B1%5D*e.dims%5B1%5D*e.dims%5B2%5D*e.dims%5B3%5D)%2Cs%3D%5BMath.abs(t%5B0%5D)%2CMath.abs(t%5B1%5D)%2CMath.abs(t%5B2%5D)%5D%2Cn%3D%5Be.dims%5Bs%5B0%5D%5D%2Ce.dims%5Bs%5B1%5D%5D%2Ce.dims%5Bs%5B2%5D%5D%5D%2Cr%3D%5B1%2Ce.dims%5B1%5D%2Ce.dims%5B1%5D*e.dims%5B2%5D%5D%2Ca%3D%5Br%5Bs%5B0%5D-1%5D%2Cr%5Bs%5B1%5D-1%5D%2Cr%5Bs%5B2%5D-1%5D%5D%2Co%3D%5B0%2C0%2C0%5D%3Bfor(let%20e%3D0%3Be%3C3%3Be%2B%2B)t%5Be%5D%3C0%26%26(o%5Be%5D%3Da%5Be%5D*(n%5Be%5D-1)%2Ca%5Be%5D%3D-a%5Be%5D)%3Blet%20l%3D0%3Bfor(let%20t%3D0%3Bt%3Cn%5B2%5D%3Bt%2B%2B)%7Bconst%20e%3Do%5B2%5D%2Bt*a%5B2%5D%3Bfor(let%20t%3D0%3Bt%3Cn%5B1%5D%3Bt%2B%2B)%7Bconst%20s%3Do%5B1%5D%2Bt*a%5B1%5D%3Bfor(let%20t%3D0%3Bt%3Cn%5B0%5D%3Bt%2B%2B)%7Bconst%20n%3Do%5B0%5D%2Bt*a%5B0%5D%3Bi%5Bl%5D%3Dthis.img%5Bn%2Bs%2Be%5D%2Cl%2B%2B%7D%7D%7Dreturn%20i%7Dvox2mm(t%2Ce)%7Bconst%20i%3DLe.clone(e)%3BLe.transpose(i%2Ci)%3Bconst%20s%3DOe.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2C1)%3BOe.transformMat4(s%2Cs%2Ci)%3Breturn%20ke.fromValues(s%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D)%7Dmm2vox(t%2Ce%3D!1)%7Bif(!this.matRAS)throw%20new%20Error(%22matRAS%20undefined%22)%3Bconst%20i%3DLe.clone(this.matRAS)%2Cs%3DLe.clone(i)%3BLe.transpose(s%2Ci)%2CLe.invert(s%2Cs)%3Bconst%20n%3DOe.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2C1)%3BOe.transformMat4(n%2Cn%2Cs)%3Bconst%20r%3Dke.fromValues(n%5B0%5D%2Cn%5B1%5D%2Cn%5B2%5D)%3Breturn%20e%3Fr%3A%5BMath.round(r%5B0%5D)%2CMath.round(r%5B1%5D)%2CMath.round(r%5B2%5D)%5D%7DarrayEquals(t%2Ce)%7Breturn%20Array.isArray(t)%26%26Array.isArray(e)%26%26t.length%3D%3D%3De.length%26%26t.every(((t%2Ci)%3D%3Et%3D%3D%3De%5Bi%5D))%7DsetColormap(t)%7Bthis._colormap%3Dt%2Cthis.calMinMax()%2Cthis.onColormapChange%26%26this.onColormapChange(this)%7DsetColormapLabel(t)%7Bthis.colormapLabel%3Dne.makeLabelLut(t)%7Dasync%20setColormapLabelFromUrl(t)%7Bthis.colormapLabel%3Dawait%20ne.makeLabelLutFromUrl(t)%7Dget%20colormap()%7Breturn%20this._colormap%7Dget%20colorMap()%7Breturn%20this._colormap%7Dset%20colormap(t)%7Bthis.setColormap(t)%7Dset%20colorMap(t)%7Bthis.setColormap(t)%7Dget%20opacity()%7Breturn%20this._opacity%7Dset%20opacity(t)%7Bthis._opacity%3Dt%2Cthis.onOpacityChange%26%26this.onOpacityChange(this)%7DcalMinMax()%7Bif(!this.hdr)throw%20new%20Error(%22hdr%20undefined%22)%3Bif(!this.img)throw%20new%20Error(%22img%20undefined%22)%3Blet%20t%3DNumber.POSITIVE_INFINITY%2Ce%3DNumber.NEGATIVE_INFINITY%2Ci%3D0%2Cs%3D0%3Bconst%20n%3Dthis.img.length%2Cr%3Dthis.img.constructor!%3D%3DFloat64Array%26%26this.img.constructor!%3D%3DFloat32Array%26%26this.ignoreZeroVoxels%3Bif(r)for(let%20s%3D0%3Bs%3Cn%3Bs%2B%2B)t%3DMath.min(this.img%5Bs%5D%2Ct)%2Ce%3DMath.max(this.img%5Bs%5D%2Ce)%2C0%3D%3D%3Dthis.img%5Bs%5D%26%26i%2B%2B%3Belse%20for(let%20r%3D0%3Br%3Cn%3Br%2B%2B)isNaN(this.img%5Br%5D)%3Fs%2B%2B%3A0%3D%3D%3Dthis.img%5Br%5D%26%26(i%2B%2B%2Cthis.ignoreZeroVoxels)%7C%7C(t%3DMath.min(this.img%5Br%5D%2Ct)%2Ce%3DMath.max(this.img%5Br%5D%2Ce))%3Bthis.ignoreZeroVoxels%26%26t%3D%3D%3De%26%26i%3E0%26%26(t%3D0)%3Bconst%20a%3Dthis.intensityRaw2Scaled(t)%2Co%3Dthis.intensityRaw2Scaled(e)%2Ch%3Dne.colormapFromKey(this._colormap)%3Blet%20c%3D0%2Cd%3D0%3Bif(void%200!%3D%3Dh.min%26%26(c%3Dh.min)%2Cvoid%200!%3D%3Dh.max%26%26(d%3Dh.max)%2Cc%3D%3D%3Dd%26%26this.trustCalMinMax%26%26isFinite(this.hdr.cal_min)%26%26isFinite(this.hdr.cal_max)%26%26this.hdr.cal_max%3Ethis.hdr.cal_min)return%20this.cal_min%3Dthis.hdr.cal_min%2Cthis.cal_max%3Dthis.hdr.cal_max%2Cthis.robust_min%3Dthis.cal_min%2Cthis.robust_max%3Dthis.cal_max%2Cthis.global_min%3Da%2Cthis.global_max%3Do%2C%5Bthis.hdr.cal_min%2Cthis.hdr.cal_max%2Cthis.hdr.cal_min%2Cthis.hdr.cal_max%5D%3Bif(c!%3D%3Dd)return%20this.cal_min%3Dc%2Cthis.cal_max%3Dd%2Cthis.robust_min%3Dthis.cal_min%2Cthis.robust_max%3Dthis.cal_max%2C%5Bc%2Cd%2Cc%2Cd%5D%3Bconst%20m%3D100*i%2Fn%3Blet%20u%3D!1%3Bm%3E60%26%26!this.ignoreZeroVoxels%26%26(l.warn(%60%24%7BMath.round(m)%7D%25%20of%20voxels%20are%20zero%3A%20ignoring%20zeros%20for%20cal_max%60)%2Cu%3D!0%2Cthis.ignoreZeroVoxels%3D!0)%2Cthis.ignoreZeroVoxels%7C%7C(i%3D0)%2Ci%2B%3Ds%3Bconst%20A%3DMath.round((n-i)*this.percentileFrac)%3Bif(A%3C1%7C%7Ct%3D%3D%3De)return%20l.debug(%22no%20variability%20in%20image%20intensity%3F%22)%2Cthis.cal_min%3Da%2Cthis.cal_max%3Do%2Cthis.robust_min%3Dthis.cal_min%2Cthis.robust_max%3Dthis.cal_max%2Cthis.global_min%3Da%2Cthis.global_max%3Do%2C%5Ba%2Co%2Ca%2Co%5D%3Bconst%20f%3D1001%2Cg%3D1e3%2F(e-t)%2Cp%3Dnew%20Array(f)%3Bfor(let%20t%3D0%3Bt%3Cf%3Bt%2B%2B)p%5Bt%5D%3D0%3Bif(r)for(let%20e%3D0%3Be%3Cn%3Be%2B%2B)p%5BMath.round((this.img%5Be%5D-t)*g)%5D%2B%2B%3Belse%20if(this.ignoreZeroVoxels)for(let%20e%3D0%3Be%3Cn%3Be%2B%2B)0!%3D%3Dthis.img%5Be%5D%26%26(isNaN(this.img%5Be%5D)%7C%7Cp%5BMath.round((this.img%5Be%5D-t)*g)%5D%2B%2B)%3Belse%20for(let%20e%3D0%3Be%3Cn%3Be%2B%2B)isNaN(this.img%5Be%5D)%7C%7Cp%5BMath.round((this.img%5Be%5D-t)*g)%5D%2B%2B%3Blet%20v%3D0%2Cx%3D0%3Bfor(%3Bv%3CA%3B)v%2B%3Dp%5Bx%5D%2Cx%2B%2B%3Bx--%2Cv%3D0%3Blet%20w%3Df%3Bfor(%3Bv%3CA%3B)w--%2Cv%2B%3Dp%5Bw%5D%3Bif(x%3D%3D%3Dw)%7Blet%20t%3D-1%3Bfor(%3B0!%3D%3Dt%3B)x%3E0%26%26(x--%2Cp%5Bx%5D%3E0%26%26(t%3D0))%2C0!%3D%3Dt%26%26w%3C1e3%26%26(w%2B%2B%2Cp%5Bw%5D%3E0%26%26(t%3D0))%2C0%3D%3D%3Dx%26%261e3%3D%3D%3Dw%26%26(t%3D0)%7Dlet%20C%3Dthis.intensityRaw2Scaled(x%2Fg%2Bt)%2Cb%3Dthis.intensityRaw2Scaled(w%2Fg%2Bt)%3Breturn%20this.hdr.cal_min%3Cthis.hdr.cal_max%26%26this.hdr.cal_min%3E%3Da%26%26this.hdr.cal_max%3C%3Do%26%26(C%3Dthis.hdr.cal_min%2Cb%3Dthis.hdr.cal_max)%2Cu%26%26(C%3DMath.min(C%2C0))%2Cthis.cal_min%3DC%2Cthis.cal_max%3Db%2Cthis.robust_min%3Dthis.cal_min%2Cthis.robust_max%3Dthis.cal_max%2Cthis.global_min%3Da%2Cthis.global_max%3Do%2C%5BC%2Cb%2Ca%2Co%5D%7DintensityRaw2Scaled(t)%7Bif(!this.hdr)throw%20new%20Error(%22hdr%20undefined%22)%3Breturn%200%3D%3D%3Dthis.hdr.scl_slope%26%26(this.hdr.scl_slope%3D1)%2Ct*this.hdr.scl_slope%2Bthis.hdr.scl_inter%7DintensityScaled2Raw(t)%7Bif(!this.hdr)throw%20new%20Error(%22hdr%20undefined%22)%3Breturn%200%3D%3D%3Dthis.hdr.scl_slope%26%26(this.hdr.scl_slope%3D1)%2C(t-this.hdr.scl_inter)%2Fthis.hdr.scl_slope%7DsaveToUint8Array(t%2Ce%3Dnull)%7Bif(!this.hdr)throw%20new%20Error(%22hdr%20undefined%22)%3Bif(!this.img)throw%20new%20Error(%22img%20undefined%22)%3Bconst%20i%3Dnull!%3D%3De%2Cs%3Dje(this.hdr%2Ci)%2Cn%3Dnew%20Uint8Array(4)%3Blet%20r%3Dnew%20Uint8Array(this.img.buffer)%3Bi%26%26(r%3Dnew%20Uint8Array(e.buffer))%3Bconst%20a%3Dnew%20Uint8Array(s.length%2Bn.length%2Br.length)%3Ba.set(s)%2Ca.set(n%2Cs.length)%2Ca.set(r%2Cs.length%2Bn.length)%3Blet%20o%3Dnull%3Breturn%20o%3Dt.endsWith(%22.gz%22)%3FKe(a%2C%7Bfilename%3At%2Cmtime%3ADate.now()%2Clevel%3A6%7D)%3Aa%2Co%7DsaveToDisk(t%3D%22%22%2Ce%3Dnull)%7Bconst%20i%3Dthis.saveToUint8Array(t%2Ce)%3Bif(%22%22%3D%3D%3Dt)return%20l.debug(%22saveToDisk%3A%20empty%20file%20name%2C%20returning%20data%20as%20Uint8Array%20rather%20than%20triggering%20download%22)%2Ci%3Bconst%20s%3Dnew%20Blob(%5Bi.buffer%5D%2C%7Btype%3A%22application%2Foctet-stream%22%7D)%2Cn%3DURL.createObjectURL(s)%2Cr%3Ddocument.createElement(%22a%22)%3Breturn%20r.setAttribute(%22href%22%2Cn)%2Cr.setAttribute(%22download%22%2Ct)%2Cr.style.visibility%3D%22hidden%22%2Cdocument.body.appendChild(r)%2Cr.click()%2Cdocument.body.removeChild(r)%2Ci%7Dstatic%20async%20fetchDicomData(t%2Ce%3D%7B%7D)%7Bif(%22%22%3D%3D%3Dt)throw%20Error(%22url%20must%20not%20be%20empty%22)%3Blet%20i%3D%2F%5E(%3F%3A%5Ba-z%2B%5D%2B%3A)%3F%5C%2F%5C%2F%2Fi.test(t)%3Ft%3Anew%20URL(t%2Cwindow.location.href)%3B%2F(%3F%3A.(%5B%5E.%5D%2B))%3F%24%2F.exec(i.pathname)%7C%7C(i%3Dnew%20URL(%22niivue-manifest.txt%22%2Ct))%3Blet%20s%3Dawait%20fetch(i%2C%7Bheaders%3Ae%7D)%3Bif(!s.ok)throw%20Error(s.statusText)%3Bconst%20n%3D(await%20s.text()).split(%22%5Cn%22)%2Cr%3D%2F(.*%5C%2F).*%2F.exec(i)%5B0%5D%2Ca%3D%5B%5D%3Bfor(const%20t%20of%20n)%7Bconst%20i%3Dnew%20URL(t%2Cr)%3Bif(s%3Dawait%20fetch(i%2C%7Bheaders%3Ae%7D)%2C!s.ok)throw%20Error(s.statusText)%3Bconst%20n%3Dawait%20s.arrayBuffer()%3Ba.push(n)%7Dreturn%20a%7Dstatic%20async%20fetchPartial(t%2Ce%2Ci%3D%7B%7D)%7Btry%7Breturn%20await%20fetch(t%2C%7Bheaders%3A%7Brange%3A%60bytes%3D0-'%24%7Be%7D%60%2Cstream%3A%22true%22%2C...i%7D%7D)%7Dcatch(e)%7Bl.error(e)%2Cl.error(%22fetchPartial%20failed%2C%20trying%20again%20without%20range%20header%22)%3Breturn%20await%20fetch(t%2C%7Bheaders%3Ai%7D)%7D%7Dstatic%20async%20loadFromUrl(%7Burl%3Ae%3D%22%22%2CurlImgData%3Ai%3D%22%22%2Cheaders%3As%3D%7B%7D%2Cname%3An%3D%22%22%2Ccolormap%3Ar%3D%22gray%22%2Copacity%3Aa%3D1%2Ccal_min%3Ao%3DNaN%2Ccal_max%3Al%3DNaN%2CtrustCalMinMax%3Ah%3D!0%2CpercentileFrac%3Ac%3D.02%2CignoreZeroVoxels%3Ad%3D!1%2CuseQFormNotSForm%3Am%3D!1%2CcolormapNegative%3Au%3D%22%22%2Cframe4D%3AA%3D0%2CisManifest%3Af%3D!1%2ClimitFrames4D%3Ag%3DNaN%2CimageType%3Ap%3Dze.UNKNOWN%2CcolorbarVisible%3Av%3D!0%2Cbuffer%3Ax%3Dnew%20ArrayBuffer(0)%7D%3D%7B%7D)%7Bif(%22%22%3D%3D%3De)throw%20Error(%22url%20must%20not%20be%20empty%22)%3Blet%20w%3Dnull%2CC%3Dnull%3Bif(e%20instanceof%20Uint8Array%26%26(e%3De.buffer)%2Cx.byteLength%3E0%26%26(e%3Dx)%2Ce%20instanceof%20ArrayBuffer)if(C%3De%2C%22%22!%3D%3Dn)e%3Dn%3Belse%7Be%3D%22array.nii%22%3Bconst%20t%3Dnew%20Uint8Array(C)%3B31%3D%3D%3Dt%5B0%5D%26%26139%3D%3D%3Dt%5B1%5D%26%26(e%3D%22array.nii.gz%22)%7Dif(!isNaN(g))%7Blet%20t%3Dawait%20this.fetchPartial(e%2C512%2Cs)%3BC%3Dawait%20t.arrayBuffer()%3Blet%20i%3Dnew%20Uint8Array(C)%2Cn%3D!1%3Bif(31%3D%3D%3Di%5B0%5D%26%26139%3D%3D%3Di%5B1%5D)%7Bn%3D!0%3Bnew%20Ye((t%3D%3E%7Bi%3Dt%7D)).push(i)%2CC%3Di.buffer%7Dlet%20r%3D92%3D%3D%3Di%5B0%5D%26%261%3D%3D%3Di%5B1%5D%3Bif(r%7C%7C(r%3D92%3D%3D%3Di%5B1%5D%26%261%3D%3D%3Di%5B0%5D)%2Cr)%7Bconst%20i%3DRe.readHeader(C)%3Bif(null%3D%3D%3Di)throw%20new%20Error(%22could%20not%20read%20nifti%20header%22)%3Bconst%20r%3Di.numBitsPerVoxel%2F8%3Blet%20a%3D1%3Bfor(let%20t%3D1%3Bt%3C4%3Bt%2B%2B)i.dims%5Bt%5D%3E1%26%26(a*%3Di.dims%5Bt%5D)%3Blet%20o%3D1%3Bfor(let%20t%3D4%3Bt%3C7%3Bt%2B%2B)i.dims%5Bt%5D%3E1%26%26(o*%3Di.dims%5Bt%5D)%3Bconst%20l%3DMath.max(Math.min(g%2Co)%2C1)%2Ch%3Di.vox_offset%2Bl*a*r%3Bif(C.byteLength%3Ch%26%26(t%3Dawait%20this.fetchPartial(e%2Ch%2Cs)%2CC%3Dawait%20t.arrayBuffer()%2Cn))%7Blet%20t%3Dnew%20Uint8Array(C)%3Bnew%20Ye((e%3D%3E%7Bt%3De%7D)).push(t)%2CC%3Dt.buffer%7DC%3DC.byteLength%3Ch%3Fnull%3AC.slice(0%2Ch)%7Delse%20C%3Dnull%7Dif(C)%3Belse%20if(f)C%3Dawait%20t.fetchDicomData(e%2Cs)%2Cp%3Dze.DCM_MANIFEST%3Belse%7Bconst%20t%3Dawait%20fetch(e%2C%7Bheaders%3As%7D)%3Bif(!t.ok)throw%20Error(t.statusText)%3BC%3Dawait%20t.arrayBuffer()%7Dconst%20b%3D%2F(%3F%3A%5C.(%5B%5E.%5D%2B))%3F%24%2F%3Blet%20y%2CI%3D%22%22%3Bif(I%3D%22%22%3D%3D%3Dn%3Fb.exec(e)%5B1%5D%3Ab.exec(n)%5B1%5D%2C%22HEAD%22%3D%3D%3DI.toUpperCase()%26%26%22%22%3D%3D%3Di%26%26(i%3De.substring(0%2Ce.lastIndexOf(%22HEAD%22))%2B%22BRIK%22)%2C%22%22%3D%3D%3Dn)%7Btry%7By%3Dnew%20URL(e).pathname.split(%22%2F%22)%7Dcatch(t)%7By%3De.split(%22%2F%22)%7D(n%3Dy.slice(-1)%5B0%5D).indexOf(%22%3F%22)%3E-1%26%26(n%3Dn.slice(0%2Cn.indexOf(%22%3F%22)))%7Dlet%20M%3Dnull%3Bif(i.length%3E0)%7Blet%20t%3Dawait%20fetch(i%2C%7Bheaders%3As%7D)%3B404%3D%3D%3Dt.status%26%26-1!%3D%3Di.lastIndexOf(%22BRIK%22)%26%26(t%3Dawait%20fetch(i%2B%22.gz%22%2C%7Bheaders%3As%7D))%2CM%3Dawait%20t.arrayBuffer()%7Dif(!C)throw%20new%20Error(%22Unable%20to%20load%20buffer%20properly%20from%20volume%22)%3Breturn%20w%3Dnew%20t(C%2Cn%2Cr%2Ca%2CM%2Co%2Cl%2Ch%2Cc%2Cd%2Cm%2Cu%2CA%2Cp)%2Cw.url%3De%2Cw.colorbarVisible%3Dv%2Cw%7Dstatic%20readFileAsync(t%2Ce%3DNaN)%7Breturn%20new%20Promise(((i%2Cs)%3D%3E%7Bconst%20n%3Dnew%20FileReader%3Bn.onload%3D()%3D%3E%7B-1!%3D%3Dt.name.lastIndexOf(%22gz%22)%26%26isNaN(e)%3Fi(Re.decompress(n.result))%3Ai(n.result)%7D%2Cn.onerror%3Ds%2CisNaN(e)%3Fn.readAsArrayBuffer(t)%3An.readAsArrayBuffer(t.slice(0%2Ce))%7D))%7Dstatic%20async%20loadFromFile(%7Bfile%3Ae%2Cname%3Ai%3D%22%22%2Ccolormap%3As%3D%22gray%22%2Copacity%3An%3D1%2CurlImgData%3Ar%3Dnull%2Ccal_min%3Aa%3DNaN%2Ccal_max%3Ao%3DNaN%2CtrustCalMinMax%3Ah%3D!0%2CpercentileFrac%3Ac%3D.02%2CignoreZeroVoxels%3Ad%3D!1%2CuseQFormNotSForm%3Am%3D!1%2CcolormapNegative%3Au%3D%22%22%2Cframe4D%3AA%3D0%2ClimitFrames4D%3Af%3DNaN%2CimageType%3Ag%3Dze.UNKNOWN%7D)%7Blet%20p%3Dnull%2Cv%3D%5B%5D%3Btry%7Bif(Array.isArray(e))for(let%20t%3D0%3Bt%3Ce.length%3Bt%2B%2B)v.push(await%20this.readFileAsync(e%5Bt%5D))%3Belse%7Bif(isNaN(f))v%3Dawait%20this.readFileAsync(e%2Cf)%3Belse%7Bv%3Dawait%20this.readFileAsync(e%2C512)%3Blet%20t%3Dnew%20Uint8Array(v)%2Ci%3D!1%3Bif(31%3D%3D%3Dt%5B0%5D%26%26139%3D%3D%3Dt%5B1%5D)%7Bi%3D!0%3Bnew%20Ye((e%3D%3E%7Bt%3De%7D)).push(t)%2Cv%3Dt.buffer%7Dlet%20s%3D92%3D%3D%3Dt%5B0%5D%26%261%3D%3D%3Dt%5B1%5D%3Bif(s%7C%7C(s%3D92%3D%3D%3Dt%5B1%5D%26%261%3D%3D%3Dt%5B0%5D)%2Cs)%7Bconst%20t%3DRe.readHeader(v)%3Bif(!t)throw%20new%20Error(%22could%20not%20read%20nifti%20header%22)%3Bconst%20s%3Dt.numBitsPerVoxel%2F8%3Blet%20n%3D1%3Bfor(let%20e%3D1%3Be%3C4%3Be%2B%2B)t.dims%5Be%5D%3E1%26%26(n*%3Dt.dims%5Be%5D)%3Blet%20r%3D1%3Bfor(let%20e%3D4%3Be%3C7%3Be%2B%2B)t.dims%5Be%5D%3E1%26%26(r*%3Dt.dims%5Be%5D)%3Bconst%20a%3DMath.max(Math.min(f%2Cr)%2C1)%2Co%3Dt.vox_offset%2Ba*n*s%3Bif(v.byteLength%3Co%26%26(v%3Dawait%20this.readFileAsync(e%2Co)%2Ci))%7Blet%20t%3Dnew%20Uint8Array(v)%3Bnew%20Ye((e%3D%3E%7Bt%3De%7D)).push(t)%2Cv%3Dt.buffer%7Dif(v.byteLength%3Co)throw%20new%20Error(%22failed%20to%20load%20image%20data%20(e.g.%20incompressible%20data)%22)%3Bv%3Dv.slice(0%2Co)%7Delse%20v%3Dawait%20this.readFileAsync(e)%7Di%3De.name%7Dlet%20l%3Dnull%3Br%26%26(l%3Dawait%20this.readFileAsync(r))%2Cp%3Dnew%20t(v%2Ci%2Cs%2Cn%2Cl%2Ca%2Co%2Ch%2Cc%2Cd%2Cm%2Cu%2CA%2Cg)%2Cp.fileObject%3De%7Dcatch(t)%7Bl.error(t)%2Cl.error(t)%7Dif(null%3D%3D%3Dp)throw%20new%20Error(%22could%20not%20build%20NVImage%22)%3Breturn%20p%7Dstatic%20createNiftiArray(t%3D%5B256%2C256%2C256%5D%2Ce%3D%5B1%2C1%2C1%5D%2Ci%3D%5B1%2C0%2C0%2C-128%2C0%2C1%2C0%2C-128%2C0%2C0%2C1%2C-128%2C0%2C0%2C0%2C1%5D%2Cs%3D2%2Cn%3Dnew%20Uint8Array)%7Bconst%20r%3Dje(this.createNiftiHeader(t%2Ce%2Ci%2Cs)%2C!1)%3Bif(n.length%3C1)return%20r%3Bconst%20a%3Dnew%20Uint8Array(4)%2Co%3Dnew%20Uint8Array(n.buffer)%2Cl%3Dnew%20Uint8Array(r.length%2Ba.length%2Bo.length)%3Breturn%20l.set(r)%2Cl.set(a%2Cr.length)%2Cl.set(o%2Cr.length%2Ba.length)%2Cl%7Dstatic%20createNiftiHeader(t%3D%5B256%2C256%2C256%5D%2Ce%3D%5B1%2C1%2C1%5D%2Ci%3D%5B1%2C0%2C0%2C-128%2C0%2C1%2C0%2C-128%2C0%2C0%2C1%2C-128%2C0%2C0%2C0%2C1%5D%2Cs%3D2)%7Bconst%20n%3Dnew%20Re.NIFTI1%3Bn.littleEndian%3D!0%2Cn.dims%3D%5B3%2C1%2C1%2C1%2C0%2C0%2C0%2C0%5D%2Cn.dims%5B0%5D%3DMath.max(3%2Ct.length)%3Bfor(let%20e%3D0%3Be%3Ct.length%3Be%2B%2B)n.dims%5Be%2B1%5D%3Dt%5Be%5D%3Bn.pixDims%3D%5B1%2C1%2C1%2C1%2C1%2C0%2C0%2C0%5D%3Bfor(let%20i%3D0%3Bi%3Ct.length%3Bi%2B%2B)n.pixDims%5Bi%2B1%5D%3De%5Bi%5D%3Bif(16%3D%3D%3Di.length)%7Blet%20t%3D0%3Bfor(let%20e%3D0%3Be%3C4%3Be%2B%2B)for(let%20s%3D0%3Bs%3C4%3Bs%2B%2B)n.affine%5Be%5D%5Bs%5D%3Di%5Bt%5D%2Ct%2B%2B%7Dlet%20r%3D8%3Breturn%20256%3D%3D%3Ds%7C%7C2%3D%3D%3Ds%3Fr%3D8%3A512%3D%3D%3Ds%7C%7C4%3D%3D%3Ds%3Fr%3D16%3A16%3D%3D%3Ds%7C%7C768%3D%3D%3Ds%7C%7C8%3D%3D%3Ds%3Fr%3D32%3A64%3D%3D%3Ds%3Fr%3D64%3Al.warn(%22Unsupported%20NIfTI%20datatypeCode%3A%20%22%2Bs)%2Cn.datatypeCode%3Ds%2Cn.numBitsPerVoxel%3Dr%2Cn.scl_inter%3D0%2Cn.scl_slope%3D0%2Cn.sform_code%3D2%2Cn.magic%3D%22n%2B1%22%2Cn.vox_offset%3D352%2Cn%7DgetVolumeData(t%3D%5B-1%2C0%2C0%5D%2Ce%3D%5B0%2C0%2C0%5D%2Ci%3D%22same%22)%7Blet%20s%3Dnew%20Uint8Array%3Bif(Math.min(...t)%3C0%7C%7CMath.min(...e)%3C0)return%5Bs%2C%5B0%2C0%2C0%5D%5D%3Bconst%20n%3Dthis.dimsRAS.slice(1%2C4)%3Bfor(let%20i%3D0%3Bi%3C3%3Bi%2B%2B)if(t%5Bi%5D%3DMath.min(t%5Bi%5D%2Cn%5Bi%5D-1)%2Ce%5Bi%5D%3DMath.min(e%5Bi%5D%2Cn%5Bi%5D-1)%2Ce%5Bi%5D%3Ct%5Bi%5D)%7Bconst%20s%3De%5Bi%5D%3Be%5Bi%5D%3Dt%5Bi%5D%2Ct%5Bi%5D%3Ds%7Dconst%20r%3D%5Be%5B0%5D-t%5B0%5D%2B1%2Ce%5B1%5D-t%5B1%5D%2B1%2Ce%5B2%5D-t%5B2%5D%2B1%5D%2Ca%3Dr%5B0%5D*r%5B1%5D*r%5B2%5D%3Blet%20o%3Dthis.hdr.datatypeCode%3Bif(%22uint8%22%3D%3D%3Di%3Fo%3D2%3A%22float32%22!%3D%3Di%26%26%22scaled%22!%3D%3Di%26%26%22normalized%22!%3D%3Di%26%26%22windowed%22!%3D%3Di%7C%7C(o%3D16)%2C2%3D%3D%3Do)s%3Dnew%20Uint8Array(a)%3Belse%20if(4%3D%3D%3Do)s%3Dnew%20Int16Array(a)%3Belse%20if(512%3D%3D%3Do)s%3Dnew%20Uint16Array(a)%3Belse%20if(16%3D%3D%3Do)s%3Dnew%20Float32Array(a)%3Belse%7Bif(64!%3D%3Do)return%20l.error(%22getVolumeData%20unsupported%20datatype%22)%2C%5Bs%2C%5B0%2C0%2C0%5D%5D%3Bs%3Dnew%20Float64Array(a)%7Dconst%20h%3Dthis.img2RASstep%2Cc%3Dthis.img2RASstart%3Blet%20d%3D0%3Bfor(let%20i%3Dt%5B2%5D%3Bi%3C%3De%5B2%5D%3Bi%2B%2B)%7Bconst%20n%3Dc%5B2%5D%2Bi*h%5B2%5D%3Bfor(let%20i%3Dt%5B1%5D%3Bi%3C%3De%5B1%5D%3Bi%2B%2B)%7Bconst%20r%3Dn%2Bc%5B1%5D%2Bi*h%5B1%5D%3Bfor(let%20i%3Dt%5B0%5D%3Bi%3C%3De%5B0%5D%3Bi%2B%2B)%7Bconst%20t%3Dc%5B0%5D%2Bi*h%5B0%5D%3Bs%5Bd%2B%2B%5D%3Dthis.img%5Bt%2Br%5D%7D%7D%7Dif(%22scaled%22%3D%3D%3Di%7C%7C%22normalized%22%3D%3D%3Di%7C%7C%22windowed%22%3D%3D%3Di)for(let%20t%3D0%3Bt%3Cs.length%3Bt%2B%2B)s%5Bt%5D%3Ds%5Bt%5D*this.hdr.scl_slope%2Bthis.hdr.scl_inter%3Bif(%22normalized%22%3D%3D%3Di%7C%7C%22windowed%22%3D%3D%3Di)%7Blet%20t%3Dthis.cal_min%2Ce%3Dthis.cal_max%3B%22normalized%22%3D%3D%3Di%26%26(t%3Dthis.global_min%2Ce%3Dthis.global_max)%3Bconst%20n%3D1%2F(e-t)%3Bfor(let%20e%3D0%3Be%3Cs.length%3Be%2B%2B)s%5Be%5D%3D(s%5Be%5D-t)*n%2Cs%5Be%5D%3DMath.max(Math.min(s%5Be%5D%2C1)%2C0)%7Dreturn%5Bs%2Cr%5D%7DsetVolumeData(t%3D%5B-1%2C0%2C0%5D%2Ce%3D%5B0%2C0%2C0%5D%2Ci%3Dnew%20Uint8Array)%7Bif(i.length%3C1%7C%7CMath.min(...t)%3C0%7C%7CMath.min(...e)%3C0)return%3Bconst%20s%3Dthis.dimsRAS.slice(1%2C4)%3Bfor(let%20i%3D0%3Bi%3C3%3Bi%2B%2B)if(t%5Bi%5D%3DMath.min(t%5Bi%5D%2Cs%5Bi%5D-1)%2Ce%5Bi%5D%3DMath.min(e%5Bi%5D%2Cs%5Bi%5D-1)%2Ce%5Bi%5D%3Ct%5Bi%5D)%7Bconst%20s%3De%5Bi%5D%3Be%5Bi%5D%3Dt%5Bi%5D%2Ct%5Bi%5D%3Ds%7Dconst%20n%3D%5Be%5B0%5D-t%5B0%5D%2B1%2Ce%5B1%5D-t%5B1%5D%2B1%2Ce%5B2%5D-t%5B2%5D%2B1%5D%2Cr%3Dn%5B0%5D*n%5B1%5D*n%5B2%5D%3Bif(i.length%3Cr)return%20void%20l.error(%22setVolumeData%20image%20does%20not%20have%20enough%20voxels%22)%3Bconst%20a%3Dthis.img2RASstep%2Co%3Dthis.img2RASstart%3Blet%20h%3D0%3Bfor(let%20s%3Dt%5B2%5D%3Bs%3C%3De%5B2%5D%3Bs%2B%2B)%7Bconst%20n%3Do%5B2%5D%2Bs*a%5B2%5D%3Bfor(let%20s%3Dt%5B1%5D%3Bs%3C%3De%5B1%5D%3Bs%2B%2B)%7Bconst%20r%3Dn%2Bo%5B1%5D%2Bs*a%5B1%5D%3Bfor(let%20s%3Dt%5B0%5D%3Bs%3C%3De%5B0%5D%3Bs%2B%2B)%7Bconst%20t%3Do%5B0%5D%2Bs*a%5B0%5D%3Bthis.img%5Bt%2Br%5D%3Di%5Bh%2B%2B%5D%7D%7D%7D%7Dstatic%20loadFromBase64(%7Bbase64%3Ae%2Cname%3Ai%3D%22%22%2Ccolormap%3As%3D%22gray%22%2Copacity%3An%3D1%2Ccal_min%3Ar%3DNaN%2Ccal_max%3Aa%3DNaN%2CtrustCalMinMax%3Ao%3D!0%2CpercentileFrac%3Ah%3D.02%2CignoreZeroVoxels%3Ac%3D!1%2CuseQFormNotSForm%3Ad%3D!1%2CcolormapNegative%3Am%3D%22%22%2Cframe4D%3Au%3D0%2CimageType%3AA%3Dze.UNKNOWN%2Ccal_minNeg%3Af%3DNaN%2Ccal_maxNeg%3Ag%3DNaN%2CcolorbarVisible%3Ap%3D!0%2CcolormapLabel%3Av%3Dnull%7D)%7Blet%20x%3Dnull%3Btry%7Bconst%20l%3Dfunction(t)%7Bconst%20e%3Dwindow.atob(t)%2Ci%3De.length%2Cs%3Dnew%20Uint8Array(i)%3Bfor(let%20t%3D0%3Bt%3Ci%3Bt%2B%2B)s%5Bt%5D%3De.charCodeAt(t)%3Breturn%20s.buffer%7D(e)%3Bx%3Dnew%20t(l%2Ci%2Cs%2Cn%2Cnull%2Cr%2Ca%2Co%2Ch%2Cc%2Cd%2Cm%2Cu%2CA%2Cf%2Cg%2Cp%2Cv)%7Dcatch(t)%7Bl.debug(t)%7Dif(null%3D%3D%3Dx)throw%20new%20Error(%22could%20not%20load%20NVImage%22)%3Breturn%20x%7Dclone()%7Bconst%20e%3Dnew%20t%3Breturn%20e.id%3DWe()%2Ce.hdr%3DObject.assign(%7B%7D%2Cthis.hdr)%2Ce.img%3Dthis.img.slice()%2Ce.calculateRAS()%2Ce.calMinMax()%2Ce%7DzeroImage()%7Bthis.img.fill(0)%7DgetImageMetadata()%7Bif(!this.hdr)throw%20new%20Error(%22hdr%20undefined%22)%3Bconst%20t%3Dthis.id%2Ce%3Dthis.hdr.datatypeCode%2Ci%3Dthis.hdr.dims%2Cs%3Di%5B1%5D%2Cn%3Di%5B2%5D%2Cr%3Di%5B3%5D%2Ca%3DMath.max(1%2Ci%5B4%5D)%2Co%3Dthis.hdr.pixDims%3Breturn%7Bid%3At%2CdatatypeCode%3Ae%2Cnx%3As%2Cny%3An%2Cnz%3Ar%2Cnt%3Aa%2Cdx%3Ao%5B1%5D%2Cdy%3Ao%5B2%5D%2Cdz%3Ao%5B3%5D%2Cdt%3Ao%5B4%5D%2Cbpv%3AMath.floor(this.hdr.numBitsPerVoxel%2F8)%7D%7Dstatic%20zerosLike(t%2Ce%3D%22same%22)%7Bconst%20i%3Dt.clone()%3Breturn%20i.zeroImage()%2C%22uint8%22%3D%3D%3De%26%26(i.img%3DUint8Array.from(i.img)%2Ci.hdr.datatypeCode%3D2%2Ci.hdr.numBitsPerVoxel%3D8)%2C%22float32%22%3D%3D%3De%26%26(i.img%3DFloat32Array.from(i.img)%2Ci.hdr.datatypeCode%3D16%2Ci.hdr.numBitsPerVoxel%3D32)%2Ci%7DgetValue(t%2Ce%2Ci%2Cs%3D0%2Cn%3D!1)%7Bif(!this.hdr)throw%20new%20Error(%22hdr%20undefined%22)%3Bif(!this.img)throw%20new%20Error(%22img%20undefined%22)%3Bconst%20r%3Dthis.hdr.dims%5B1%5D%2Ca%3Dthis.hdr.dims%5B2%5D%2Co%3Dthis.hdr.dims%5B3%5D%2Cl%3Dthis.permRAS.slice()%3Bif(1!%3D%3Dl%5B0%5D%7C%7C2!%3D%3Dl%5B1%5D%7C%7C3!%3D%3Dl%5B2%5D)%7Bconst%20s%3DOe.fromValues(t%2Ce%2Ci%2C1)%3BOe.transformMat4(s%2Cs%2Cthis.toRASvox)%2Ct%3Ds%5B0%5D%2Ce%3Ds%5B1%5D%2Ci%3Ds%5B2%5D%7Dlet%20h%3Dt%2Be*r%2Bi*r*a%3Bif(2304%3D%3D%3Dthis.hdr.datatypeCode)return%20h*%3D4%2CMath.round(.21*this.img%5Bh%5D%2B.72*this.img%5Bh%2B1%5D%2B.07*this.img%5Bh%2B2%5D)%3Bif(128%3D%3D%3Dthis.hdr.datatypeCode)return%20h*%3D3%2CMath.round(.21*this.img%5Bh%5D%2B.72*this.img%5Bh%2B1%5D%2B.07*this.img%5Bh%2B2%5D)%3Bconst%20c%3Ds*r*a*o%3Blet%20d%3Dthis.img%5Bh%2Bc%5D%3Breturn%20n%26%26(d%3Dthis.imaginary%5Bh%2Bc%5D)%2Cthis.hdr.scl_slope*d%2Bthis.hdr.scl_inter%7DtoNiivueObject3D(t%2Ce)%7Bconst%20i%3Dthis.dimsRAS%2Cs%3Dthis.matRAS%2Cn%3Dthis.pixDimsRAS%2Cr%3D-.5%2Ca%3D-.5%2Co%3D-.5%2Ch%3Di%5B1%5D-1%2B.5%2Cc%3Di%5B2%5D-1%2B.5%2Cd%3Di%5B3%5D-1%2B.5%2Cm%3Dthis.vox2mm(%5Br%2Ca%2Co%5D%2Cs)%2Cu%3Dthis.vox2mm(%5Br%2Cc%2Co%5D%2Cs)%2CA%3Dthis.vox2mm(%5Br%2Ca%2Cd%5D%2Cs)%2Cf%3Dthis.vox2mm(%5Br%2Cc%2Cd%5D%2Cs)%2Cg%3Dthis.vox2mm(%5Bh%2Ca%2Co%5D%2Cs)%2Cp%3Dthis.vox2mm(%5Bh%2Cc%2Co%5D%2Cs)%2Cv%3Dthis.vox2mm(%5Bh%2Ca%2Cd%5D%2Cs)%2Cx%3Dthis.vox2mm(%5Bh%2Cc%2Cd%5D%2Cs)%2Cw%3D%5B...A%2C0%2C0%2C1%2C...v%2C1%2C0%2C1%2C...x%2C1%2C1%2C1%2C...f%2C0%2C1%2C1%2C...m%2C0%2C0%2C0%2C...u%2C0%2C1%2C0%2C...p%2C1%2C1%2C0%2C...g%2C1%2C0%2C0%5D%2CC%3De.createBuffer()%3Be.bindBuffer(e.ELEMENT_ARRAY_BUFFER%2CC)%3Bconst%20b%3D%5B0%2C3%2C2%2C2%2C1%2C0%2C4%2C7%2C6%2C6%2C5%2C4%2C5%2C6%2C2%2C2%2C3%2C5%2C4%2C0%2C1%2C1%2C7%2C4%2C7%2C1%2C2%2C2%2C6%2C7%2C4%2C5%2C3%2C3%2C0%2C4%5D%3Be.bufferData(e.ELEMENT_ARRAY_BUFFER%2Cnew%20Uint16Array(b)%2Ce.STATIC_DRAW)%3Bconst%20y%3De.createBuffer()%3Be.bindBuffer(e.ARRAY_BUFFER%2Cy)%2Ce.bufferData(e.ARRAY_BUFFER%2Cnew%20Float32Array(w)%2Ce.STATIC_DRAW)%3Bconst%20I%3De.createVertexArray()%3Be.bindVertexArray(I)%2Ce.bindBuffer(e.ELEMENT_ARRAY_BUFFER%2CC)%2Ce.bindBuffer(e.ARRAY_BUFFER%2Cy)%2Ce.enableVertexAttribArray(0)%2Ce.vertexAttribPointer(0%2C3%2Ce.FLOAT%2C!1%2C24%2C0)%2Ce.enableVertexAttribArray(1)%2Ce.vertexAttribPointer(1%2C3%2Ce.FLOAT%2C!1%2C24%2C12)%2Ce.bindVertexArray(null)%3Bconst%20M%3Dnew%20O(t%2Cy%2Ce.TRIANGLES%2Cb.length%2CC%2CI)%2CD%3Dfunction(t%2Ce%3D!0)%7Bconst%20i%3DMath.round(t.length%2F3)%2Cs%3DHe.fromValues(0%2C0%2C0)%2Cn%3DHe.create()%2Cr%3DHe.create()%3Blet%20a%3D0%2Co%3D1%3Be%26%26(o%3D2)%3Bfor(let%20e%3D0%3Be%3Co%3Be%2B%2B)%7Ba%3D0%3Bfor(let%20e%3D0%3Be%3Ci%3Be%2B%2B)%7Bconst%20i%3DHe.fromValues(t%5B3*e%5D%2Ct%5B3*e%2B1%5D%2Ct%5B3*e%2B2%5D)%3B0%3D%3D%3De%26%26(He.copy(n%2Ci)%2CHe.copy(r%2Ci))%2CHe.min(n%2Cn%2Ci)%2CHe.max(r%2Cr%2Ci)%2CHe.subtract(i%2Ci%2Cs)%3Bconst%20o%3DHe.len(i)%3Ba%3DMath.max(a%2Co)%7Dif(e%2B1%3E%3Do)break%3Blet%20h%3D!0%3Bfor(let%20t%3D0%3Bt%3C3%3B%2B%2Bt)n%5Bt%5D%3Es%5Bt%5D%26%26(h%3D!1)%2Cr%5Bt%5D%3Cs%5Bt%5D%26%26(h%3D!1)%3Bif(h)break%3BHe.lerp(s%2Cn%2Cr%2C.5)%2Cl.debug(%22origin%20moved%20inside%20volume%3A%20%22%2Cs)%7Dreturn%7Bmin%3A%5Bn%5B0%5D%2Cn%5B1%5D%2Cn%5B2%5D%5D%2Cmax%3A%5Br%5B0%5D%2Cr%5B1%5D%2Cr%5B2%5D%5D%2CfurthestVertexFromOrigin%3Aa%2Corigin%3As%7D%7D(%5B...A%2C...v%2C...x%2C...f%2C...m%2C...u%2C...p%2C...g%5D)%3Breturn%20M.extentsMin%3DD.min.slice()%2CM.extentsMax%3DD.max.slice()%2CM.furthestVertexFromOrigin%3DD.furthestVertexFromOrigin%2CM.originNegate%3Dke.clone(D.origin)%2Cke.negate(M.originNegate%2CM.originNegate)%2CM.fieldOfViewDeObliqueMM%3D%5Bi%5B1%5D*n%5B1%5D%2Ci%5B2%5D*n%5B2%5D%2Ci%5B3%5D*n%5B3%5D%5D%2CM%7DapplyOptionsUpdate(t)%7Bthis.hdr.cal_min%3Dt.cal_min%2Cthis.hdr.cal_max%3Dt.cal_max%2CObject.assign(this%2Ct)%7DgetImageOptions()%7Breturn%20qe(%22%22%2C%22%22%2Cthis.name%2Cthis._colormap%2Cthis.opacity%2Cthis.hdr.cal_min%2Cthis.hdr.cal_max%2Cthis.trustCalMinMax%2Cthis.percentileFrac%2Cthis.ignoreZeroVoxels%2Cthis.useQFormNotSForm%2Cthis.colormapNegative%2Cthis.frame4D%2Cthis.imageType)%7DtoUint8Array(t%3Dnull)%7Bconst%20e%3Dnull!%3D%3Dt%2Ci%3Dje(%7B...this.hdr%2Cvox_offset%3A352%7D%2Ce)%3Blet%20s%3Dt%3Bif(e)%7Bconst%20e%3Dthis.permRAS%3Bif(1!%3D%3De%5B0%5D%7C%7C2!%3D%3De%5B1%5D%7C%7C3!%3D%3De%5B2%5D)%7Bconst%20i%3Dthis.hdr.dims%2Cn%3D%5B0%2C0%2C0%5D%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)for(let%20i%3D0%3Bi%3C3%3Bi%2B%2B)Math.abs(e%5Bt%5D)-1%3D%3D%3Di%26%26(n%5Bi%5D%3Dt*Math.sign(e%5Bt%5D))%3Blet%20r%3D1%3Bconst%20a%3D%5B1%2C1%2C1%5D%2Co%3D%5B!1%2C!1%2C!1%5D%3Bfor(let%20t%3D0%3Bt%3Cn.length%3Bt%2B%2B)for(let%20e%3D0%3Be%3Cn.length%3Be%2B%2B)%7BMath.abs(n%5Be%5D)%3D%3D%3Dt%26%26(a%5Be%5D%3Dr%2C(n%5Be%5D%3C0%7C%7CObject.is(n%5Be%5D%2C-0))%26%26(o%5Be%5D%3D!0)%2Cr*%3Di%5Be%2B1%5D)%7Dlet%20h%3Dbe.range(0%2Ci%5B1%5D-1%2C1)%3Bo%5B0%5D%26%26(h%3Dbe.range(i%5B1%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ci%5B1%5D%3Bt%2B%2B)h%5Bt%5D*%3Da%5B0%5D%3Blet%20c%3Dbe.range(0%2Ci%5B2%5D-1%2C1)%3Bo%5B1%5D%26%26(c%3Dbe.range(i%5B2%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ci%5B2%5D%3Bt%2B%2B)c%5Bt%5D*%3Da%5B1%5D%3Blet%20d%3Dbe.range(0%2Ci%5B3%5D-1%2C1)%3Bo%5B2%5D%26%26(d%3Dbe.range(i%5B3%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ci%5B3%5D%3Bt%2B%2B)d%5Bt%5D*%3Da%5B2%5D%3Bconst%20m%3Dnew%20Uint8Array(t)%2Cu%3Dnew%20Uint8Array(i%5B1%5D*i%5B2%5D*i%5B3%5D)%3Blet%20A%3D0%3Bfor(let%20t%3D0%3Bt%3Ci%5B3%5D%3Bt%2B%2B)for(let%20e%3D0%3Be%3Ci%5B2%5D%3Be%2B%2B)for(let%20s%3D0%3Bs%3Ci%5B1%5D%3Bs%2B%2B)u%5BA%5D%3Dm%5Bh%5Bs%5D%2Bc%5Be%5D%2Bd%5Bt%5D%5D%2CA%2B%2B%3Bs%3Du%2Cl.debug(%22drawing%20bytes%22)%2Cl.debug(s)%7D%7Dconst%20n%3De%3Fs%3Anew%20Uint8Array(this.img.buffer)%2Cr%3Dnew%20Uint8Array(4)%2Ca%3Dnew%20Uint8Array(i.length%2Br.length%2Bn.length)%3Breturn%20a.set(i)%2Ca.set(r%2Ci.length)%2Ca.set(n%2Ci.length%2Br.length)%2Ca%7DconvertVox2Frac(t)%7Breturn%20ke.fromValues((t%5B0%5D%2B.5)%2Fthis.dimsRAS%5B1%5D%2C(t%5B1%5D%2B.5)%2Fthis.dimsRAS%5B2%5D%2C(t%5B2%5D%2B.5)%2Fthis.dimsRAS%5B3%5D)%7DconvertFrac2Vox(t)%7Breturn%20ke.fromValues(Math.round(t%5B0%5D*this.dims%5B1%5D-.5)%2CMath.round(t%5B1%5D*this.dims%5B2%5D-.5)%2CMath.round(t%5B2%5D*this.dims%5B3%5D-.5))%7DconvertFrac2MM(t%2Ce%3D!1)%7Bconst%20i%3DOe.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2C1)%3Breturn%20e%3FOe.transformMat4(i%2Ci%2Cthis.frac2mm)%3AOe.transformMat4(i%2Ci%2Cthis.frac2mmOrtho)%2Ci%7DconvertMM2Frac(t%2Ce%3D!1)%7Bconst%20i%3DOe.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2C1)%2Cs%3Dthis.dimsRAS%2Cn%3Dke.fromValues(0%2C0%2C0)%3Bif(void%200%3D%3D%3Ds)return%20n%3Bif(!e)%7Bconst%20t%3DLe.clone(this.frac2mmOrtho)%3Breturn%20Le.invert(t%2Ct)%2COe.transformMat4(i%2Ci%2Ct)%2Cn%5B0%5D%3Di%5B0%5D%2Cn%5B1%5D%3Di%5B1%5D%2Cn%5B2%5D%3Di%5B2%5D%2Cn%7Dif(s%5B1%5D%3C1%7C%7Cs%5B2%5D%3C1%7C%7Cs%5B3%5D%3C1)return%20n%3Bconst%20r%3DLe.clone(this.matRAS)%3Breturn%20Le.invert(r%2Cr)%2CLe.transpose(r%2Cr)%2COe.transformMat4(i%2Ci%2Cr)%2Cn%5B0%5D%3D(i%5B0%5D%2B.5)%2Fs%5B1%5D%2Cn%5B1%5D%3D(i%5B1%5D%2B.5)%2Fs%5B2%5D%2Cn%5B2%5D%3D(i%5B2%5D%2B.5)%2Fs%5B3%5D%2Cn%7D%7D%2C_e%3D(t%3D%3E(t%5Bt.AXIAL%3D0%5D%3D%22AXIAL%22%2Ct%5Bt.CORONAL%3D1%5D%3D%22CORONAL%22%2Ct%5Bt.SAGITTAL%3D2%5D%3D%22SAGITTAL%22%2Ct%5Bt.MULTIPLANAR%3D3%5D%3D%22MULTIPLANAR%22%2Ct%5Bt.RENDER%3D4%5D%3D%22RENDER%22%2Ct))(_e%7C%7C%7B%7D)%2C%24e%3D(t%3D%3E(t%5Bt.NEVER%3D0%5D%3D%22NEVER%22%2Ct%5Bt.ALWAYS%3D1%5D%3D%22ALWAYS%22%2Ct%5Bt.AUTO%3D2%5D%3D%22AUTO%22%2Ct))(%24e%7C%7C%7B%7D)%2Cti%3D(t%3D%3E(t%5Bt.AUTO%3D0%5D%3D%22AUTO%22%2Ct%5Bt.COLUMN%3D1%5D%3D%22COLUMN%22%2Ct%5Bt.GRID%3D2%5D%3D%22GRID%22%2Ct%5Bt.ROW%3D3%5D%3D%22ROW%22%2Ct))(ti%7C%7C%7B%7D)%2Cei%3D(t%3D%3E(t%5Bt.none%3D0%5D%3D%22none%22%2Ct%5Bt.contrast%3D1%5D%3D%22contrast%22%2Ct%5Bt.measurement%3D2%5D%3D%22measurement%22%2Ct%5Bt.pan%3D3%5D%3D%22pan%22%2Ct%5Bt.slicer3D%3D4%5D%3D%22slicer3D%22%2Ct%5Bt.callbackOnly%3D5%5D%3D%22callbackOnly%22%2Ct%5Bt.roiSelection%3D6%5D%3D%22roiSelection%22%2Ct))(ei%7C%7C%7B%7D)%2Cii%3D%7BtextHeight%3A.06%2CcolorbarHeight%3A.05%2CcrosshairWidth%3A1%2CcrosshairGap%3A0%2CrulerWidth%3A4%2Cshow3Dcrosshair%3A!1%2CbackColor%3A%5B0%2C0%2C0%2C1%5D%2CcrosshairColor%3A%5B1%2C0%2C0%2C1%5D%2CfontColor%3A%5B.5%2C.5%2C.5%2C1%5D%2CselectionBoxColor%3A%5B1%2C1%2C1%2C.5%5D%2CclipPlaneColor%3A%5B.7%2C0%2C.7%2C.5%5D%2CclipThick%3A2%2CclipVolumeLow%3A%5B0%2C0%2C0%5D%2CclipVolumeHigh%3A%5B1%2C1%2C1%5D%2CrulerColor%3A%5B1%2C0%2C0%2C.8%5D%2CcolorbarMargin%3A.05%2CtrustCalMinMax%3A!0%2CclipPlaneHotKey%3A%22KeyC%22%2CviewModeHotKey%3A%22KeyV%22%2CdoubleTouchTimeout%3A500%2ClongTouchTimeout%3A1e3%2CkeyDebounceTime%3A50%2CisNearestInterpolation%3A!1%2CisResizeCanvas%3A!0%2CatlasOutline%3A0%2CisRuler%3A!1%2CisColorbar%3A!1%2CisOrientCube%3A!1%2CmultiplanarPadPixels%3A0%2CmultiplanarForceRender%3A!1%2CmultiplanarEqualSize%3A!1%2CmultiplanarShowRender%3A2%2CisRadiologicalConvention%3A!1%2CmeshThicknessOn2D%3A1%2F0%2CdragMode%3A1%2Cyoke3Dto2DZoom%3A!1%2CisDepthPickMesh%3A!1%2CisCornerOrientationText%3A!1%2CsagittalNoseLeft%3A!1%2CisSliceMM%3A!1%2CisV1SliceShader%3A!1%2CisHighResolutionCapable%3A!0%2ClogLevel%3A%22info%22%2CloadingText%3A%22waiting%20for%20images...%22%2CisForceMouseClickToVoxelCenters%3A!1%2CdragAndDropEnabled%3A!0%2CdrawingEnabled%3A!1%2CpenValue%3A1%2CfloodFillNeighbors%3A6%2CisFilledPen%3A!1%2Cthumbnail%3A%22%22%2CmaxDrawUndoBitmaps%3A8%2CsliceType%3A3%2CmeshXRay%3A0%2CisAntiAlias%3Anull%2ClimitFrames4D%3ANaN%2CisAdditiveBlend%3A!1%2CshowLegend%3A!0%2ClegendBackgroundColor%3A%5B.3%2C.3%2C.3%2C.5%5D%2ClegendTextColor%3A%5B1%2C1%2C1%2C1%5D%2CmultiplanarLayout%3A0%2CrenderOverlayBlend%3A1%2CsliceMosaicString%3A%22%22%2CcenterMosaic%3A!1%2CpenSize%3A1%2CclickToSegment%3A!1%2CclickToSegmentRadius%3A3%2CclickToSegmentBright%3A!0%2CclickToSegmentAutoIntensity%3A!1%2CclickToSegmentIntensityMax%3ANaN%2CclickToSegmentIntensityMin%3ANaN%2CclickToSegmentPercent%3A0%2CclickToSegmentMaxDistanceMM%3ANumber.POSITIVE_INFINITY%2CclickToSegmentIs2D%3A!1%2CselectionBoxLineThickness%3A4%2CselectionBoxIsOutline%3A!1%2CscrollRequiresFocus%3A!1%7D%2Csi%3D%7Bgamma%3A1%2Cazimuth%3A110%2Celevation%3A10%2CcrosshairPos%3ABe.create()%2CclipPlane%3A%5B0%2C0%2C0%2C0%5D%2CclipPlaneDepthAziElev%3A%5B2%2C0%2C0%5D%2CvolScaleMultiplier%3A1%2Cpan2Dxyzmm%3AUe.create()%2CclipThick%3A2%2CclipVolumeLow%3A%5B0%2C0%2C0%5D%2CclipVolumeHigh%3A%5B1%2C1%2C1%5D%7D%2Cni%3Dclass%20t%7Bconstructor()%7Be(this%2C%22data%22%2C%7Btitle%3A%22Untitled%20document%22%2CimageOptionsArray%3A%5B%5D%2CmeshOptionsArray%3A%5B%5D%2Copts%3A%7B...ii%7D%2CpreviewImageDataURL%3A%22%22%2Clabels%3A%5B%5D%2CencodedImageBlobs%3A%5B%5D%2CencodedDrawingBlob%3A%22%22%7D)%2Ce(this%2C%22scene%22)%2Ce(this%2C%22volumes%22%2C%5B%5D)%2Ce(this%2C%22meshDataObjects%22)%2Ce(this%2C%22meshes%22%2C%5B%5D)%2Ce(this%2C%22drawBitmap%22%2Cnull)%2Ce(this%2C%22imageOptionsMap%22%2Cnew%20Map)%2Ce(this%2C%22meshOptionsMap%22%2Cnew%20Map)%2Cthis.scene%3D%7BonAzimuthElevationChange%3A()%3D%3E%7B%7D%2ConZoom3DChange%3A()%3D%3E%7B%7D%2CsceneData%3A%7B...si%2Cpan2Dxyzmm%3AUe.fromValues(0%2C0%2C0%2C1)%2CcrosshairPos%3ABe.fromValues(.5%2C.5%2C.5)%7D%2Cget%20renderAzimuth()%7Breturn%20this.sceneData.azimuth%7D%2Cset%20renderAzimuth(t)%7Bthis.sceneData.azimuth%3Dt%2Cthis.onAzimuthElevationChange%26%26this.onAzimuthElevationChange(this.sceneData.azimuth%2Cthis.sceneData.elevation)%7D%2Cget%20renderElevation()%7Breturn%20this.sceneData.elevation%7D%2Cset%20renderElevation(t)%7Bthis.sceneData.elevation%3Dt%2Cthis.onAzimuthElevationChange%26%26this.onAzimuthElevationChange(this.sceneData.azimuth%2Cthis.sceneData.elevation)%7D%2Cget%20volScaleMultiplier()%7Breturn%20this.sceneData.volScaleMultiplier%7D%2Cset%20volScaleMultiplier(t)%7Bthis.sceneData.volScaleMultiplier%3Dt%2Cthis.onZoom3DChange(t)%7D%2Cget%20crosshairPos()%7Breturn%20this.sceneData.crosshairPos%7D%2Cset%20crosshairPos(t)%7Bthis.sceneData.crosshairPos%3Dt%7D%2Cget%20clipPlane()%7Breturn%20this.sceneData.clipPlane%7D%2Cset%20clipPlane(t)%7Bthis.sceneData.clipPlane%3Dt%7D%2Cget%20clipPlaneDepthAziElev()%7Breturn%20this.sceneData.clipPlaneDepthAziElev%7D%2Cset%20clipPlaneDepthAziElev(t)%7Bthis.sceneData.clipPlaneDepthAziElev%3Dt%7D%2Cget%20pan2Dxyzmm()%7Breturn%20this.sceneData.pan2Dxyzmm%7D%2Cset%20pan2Dxyzmm(t)%7Bthis.sceneData.pan2Dxyzmm%3Dt%7D%7D%7Dget%20title()%7Breturn%20this.data.title%7Dget%20previewImageDataURL()%7Breturn%20this.data.previewImageDataURL%7Dset%20previewImageDataURL(t)%7Bthis.data.previewImageDataURL%3Dt%7Dset%20title(t)%7Bthis.data.title%3Dt%7Dget%20imageOptionsArray()%7Breturn%20this.data.imageOptionsArray%7Dget%20encodedImageBlobs()%7Breturn%20this.data.encodedImageBlobs%7Dget%20encodedDrawingBlob()%7Breturn%20this.data.encodedDrawingBlob%7Dget%20opts()%7Breturn%20this.data.opts%7Dset%20opts(t)%7Bthis.data.opts%3D%7B...t%7D%7Dget%20labels()%7Breturn%20this.data.labels%7Dset%20labels(t)%7Bthis.data.labels%3Dt%7Dget%20customData()%7Breturn%20this.data.customData%7Dset%20customData(t)%7Bthis.data.customData%3Dt%7DhasImage(t)%7Breturn%20void%200!%3D%3Dthis.volumes.find((e%3D%3Ee.id%3D%3D%3Dt.id))%7DhasImageFromUrl(t)%7Breturn%20void%200!%3D%3Dthis.data.imageOptionsArray.find((e%3D%3Ee.url%3D%3D%3Dt))%7DaddImageOptions(t%2Ce)%7Bif(!this.hasImage(t)%26%26!e.name)if(e.url)%7Bconst%20t%3D%2F%5E(%3F%3A%5Ba-z%2B%5D%2B%3A)%3F%5C%2F%5C%2F%2Fi.test(e.url)%3Fnew%20URL(e.url)%3Anew%20URL(e.url%2Cwindow.location.href)%3Be.name%3Dt.pathname.split(%22%2F%22).pop()%2Ce.name.toLowerCase().endsWith(%22.gz%22)%26%26(e.name%3De.name.slice(0%2C-3))%2Ce.name.toLowerCase().endsWith(%22.nii%22)%7C%7C(e.name%2B%3D%22.nii%22)%7Delse%20e.name%3D%22untitled.nii%22%3Be.imageType%3Dze.NII%2Cthis.data.imageOptionsArray.push(e)%2Cthis.imageOptionsMap.set(t.id%2Cthis.data.imageOptionsArray.length-1)%7DremoveImage(t)%7Bif(this.imageOptionsMap.has(t.id))%7Bconst%20e%3Dthis.imageOptionsMap.get(t.id)%3Bthis.data.imageOptionsArray.length%3Ee%26%26this.data.imageOptionsArray.splice(e%2C1)%2Cthis.imageOptionsMap.delete(t.id)%7Dthis.volumes%3Dthis.volumes.filter((e%3D%3Ee.id!%3D%3Dt.id))%7DgetImageOptions(t)%7Breturn%20this.imageOptionsMap.has(t.id)%3Fthis.data.imageOptionsArray%5Bthis.imageOptionsMap.get(t.id)%5D%3Anull%7Djson()%7Bconst%20t%3D%7BencodedImageBlobs%3A%5B%5D%2CpreviewImageDataURL%3Athis.data.previewImageDataURL%2CimageOptionsMap%3Anew%20Map%7D%2Ce%3D%5B%5D%3Bt.sceneData%3D%7B...this.scene.sceneData%7D%2Ct.opts%3D%7B...this.opts%7D%2Cthis.opts.meshThicknessOn2D%3D%3D%3D1%2F0%26%26(t.opts.meshThicknessOn2D%3D%22infinity%22)%2Ct.labels%3D%5B...this.data.labels%5D%3Bfor(const%20e%20of%20t.labels)delete%20e.onClick%3Bif(t.customData%3Dthis.customData%2Cthis.volumes.length)%7Blet%20i%3Dthis.imageOptionsArray%5B0%5D%3Bif(i%7C%7C(l.debug(%22no%20image%20options%20for%20base%20image%22)%2Ci%3D%7Bname%3A%22%22%2Ccolormap%3A%22gray%22%2Copacity%3A1%2CpairedImgData%3Anull%2Ccal_min%3ANaN%2Ccal_max%3ANaN%2CtrustCalMinMax%3A!0%2CpercentileFrac%3A.02%2CignoreZeroVoxels%3A!1%2CuseQFormNotSForm%3A!1%2CcolormapNegative%3A%22%22%2CcolormapLabel%3Anull%2CimageType%3Aze.NII%2Cframe4D%3A0%2ClimitFrames4D%3ANaN%2Curl%3A%22%22%2CurlImageData%3A%22%22%2CalphaThreshold%3A!1%2Ccal_minNeg%3ANaN%2Ccal_maxNeg%3ANaN%2CcolorbarVisible%3A!0%7D)%2Ci.colormap%3Dthis.volumes%5B0%5D.colormap%2Ci.opacity%3Dthis.volumes%5B0%5D.opacity%2Ci.cal_max%3Dthis.volumes%5B0%5D.cal_max%7C%7CNaN%2Ci.cal_min%3Dthis.volumes%5B0%5D.cal_min%7C%7CNaN%2C!i)throw%20new%20Error(%22image%20options%20for%20base%20layer%20not%20found%22)%3B%7Be.push(i)%3Bconst%20s%3Dbe.uint8tob64(this.volumes%5B0%5D.toUint8Array())%3Bt.encodedImageBlobs.push(s)%2Cthis.drawBitmap%26%26(t.encodedDrawingBlob%3Dbe.uint8tob64(this.volumes%5B0%5D.toUint8Array(this.drawBitmap)))%2Ct.imageOptionsMap.set(this.volumes%5B0%5D.id%2C0)%7Dfor(let%20i%3D1%3Bi%3Cthis.volumes.length%3Bi%2B%2B)%7Bconst%20s%3Dthis.volumes%5Bi%5D%3Blet%20n%3Dthis.getImageOptions(s)%3Bnull%3D%3D%3Dn%3F(l.warn(%22no%20options%20found%20for%20image%2C%20using%20default%22)%2Cn%3D%7Bname%3A%22%22%2Ccolormap%3A%22gray%22%2Copacity%3A1%2CpairedImgData%3Anull%2Ccal_min%3ANaN%2Ccal_max%3ANaN%2CtrustCalMinMax%3A!0%2CpercentileFrac%3A.02%2CignoreZeroVoxels%3A!1%2CuseQFormNotSForm%3A!1%2CcolormapNegative%3A%22%22%2CcolormapLabel%3Anull%2CimageType%3Aze.NII%2Cframe4D%3A0%2ClimitFrames4D%3ANaN%2Curl%3A%22%22%2CurlImageData%3A%22%22%2CalphaThreshold%3A!1%2Ccal_minNeg%3ANaN%2Ccal_maxNeg%3ANaN%2CcolorbarVisible%3A!0%7D)%3A%22imageType%22in%20n%7C%7C(n.imageType%3Dze.NII)%2Cn.colormap%3Ds.colormap%2Cn.colormapLabel%3Ds.colormapLabel%2Cn.opacity%3Ds.opacity%2Cn.cal_max%3Ds.cal_max%7C%7CNaN%2Cn.cal_min%3Ds.cal_min%7C%7CNaN%2Ce.push(n)%3Bconst%20r%3Dbe.uint8tob64(s.toUint8Array())%3Bt.encodedImageBlobs.push(r)%2Ct.imageOptionsMap.set(s.id%2Ci)%7D%7Dt.imageOptionsArray%3D%5B...e%5D%3Bconst%20i%3D%5B%5D%3Bt.connectomes%3D%5B%5D%3Bfor(const%20e%20of%20this.meshes)%7Bif(%22connectome%22%3D%3D%3De.type)%7Bt.connectomes.push(JSON.stringify(e.json()))%3Bcontinue%7Dconst%20s%3D%7Bpts%3Ae.pts%2Ctris%3Ae.tris%2Cname%3Ae.name%2Crgba255%3AUint8Array.from(e.rgba255)%2Copacity%3Ae.opacity%2Cconnectome%3Ae.connectome%2Cdpg%3Ae.dpg%2Cdps%3Ae.dps%2Cdpv%3Ae.dpv%2CmeshShaderIndex%3Ae.meshShaderIndex%2Clayers%3Ae.layers.map((t%3D%3E(%7Bvalues%3At.values%2CnFrame4D%3At.nFrame4D%2Cframe4D%3A0%2CoutlineBorder%3At.outlineBorder%2Cglobal_min%3At.global_min%2Cglobal_max%3At.global_max%2Ccal_min%3At.cal_min%2Ccal_max%3At.cal_max%2Copacity%3At.opacity%2Ccolormap%3At.colormap%2CcolormapNegative%3At.colormapNegative%2CcolormapLabel%3At.colormapLabel%2CuseNegativeCmap%3At.useNegativeCmap%7D)))%2ChasConnectome%3Ae.hasConnectome%2CedgeColormap%3Ae.edgeColormap%2CedgeColormapNegative%3Ae.edgeColormapNegative%2CedgeMax%3Ae.edgeMax%2CedgeMin%3Ae.edgeMin%2Cedges%3Ae.edges%26%26Array.isArray(e.edges)%3F%5B...e.edges%5D%3A%5B%5D%2CextentsMax%3Ae.extentsMax%2CextentsMin%3Ae.extentsMin%2CfurthestVertexFromOrigin%3Ae.furthestVertexFromOrigin%2CnodeColormap%3Ae.nodeColormap%2CnodeColormapNegative%3Ae.nodeColormapNegative%2CnodeMaxColor%3Ae.nodeMaxColor%2CnodeMinColor%3Ae.nodeMinColor%2CnodeScale%3Ae.nodeScale%2ClegendLineThickness%3Ae.legendLineThickness%2CoffsetPt0%3Ae.offsetPt0%2Cnodes%3Ae.nodes%7D%3Be.offsetPt0%26%26e.offsetPt0.length%3E0%26%26(s.offsetPt0%3De.offsetPt0%2Cs.fiberGroupColormap%3De.fiberGroupColormap%2Cs.fiberColor%3De.fiberColor%2Cs.fiberDither%3De.fiberDither%2Cs.fiberRadius%3De.fiberRadius%2Cs.colormap%3De.colormap)%2Ci.push(s)%7Dreturn%20t.meshesString%3DJSON.stringify(Se(i))%2Ct%7Dasync%20download(t%2Ce)%7Bconst%20i%3Dthis.json()%2Cs%3DJSON.stringify(i)%2Cn%3De%3F%22application%2Fgzip%22%3A%22application%2Fjson%22%3Blet%20r%3Br%3De%3Fawait%20be.compressStringToArrayBuffer(s)%3AJSON.stringify(i)%2Cbe.download(r%2Ct%2Cn)%7Dstatic%20deserializeMeshDataObjects(t)%7Bif(t.data.meshesString)%7Bt.meshDataObjects%3DEe(JSON.parse(t.data.meshesString))%3Bfor(const%20e%20of%20t.meshDataObjects)for(const%20t%20of%20e.layers)%22colorMap%22in%20t%26%26(t.colormap%3Dt.colorMap%2Cdelete%20t.colorMap)%2C%22colorMapNegative%22in%20t%26%26(t.colormapNegative%3Dt.colorMapNegative%2Cdelete%20t.colorMapNegative)%7D%7Dstatic%20async%20loadFromUrl(e)%7Bconst%20i%3Dawait%20fetch(e)%2Cs%3Dawait%20i.arrayBuffer()%3Blet%20n%3Bif(be.isArrayBufferCompressed(s))%7Bconst%20t%3Dawait%20be.decompressArrayBuffer(s)%3Bn%3DJSON.parse(t)%7Delse%7Bconst%20t%3Dnew%20TextDecoder%3Bn%3DJSON.parse(t.decode(s))%7Dreturn%20t.loadFromJSON(n)%7Dstatic%20async%20loadFromFile(e)%7Bconst%20i%3Dawait%20be.readFileAsync(e)%3Blet%20s%3Bconst%20n%3Dnew%20t%3Bif(be.isArrayBufferCompressed(i))s%3Dawait%20be.decompressArrayBuffer(i)%3Belse%7Bs%3D(new%20TextDecoder).decode(i)%7Dreturn%20n.data%3DJSON.parse(s)%2C%22infinity%22%3D%3D%3Dn.data.opts.meshThicknessOn2D%26%26(n.data.opts.meshThicknessOn2D%3D1%2F0)%2Cn.scene.sceneData%3D%7B...si%2C...n.data.sceneData%7D%2Ct.deserializeMeshDataObjects(n)%2Cn%7Dstatic%20loadFromJSON(e)%7Bconst%20i%3Dnew%20t%3Breturn%20i.data%3De%2C%22infinity%22%3D%3D%3Di.data.opts.meshThicknessOn2D%26%26(i.data.opts.meshThicknessOn2D%3D1%2F0)%2Ci.scene.sceneData%3D%7B...si%2C...e.sceneData%7D%2Ct.deserializeMeshDataObjects(i)%2Ci%7D%7D%2Cri%3D(t%3D%3E(t.LEFT%3D%22left%22%2Ct.RIGHT%3D%22right%22%2Ct.CENTER%3D%22center%22%2Ct))(ri%7C%7C%7B%7D)%2Cai%3D(t%3D%3E(t.NONE%3D%22none%22%2Ct.CIRCLE%3D%22circle%22%2Ct.RING%3D%22ring%22%2Ct))(ai%7C%7C%7B%7D)%2Coi%3D(t%3D%3E(t%5Bt.NONE%3D0%5D%3D%22NONE%22%2Ct%5Bt.TOPLEFT%3D9%5D%3D%22TOPLEFT%22%2Ct%5Bt.TOPCENTER%3D10%5D%3D%22TOPCENTER%22%2Ct%5Bt.TOPRIGHT%3D12%5D%3D%22TOPRIGHT%22%2Ct%5Bt.MIDDLELEFT%3D17%5D%3D%22MIDDLELEFT%22%2Ct%5Bt.MIDDLECENTER%3D18%5D%3D%22MIDDLECENTER%22%2Ct%5Bt.MIDDLERIGHT%3D20%5D%3D%22MIDDLERIGHT%22%2Ct%5Bt.BOTTOMLEFT%3D33%5D%3D%22BOTTOMLEFT%22%2Ct%5Bt.BOTTOMCENTER%3D34%5D%3D%22BOTTOMCENTER%22%2Ct%5Bt.BOTTOMRIGHT%3D36%5D%3D%22BOTTOMRIGHT%22%2Ct))(oi%7C%7C%7B%7D)%2Cli%3Dclass%7Bconstructor(t%3D%5B1%2C1%2C1%2C1%5D%2Ci%3D1%2Cs%3D%22left%22%2Cn%3D0%2Cr%3D%5B0%2C0%2C0%5D%2Ca%3D%22none%22%2Co%2Cl%2Ch)%7Be(this%2C%22textColor%22)%2Ce(this%2C%22textScale%22)%2Ce(this%2C%22textAlignment%22)%2Ce(this%2C%22lineWidth%22)%2Ce(this%2C%22lineColor%22)%2Ce(this%2C%22lineTerminator%22)%2Ce(this%2C%22bulletScale%22)%2Ce(this%2C%22bulletColor%22)%2Ce(this%2C%22backgroundColor%22)%2Cthis.textColor%3Dt%2Cthis.textScale%3Di%2Cthis.textAlignment%3Ds%2Cthis.lineWidth%3Dn%2Cthis.lineColor%3Dr%2Cthis.lineTerminator%3Da%2Cthis.bulletScale%3Do%2Cthis.bulletColor%3Dl%2Cthis.backgroundColor%3Dh%7D%7D%2Chi%3Dclass%7Bconstructor(t%2Ci%2Cs%2Cn%2Cr)%7Be(this%2C%22text%22)%2Ce(this%2C%22style%22)%2Ce(this%2C%22points%22)%2Ce(this%2C%22anchor%22)%2Ce(this%2C%22onClick%22)%2Cthis.text%3Dt%2Cthis.style%3Di%2Cthis.points%3Ds%2Cthis.anchor%3Dn%7C%7C0%2Cthis.onClick%3Dr%7D%7D%3Bimport%7Bvec3%20as%20ci%7Dfrom%22gl-matrix%22%3Bvar%20di%3D%7Bname%3A%22untitled%20connectome%22%2CnodeColormap%3A%22warm%22%2CnodeColormapNegative%3A%22winter%22%2CnodeMinColor%3A0%2CnodeMaxColor%3A4%2CnodeScale%3A3%2CedgeColormap%3A%22warm%22%2CedgeColormapNegative%3A%22winter%22%2CedgeMin%3A2%2CedgeMax%3A6%2CedgeScale%3A1%2ClegendLineThickness%3A0%7D%2Cmi%3Dclass%20t%20extends%20Fe%7Bconstructor(t%2Ci)%7Bsuper(new%20Float32Array(%5B%5D)%2Cnew%20Uint32Array(%5B%5D)%2Ci.name%2Cnew%20Uint8Array(%5B%5D)%2C1%2C!0%2Ct%2Ci)%2Ce(this%2C%22gl%22)%2Ce(this%2C%22nodesChanged%22)%2Cthis.gl%3Dt%2Cthis.type%3D%22connectome%22%2Cthis.nodes%26%26this.updateLabels()%2Cthis.nodesChanged%3Dnew%20EventTarget%7Dstatic%20convertLegacyConnectome(t)%7Bconst%20e%3D%7Bnodes%3A%5B%5D%2Cedges%3A%5B%5D%2C...di%7D%3Bfor(const%20i%20in%20t)if(i%20in%20di)%7Bconst%20s%3Di%3Be%5Bs%5D%3Dt%5Bs%5D%7Dconst%20i%3Dt.nodes%3Bfor(let%20t%3D0%3Bt%3Ci.names.length%3Bt%2B%2B)e.nodes.push(%7Bname%3Ai.names%5Bt%5D%2Cx%3Ai.X%5Bt%5D%2Cy%3Ai.Y%5Bt%5D%2Cz%3Ai.Z%5Bt%5D%2CcolorValue%3Ai.Color%5Bt%5D%2CsizeValue%3Ai.Size%5Bt%5D%7D)%3Bfor(let%20s%3D0%3Bs%3Ci.names.length-1%3Bs%2B%2B)for(let%20n%3Ds%2B1%3Bn%3Ci.names.length%3Bn%2B%2B)%7Bconst%20r%3Dt.edges%5Bs*i.names.length%2Bn%5D%3Be.edges.push(%7Bfirst%3As%2Csecond%3An%2CcolorValue%3Ar%7D)%7Dreturn%20e%7Dstatic%20convertFreeSurferConnectome(t%2Ce%3D%22warm%22)%7Blet%20i%3D!0%3Bif(%22data_type%22in%20t%3F%22fs_pointset%22!%3D%3Dt.data_type%26%26(i%3D!1)%3Ai%3D!1%2C%22points%22in%20t%7C%7C(i%3D!1)%2C!i)throw%20Error(%22not%20a%20valid%20FreeSurfer%20json%20pointset%22)%3Bconst%20s%3Dt.points.map((t%3D%3E(%7Bname%3AArray.isArray(t.comments)%26%26t.comments.length%3E0%26%26%22text%22in%20t.comments%5B0%5D%3Ft.comments%5B0%5D.text%3A%22%22%2Cx%3At.coordinates.x%2Cy%3At.coordinates.y%2Cz%3At.coordinates.z%2CcolorValue%3A1%2CsizeValue%3A1%2Cmetadata%3At.comments%7D)))%3Breturn%7B...di%2CnodeColormap%3Ae%2CedgeColormap%3Ae%2Cnodes%3As%2Cedges%3A%5B%5D%7D%7DupdateLabels()%7Bconst%20t%3Dthis.nodes%3Bif(t%26%26t.length%3E0)%7Bconst%20e%3Dt.reduce(((t%2Ce)%3D%3Et.sizeValue%3Ee.sizeValue%3Ft%3Ae)).sizeValue%2Ci%3Dthis.nodeMinColor%3Fthis.nodeMinColor%3At.reduce(((t%2Ce)%3D%3Et.colorValue%3Ce.colorValue%3Ft%3Ae)).colorValue%2Cs%3Dthis.nodeMaxColor%3Fthis.nodeMaxColor%3At.reduce(((t%2Ce)%3D%3Et.colorValue%3Ee.colorValue%3Ft%3Ae)).colorValue%2Cn%3Dne.colormap(this.nodeColormap%2Cthis.colormapInvert)%2Cr%3Dne.colormap(this.nodeColormapNegative%2Cthis.colormapInvert)%2Ca%3D%22nodeColormapNegative%22in%20this%2Co%3Dthis.legendLineThickness%3Fthis.legendLineThickness%3A0%3Bfor(let%20h%3D0%3Bh%3Ct.length%3Bh%2B%2B)%7Blet%20c%3Dt%5Bh%5D.colorValue%2Cd%3D!1%3Bif(a%26%26c%3C0%26%26(d%3D!0%2Cc%3D-c)%2Ci%3Cs)%7Bif(c%3Ci)%7Bl.warn(%22color%20value%20lower%20than%20min%22)%3Bcontinue%7Dc%3D(c-i)%2F(s-i)%7Delse%20c%3D1%3Bc%3D4*Math.round(Math.max(Math.min(255%2C255*c)))%3Blet%20m%3D%5Bn%5Bc%5D%2Cn%5Bc%2B1%5D%2Cn%5Bc%2B2%5D%2C255%5D%3Bd%26%26(m%3D%5Br%5Bc%5D%2Cr%5Bc%2B1%5D%2Cr%5Bc%2B2%5D%2C255%5D)%2Cm%3Dm.map((t%3D%3Et%2F255))%2Cl.debug(%22adding%20label%20for%20%22%2Ct%5Bh%5D)%2Ct%5Bh%5D.label%3Dnew%20hi(t%5Bh%5D.name%2C%7BtextColor%3Am%2CbulletScale%3At%5Bh%5D.sizeValue%2Fe%2CbulletColor%3Am%2ClineWidth%3Ao%2ClineColor%3Am%2CtextScale%3A1%2CtextAlignment%3A%22left%22%2ClineTerminator%3A%22none%22%7D%2C%5Bt%5Bh%5D.x%2Ct%5Bh%5D.y%2Ct%5Bh%5D.z%5D)%2Cl.debug(%22label%20for%20node%3A%22%2Ct%5Bh%5D.label)%7D%7D%7DaddConnectomeNode(t)%7Bif(l.debug(%22adding%20node%22%2Ct)%2C!this.nodes)throw%20new%20Error(%22nodes%20not%20defined%22)%3Bthis.nodes.push(t)%2Cthis.updateLabels()%2Cthis.nodesChanged.dispatchEvent(new%20CustomEvent(%22nodeAdded%22%2C%7Bdetail%3A%7Bnode%3At%7D%7D))%7DdeleteConnectomeNode(t)%7Bconst%20e%3Dthis.nodes.indexOf(t)%2Ci%3Dthis.edges%3Bi%26%26(this.edges%3Di.filter((t%3D%3Et.first!%3D%3De%26%26t.second!%3D%3De)))%2Cthis.nodes%3Dthis.nodes.filter((e%3D%3Ee!%3D%3Dt))%2Cthis.updateLabels()%2Cthis.updateConnectome(this.gl)%2Cthis.nodesChanged.dispatchEvent(new%20CustomEvent(%22nodeDeleted%22%2C%7Bdetail%3A%7Bnode%3At%7D%7D))%7DupdateConnectomeNodeByIndex(t%2Ce)%7Bthis.nodes%5Bt%5D%3De%2Cthis.updateLabels()%2Cthis.updateConnectome(this.gl)%2Cthis.nodesChanged.dispatchEvent(new%20CustomEvent(%22nodeChanged%22%2C%7Bdetail%3A%7Bnode%3Ae%7D%7D))%7DupdateConnectomeNodeByPoint(t%2Ce)%7Bconst%20i%3Dthis.nodes%3Bif(!i)throw%20new%20Error(%22Node%20to%20update%20does%20not%20exist%22)%3Bconst%20s%3Di.find((e%3D%3Ebe.arraysAreEqual(%5Be.x%2Ce.y%2Ce.z%5D%2Ct)))%3Bif(!s)throw%20new%20Error(%60Node%20with%20point%20%24%7Bt%7D%20to%20update%20does%20not%20exist%60)%3Bconst%20n%3Di.findIndex((t%3D%3Et%3D%3D%3Ds))%3Bthis.updateConnectomeNodeByIndex(n%2Ce)%7DaddConnectomeEdge(t%2Ce%2Ci)%7Bconst%20s%3Dthis.edges%3Blet%20n%3Ds.find((i%3D%3E(i.first%3D%3D%3Dt%7C%7Ci.second%3D%3D%3Dt)%26%26i.first%2Bi.second%3D%3D%3Dt%2Be))%3Breturn%20n%7C%7C(n%3D%7Bfirst%3At%2Csecond%3Ae%2CcolorValue%3Ai%7D%2Cs.push(n)%2Cthis.updateConnectome(this.gl)%2Cn)%7DdeleteConnectomeEdge(t%2Ce)%7Bconst%20i%3Dthis.edges%2Cs%3Di.find((i%3D%3E(i.first%3D%3D%3Dt%7C%7Ci.first%3D%3D%3De)%26%26i.first%2Bi.second%3D%3D%3Dt%2Be))%3Bif(!s)throw%20new%20Error(%60edge%20between%20%24%7Bt%7D%20and%20%24%7Be%7D%20not%20found%60)%3Breturn%20this.edges%3Di.filter((t%3D%3Et!%3D%3Ds))%2Cthis.updateConnectome(this.gl)%2Cs%7DfindClosestConnectomeNode(t%2Ce)%7Bconst%20i%3Dthis.nodes%3Bif(!i%7C%7C0%3D%3D%3Di.length)return%20null%3Bconst%20s%3Di.map(((e%2Ci)%3D%3E(%7Bnode%3Ae%2Cdistance%3AMath.sqrt(Math.pow(e.x-t%5B0%5D%2C2)%2BMath.pow(e.y-t%5B1%5D%2C2)%2BMath.pow(e.z-t%5B2%5D%2C2))%2Cindex%3Ai%7D))).filter((t%3D%3Et.distance%3Ce)).sort(((t%2Ce)%3D%3Et.distance-e.distance))%3Breturn%20s.length%3E0%3Fs%5B0%5D.node%3Anull%7DupdateConnectome(t)%7Bconst%20e%3D%5B%5D%2Ci%3D%5B%5D%2Cs%3D%5B%5D%3Blet%20n%3Dne.colormap(this.nodeColormap%2Cthis.colormapInvert)%2Cr%3Dne.colormap(this.nodeColormapNegative%2Cthis.colormapInvert)%2Ca%3D%22nodeColormapNegative%22in%20this%3Bif(void%200%3D%3D%3Dthis.nodeMinColor%7C%7Cvoid%200%3D%3D%3Dthis.nodeMaxColor)throw%20new%20Error(%22nodeMinColor%20or%20nodeMaxColor%20is%20undefined%22)%3Bif(void%200%3D%3D%3Dthis.edgeMin%7C%7Cvoid%200%3D%3D%3Dthis.edgeMax)throw%20new%20Error(%22edgeMin%20or%20edgeMax%20undefined%22)%3Blet%20o%3Dthis.nodeMinColor%2Cl%3Dthis.nodeMaxColor%3Bconst%20h%3Dthis.nodes%2Cc%3Dh.length%3Bfor(let%20t%3D0%3Bt%3Cc%3Bt%2B%2B)%7Bconst%20c%3Dh%5Bt%5D.sizeValue*this.nodeScale%3Bif(c%3C%3D0)continue%3Blet%20d%3Dh%5Bt%5D.colorValue%2Cm%3D!1%3Bif(a%26%26d%3C0%26%26(m%3D!0%2Cd%3D-d)%2Co%3Cl)%7Bif(d%3Co)continue%3Bd%3D(d-o)%2F(l-o)%7Delse%20d%3D1%3Bd%3D4*Math.round(Math.max(Math.min(255%2C255*d)))%3Blet%20u%3D%5Bn%5Bd%5D%2Cn%5Bd%2B1%5D%2Cn%5Bd%2B2%5D%2C255%5D%3Bm%26%26(u%3D%5Br%5Bd%5D%2Cr%5Bd%2B1%5D%2Cr%5Bd%2B2%5D%2C255%5D)%3Bconst%20A%3Dci.fromValues(h%5Bt%5D.x%2Ch%5Bt%5D.y%2Ch%5Bt%5D.z)%3BO.makeColoredSphere(i%2Ce%2Cs%2Cc%2CA%2Cu)%7Dn%3Dne.colormap(this.edgeColormap%2Cthis.colormapInvert)%2Cr%3Dne.colormap(this.edgeColormapNegative%2Cthis.colormapInvert)%2Ca%3D%22edgeColormapNegative%22in%20this%2Co%3Dthis.edgeMin%2Cl%3Dthis.edgeMax%3Bconst%20d%3Dthis.edges%3Bfor(const%20t%20of%20d)%7Blet%20c%3Dt.colorValue%3Bconst%20d%3Da%26%26c%3C0%3Bd%26%26(c%3D-c)%3Bconst%20m%3Dc*this.edgeScale%3Bif(m%3C%3D0)continue%3Bif(o%3Cl)%7Bif(c%3Co)continue%3Bc%3D(c-o)%2F(l-o)%7Delse%20c%3D1%3Bc%3D4*Math.round(Math.max(Math.min(255%2C255*c)))%3Blet%20u%3D%5Bn%5Bc%5D%2Cn%5Bc%2B1%5D%2Cn%5Bc%2B2%5D%2C255%5D%3Bd%26%26(u%3D%5Br%5Bc%5D%2Cr%5Bc%2B1%5D%2Cr%5Bc%2B2%5D%2C255%5D)%3Bconst%20A%3Dci.fromValues(h%5Bt.first%5D.x%2Ch%5Bt.first%5D.y%2Ch%5Bt.first%5D.z)%2Cf%3Dci.fromValues(h%5Bt.second%5D.x%2Ch%5Bt.second%5D.y%2Ch%5Bt.second%5D.z)%3BO.makeColoredCylinder(i%2Ce%2Cs%2CA%2Cf%2Cm%2Cu)%7Dconst%20m%3Dnew%20Float32Array(i)%2Cu%3Dnew%20Uint32Array(e)%2CA%3Doe.getExtents(m)%3Bthis.furthestVertexFromOrigin%3DA.mxDx%2Cthis.extentsMin%3DA.extentsMin%2Cthis.extentsMax%3DA.extentsMax%3Bconst%20f%3Dthis.generatePosNormClr(m%2Cu%2Cnew%20Uint8Array(s))%3Bt.bindBuffer(t.ELEMENT_ARRAY_BUFFER%2Cthis.indexBuffer)%2Ct.bufferData(t.ELEMENT_ARRAY_BUFFER%2CUint32Array.from(u)%2Ct.STATIC_DRAW)%2Ct.bindBuffer(t.ARRAY_BUFFER%2Cthis.vertexBuffer)%2Ct.bufferData(t.ARRAY_BUFFER%2CFloat32Array.from(f)%2Ct.STATIC_DRAW)%2Cthis.indexCount%3De.length%7DupdateMesh(t)%7Bthis.updateConnectome(t)%2Cthis.updateLabels()%7Djson()%7Bconst%20t%3D%7B%7D%3Bfor(const%20e%20in%20this)(e%20in%20di%7C%7C%22nodes%22%3D%3D%3De%7C%7C%22edges%22%3D%3D%3De)%26%26(t%5Be%5D%3Dthis%5Be%5D)%3Breturn%20t%7Dstatic%20async%20loadConnectomeFromUrl(e%2Ci)%7Bconst%20s%3Dawait%20fetch(i)%2Cn%3Dawait%20s.json()%3Breturn%20new%20t(e%2Cn)%7D%7D%3Bimport%7Bmat4%20as%20ui%2Cvec3%20as%20Ai%2Cvec4%20as%20fi%7Dfrom%22gl-matrix%22%3Bfunction%20gi(t%2Ce)%7Bconst%20i%3DMath.floor(Math.log(t)%2FMath.log(10))%2Cs%3Dt%2FMath.pow(10%2Ci)%3Blet%20n%3Breturn%20n%3De%3Fs%3C1.5%3F1%3As%3C3%3F2%3As%3C7%3F5%3A10%3As%3C%3D1%3F1%3As%3C%3D2%3F2%3As%3C%3D5%3F5%3A10%2Cn*Math.pow(10%2Ci)%7Dfunction%20pi(t%2Ce%2Ci%3D4)%7Bconst%20s%3Dgi(e-t%2C!1)%2Cn%3Dgi(s%2F(i-1)%2C!0)%2Cr%3DMath.floor(t%2Fn)*n%2Ca%3DMath.ceil(e%2Fn)*n%3Breturn%5Bn%2Cr%2Ca%2Cr%3D%3D%3Dt%26%26a%3D%3D%3De%5D%7Dfunction%20vi(t%2Ce)%7Blet%20i%3Dpi(t%2Ce%2C3)%3Breturn%20i%5B3%5D%7C%7C(i%3Dpi(t%2Ce%2C5))%2Ci%5B3%5D%7C%7C(i%3Dpi(t%2Ce%2C4))%2Ci%5B3%5D%7C%7C(i%3Dpi(t%2Ce%2C3))%2Ci%5B3%5D%7C%7C(i%3Dpi(t%2Ce%2C5))%2C%5Bi%5B0%5D%2Ci%5B1%5D%2Ci%5B2%5D%5D%7Dfunction%20xi(t)%7Breturn%20t*(Math.PI%2F180)%7Dfunction%20wi(t%2Ce%2Ci%2Cs)%7Blet%20n%3D-t%2Cr%3D-e%3Breturn%20isFinite(i)%26%26isFinite(s)%26%26(n%3Di%2Cr%3Ds)%2Cn%3Er%26%26(%5Bn%2Cr%5D%3D%5Br%2Cn%5D)%2C%5Bn%2Cr%5D%7Dfunction%20Ci(t%2Ce%3D%5B0%2C1%2C2%5D)%7Bconst%20i%3DAi.create()%3Breturn%20i%5B0%5D%3Dt%5Be%5B0%5D%5D%2Ci%5B1%5D%3Dt%5Be%5B1%5D%5D%2Ci%5B2%5D%3Dt%5Be%5B2%5D%5D%2Ci%7Dfunction%20bi(t)%7Bconst%20e%3Dfi.fromValues(1%2C0%2C0%2C0)%2Ci%3Dfi.create()%3Breturn%20fi.transformMat4(i%2Ce%2Ct)%2Ci%5B0%5D%7Dfunction%20yi(t%2Ce%2Ci)%7Breturn%20Math.min(Math.max(t%2Ce)%2Ci)%7Dfunction%20Ii(t%2Ce)%7Bconst%20i%3Dnew%20Uint8Array(t.buffer)%2Cs%3Dnew%20Int8Array(i.buffer)%3Blet%20n%3D0%3Bconst%20r%3Dnew%20Uint8Array(e)%3Blet%20a%3D0%3Bfor(%3Bn%3Ci.length%3B)%7Bconst%20t%3Ds%5Bn%5D%3Bif(n%2B%2B%2Ct%3C0)%7Bconst%20e%3Ds%5Bn%5D%3Bn%2B%2B%3Bfor(let%20i%3D0%3Bi%3C1-t%3Bi%2B%2B)r%5Ba%5D%3De%2Ca%2B%2B%7Delse%20for(let%20e%3D0%3Be%3Ct%2B1%3Be%2B%2B)r%5Ba%5D%3Ds%5Bn%5D%2Cn%2B%2B%2Ca%2B%2B%7Dreturn%20r%7Dfunction%20Mi(t%2Ce)%7Breturn%200%3D%3D%3Dt.scl_slope%26%26(t.scl_slope%3D1)%2Ce*t.scl_slope%2Bt.scl_inter%7Dimport%7BwebSocket%20as%20Di%7Dfrom%22rxjs%2FwebSocket%22%3Bimport%7Bv4%20as%20Fi%7Dfrom%22%40lukeed%2Fuuid%22%3Bvar%20Ti%3Dclass%7Bconstructor(t%2Ci%2Cs%2Cn)%7Be(this%2C%22id%22)%2Ce(this%2C%22displayName%22)%2Ce(this%2C%22key%22)%2Ce(this%2C%22properties%22)%2Cthis.id%3Di%7C%7CFi()%2Cthis.displayName%3Dt%7C%7C%60user-%24%7Bthis.id%7D%60%2Cthis.key%3Ds%7C%7CFi()%2Cthis.properties%3Dn%7C%7Cnew%20Map%7D%7D%3Bvar%20Vi%3Dclass%7Bconstructor(t%2Ci%2Cs%2Cn%3D%22%22%2Cr%3D%22%22)%7Bif(e(this%2C%22userList%22)%2Ce(this%2C%22user%22)%2Ce(this%2C%22userQueueName%22)%2Ce(this%2C%22userListName%22)%2Ce(this%2C%22onMessageCallback%22)%2Ce(this%2C%22isConnectedToServer%22%2C!1)%2Ce(this%2C%22isController%22%2C!1)%2Ce(this%2C%22sessionScene%22%2C%7B%7D)%2Ce(this%2C%22sessionKey%22)%2Ce(this%2C%22sessionName%22)%2Ce(this%2C%22sessionSceneName%22)%2Ce(this%2C%22serverConnection%24%22%2Cnull)%2Cthis.userList%3D%5B%5D%2Cthis.user%3Di%7C%7Cnew%20Ti(%22anonymous%22)%2Cthis.onMessageCallback%3Ds%2Cthis.sessionScene%3D%7B%7D%2Cthis.sessionKey%3Dr%7C%7CFi()%2Cthis.sessionName%3Dt%2Cthis.sessionSceneName%3D%60session-%24%7Bt%7D-scene%60%2Cn)this.connectToServer(n%2Ct)%2Cthis.subscribeToServer()%2Cthis.isConnectedToServer%3D!0%2Cnull!%3D%3Dthis.serverConnection%24%26%26this.serverConnection%24.next(%7Bop%3A%22create%22%2Ckey%3Athis.sessionKey%7D)%3Belse%7Bif(!function(t)%7Bconst%20e%3Dwindow%5Bt%5D%2Ci%3D%22test%22%3Btry%7Breturn%20e.setItem(i%2Ci)%2Ce.removeItem(i)%2C!0%7Dcatch(t)%7Breturn!1%7D%7D(%22localStorage%22))throw%20new%20Error(%22Local%20storage%20unavailable%22)%3Bthis.userQueueName%3D%60user-%24%7Bthis.user.id%7D-q%60%2Cthis.userListName%3D%60%24%7Bt%7D-user-list%60%2Cthis.userList%3DJSON.parse(localStorage.getItem(this.userListName)%7C%7C%22%5B%5D%22)%2Cthis.userList.push(this.user)%2ClocalStorage.setItem(this.userListName%2CJSON.stringify(this.userList))%2ClocalStorage.setItem(this.userQueueName%2CJSON.stringify(%5B%5D))%2Cwindow.addEventListener(%22storage%22%2Cthis.localStorageEventListener.bind(this))%7D%7DsendSessionMessage(t)%7Bt.from%3Dthis.user.id%2Cthis.isConnectedToServer%26%26null!%3D%3Dthis.serverConnection%24%3Fthis.serverConnection%24.next(%7B...t%2Ckey%3Athis.sessionKey%2CuserKey%3Athis.user.key%7D)%3Athis.sendLocalMessage(t)%7DconnectToServer(t%2Ce)%7Bconst%20i%3Dnew%20URL(t)%3Bi.pathname%3D%22websockets%22%2Ci.search%3D%22%3Fsession%3D%22%2Be%2Cthis.serverConnection%24%3DDi(i.href)%2Cl.debug(i.href)%7DsubscribeToServer()%7Bnull!%3D%3Dthis.serverConnection%24%26%26this.serverConnection%24.subscribe(%7Bnext%3At%3D%3E%7Bthis.onMessageCallback(t)%7D%2Cerror%3At%3D%3El.error(t)%2Ccomplete%3A()%3D%3El.debug(%22complete%22)%7D)%7DsendLocalMessage(t)%7Bfor(const%20e%20of%20this.userList)%7Bif(e.id%3D%3D%3Dthis.user.id)continue%3Bconst%20i%3D%60user-%24%7Be.id%7D-q%60%2Cs%3DlocalStorage.getItem(i)%2Cn%3Ds%3FJSON.parse(s)%3A%5B%5D%3Bn.push(t)%2ClocalStorage.setItem(i%2CJSON.stringify(n))%7D%7DlocalStorageEventListener(t)%7Bif(t.newValue)switch(t.key)%7Bcase%20this.userListName%3A%7Bconst%20e%3DJSON.parse(t.newValue)%2Ci%3DJSON.parse(t.oldValue%3F%3F%22%5B%5D%22)%3Bthis.userList%3De%3Bconst%20s%3De.filter((t%3D%3E!i.map((t%3D%3Et.id)).includes(t.id)))%3Bfor(const%20t%20of%20s)this.onMessageCallback(%7Bop%3A%22user%20joined%22%2Cuser%3At%7D)%7Dbreak%3Bcase%20this.userQueueName%3A%7Bconst%20e%3DJSON.parse(t.newValue)%3Bfor(const%20t%20of%20e)this.onMessageCallback%26%26this.onMessageCallback(t)%3BlocalStorage.setItem(this.userQueueName%3F%3F%22%22%2CJSON.stringify(%5B%5D))%7D%7D%7D%7D%2CSi%3Dclass%7Bconstructor(t)%7Be(this%2C%22niivue%22)%2Ce(this%2C%22mediaUrlMap%22)%2Ce(this%2C%22isInSession%22%2C!1)%2Ce(this%2C%22user%22)%2Ce(this%2C%22sessionBus%22)%2Ce(this%2C%22onFrameChange%22%2C((t%2Ce)%3D%3E%7B%7D))%2Cthis.niivue%3Dt%2Cthis.mediaUrlMap%3Dnew%20Map%2Cthis.niivue.onLocationChange%3Dthis.onLocationChangeHandler.bind(this)%2Cthis.niivue.onZoom3DChange%3Dthis.onZoom3DChangeHandler.bind(this)%2Cthis.niivue.scene.onAzimuthElevationChange%3Dthis.onAzimuthElevationChangeHandler.bind(this)%2Cthis.niivue.onClipPlaneChange%3Dthis.onClipPlaneChangeHandler.bind(this)%2Cthis.niivue.onVolumeAddedFromUrl%3Dthis.onVolumeAddedFromUrlHandler.bind(this)%2Cthis.niivue.onVolumeWithUrlRemoved%3Dthis.onVolumeWithUrlRemovedHandler.bind(this)%2Cthis.niivue.onMeshAddedFromUrl%3Dthis.onMeshAddedFromUrlHandler.bind(this)%2Cthis.niivue.onMeshWithUrlRemoved%3Dthis.onMeshWithUrlRemovedHandler.bind(this)%2Cthis.niivue.onCustomMeshShaderAdded%3Dthis.onCustomMeshShaderAddedHandler.bind(this)%2Cthis.niivue.onMeshShaderChanged%3Dthis.onMeshShaderChanged.bind(this)%2Cthis.niivue.onMeshPropertyChanged%3Dthis.onMeshPropertyChanged.bind(this)%2Cthis.niivue.onFrameChange%3Dthis.onFrameChangeHandler.bind(this)%3Bfor(const%20t%20of%20this.niivue.volumes)t.onColormapChange%3Dthis.onColormapChangeHandler.bind(this)%2Ct.onOpacityChange%3Dthis.onOpacityChangeHandler.bind(this)%7DonLocationChangeHandler(t)%7Bl.debug(t)%7DaddVolume(t%2Ce)%7Bthis.niivue.volumes.push(t)%3Bconst%20i%3D1%3D%3D%3Dthis.niivue.volumes.length%3F0%3Athis.niivue.volumes.length-1%3Bthis.niivue.setVolume(t%2Ci)%2Cthis.niivue.mediaUrlMap.set(t%2Ce)%7DaddMesh(t%2Ce)%7Bthis.niivue.meshes.push(t)%3Bconst%20i%3D1%3D%3D%3Dthis.niivue.meshes.length%3F0%3Athis.niivue.meshes.length-1%3Bthis.niivue.setMesh(t%2Ci)%2Cthis.niivue.mediaUrlMap.set(t%2Ce)%7DonNewMessage(t)%7Bswitch(t.op)%7Bcase%201%3Athis.niivue.volScaleMultiplier%3Dt.zoom%3Bbreak%3Bcase%202%3Athis.niivue.scene.clipPlane%3Dt.clipPlane%3Bbreak%3Bcase%203%3Athis.niivue.scene._elevation%3Dt.elevation%2Cthis.niivue.scene._azimuth%3Dt.azimuth%3Bbreak%3Bcase%204%3A%7Bconst%20e%3Dthis.niivue.getMediaByUrl(t.url)%3Be%26%26(e.frame4D%3Dt.index)%7Dbreak%3Bcase%205%3Athis.niivue.getMediaByUrl(t.imageOptions.url)%7C%7CJe.loadFromUrl(t.imageOptions).then((e%3D%3E%7Be%26%26this.addVolume(e%2Ct.imageOptions.url)%7D)).catch((t%3D%3E%7Bif(t)throw%20t%7D))%3Bbreak%3Bcase%206%3A%7Bconst%20e%3Dthis.niivue.getMediaByUrl(t.url)%3Be%26%26(this.niivue.setVolume(e%2C-1)%2Cthis.niivue.mediaUrlMap.delete(e))%7Dbreak%3Bcase%207%3Athis.niivue.getMediaByUrl(t.url)._colormap%3Dt.colormap%2Cthis.niivue.updateGLVolume()%3Bbreak%3Bcase%208%3Athis.niivue.getMediaByUrl(t.url)._opacity%3Dt.opacity%2Cthis.niivue.updateGLVolume()%3Bbreak%3Bcase%209%3Athis.niivue.getMediaByUrl(t.meshOptions.url)%7C%7C(t.meshOptions.gl%3Dthis.niivue.gl%2CFe.loadFromUrl(t.meshOptions).then((e%3D%3E%7Bthis.addMesh(e%2Ct.meshOptions.url)%7D)).catch((t%3D%3E%7Bif(t)throw%20t%7D)))%3Bbreak%3Bcase%2010%3A%7Bconst%20e%3Dthis.niivue.getMediaByUrl(t.url)%3Be%26%26(this.niivue.setMesh(e%2C-1)%2Cthis.niivue.mediaUrlMap.delete(e))%7Dbreak%3Bcase%2011%3A%7Bconst%20e%3Dthis.niivue.createCustomMeshShader(t.fragmentShaderText%2Ct.name)%3Bthis.niivue.meshShaders.push(e)%7Dbreak%3Bcase%2012%3Athis.niivue.meshes%5Bt.meshIndex%5D.meshShaderIndex%3Dt.shaderIndex%2Cthis.niivue.updateGLVolume()%3Bbreak%3Bcase%2013%3Athis.niivue.meshes%5Bt.meshIndex%5D.setProperty(t.key%2Ct.val%2Cthis.niivue.gl)%7Dthis.niivue.drawScene()%7DconnectToSession(t%2Ce%2Ci%2Cs)%7Bthis.user%3De%7C%7Cnew%20Ti%2Cthis.sessionBus%3Dnew%20Vi(t%2Cthis.user%2Cthis.onNewMessage.bind(this)%2Ci%2Cs)%2Cthis.isInSession%3D!0%7DonZoom3DChangeHandler(t)%7Bthis.isInSession%26%26this.sessionBus%26%26this.sessionBus.sendSessionMessage(%7Bop%3A1%2Czoom%3At%7D)%7DonAzimuthElevationChangeHandler(t%2Ce)%7Bthis.isInSession%26%26this.sessionBus%26%26this.sessionBus.sendSessionMessage(%7Bop%3A3%2Cazimuth%3At%2Celevation%3Ae%7D)%7DonClipPlaneChangeHandler(t)%7Bthis.isInSession%26%26this.sessionBus%26%26this.sessionBus.sendSessionMessage(%7Bop%3A2%2CclipPlane%3At%7D)%7DonVolumeAddedFromUrlHandler(t%2Ce)%7Bthis.isInSession%26%26this.sessionBus%26%26(l.debug(t)%2Cthis.sessionBus.sendSessionMessage(%7Bop%3A5%2CimageOptions%3At%7D))%2Ce.onColormapChange%3Dthis.onColormapChangeHandler.bind(this)%2Ce.onOpacityChange%3Dthis.onOpacityChangeHandler.bind(this)%7DonImageLoadedHandler(t)%7Bif(t.onColormapChange%3Dthis.onColormapChangeHandler.bind(this)%2Ct.onOpacityChange%3Dthis.onOpacityChangeHandler.bind(this)%2Cthis.isInSession%26%26this.sessionBus%26%26this.niivue.mediaUrlMap.has(t))%7Bconst%20e%3Dthis.niivue.mediaUrlMap.get(t)%3Bthis.sessionBus.sendSessionMessage(%7Bop%3A%22volume%20with%20url%20added%22%2Curl%3Ae%7D)%7D%7DonVolumeWithUrlRemovedHandler(t)%7Bthis.isInSession%26%26this.sessionBus%26%26this.sessionBus.sendSessionMessage(%7Bop%3A6%2Curl%3At%7D)%7DonMeshAddedFromUrlHandler(t)%7Bl.debug(%22mesh%20loaded%20from%20url%22)%2Cl.debug(t)%2Cthis.isInSession%26%26this.sessionBus%26%26this.sessionBus.sendSessionMessage(%7Bop%3A9%2CmeshOptions%3At%7D)%7DonMeshLoadedHandler(t)%7Bl.debug(%22mesh%20has%20been%20added%22)%2Cl.debug(t)%7DonMeshWithUrlRemovedHandler(t)%7Bthis.isInSession%26%26this.sessionBus%26%26this.sessionBus.sendSessionMessage(%7Bop%3A10%2Curl%3At%7D)%7DonColormapChangeHandler(t)%7Bif(this.isInSession%26%26this.sessionBus%26%26this.niivue.mediaUrlMap.has(t))%7Bconst%20e%3Dthis.niivue.mediaUrlMap.get(t)%2Ci%3Dt.colormap%3Bthis.sessionBus.sendSessionMessage(%7Bop%3A7%2Curl%3Ae%2Ccolormap%3Ai%7D)%7D%7DonOpacityChangeHandler(t)%7Bif(this.isInSession%26%26this.sessionBus%26%26this.niivue.mediaUrlMap.has(t))%7Bconst%20e%3Dthis.niivue.mediaUrlMap.get(t)%2Ci%3Dt.opacity%3Bthis.sessionBus.sendSessionMessage(%7Bop%3A8%2Curl%3Ae%2Copacity%3Ai%7D)%7D%7DonFrameChangeHandler(t%2Ce)%7Bif(l.debug(%22frame%20has%20changed%20to%20%22%2Be)%2Cl.debug(t)%2Cthis.niivue.mediaUrlMap.has(t)%26%26this.isInSession%26%26this.sessionBus)%7Bconst%20i%3Dthis.niivue.mediaUrlMap.get(t)%3Bthis.sessionBus.sendSessionMessage(%7Bop%3A4%2Curl%3Ai%2Cindex%3Ae%7D)%7Dthis.onFrameChange(t%2Ce)%7DonCustomMeshShaderAddedHandler(t%2Ce)%7Bthis.isInSession%26%26this.sessionBus%26%26this.sessionBus.sendSessionMessage(%7Bop%3A11%2CfragmentShaderText%3At%2Cname%3Ae%7D)%7DonMeshShaderChanged(t%2Ce)%7Bthis.isInSession%26%26this.sessionBus%26%26this.sessionBus.sendSessionMessage(%7Bop%3A12%2CmeshIndex%3At%2CshaderIndex%3Ae%7D)%7DonMeshPropertyChanged(t%2Ce%2Ci)%7Bthis.isInSession%26%26this.sessionBus%26%26(l.debug(13)%2Cthis.sessionBus.sendSessionMessage(%7Bop%3A13%2CmeshIndex%3At%2Ckey%3Ae%2Cval%3Ai%7D))%7D%7D%2CEi%3D%5B%22ASC%22%2C%22BYU%22%2C%22DFS%22%2C%22FSM%22%2C%22PIAL%22%2C%22ORIG%22%2C%22INFLATED%22%2C%22SMOOTHWM%22%2C%22SPHERE%22%2C%22WHITE%22%2C%22G%22%2C%22GEO%22%2C%22GII%22%2C%22ICO%22%2C%22MZ3%22%2C%22NV%22%2C%22OBJ%22%2C%22OFF%22%2C%22PLY%22%2C%22SRF%22%2C%22STL%22%2C%22TCK%22%2C%22TRACT%22%2C%22TRI%22%2C%22TRK%22%2C%22TT%22%2C%22TRX%22%2C%22VTK%22%2C%22X3D%22%2C%22JCON%22%2C%22JSON%22%5D%2CBi%3D33984%2CUi%3D33985%2CRi%3D33986%2CNi%3D33991%2CPi%3D33994%2CLi%3D%7Bfilename%3A%22%22%2CisSaveDrawing%3A!1%2CvolumeByIndex%3A0%7D%2Cki%3Dclass%7Bconstructor(t%3Dii)%7Be(this%2C%22canvas%22%2Cnull)%2Ce(this%2C%22_gl%22%2Cnull)%2Ce(this%2C%22isBusy%22%2C!1)%2Ce(this%2C%22needsRefresh%22%2C!1)%2Ce(this%2C%22colormapTexture%22%2Cnull)%2Ce(this%2C%22colormapLists%22%2C%5B%5D)%2Ce(this%2C%22volumeTexture%22%2Cnull)%2Ce(this%2C%22gradientTexture%22%2Cnull)%2Ce(this%2C%22gradientTextureAmount%22%2C0)%2Ce(this%2C%22drawTexture%22%2Cnull)%2Ce(this%2C%22drawUndoBitmaps%22%2C%5B%5D)%2Ce(this%2C%22drawLut%22%2Cne.makeDrawLut(%22%24itksnap%22))%2Ce(this%2C%22drawOpacity%22%2C.8)%2Ce(this%2C%22clickToSegmentIsGrowing%22%2C!1)%2Ce(this%2C%22clickToSegmentGrowingBitmap%22%2Cnull)%2Ce(this%2C%22clickToSegmentXY%22%2C%5B0%2C0%5D)%2Ce(this%2C%22renderDrawAmbientOcclusion%22%2C.4)%2Ce(this%2C%22colorbarHeight%22%2C0)%2Ce(this%2C%22drawPenLocation%22%2C%5BNaN%2CNaN%2CNaN%5D)%2Ce(this%2C%22drawPenAxCorSag%22%2C-1)%2Ce(this%2C%22drawFillOverwrites%22%2C!0)%2Ce(this%2C%22drawPenFillPts%22%2C%5B%5D)%2Ce(this%2C%22overlayTexture%22%2Cnull)%2Ce(this%2C%22overlayTextureID%22%2Cnull)%2Ce(this%2C%22sliceMMShader%22)%2Ce(this%2C%22sliceV1Shader%22)%2Ce(this%2C%22orientCubeShader%22)%2Ce(this%2C%22orientCubeShaderVAO%22%2Cnull)%2Ce(this%2C%22rectShader%22)%2Ce(this%2C%22rectOutlineShader%22)%2Ce(this%2C%22renderShader%22)%2Ce(this%2C%22lineShader%22)%2Ce(this%2C%22line3DShader%22)%2Ce(this%2C%22passThroughShader%22)%2Ce(this%2C%22renderGradientShader%22)%2Ce(this%2C%22renderSliceShader%22)%2Ce(this%2C%22renderVolumeShader%22)%2Ce(this%2C%22pickingMeshShader%22)%2Ce(this%2C%22pickingImageShader%22)%2Ce(this%2C%22colorbarShader%22)%2Ce(this%2C%22fontShader%22%2Cnull)%2Ce(this%2C%22fiberShader%22)%2Ce(this%2C%22fontTexture%22%2Cnull)%2Ce(this%2C%22circleShader%22)%2Ce(this%2C%22matCapTexture%22%2Cnull)%2Ce(this%2C%22bmpShader%22%2Cnull)%2Ce(this%2C%22bmpTexture%22%2Cnull)%2Ce(this%2C%22thumbnailVisible%22%2C!1)%2Ce(this%2C%22bmpTextureWH%22%2C1)%2Ce(this%2C%22growCutShader%22)%2Ce(this%2C%22orientShaderAtlasU%22%2Cnull)%2Ce(this%2C%22orientShaderAtlasI%22%2Cnull)%2Ce(this%2C%22orientShaderU%22%2Cnull)%2Ce(this%2C%22orientShaderI%22%2Cnull)%2Ce(this%2C%22orientShaderF%22%2Cnull)%2Ce(this%2C%22orientShaderRGBU%22%2Cnull)%2Ce(this%2C%22surfaceShader%22%2Cnull)%2Ce(this%2C%22blurShader%22%2Cnull)%2Ce(this%2C%22sobelShader%22%2Cnull)%2Ce(this%2C%22genericVAO%22%2Cnull)%2Ce(this%2C%22unusedVAO%22%2Cnull)%2Ce(this%2C%22crosshairs3D%22%2Cnull)%2Ce(this%2C%22DEFAULT_FONT_GLYPH_SHEET%22%2CTe)%2Ce(this%2C%22DEFAULT_FONT_METRICS%22%2CVe)%2Ce(this%2C%22fontMetrics%22)%2Ce(this%2C%22fontMets%22%2Cnull)%2Ce(this%2C%22backgroundMasksOverlays%22%2C0)%2Ce(this%2C%22overlayOutlineWidth%22%2C0)%2Ce(this%2C%22overlayAlphaShader%22%2C1)%2Ce(this%2C%22isAlphaClipDark%22%2C!1)%2Ce(this%2C%22position%22)%2Ce(this%2C%22extentsMin%22)%2Ce(this%2C%22extentsMax%22)%2Ce(this%2C%22resizeObserver%22%2Cnull)%2Ce(this%2C%22syncOpts%22%2C%7B%223d%22%3A!1%2C%222d%22%3A!1%2CzoomPan%3A!1%2Ccal_min%3A!1%2Ccal_max%3A!1%2CclipPlane%3A!1%2Cgamma%3A!1%2CsliceType%3A!1%2Ccrosshair%3A!1%7D)%2Ce(this%2C%22readyForSync%22%2C!1)%2Ce(this%2C%22uiData%22%2C%7Bmousedown%3A!1%2Ctouchdown%3A!1%2CmouseButtonLeftDown%3A!1%2CmouseButtonCenterDown%3A!1%2CmouseButtonRightDown%3A!1%2CmouseDepthPicker%3A!1%2CclickedTile%3A-1%2Cpan2DxyzmmAtMouseDown%3A%5B0%2C0%2C0%2C1%5D%2CprevX%3A0%2CprevY%3A0%2CcurrX%3A0%2CcurrY%3A0%2CcurrentTouchTime%3A0%2ClastTouchTime%3A0%2CtouchTimer%3Anull%2CdoubleTouch%3A!1%2CisDragging%3A!1%2CdragStart%3A%5B0%2C0%5D%2CdragEnd%3A%5B0%2C0%5D%2CdragClipPlaneStartDepthAziElev%3A%5B0%2C0%2C0%5D%2ClastTwoTouchDistance%3A0%2CmultiTouchGesture%3A!1%7D)%2Ce(this%2C%22back%22%2Cnull)%2Ce(this%2C%22overlays%22%2C%5B%5D)%2Ce(this%2C%22deferredVolumes%22%2C%5B%5D)%2Ce(this%2C%22deferredMeshes%22%2C%5B%5D)%2Ce(this%2C%22furthestVertexFromOrigin%22%2C100)%2Ce(this%2C%22volScale%22%2C%5B%5D)%2Ce(this%2C%22vox%22%2C%5B%5D)%2Ce(this%2C%22mousePos%22%2C%5B0%2C0%5D)%2Ce(this%2C%22screenSlices%22%2C%5B%5D)%2Ce(this%2C%22cuboidVertexBuffer%22)%2Ce(this%2C%22otherNV%22%2Cnull)%2Ce(this%2C%22volumeObject3D%22%2Cnull)%2Ce(this%2C%22pivot3D%22%2C%5B0%2C0%2C0%5D)%2Ce(this%2C%22furthestFromPivot%22%2C10)%2Ce(this%2C%22currentClipPlaneIndex%22%2C0)%2Ce(this%2C%22lastCalled%22%2C(new%20Date).getTime())%2Ce(this%2C%22selectedObjectId%22%2C-1)%2Ce(this%2C%22CLIP_PLANE_ID%22%2C1)%2Ce(this%2C%22VOLUME_ID%22%2C254)%2Ce(this%2C%22DISTANCE_FROM_CAMERA%22%2C-.54)%2Ce(this%2C%22graph%22%2C%7BLTWH%3A%5B0%2C0%2C640%2C480%5D%2Copacity%3A0%2Cvols%3A%5B0%5D%2CautoSizeMultiplanar%3A!1%2CnormalizeValues%3A!1%7D)%2Ce(this%2C%22meshShaders%22%2C%5B%7BName%3A%22Phong%22%2CFrag%3A%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctvec3%20r%20%3D%20vec3(0.0%2C%200.0%2C%201.0)%3B%20%2F%2FrayDir%3A%20for%20orthographic%20projections%20moving%20in%20Z%20direction%20(no%20need%20for%20normal%20matrix)%5Cn%5Ctfloat%20ambient%20%3D%200.35%3B%5Cn%5Ctfloat%20diffuse%20%3D%200.5%3B%5Cn%5Ctfloat%20specular%20%3D%200.2%3B%5Cn%5Ctfloat%20shininess%20%3D%2010.0%3B%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ctvec3%20lightPosition%20%3D%20vec3(0.0%2C%2010.0%2C%20-5.0)%3B%5Cn%5Ctvec3%20l%20%3D%20normalize(lightPosition)%3B%5Cn%5Ctfloat%20lightNormDot%20%3D%20dot(n%2C%20l)%3B%5Cn%5Ctvec3%20a%20%3D%20vClr.rgb%20*%20ambient%3B%5Cn%5Ctvec3%20d%20%3D%20max(lightNormDot%2C%200.0)%20*%20vClr.rgb%20*%20diffuse%3B%5Cn%5Ctfloat%20s%20%3D%20specular%20*%20pow(max(dot(reflect(l%2C%20n)%2C%20r)%2C%200.0)%2C%20shininess)%3B%5Cn%5Ctcolor%20%3D%20vec4(a%20%2B%20d%20%2B%20s%2C%20opacity)%3B%5Cn%7D%22%7D%2C%7BName%3A%22Matte%22%2CFrag%3A%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctfloat%20ambient%20%3D%200.35%3B%5Cn%5Ctfloat%20diffuse%20%3D%200.6%3B%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ctvec3%20lightPosition%20%3D%20vec3(0.0%2C%2010.0%2C%20-5.0)%3B%5Cn%5Ctvec3%20l%20%3D%20normalize(lightPosition)%3B%5Cn%5Ctfloat%20lightNormDot%20%3D%20dot(n%2C%20l)%3B%5Cn%5Ctvec3%20a%20%3D%20vClr.rgb%20*%20ambient%3B%5Cn%5Ctvec3%20d%20%3D%20max(lightNormDot%2C%200.0)%20*%20vClr.rgb%20*%20diffuse%3B%5Cn%5Ctcolor%20%3D%20vec4(a%20%2B%20d%2C%20opacity)%3B%5Cn%7D%22%7D%2C%7BName%3A%22Harmonic%22%2CFrag%3A'%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnout%20vec4%20color%3B%5Cn%2F%2FSpherical%20harmonics%20constants%5Cnconst%20float%20C1%20%3D%200.429043%3B%5Cnconst%20float%20C2%20%3D%200.511664%3B%5Cnconst%20float%20C3%20%3D%200.743125%3B%5Cnconst%20float%20C4%20%3D%200.886227%3B%5Cnconst%20float%20C5%20%3D%200.247708%3B%5Cn%2F%2FSpherical%20harmonics%20coefficients%5Cn%2F%2F%20Ramamoorthi%2C%20R.%2C%20and%20P.%20Hanrahan.%202001b.%20%22An%20Efficient%20Representation%20for%20Irradiance%20Environment%20Maps.%22%20In%20Proceedings%20of%20SIGGRAPH%202001%2C%20pp.%20497%E2%80%93500.%5Cn%2F%2F%20https%3A%2F%2Fgithub.com%2Feskimoblood%2FprocessingSketches%2Fblob%2Fmaster%2Fdata%2Fshader%2Fshinyvert.glsl%5Cn%2F%2F%20https%3A%2F%2Fgithub.com%2Feskimoblood%2FprocessingSketches%2Fblob%2Fmaster%2Fdata%2Fshader%2Fshinyvert.glsl%5Cn%2F%2F%20Constants%20for%20Eucalyptus%20Grove%20lighting%5Cnconst%20vec3%20L00%20%20%3D%20vec3(%200.3783264%2C%20%200.4260425%2C%20%200.4504587)%3B%5Cnconst%20vec3%20L1m1%20%3D%20vec3(%200.2887813%2C%20%200.3586803%2C%20%200.4147053)%3B%5Cnconst%20vec3%20L10%20%20%3D%20vec3(%200.0379030%2C%20%200.0295216%2C%20%200.0098567)%3B%5Cnconst%20vec3%20L11%20%20%3D%20vec3(-0.1033028%2C%20-0.1031690%2C%20-0.0884924)%3B%5Cnconst%20vec3%20L2m2%20%3D%20vec3(-0.0621750%2C%20-0.0554432%2C%20-0.0396779)%3B%5Cnconst%20vec3%20L2m1%20%3D%20vec3(%200.0077820%2C%20-0.0148312%2C%20-0.0471301)%3B%5Cnconst%20vec3%20L20%20%20%3D%20vec3(-0.0935561%2C%20-0.1254260%2C%20-0.1525629)%3B%5Cnconst%20vec3%20L21%20%20%3D%20vec3(-0.0572703%2C%20-0.0502192%2C%20-0.0363410)%3B%5Cnconst%20vec3%20L22%20%20%3D%20vec3(%200.0203348%2C%20-0.0044201%2C%20-0.0452180)%3B%5Cnvec3%20SH(vec3%20vNormal)%20%7B%5Cn%5CtvNormal%20%3D%20vec3(vNormal.x%2CvNormal.z%2CvNormal.y)%3B%5Cn%5Ctvec3%20diffuseColor%20%3D%20C1%20*%20L22%20*%20(vNormal.x%20*%20vNormal.x%20-%20vNormal.y%20*%20vNormal.y)%20%2B%5Cn%5CtC3%20*%20L20%20*%20vNormal.z%20*%20vNormal.z%20%2B%5Cn%5CtC4%20*%20L00%20-%5Cn%5CtC5%20*%20L20%20%2B%5Cn%5Ct2.0%20*%20C1%20*%20L2m2%20*%20vNormal.x%20*%20vNormal.y%20%2B%5Cn%5Ct2.0%20*%20C1%20*%20L21%20%20*%20vNormal.x%20*%20vNormal.z%20%2B%5Cn%5Ct2.0%20*%20C1%20*%20L2m1%20*%20vNormal.y%20*%20vNormal.z%20%2B%5Cn%5Ct2.0%20*%20C2%20*%20L11%20%20*%20vNormal.x%20%2B%5Cn%5Ct2.0%20*%20C2%20*%20L1m1%20*%20vNormal.y%20%2B%5Cn%5Ct2.0%20*%20C2%20*%20L10%20%20*%20vNormal.z%3B%5Cn%5Ctreturn%20diffuseColor%3B%5Cn%7D%5Cnvoid%20main()%20%7B%5Cn%5Ctvec3%20r%20%3D%20vec3(0.0%2C%200.0%2C%201.0)%3B%20%2F%2FrayDir%3A%20for%20orthographic%20projections%20moving%20in%20Z%20direction%20(no%20need%20for%20normal%20matrix)%5Cn%5Ctfloat%20ambient%20%3D%200.3%3B%5Cn%5Ctfloat%20diffuse%20%3D%200.6%3B%5Cn%5Ctfloat%20specular%20%3D%200.1%3B%5Cn%5Ctfloat%20shininess%20%3D%2010.0%3B%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ctvec3%20lightPosition%20%3D%20vec3(0.0%2C%2010.0%2C%20-5.0)%3B%5Cn%5Ctvec3%20l%20%3D%20normalize(lightPosition)%3B%5Cn%5Ctfloat%20s%20%3D%20specular%20*%20pow(max(dot(reflect(l%2C%20n)%2C%20r)%2C%200.0)%2C%20shininess)%3B%5Cn%5Ctvec3%20a%20%3D%20vClr.rgb%20*%20ambient%3B%5Cn%5Ctvec3%20d%20%3D%20vClr.rgb%20*%20diffuse%20*%20SH(-reflect(n%2C%20vec3(l.x%2C%20l.y%2C%20-l.z))%20)%3B%5Cn%5Ctcolor%20%3D%20vec4(a%20%2B%20d%20%2B%20s%2C%20opacity)%3B%5Cn%7D'%7D%2C%7BName%3A%22Hemispheric%22%2CFrag%3A%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctvec3%20r%20%3D%20vec3(0.0%2C%200.0%2C%201.0)%3B%20%2F%2FrayDir%3A%20for%20orthographic%20projections%20moving%20in%20Z%20direction%20(no%20need%20for%20normal%20matrix)%5Cn%5Ctfloat%20ambient%20%3D%200.35%3B%5Cn%5Ctfloat%20diffuse%20%3D%200.5%3B%5Cn%5Ctfloat%20specular%20%3D%200.2%3B%5Cn%5Ctfloat%20shininess%20%3D%2010.0%3B%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ctvec3%20lightPosition%20%3D%20vec3(0.0%2C%2010.0%2C%20-5.0)%3B%5Cn%5Ctvec3%20l%20%3D%20normalize(lightPosition)%3B%5Cn%5Ctfloat%20lightNormDot%20%3D%20dot(n%2C%20l)%3B%5Cn%5Ctvec3%20up%20%3D%20vec3(0.0%2C%201.0%2C%200.0)%3B%5Cn%5Ctfloat%20ax%20%3D%20dot(n%2C%20up)%20*%200.5%20%2B%200.5%3B%20%20%2F%2FShreiner%20et%20al.%20(2013)%20OpenGL%20Programming%20Guide%2C%208th%20Ed.%2C%20p%20388.%20ISBN-10%3A%200321773039%5Cn%5Ctvec3%20upClr%20%3D%20vec3(1.0%2C%201.0%2C%200.95)%3B%5Cn%5Ctvec3%20downClr%20%3D%20vec3(0.4%2C%200.4%2C%200.6)%3B%5Cn%5Ctvec3%20a%20%3D%20vClr.rgb%20*%20ambient%3B%5Cn%5Cta%20*%3D%20mix(downClr%2C%20upClr%2C%20ax)%3B%5Cn%5Ctvec3%20d%20%3D%20max(lightNormDot%2C%200.0)%20*%20vClr.rgb%20*%20diffuse%3B%5Cn%5Ctfloat%20s%20%3D%20specular%20*%20pow(max(dot(reflect(l%2C%20n)%2C%20r)%2C%200.0)%2C%20shininess)%3B%5Cn%5Ctcolor%20%3D%20vec4(a%20%2B%20d%20%2B%20s%2C%20opacity)%3B%5Cn%7D%22%7D%2C%7BName%3A%22Crevice%22%2CFrag%3A%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnin%20vec4%20vPc%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ct%2F%2F%20Compute%20curvature%5Cn%5Ctvec3%20dx%20%3D%20dFdx(n)%3B%5Cn%5Ctvec3%20dy%20%3D%20dFdy(n)%3B%5Cn%5Ctvec3%20xneg%20%3D%20n%20-%20dx%3B%5Cn%5Ctvec3%20xpos%20%3D%20n%20%2B%20dx%3B%5Cn%5Ctvec3%20yneg%20%3D%20n%20-%20dy%3B%5Cn%5Ctvec3%20ypos%20%3D%20n%20%2B%20dy%3B%5Cn%5Ctfloat%20depth%20%3D%20length(vPc.xyz)%3B%5Cn%5Ctfloat%20curv%20%3D%20(cross(xneg%2C%20xpos).y%20-%20cross(yneg%2C%20ypos).x)%20%2F%20depth%3B%5Cn%5Ct%2F%2Fat%20this%20stage%200.5%20for%20flat%2C%20with%20valleys%20dark%20and%20ridges%20bright%5Cn%5Ctcurv%20%3D%201.0%20-%20(curv%20%2B%200.5)%3B%5Cn%5Ct%2F%2Fclamp%5Cn%5Ctcurv%20%3D%20%20min(max(curv%2C%200.0)%2C%201.0)%3B%5Cn%5Ct%2F%2F%20easing%20function%5Cn%5Ctcurv%20%3D%20pow(curv%2C%200.5)%3B%5Cn%5Ct%2F%2Fmodulate%20ambient%20and%20diffuse%20with%20curvature%5Cn%5Ctvec3%20r%20%3D%20vec3(0.0%2C%200.0%2C%201.0)%3B%20%2F%2FrayDir%3A%20for%20orthographic%20projections%20moving%20in%20Z%20direction%20(no%20need%20for%20normal%20matrix)%5Cn%5Ctfloat%20ambient%20%3D%200.6%3B%5Cn%5Ctfloat%20diffuse%20%3D%200.6%3B%5Cn%5Ctfloat%20specular%20%3D%200.2%3B%5Cn%5Ctfloat%20shininess%20%3D%2010.0%3B%5Cn%5Ctvec3%20lightPosition%20%3D%20vec3(0.0%2C%2010.0%2C%20-2.0)%3B%5Cn%5Ctvec3%20l%20%3D%20normalize(lightPosition)%3B%5Cn%5Ctfloat%20lightNormDot%20%3D%20dot(n%2C%20l)%3B%5Cn%5Ctvec3%20a%20%3D%20vClr.rgb%20*%20ambient%20*%20curv%3B%5Cn%5Ctvec3%20d%20%3D%20max(lightNormDot%2C%200.0)%20*%20vClr.rgb%20*%20diffuse%3B%5Cn%5Ctfloat%20s%20%3D%20specular%20*%20pow(max(dot(reflect(l%2C%20n)%2C%20r)%2C%200.0)%2C%20shininess)%3B%5Cn%5Ctcolor%20%3D%20vec4(a%20%2B%20d%20%2B%20s%2C%20opacity)%3B%5Cn%7D%22%7D%2C%7BName%3A%22Edge%22%2CFrag%3A%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctvec3%20r%20%3D%20vec3(0.0%2C%200.0%2C%201.0)%3B%20%2F%2FrayDir%3A%20for%20orthographic%20projections%20moving%20in%20Z%20direction%20(no%20need%20for%20normal%20matrix)%5Cn%5Ctfloat%20diffuse%20%3D%201.0%3B%5Cn%5Ctfloat%20specular%20%3D%200.2%3B%5Cn%5Ctfloat%20shininess%20%3D%2010.0%3B%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ctvec3%20lightPosition%20%3D%20vec3(0.0%2C%200.0%2C%20-5.0)%3B%5Cn%5Ctvec3%20l%20%3D%20normalize(lightPosition)%3B%5Cn%5Ctfloat%20lightNormDot%20%3D%20max(dot(n%2C%20l)%2C%200.0)%3B%5Cn%5Ctvec3%20d%20%3D%20lightNormDot%20*%20vClr.rgb%20*%20diffuse%3B%5Cn%5Ctfloat%20s%20%3D%20specular%20*%20pow(max(dot(reflect(l%2C%20n)%2C%20r)%2C%200.0)%2C%20shininess)%3B%5Cn%5Ctcolor%20%3D%20vec4(d%20%2B%20s%2C%20opacity)%3B%5Cn%7D%22%7D%2C%7BName%3A%22Diffuse%22%2CFrag%3A%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctfloat%20diffuse%20%3D%201.4%3B%5Cn%5Ctvec3%20l%20%3D%20vec3(0.0%2C%200.0%2C%20-1.0)%3B%5Cn%5Ctfloat%20lightNormDot%20%3D%20max(dot(normalize(vN)%2C%20l)%2C%200.0)%3B%5Cn%5Ctcolor%20%3D%20vec4(lightNormDot%20*%20vClr.rgb%20*%20diffuse%2C%20opacity)%3B%5Cn%7D%22%7D%2C%7BName%3A%22Outline%22%2CFrag%3A%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctvec3%20r%20%3D%20vec3(0.0%2C%200.0%2C%201.0)%3B%20%2F%2FrayDir%3A%20for%20orthographic%20projections%20moving%20in%20Z%20direction%20(no%20need%20for%20normal%20matrix)%5Cn%5Ctfloat%20ambient%20%3D%200.3%3B%5Cn%5Ctfloat%20diffuse%20%3D%200.6%3B%5Cn%5Ctfloat%20specular%20%3D%200.25%3B%5Cn%5Ctfloat%20shininess%20%3D%2010.0%3B%5Cn%5Ctfloat%20PenWidth%20%3D%200.6%3B%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ctvec3%20lightPosition%20%3D%20vec3(0.0%2C%2010.0%2C%20-5.0)%3B%5Cn%5Ctvec3%20l%20%3D%20normalize(lightPosition)%3B%5Cn%5Ctfloat%20lightNormDot%20%3D%20dot(n%2C%20l)%3B%5Cn%5Ctfloat%20view%20%3D%20abs(dot(n%2Cr))%3B%20%2F%2Fwith%20respect%20to%20viewer%5Cn%5Ctif%20(PenWidth%20%3C%20view)%20discard%3B%5Cn%5Ctvec3%20a%20%3D%20vClr.rgb%20*%20ambient%3B%5Cn%5Ctvec3%20d%20%3D%20max(lightNormDot%2C%200.0)%20*%20vClr.rgb%20*%20diffuse%3B%5Cn%5Ctfloat%20s%20%3D%20specular%20*%20pow(max(dot(reflect(l%2C%20n)%2C%20r)%2C%200.0)%2C%20shininess)%3B%5Cn%5Ctcolor.rgb%20%3D%20a%20%2B%20d%20%2B%20s%3B%5Cn%5Ctcolor.a%20%3D%20opacity%3B%5Cn%7D%22%7D%2C%7BName%3A%22Specular%22%2CFrag%3A%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctfloat%20specularRGB%20%3D%200.7%3B%5Cn%5Ctfloat%20specularWhite%20%3D%200.3%3B%5Cn%5Ctfloat%20shininess%20%3D%2010.0%3B%5Cn%5Ctfloat%20diffuse%20%3D%201.0%3B%5Cn%5Ctvec3%20r%20%3D%20vec3(0.0%2C%200.0%2C%201.0)%3B%20%2F%2FrayDir%3A%20for%20orthographic%20projections%20moving%20in%20Z%20direction%20(no%20need%20for%20normal%20matrix)%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ctvec3%20l%20%3D%20vec3(0.0%2C%200.0%2C%20-1.0)%3B%5Cn%5Ctfloat%20lightNormDot%20%3D%20max(dot(n%2C%20l)%2C%200.0)%3B%5Cn%5Ctvec3%20d3%20%3D%20lightNormDot%20*%20vClr.rgb%20*%20diffuse%3B%5Cn%5Ctfloat%20s%20%3D%20pow(max(dot(reflect(l%2C%20n)%2C%20r)%2C%200.0)%2C%20shininess)%3B%5Cn%5Ctvec3%20s3%20%3D%20specularRGB%20*%20s%20*%20vClr.rgb%3B%5Cn%5Cts%20*%3D%20specularWhite%3B%5Cn%5Ctcolor%20%3D%20vec4(d3%20%2B%20s3%20%2B%20s%2C%20opacity)%3B%5Cn%7D%22%7D%2C%7BName%3A%22Toon%22%2CFrag%3A%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnout%20vec4%20color%3B%5Cnfloat%20stepmix(float%20edge0%2C%20float%20edge1%2C%20float%20E%2C%20float%20x)%7B%5Cn%5Ctfloat%20T%20%3D%20clamp(0.5%20*%20(x%20-%20edge0%20%2B%20E)%20%2F%20E%2C%200.0%2C%201.0)%3B%5Cn%5Ctreturn%20mix(edge0%2C%20edge1%2C%20T)%3B%5Cn%7D%5Cnvoid%20main()%20%7B%5Cn%5Ctvec3%20r%20%3D%20vec3(0.0%2C%200.0%2C%201.0)%3B%5Cn%5Ctfloat%20ambient%20%3D%200.3%3B%5Cn%5Ctfloat%20diffuse%20%3D%200.6%3B%5Cn%5Ctfloat%20specular%20%3D%200.5%3B%5Cn%5Ctfloat%20shininess%20%3D%2050.0%3B%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ctvec3%20lightPosition%20%3D%20vec3(0.0%2C%2010.0%2C%20-5.0)%3B%5Cn%5Ctvec3%20l%20%3D%20normalize(lightPosition)%3B%5Cn%5Ctfloat%20df%20%3D%20max(0.0%2C%20dot(n%2C%20l))%3B%5Cn%5Ctfloat%20sf%20%3D%20pow(max(dot(reflect(l%2C%20n)%2C%20r)%2C%200.0)%2C%20shininess)%3B%5Cn%5Ctconst%20float%20A%20%3D%200.1%3B%5Cn%5Ctconst%20float%20B%20%3D%200.3%3B%5Cn%5Ctconst%20float%20C%20%3D%200.6%3B%5Cn%5Ctconst%20float%20D%20%3D%201.0%3B%5Cn%5Ctfloat%20E%20%3D%20fwidth(df)%3B%5Cn%5Ctif%20(df%20%3E%20A%20-%20E%20%26%26%20df%20%3C%20A%20%2B%20E)%20df%20%3D%20stepmix(A%2C%20B%2C%20E%2C%20df)%3B%5Cn%5Ctelse%20if%20(df%20%3E%20B%20-%20E%20%26%26%20df%20%3C%20B%20%2B%20E)%20df%20%3D%20stepmix(B%2C%20C%2C%20E%2C%20df)%3B%5Cn%5Ctelse%20if%20(df%20%3E%20C%20-%20E%20%26%26%20df%20%3C%20C%20%2B%20E)%20df%20%3D%20stepmix(C%2C%20D%2C%20E%2C%20df)%3B%5Cn%5Ctelse%20if%20(df%20%3C%20A)%20df%20%3D%200.0%3B%5Cn%5Ctelse%20if%20(df%20%3C%20B)%20df%20%3D%20B%3B%5Cn%5Ctelse%20if%20(df%20%3C%20C)%20df%20%3D%20C%3B%5Cn%5Ctelse%20df%20%3D%20D%3B%5Cn%5CtE%20%3D%20fwidth(sf)%3B%5Cn%5Ctif%20(sf%20%3E%200.5%20-%20E%20%26%26%20sf%20%3C%200.5%20%2B%20E)%5Cn%5Ct%5Ctsf%20%3D%20smoothstep(0.5%20-%20E%2C%200.5%20%2B%20E%2C%20sf)%3B%5Cn%5Ctelse%5Cn%5Ct%5Ctsf%20%3D%20step(0.5%2C%20sf)%3B%5Cn%5Ctvec3%20a%20%3D%20vClr.rgb%20*%20ambient%3B%5Cn%5Ctvec3%20d%20%3D%20max(df%2C%200.0)%20*%20vClr.rgb%20*%20diffuse%3B%5Cn%5Ctcolor.rgb%20%3D%20a%20%2B%20d%20%2B%20(specular%20*%20sf)%3B%5Cn%5Ctcolor.a%20%3D%20opacity%3B%5Cn%7D%22%7D%2C%7BName%3A%22Flat%22%2CFrag%3AB%7D%2C%7BName%3A%22Matcap%22%2CFrag%3A%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnin%20vec4%20vClr%3B%5Cnin%20vec3%20vN%3B%5Cnuniform%20sampler2D%20matCap%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctvec3%20n%20%3D%20normalize(vN)%3B%5Cn%5Ctvec2%20uv%20%3D%20n.xy%20*%200.5%20%2B%200.5%3B%5Cn%5Ctuv.y%20%3D%201.0%20-%20uv.y%3B%5Cn%5Ctvec3%20clr%20%3D%20texture(matCap%2Cuv.xy).rgb%20*%20vClr.rgb%3B%5Cn%5Ctcolor%20%3D%20vec4(clr%2C%20opacity)%3B%5Cn%7D%22%7D%5D)%2Ce(this%2C%22dragModes%22%2C%7Bcontrast%3A1%2Cmeasurement%3A2%2Cnone%3A0%2Cpan%3A3%2Cslicer3D%3A4%2CcallbackOnly%3A5%7D)%2Ce(this%2C%22sliceTypeAxial%22%2C0)%2Ce(this%2C%22sliceTypeCoronal%22%2C1)%2Ce(this%2C%22sliceTypeSagittal%22%2C2)%2Ce(this%2C%22sliceTypeMultiplanar%22%2C3)%2Ce(this%2C%22sliceTypeRender%22%2C4)%2Ce(this%2C%22onDragRelease%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onMouseUp%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onLocationChange%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onIntensityChange%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onClickToSegment%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onImageLoaded%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onMeshLoaded%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onFrameChange%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onError%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onColormapChange%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onInfo%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onWarn%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onDebug%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onVolumeAddedFromUrl%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onVolumeWithUrlRemoved%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onVolumeUpdated%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onMeshAddedFromUrl%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onMeshAdded%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onMeshWithUrlRemoved%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onZoom3DChange%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onAzimuthElevationChange%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onClipPlaneChange%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onCustomMeshShaderAdded%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onMeshShaderChanged%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onMeshPropertyChanged%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22onDocumentLoaded%22%2C(()%3D%3E%7B%7D))%2Ce(this%2C%22document%22%2Cnew%20ni)%2Ce(this%2C%22mediaUrlMap%22%2Cnew%20Map)%2Ce(this%2C%22initialized%22%2C!1)%2Ce(this%2C%22currentDrawUndoBitmap%22)%2Ce(this%2C%22loadingText%22)%3Bfor(const%20e%20in%20t)%22function%22%3D%3Dtypeof%20t%5Be%5D%3Fthis%5Be%5D%3Dt%5Be%5D%3Athis.opts%5Be%5D%3Dvoid%200%3D%3D%3Dii%5Be%5D%3Fii%5Be%5D%3At%5Be%5D%3Bthis.opts.isHighResolutionCapable%3Fthis.uiData.dpr%3Dwindow.devicePixelRatio%7C%7C1%3Athis.uiData.dpr%3D1%2Cthis.currentDrawUndoBitmap%3Dthis.opts.maxDrawUndoBitmaps%2Cthis.opts.drawingEnabled%26%26this.createEmptyDrawing()%2Cthis.opts.thumbnail.length%3E0%26%26(this.thumbnailVisible%3D!0)%2Cthis.loadingText%3Dthis.opts.loadingText%2Cl.setLogLevel(this.opts.logLevel)%7Dget%20scene()%7Breturn%20this.document.scene%7Dget%20opts()%7Breturn%20this.document.opts%7Dget%20sliceMosaicString()%7Breturn%20this.document.opts.sliceMosaicString%7C%7C%22%22%7Dset%20sliceMosaicString(t)%7Bthis.document.opts.sliceMosaicString%3Dt%7Dget%20volumes()%7Breturn%20this.document.volumes%7Dset%20volumes(t)%7Bthis.document.volumes%3Dt%7Dget%20meshes()%7Breturn%20this.document.meshes%7Dset%20meshes(t)%7Bthis.document.meshes%3Dt%7Dget%20drawBitmap()%7Breturn%20this.document.drawBitmap%7Dset%20drawBitmap(t)%7Bthis.document.drawBitmap%3Dt%7Dget%20volScaleMultiplier()%7Breturn%20this.scene.volScaleMultiplier%7Dset%20volScaleMultiplier(t)%7Bthis.setScale(t)%7Dasync%20saveScene(t%3D%22niivue.png%22)%7Bconst%20e%3Dthis.canvas%3Bif(!e)throw%20new%20Error(%22canvas%20not%20defined%22)%3Bthis.drawScene()%2Ce.toBlob((e%3D%3E%7Be%26%26(%22%22%3D%3D%3Dt%26%26(t%3D(t%3D%60niivue-screenshot-%24%7B(new%20Date).toString()%7D.png%60).replace(%2F%5Cs%2Fg%2C%22_%22))%2Cfunction(t%2Ce)%7Bconst%20i%3Ddocument.createElement(%22a%22)%3Bdocument.body.appendChild(i)%2Ci.style.display%3D%22none%22%3Bconst%20s%3Dwindow.URL.createObjectURL(t)%3Bi.href%3Ds%2Ci.download%3De%2Ci.click()%2Ci.remove()%7D(e%2Ct))%7D))%7Dasync%20attachTo(t%2Ce%3Dnull)%7Breturn%20await%20this.attachToCanvas(document.getElementById(t)%2Ce)%2Cl.debug(%22attached%20to%20element%20with%20id%3A%20%22%2Ct)%2Cthis%7Dasync%20attachToCanvas(t%2Ce%3Dnull)%7Breturn%20this.canvas%3Dt%2Cnull%3D%3D%3De%26%26(e%3Dnavigator.hardwareConcurrency%3E6%2Cl.debug(%22AntiAlias%20%22%2Ce%2C%22%20Threads%20%22%2Cnavigator.hardwareConcurrency))%2Cthis.gl%3Dthis.canvas.getContext(%22webgl2%22%2C%7Balpha%3A!0%2Cantialias%3Ae%7D)%2Cl.info(%22NIIVUE%20VERSION%20%22%2Ca)%2Cthis.canvas.parentElement.style.backgroundColor%3D%22black%22%2Cthis.opts.isResizeCanvas%26%26(this.canvas.style.width%3D%22100%25%22%2Cthis.canvas.style.height%3D%22100%25%22%2Cthis.canvas.style.display%3D%22block%22%2Cthis.canvas.width%3Dthis.canvas.offsetWidth%2Cthis.canvas.height%3Dthis.canvas.offsetHeight%2Cwindow.addEventListener(%22resize%22%2Cthis.resizeListener.bind(this))%2Cthis.resizeObserver%3Dnew%20ResizeObserver(this.resizeListener.bind(this))%2Cthis.resizeObserver.observe(this.canvas.parentElement))%2Cthis.registerInteractions()%2Cawait%20this.init()%2Cthis.drawScene()%2Cthis%7DsyncWith(t%2Ce%3D%7B%222d%22%3A!0%2C%223d%22%3A!0%7D)%7Bt%20instanceof%20Array%7C%7C(t%3D%5Bt%5D)%2Cthis.otherNV%3Dt%2Cthis.syncOpts%3D%7B...e%7D%7DbroadcastTo(t%2Ce%3D%7B%222d%22%3A!0%2C%223d%22%3A!0%7D)%7Bt%20instanceof%20Array%7C%7C(t%3D%5Bt%5D)%2Cthis.otherNV%3Dt%2Cthis.syncOpts%3De%7DdoSync3d(t)%7Bt.scene.renderAzimuth%3Dthis.scene.renderAzimuth%2Ct.scene.renderElevation%3Dthis.scene.renderElevation%2Ct.scene.volScaleMultiplier%3Dthis.scene.volScaleMultiplier%7DdoSync2d(t)%7Bconst%20e%3Dthis.frac2mm(this.scene.crosshairPos)%3Bt.scene.crosshairPos%3Dt.mm2frac(e)%2Ct.scene.pan2Dxyzmm%3Dr.clone(this.scene.pan2Dxyzmm)%7DdoSyncGamma(t)%7Bconst%20e%3Dthis.scene.gamma%3Be!%3D%3Dt.scene.gamma%26%26t.setGamma(e)%7DdoSyncZoomPan(t)%7Bt.scene.pan2Dxyzmm%3Dr.clone(this.scene.pan2Dxyzmm)%7DdoSyncCrosshair(t)%7Bconst%20e%3Dthis.frac2mm(this.scene.crosshairPos)%3Bt.scene.crosshairPos%3Dt.mm2frac(e)%7DdoSyncCalMin(t)%7Bthis.volumes%5B0%5D.cal_min!%3D%3Dt.volumes%5B0%5D.cal_min%26%26(t.volumes%5B0%5D.cal_min%3Dthis.volumes%5B0%5D.cal_min%2Ct.updateGLVolume())%7DdoSyncCalMax(t)%7Bthis.volumes%5B0%5D.cal_max!%3D%3Dt.volumes%5B0%5D.cal_max%26%26(t.volumes%5B0%5D.cal_max%3Dthis.volumes%5B0%5D.cal_max%2Ct.updateGLVolume())%7DdoSyncSliceType(t)%7Bt.setSliceType(this.opts.sliceType)%7DdoSyncClipPlane(t)%7Bt.setClipPlane(this.scene.clipPlaneDepthAziElev)%7Dsync()%7Bif(this.gl%26%26this.otherNV%26%26void%200!%3D%3Dthis.otherNV%26%26this.gl.canvas.matches(%22%3Afocus%22))for(let%20t%3D0%3Bt%3Cthis.otherNV.length%3Bt%2B%2B)this.otherNV%5Bt%5D!%3D%3Dthis%26%26(this.syncOpts.gamma%26%26this.doSyncGamma(this.otherNV%5Bt%5D)%2Cthis.syncOpts.crosshair%26%26this.doSyncCrosshair(this.otherNV%5Bt%5D)%2Cthis.syncOpts.zoomPan%26%26this.doSyncZoomPan(this.otherNV%5Bt%5D)%2Cthis.syncOpts.sliceType%26%26this.doSyncSliceType(this.otherNV%5Bt%5D)%2Cthis.syncOpts.cal_min%26%26this.doSyncCalMin(this.otherNV%5Bt%5D)%2Cthis.syncOpts.cal_max%26%26this.doSyncCalMax(this.otherNV%5Bt%5D)%2Cthis.syncOpts.clipPlane%26%26this.doSyncClipPlane(this.otherNV%5Bt%5D)%2Cthis.syncOpts%5B%222d%22%5D%26%26this.doSync2d(this.otherNV%5Bt%5D)%2Cthis.syncOpts%5B%223d%22%5D%26%26this.doSync3d(this.otherNV%5Bt%5D)%2Cthis.otherNV%5Bt%5D.drawScene()%2Cthis.otherNV%5Bt%5D.createOnLocationChange())%7DarrayEquals(t%2Ce)%7Breturn%20Array.isArray(t)%26%26Array.isArray(e)%26%26t.length%3D%3D%3De.length%26%26t.every(((t%2Ci)%3D%3Et%3D%3D%3De%5Bi%5D))%7DresizeListener()%7Bif(this.canvas%26%26this.gl)%7Bif(!this.opts.isResizeCanvas)return%20this.opts.isHighResolutionCapable%26%26(l.warn(%22isHighResolutionCapable%20requires%20isResizeCanvas%22)%2Cthis.opts.isHighResolutionCapable%3D!1)%2Cthis.uiData.dpr%3D1%2Cvoid%20this.drawScene()%3Bthis.canvas.style.width%3D%22100%25%22%2Cthis.canvas.style.height%3D%22100%25%22%2Cthis.canvas.style.display%3D%22block%22%2Cthis.opts.isHighResolutionCapable%3F(this.uiData.dpr%3Dwindow.devicePixelRatio%7C%7C1%2Cl.debug(%22devicePixelRatio%3A%20%22%2Bthis.uiData.dpr))%3Athis.uiData.dpr%3D1%2C%22width%22in%20this.canvas.parentElement%3F(this.canvas.width%3Dthis.canvas.parentElement.width*this.uiData.dpr%2Cthis.canvas.height%3Dthis.canvas.parentElement.height*this.uiData.dpr)%3A(this.canvas.width%3Dthis.canvas.offsetWidth*this.uiData.dpr%2Cthis.canvas.height%3Dthis.canvas.offsetHeight*this.uiData.dpr)%2Cthis.gl.viewport(0%2C0%2Cthis.gl.canvas.width%2Cthis.gl.canvas.height)%2Cthis.drawScene()%7D%7DgetRelativeMousePosition(t%2Ce)%7Bif(!(e%3De%7C%7Ct.target))return%3Bconst%20i%3De.getBoundingClientRect()%3Breturn%7Bx%3At.clientX-i.left%2Cy%3At.clientY-i.top%7D%7DgetNoPaddingNoBorderCanvasRelativeMousePosition(t%2Ce)%7Be%3De%7C%7Ct.target%3Breturn%20this.getRelativeMousePosition(t%2Ce)%7DmouseContextMenuListener(t)%7Bt.preventDefault()%7DmouseDownListener(t)%7Bt.preventDefault()%2Cthis.drawPenLocation%3D%5BNaN%2CNaN%2CNaN%5D%2Cthis.drawPenAxCorSag%3D-1%2Cthis.uiData.mousedown%3D!0%2Cthis.setDragStart(0%2C0)%2Cthis.setDragEnd(0%2C0)%2Cl.debug(%22mouse%20down%22)%2Cl.debug(t)%3Bconst%20e%3Dthis.getNoPaddingNoBorderCanvasRelativeMousePosition(t%2Cthis.gl.canvas)%3Bif(!e)return%3Bconst%5Bi%2Cs%5D%3D%5Be.x*this.uiData.dpr%2Ce.y*this.uiData.dpr%5D%3Bthis.opts.clickToSegment%26%26(this.clickToSegmentXY%3D%5Bi%2Cs%5D)%3Bconst%20n%3Dthis.getLabelAtPoint(%5Bi%2Cs%5D)%3Bif(n)%7Bif(n.onClick)return%20void%20n.onClick(n)%3Bfor(const%20t%20of%20this.meshes)if(%22connectome%22%3D%3D%3Dt.type)for(const%20e%20of%20t.nodes)e.label%3D%3D%3Dn%26%26(this.scene.crosshairPos%3Dthis.mm2frac(%5Be.x%2Ce.y%2Ce.z%5D)%2Cthis.updateGLVolume()%2Cthis.drawScene())%7Dthis.uiData.clickedTile%3Dthis.tileIndex(i%2Cs)%2C0%3D%3D%3Dt.button%26%26t.shiftKey%3F(this.uiData.mouseButtonCenterDown%3D!0%2Cthis.mouseCenterButtonHandler(t))%3A0%3D%3D%3Dt.button%3F(this.uiData.mouseButtonLeftDown%3D!0%2Cthis.mouseLeftButtonHandler(t))%3A2%3D%3D%3Dt.button%3F(this.uiData.mouseButtonRightDown%3D!0%2Cthis.mouseRightButtonHandler(t))%3A1%3D%3D%3Dt.button%26%26(this.uiData.mouseButtonCenterDown%3D!0%2Cthis.mouseCenterButtonHandler(t))%7DmouseLeftButtonHandler(t)%7Bconst%20e%3Dthis.getNoPaddingNoBorderCanvasRelativeMousePosition(t%2Cthis.gl.canvas)%3Bthis.mouseDown(e.x%2Ce.y)%2Cthis.mouseClick(e.x%2Ce.y)%7DmouseCenterButtonHandler(t)%7Bconst%20e%3Dthis.getNoPaddingNoBorderCanvasRelativeMousePosition(t%2Cthis.gl.canvas)%3Bthis.mousePos%3D%5Be.x*this.uiData.dpr%2Ce.y*this.uiData.dpr%5D%2C0!%3D%3Dthis.opts.dragMode%26%26(this.setDragStart(e.x%2Ce.y)%2Cthis.uiData.isDragging%7C%7C(this.uiData.pan2DxyzmmAtMouseDown%3Dr.clone(this.scene.pan2Dxyzmm))%2Cthis.uiData.isDragging%3D!0%2Cthis.uiData.dragClipPlaneStartDepthAziElev%3Dthis.scene.clipPlaneDepthAziElev)%7DmouseRightButtonHandler(t)%7Bconst%20e%3Dthis.getNoPaddingNoBorderCanvasRelativeMousePosition(t%2Cthis.gl.canvas)%3Bthis.mousePos%3D%5Be.x*this.uiData.dpr%2Ce.y*this.uiData.dpr%5D%2C0!%3D%3Dthis.opts.dragMode%26%26(this.setDragStart(e.x%2Ce.y)%2Cthis.uiData.isDragging%7C%7C(this.uiData.pan2DxyzmmAtMouseDown%3Dr.clone(this.scene.pan2Dxyzmm))%2Cthis.uiData.isDragging%3D!0%2Cthis.uiData.dragClipPlaneStartDepthAziElev%3Dthis.scene.clipPlaneDepthAziElev)%7DcalculateMinMaxVoxIdx(t)%7Bif(t.length%3E2)throw%20new%20Error(%22array%20must%20not%20contain%20more%20than%20two%20values%22)%3Breturn%5BMath.floor(Math.min(t%5B0%5D%2Ct%5B1%5D))%2CMath.floor(Math.max(t%5B0%5D%2Ct%5B1%5D))%5D%7DcalculateNewRange(%7BvolIdx%3At%3D0%7D%3D%7B%7D)%7Bif(4%3D%3D%3Dthis.opts.sliceType%26%26this.sliceMosaicString.length%3C1)return%3Bif(this.uiData.dragStart%5B0%5D%3D%3D%3Dthis.uiData.dragEnd%5B0%5D%26%26this.uiData.dragStart%5B1%5D%3D%3D%3Dthis.uiData.dragEnd%5B1%5D)return%3Blet%20e%3Dthis.canvasPos2frac(%5Bthis.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D%5D)%3Bif(e%5B0%5D%3C0)return%3Bconst%20i%3Dthis.frac2vox(e%2Ct)%3Bif(e%3Dthis.canvasPos2frac(%5Bthis.uiData.dragEnd%5B0%5D%2Cthis.uiData.dragEnd%5B1%5D%5D)%2Ce%5B0%5D%3C0)return%3Bconst%20s%3Dthis.frac2vox(e%2Ct)%3Blet%20n%3D-Number.MAX_VALUE%2Cr%3DNumber.MAX_VALUE%3Bconst%20a%3Dthis.calculateMinMaxVoxIdx(%5Bi%5B0%5D%2Cs%5B0%5D%5D)%2Co%3Dthis.calculateMinMaxVoxIdx(%5Bi%5B1%5D%2Cs%5B1%5D%5D)%2Cl%3Dthis.calculateMinMaxVoxIdx(%5Bi%5B2%5D%2Cs%5B2%5D%5D)%3Bi%5B0%5D-s%5B0%5D%3D%3D0%3Fa%5B1%5D%3Di%5B0%5D%2B1%3Ai%5B1%5D-s%5B1%5D%3D%3D0%3Fo%5B1%5D%3Di%5B1%5D%2B1%3Ai%5B2%5D-s%5B2%5D%3D%3D0%26%26(l%5B1%5D%3Di%5B2%5D%2B1)%3Bconst%20h%3Dthis.volumes%5Bt%5D.hdr%2Cc%3Dthis.volumes%5Bt%5D.img%3Bif(!h%7C%7C!c)return%3Bconst%20d%3Dh.dims%5B1%5D%2Cm%3Dh.dims%5B2%5D%3Bfor(let%20t%3Dl%5B0%5D%3Bt%3Cl%5B1%5D%3Bt%2B%2B)%7Bconst%20e%3Dt*d*m%3Bfor(let%20t%3Do%5B0%5D%3Bt%3Co%5B1%5D%3Bt%2B%2B)%7Bconst%20i%3Dt*d%3Bfor(let%20t%3Da%5B0%5D%3Bt%3Ca%5B1%5D%3Bt%2B%2B)%7Bconst%20s%3De%2Bi%2Bt%3Br%3Ec%5Bs%5D%26%26(r%3Dc%5Bs%5D)%2Cn%3Cc%5Bs%5D%26%26(n%3Dc%5Bs%5D)%7D%7D%7Dif(r%3E%3Dn)return%3Bconst%20u%3DMi(h%2Cr)%2CA%3DMi(h%2Cn)%3Bthis.volumes%5Bt%5D.cal_min%3Du%2Cthis.volumes%5Bt%5D.cal_max%3DA%2Cthis.onIntensityChange(this.volumes%5Bt%5D)%7DgenerateMouseUpCallback(t%2Ce)%7Bconst%20i%3Dthis.tileIndex(this.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D)%2Cs%3Dthis.tileIndex(this.uiData.dragEnd%5B0%5D%2Cthis.uiData.dragEnd%5B1%5D)%3Blet%20r%3D-1%3Bi%3D%3D%3Ds%26%26(r%3Ds)%3Blet%20a%3D-1%3Br%3E%3D0%26%26(a%3Dthis.screenSlices%5Br%5D.axCorSag)%3Bconst%20o%3Dthis.frac2mm(t)%2Cl%3Dthis.frac2mm(e)%2Ch%3Dn.create()%3Bn.sub(h%2Cn.fromValues(o%5B0%5D%2Co%5B1%5D%2Co%5B2%5D)%2Cn.fromValues(l%5B0%5D%2Cl%5B1%5D%2Cl%5B2%5D))%3Bconst%20c%3Dn.len(h)%2Cd%3Dthis.frac2vox(t)%2Cm%3Dthis.frac2vox(e)%3Bthis.onDragRelease(%7BfracStart%3At%2CfracEnd%3Ae%2CvoxStart%3Ad%2CvoxEnd%3Am%2CmmStart%3Ao%2CmmEnd%3Al%2CmmLength%3Ac%2CtileIdx%3Ar%2CaxCorSag%3Aa%7D)%7DmouseUpListener()%7Bconst%20t%3D%7BmouseButtonRightDown%3Athis.uiData.mouseButtonRightDown%2CmouseButtonCenterDown%3Athis.uiData.mouseButtonCenterDown%2CisDragging%3Athis.uiData.isDragging%2CmousePos%3Athis.mousePos%2CfracPos%3Athis.canvasPos2frac(this.mousePos)%7D%3Bthis.uiData.mousedown%3D!1%2Cthis.uiData.mouseButtonRightDown%3D!1%3Bconst%20e%3Dthis.uiData.mouseButtonCenterDown%3Bif(this.uiData.mouseButtonCenterDown%3D!1%2Cthis.uiData.mouseButtonLeftDown%3D!1%2Cthis.drawPenFillPts.length%3E0)this.drawPenFilled()%3Belse%20if(this.drawPenAxCorSag%3E%3D0%26%26this.opts.clickToSegment)%7Bconst%20t%3Dthis.sumBitmap(this.drawBitmap)%3Bthis.sumBitmap(this.clickToSegmentGrowingBitmap)%3Et%26%26this.updateBitmapFromClickToSegment()%7Dvar%20i%3Bif(this.drawAddUndoBitmap()%2Cthis.drawPenLocation%3D%5BNaN%2CNaN%2CNaN%5D%2Cthis.drawPenAxCorSag%3D-1%2Ci%3Dthis.onMouseUp%2CObject.prototype.toString.call(i).indexOf(%22Function%22)%3E-1%26%26this.onMouseUp(t)%2Cthis.uiData.isDragging)%7Bthis.uiData.isDragging%3D!1%2C5%3D%3D%3Dthis.opts.dragMode%26%26this.drawScene()%3Bconst%20t%3Dthis.canvasPos2frac(%5Bthis.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D%5D)%2Ci%3Dthis.canvasPos2frac(%5Bthis.uiData.dragEnd%5B0%5D%2Cthis.uiData.dragEnd%5B1%5D%5D)%3Bif(this.generateMouseUpCallback(t%2Ci)%2C6%3D%3D%3Dthis.opts.dragMode)return%3Bif(1!%3D%3Dthis.opts.dragMode)return%3Bif(e)return%3Bif(this.uiData.dragStart%5B0%5D%3D%3D%3Dthis.uiData.dragEnd%5B0%5D%26%26this.uiData.dragStart%5B1%5D%3D%3D%3Dthis.uiData.dragEnd%5B1%5D)return%3Bthis.calculateNewRange(%7BvolIdx%3A0%7D)%2Cthis.refreshLayers(this.volumes%5B0%5D%2C0)%7Dthis.drawScene()%7DcheckMultitouch(t)%7Bif(this.uiData.touchdown%26%26!this.uiData.multiTouchGesture)%7Bconst%20e%3Dthis.canvas.getBoundingClientRect()%3Bthis.mouseDown(t.touches%5B0%5D.clientX-e.left%2Ct.touches%5B0%5D.clientY-e.top)%2Cthis.mouseClick(t.touches%5B0%5D.clientX-e.left%2Ct.touches%5B0%5D.clientY-e.top)%7D%7DtouchStartListener(t)%7Bt.preventDefault()%2Cthis.uiData.touchTimer%7C%7C(this.uiData.touchTimer%3DsetTimeout((()%3D%3E%7Bthis.resetBriCon(t)%7D)%2Cthis.opts.longTouchTimeout))%2Cthis.uiData.touchdown%3D!0%2Cthis.uiData.currentTouchTime%3D(new%20Date).getTime()%3Bconst%20e%3Dthis.uiData.currentTouchTime-this.uiData.lastTouchTime%3Bif(e%3Cthis.opts.doubleTouchTimeout%26%26e%3E0)return%20this.uiData.doubleTouch%3D!0%2Cthis.setDragStart(t.targetTouches%5B0%5D.clientX-t.target.getBoundingClientRect().left%2Ct.targetTouches%5B0%5D.clientY-t.target.getBoundingClientRect().top)%2Cthis.resetBriCon(t)%2Cvoid(this.uiData.lastTouchTime%3Dthis.uiData.currentTouchTime)%3Bthis.uiData.doubleTouch%3D!1%2Cthis.setDragStart(0%2C0)%2Cthis.setDragEnd(0%2C0)%2Cthis.uiData.lastTouchTime%3Dthis.uiData.currentTouchTime%2Cthis.uiData.touchdown%26%26t.touches.length%3C2%3Fthis.uiData.multiTouchGesture%3D!1%3Athis.uiData.multiTouchGesture%3D!0%2CsetTimeout(this.checkMultitouch.bind(this)%2C1%2Ct)%7DtouchEndListener(t)%7Bif(t.preventDefault()%2Cthis.uiData.touchdown%3D!1%2Cthis.uiData.lastTwoTouchDistance%3D0%2Cthis.uiData.multiTouchGesture%3D!1%2Cthis.uiData.touchTimer%26%26(clearTimeout(this.uiData.touchTimer)%2Cthis.uiData.touchTimer%3Dnull)%2Cthis.uiData.isDragging)%7Bthis.uiData.isDragging%3D!1%2C1%3D%3D%3Dthis.opts.dragMode%26%26(this.calculateNewRange()%2Cthis.refreshLayers(this.volumes%5B0%5D%2C0))%3Bconst%20t%3Dthis.canvasPos2frac(%5Bthis.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D%5D)%2Ce%3Dthis.canvasPos2frac(%5Bthis.uiData.dragEnd%5B0%5D%2Cthis.uiData.dragEnd%5B1%5D%5D)%3Bthis.generateMouseUpCallback(t%2Ce)%7Dthis.mouseUpListener()%7DmouseMoveListener(t)%7Bif(this.uiData.mousedown)%7Bconst%20e%3Dthis.getNoPaddingNoBorderCanvasRelativeMousePosition(t%2Cthis.gl.canvas)%3Bif(!e)return%3Bconst%20i%3De.x*this.uiData.dpr%2Cs%3De.y*this.uiData.dpr%3Bif(this.tileIndex(i%2Cs)!%3D%3Dthis.uiData.clickedTile)return%3Bthis.uiData.mouseButtonLeftDown%3F(this.mouseMove(e.x%2Ce.y)%2Cthis.mouseClick(e.x%2Ce.y))%3A(this.uiData.mouseButtonRightDown%7C%7Cthis.uiData.mouseButtonCenterDown)%26%26this.setDragEnd(e.x%2Ce.y)%2Cthis.drawScene()%2Cthis.uiData.prevX%3Dthis.uiData.currX%2Cthis.uiData.prevY%3Dthis.uiData.currY%7Delse%20if(!this.uiData.mousedown%26%26this.opts.clickToSegment)%7Bconst%20e%3Dthis.getNoPaddingNoBorderCanvasRelativeMousePosition(t%2Cthis.gl.canvas)%3Bif(!e)return%3Bconst%20i%3De.x*this.uiData.dpr%2Cs%3De.y*this.uiData.dpr%3Bthis.mousePos%3D%5Bi%2Cs%5D%2Cthis.drawScene()%7D%7DresetBriCon(t%3Dnull)%7Bif(this.uiData.isDragging)return%3Blet%20e%3D!1%3B4%3D%3D%3Dthis.opts.sliceType%26%26(e%3D!0)%3Blet%20i%3D0%2Cs%3D0%3Bif(null!%3D%3Dt%26%26(%22targetTouches%22in%20t%3F(i%3Dt.targetTouches%5B0%5D.clientX-t.target.getBoundingClientRect().left%2Cs%3Dt.targetTouches%5B0%5D.clientY-t.target.getBoundingClientRect().top)%3A(i%3Dt.offsetX%2Cs%3Dt.offsetY)%2Ci*%3Dthis.uiData.dpr%2Cs*%3Dthis.uiData.dpr%2Cthis.inRenderTile(i%2Cs)%3E%3D0%26%26(e%3D!0))%2Ce)return%20this.uiData.mouseDepthPicker%3D!0%2Cthis.drawScene()%2Cvoid%20this.drawScene()%3B4!%3D%3Dthis.opts.dragMode%26%26(this.volumes.length%3C1%7C%7Cthis.uiData.doubleTouch%7C%7C(this.volumes%5B0%5D.cal_min%3Dthis.volumes%5B0%5D.robust_min%2Cthis.volumes%5B0%5D.cal_max%3Dthis.volumes%5B0%5D.robust_max%2Cthis.onIntensityChange(this.volumes%5B0%5D)%2Cthis.refreshLayers(this.volumes%5B0%5D%2C0)%2Cthis.drawScene()))%7DsetDragStart(t%2Ce)%7Bt*%3Dthis.uiData.dpr%2Ce*%3Dthis.uiData.dpr%2Cthis.uiData.dragStart%5B0%5D%3Dt%2Cthis.uiData.dragStart%5B1%5D%3De%7DsetDragEnd(t%2Ce)%7Bt*%3Dthis.uiData.dpr%2Ce*%3Dthis.uiData.dpr%2Cthis.uiData.dragEnd%5B0%5D%3Dt%2Cthis.uiData.dragEnd%5B1%5D%3De%7DtouchMoveListener(t)%7Bif(this.uiData.touchdown%26%26t.touches.length%3C2)%7Bconst%20e%3Dthis.canvas.getBoundingClientRect()%3Bif(this.uiData.isDragging%7C%7C(this.uiData.pan2DxyzmmAtMouseDown%3Dr.clone(this.scene.pan2Dxyzmm))%2Cthis.uiData.isDragging%3D!0%2Cthis.uiData.doubleTouch%26%26this.uiData.isDragging)return%20this.setDragEnd(t.targetTouches%5B0%5D.clientX-t.target.getBoundingClientRect().left%2Ct.targetTouches%5B0%5D.clientY-t.target.getBoundingClientRect().top)%2Cvoid%20this.drawScene()%3Bthis.mouseClick(t.touches%5B0%5D.clientX-e.left%2Ct.touches%5B0%5D.clientY-e.top)%2Cthis.mouseMove(t.touches%5B0%5D.clientX-e.left%2Ct.touches%5B0%5D.clientY-e.top)%7Delse%20this.handlePinchZoom(t)%7DhandlePinchZoom(t)%7Bif(2%3D%3D%3Dt.targetTouches.length%26%262%3D%3D%3Dt.changedTouches.length)%7Bconst%20e%3DMath.hypot(t.touches%5B0%5D.pageX-t.touches%5B1%5D.pageX%2Ct.touches%5B0%5D.pageY-t.touches%5B1%5D.pageY)%2Ci%3Dthis.canvas.getBoundingClientRect()%3Bthis.mousePos%3D%5Bt.touches%5B0%5D.clientX-i.left%2Ct.touches%5B0%5D.clientY-i.top%5D%2Ce%3Cthis.uiData.lastTwoTouchDistance%3Fthis.sliceScroll2D(-.01%2Ct.touches%5B0%5D.clientX-i.left%2Ct.touches%5B0%5D.clientY-i.top)%3Athis.sliceScroll2D(.01%2Ct.touches%5B0%5D.clientX-i.left%2Ct.touches%5B0%5D.clientY-i.top)%2Cthis.uiData.lastTwoTouchDistance%3De%7D%7DkeyUpListener(t)%7Bif(t.code%3D%3D%3Dthis.opts.clipPlaneHotKey)%7Bconst%20t%3D(new%20Date).getTime()%3Bif(t-this.lastCalled%3Ethis.opts.keyDebounceTime)%7Bswitch(this.currentClipPlaneIndex%3D(this.currentClipPlaneIndex%2B1)%257%2Cthis.currentClipPlaneIndex)%7Bcase%200%3Athis.scene.clipPlaneDepthAziElev%3D%5B2%2C0%2C0%5D%3Bbreak%3Bcase%201%3Athis.scene.clipPlaneDepthAziElev%3D%5B0%2C270%2C0%5D%3Bbreak%3Bcase%202%3Athis.scene.clipPlaneDepthAziElev%3D%5B0%2C90%2C0%5D%3Bbreak%3Bcase%203%3Athis.scene.clipPlaneDepthAziElev%3D%5B0%2C0%2C0%5D%3Bbreak%3Bcase%204%3Athis.scene.clipPlaneDepthAziElev%3D%5B0%2C180%2C0%5D%3Bbreak%3Bcase%205%3Athis.scene.clipPlaneDepthAziElev%3D%5B0%2C0%2C-90%5D%3Bbreak%3Bcase%206%3Athis.scene.clipPlaneDepthAziElev%3D%5B0%2C0%2C90%5D%7Dthis.setClipPlane(this.scene.clipPlaneDepthAziElev)%7Dthis.lastCalled%3Dt%7Delse%20if(t.code%3D%3D%3Dthis.opts.viewModeHotKey)%7Bconst%20t%3D(new%20Date).getTime()%3Bt-this.lastCalled%3Ethis.opts.keyDebounceTime%26%26(this.setSliceType((this.opts.sliceType%2B1)%255)%2Cthis.lastCalled%3Dt)%7D%7DkeyDownListener(t)%7B%22KeyH%22%3D%3D%3Dt.code%26%264%3D%3D%3Dthis.opts.sliceType%3Fthis.setRenderAzimuthElevation(this.scene.renderAzimuth-1%2Cthis.scene.renderElevation)%3A%22KeyL%22%3D%3D%3Dt.code%26%264%3D%3D%3Dthis.opts.sliceType%3Fthis.setRenderAzimuthElevation(this.scene.renderAzimuth%2B1%2Cthis.scene.renderElevation)%3A%22KeyJ%22%3D%3D%3Dt.code%26%264%3D%3D%3Dthis.opts.sliceType%3Fthis.setRenderAzimuthElevation(this.scene.renderAzimuth%2Cthis.scene.renderElevation%2B1)%3A%22KeyK%22%3D%3D%3Dt.code%26%264%3D%3D%3Dthis.opts.sliceType%3Fthis.setRenderAzimuthElevation(this.scene.renderAzimuth%2Cthis.scene.renderElevation-1)%3A%22KeyH%22%3D%3D%3Dt.code%26%264!%3D%3Dthis.opts.sliceType%3Fthis.moveCrosshairInVox(-1%2C0%2C0)%3A%22KeyL%22%3D%3D%3Dt.code%26%264!%3D%3Dthis.opts.sliceType%3Fthis.moveCrosshairInVox(1%2C0%2C0)%3A%22KeyU%22%3D%3D%3Dt.code%26%264!%3D%3Dthis.opts.sliceType%26%26t.ctrlKey%3Fthis.moveCrosshairInVox(0%2C0%2C1)%3A%22KeyD%22%3D%3D%3Dt.code%26%264!%3D%3Dthis.opts.sliceType%26%26t.ctrlKey%3Fthis.moveCrosshairInVox(0%2C0%2C-1)%3A%22KeyJ%22%3D%3D%3Dt.code%26%264!%3D%3Dthis.opts.sliceType%3Fthis.moveCrosshairInVox(0%2C-1%2C0)%3A%22KeyK%22%3D%3D%3Dt.code%26%264!%3D%3Dthis.opts.sliceType%3Fthis.moveCrosshairInVox(0%2C1%2C0)%3A%22KeyM%22%3D%3D%3Dt.code%26%264!%3D%3Dthis.opts.sliceType%3F(this.opts.dragMode%2B%2B%2Cthis.opts.dragMode%3E%3D4%26%26(this.opts.dragMode%3D0)%2Cl.info(%22drag%20mode%20changed%20to%20%22%2Cei%5Bthis.opts.dragMode%5D))%3A%22ArrowLeft%22%3D%3D%3Dt.code%3Fthis.setFrame4D(this.volumes%5B0%5D.id%2Cthis.volumes%5B0%5D.frame4D-1)%3A%22ArrowRight%22%3D%3D%3Dt.code%3Fthis.setFrame4D(this.volumes%5B0%5D.id%2Cthis.volumes%5B0%5D.frame4D%2B1)%3A%22Slash%22%3D%3D%3Dt.code%26%26t.shiftKey%26%26alert(%60NIIVUE%20VERSION%3A%20%24%7Ba%7D%60)%7DwheelListener(t)%7Bif(t.preventDefault()%2Ct.stopPropagation()%2Cthis.thumbnailVisible)return%3Bconst%20e%3Dthis.uiData.dragStart.reduce(((t%2Ce)%3D%3Et%2Be)%2C0)%2Ci%3Dthis.uiData.dragEnd.reduce(((t%2Ce)%3D%3Et%2Be)%2C0)%2Cs%3De%3E0%26%26i%3E0%3Bif(6%3D%3D%3Dthis.opts.dragMode%26%26s)%7Bconst%20e%3Dt.deltaY%3E0%3F1%3A-1%3Bthis.uiData.dragStart%5B0%5D%3Cthis.uiData.dragEnd%5B0%5D%3F(this.uiData.dragStart%5B0%5D-%3De%2Cthis.uiData.dragEnd%5B0%5D%2B%3De)%3A(this.uiData.dragStart%5B0%5D%2B%3De%2Cthis.uiData.dragEnd%5B0%5D-%3De)%2Cthis.uiData.dragStart%5B1%5D%3Cthis.uiData.dragEnd%5B1%5D%3F(this.uiData.dragStart%5B1%5D-%3De%2Cthis.uiData.dragEnd%5B1%5D%2B%3De)%3A(this.uiData.dragStart%5B1%5D%2B%3De%2Cthis.uiData.dragEnd%5B1%5D-%3De)%2Cthis.uiData.isDragging%3D!0%2Cthis.drawScene()%2Cthis.uiData.isDragging%3D!1%3Bconst%20i%3Dthis.tileIndex(this.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D)%3Breturn%20void%20this.generateMouseUpCallback(this.screenXY2TextureFrac(this.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D%2Ci)%2Cthis.screenXY2TextureFrac(this.uiData.dragEnd%5B0%5D%2Cthis.uiData.dragEnd%5B1%5D%2Ci))%7Dconst%20n%3Dthis.canvas.getBoundingClientRect()%3Bt.deltaY%3C0%3Fthis.sliceScroll2D(-.01%2Ct.clientX-n.left%2Ct.clientY-n.top)%3Athis.sliceScroll2D(.01%2Ct.clientX-n.left%2Ct.clientY-n.top)%7DregisterInteractions()%7Bif(!this.canvas)throw%20new%20Error(%22canvas%20undefined%22)%3Bthis.canvas.addEventListener(%22mousedown%22%2Cthis.mouseDownListener.bind(this))%2Cthis.canvas.addEventListener(%22mouseup%22%2Cthis.mouseUpListener.bind(this))%2Cthis.canvas.addEventListener(%22mousemove%22%2Cthis.mouseMoveListener.bind(this))%2Cthis.canvas.addEventListener(%22touchstart%22%2Cthis.touchStartListener.bind(this))%2Cthis.canvas.addEventListener(%22touchend%22%2Cthis.touchEndListener.bind(this))%2Cthis.canvas.addEventListener(%22touchmove%22%2Cthis.touchMoveListener.bind(this))%2Cthis.canvas.addEventListener(%22wheel%22%2Cthis.wheelListener.bind(this))%2Cthis.canvas.addEventListener(%22contextmenu%22%2Cthis.mouseContextMenuListener.bind(this))%2Cthis.canvas.addEventListener(%22dblclick%22%2Cthis.resetBriCon.bind(this))%2Cthis.canvas.addEventListener(%22dragenter%22%2Cthis.dragEnterListener.bind(this)%2C!1)%2Cthis.canvas.addEventListener(%22dragover%22%2Cthis.dragOverListener.bind(this)%2C!1)%2Cthis.canvas.addEventListener(%22drop%22%2Cthis.dropListener.bind(this)%2C!1)%2Cthis.canvas.setAttribute(%22tabindex%22%2C%220%22)%2Cthis.canvas.addEventListener(%22keyup%22%2Cthis.keyUpListener.bind(this)%2C!1)%2Cthis.canvas.addEventListener(%22keydown%22%2Cthis.keyDownListener.bind(this)%2C!1)%7DdragEnterListener(t)%7Bt.stopPropagation()%2Ct.preventDefault()%7DdragOverListener(t)%7Bt.stopPropagation()%2Ct.preventDefault()%7DgetFileExt(t%2Ce%3D!0)%7Bl.debug(%22fullname%3A%20%22%2Ct)%3Bconst%20i%3D%2F(%3F%3A%5C.(%5B%5E.%5D%2B))%3F%24%2F%3Blet%20s%3Di.exec(t)%5B1%5D%3Breturn%20s%3Ds.toUpperCase()%2C%22GZ%22%3D%3D%3Ds%26%26(s%3Di.exec(t.slice(0%2C-3))%5B1%5D%2Cs%3Ds.toUpperCase())%2Ce%3Fs%3As.toLowerCase()%7Dasync%20addVolumeFromUrl(t)%7Bconst%20e%3Dawait%20Je.loadFromUrl(t)%3Breturn%20this.document.addImageOptions(e%2Ct)%2Ce.onColormapChange%3Dthis.onColormapChange%2Cthis.mediaUrlMap.set(e%2Ct.url)%2Cthis.onVolumeAddedFromUrl%26%26this.onVolumeAddedFromUrl(t%2Ce)%2Cthis.addVolume(e)%2Ce%7Dasync%20addVolumesFromUrl(t)%7Bconst%20e%3Dt.map((async%20t%3D%3E%7Bconst%20e%3D%7Burl%3At.url%2Cheaders%3At.headers%2Cname%3At.name%2Ccolormap%3At.colormap%3Ft.colormap%3At.colorMap%2CcolormapNegative%3At.colormapNegative%3Ft.colormapNegative%3At.colorMapNegative%2Copacity%3At.opacity%2CurlImgData%3At.urlImgData%2Ccal_min%3At.cal_min%2Ccal_max%3At.cal_max%2CtrustCalMinMax%3Athis.opts.trustCalMinMax%2CisManifest%3At.isManifest%2Cframe4D%3At.frame4D%2ClimitFrames4D%3At.limitFrames4D%7C%7Cthis.opts.limitFrames4D%2CcolorbarVisible%3At.colorbarVisible%7D%2Ci%3Dawait%20Je.loadFromUrl(e)%3Breturn%20this.document.addImageOptions(i%2Ce)%2Ci.onColormapChange%3Dthis.onColormapChange%2Cthis.mediaUrlMap.set(i%2Ce.url)%2Cthis.onVolumeAddedFromUrl%26%26this.onVolumeAddedFromUrl(e%2Ci)%2Ci%7D))%2Ci%3Dawait%20Promise.all(e)%3Bfor(let%20t%3D0%3Bt%3Ci.length%3Bt%2B%2B)this.addVolume(i%5Bt%5D)%3Breturn%20i%7DgetMediaByUrl(t)%7Breturn%5B...this.mediaUrlMap.entries()%5D.filter((e%3D%3Ee%5B1%5D%3D%3D%3Dt)).map((t%3D%3Et%5B0%5D)).pop()%7DremoveVolumeByUrl(t)%7Bconst%20e%3Dthis.getMediaByUrl(t)%3Bif(!e)throw%20new%20Error(%22No%20volume%20with%20URL%20present%22)%3Bthis.removeVolume(e)%7DreadDirectory(t)%7Bconst%20e%3Dt.createReader()%3Blet%20i%3D%5B%5D%3Bconst%20s%3D()%3D%3E%7Be.readEntries((e%3D%3E%7Be.length%3F(i%3Di.concat(e)%2Cs())%3A(async%20t%3D%3E%7Bconst%20e%3D%5B%5D%2Ci%3Dasync%20t%3D%3Enew%20Promise(((e%2Ci)%3D%3Et.file(e%2Ci)))%3Bfor(let%20s%3D0%3Bs%3Ct.length%3Bs%2B%2B)e.push(await%20i(t%5Bs%5D))%3Breturn%20e%7D)(i).then((e%3D%3E%7BJe.loadFromFile(%7Bfile%3Ae%2Cname%3At.name%2CurlImgData%3Anull%2CimageType%3Aze.DCM_FOLDER%7D).then((t%3D%3E%7Bthis.addVolume(t)%2Cthis.setDrawingEnabled(!0)%7D)).catch((t%3D%3E%7Bthrow%20t%7D))%7D)).catch((t%3D%3E%7Bthrow%20t%7D))%7D))%7D%3Breturn%20s()%2Ci%7DisMeshExt(t)%7Bconst%20e%3Dthis.getFileExt(t)%3Breturn%20l.debug(%22dropped%20ext%22)%2Cl.debug(e)%2CEi.includes(e)%7Dasync%20loadFromArrayBuffer(t%2Ce)%7Bconst%20i%3Dthis.getFileExt(e)%3Bif(Ei.includes(i))return%20void%20await%20this.addMeshFromUrl(%7Burl%3Ae%2Cbuffer%3At%7D)%3Bconst%20s%3Dqe(e)%3Bs.buffer%3Dt%2Cs.name%3De%2Cawait%20this.addVolumeFromUrl(s)%7Dasync%20loadFromFile(t)%7Bconst%20e%3Dthis.getFileExt(t.name)%3BEi.includes(e)%3Fawait%20Fe.loadFromFile(%7Bfile%3At%2Cgl%3Athis.gl%2Cname%3At.name%7D).then((t%3D%3E%7Bthis.addMesh(t)%7D))%3Aawait%20Je.loadFromFile(%7Bfile%3At%2Cname%3At.name%7D).then((t%3D%3E%7Bthis.addVolume(t)%7D))%7DdropListener(t)%7Bif(t.stopPropagation()%2Ct.preventDefault()%2C!this.opts.dragAndDropEnabled)return%3Bconst%20e%3D%5B%5D%2Ci%3Dt.dataTransfer%3Bif(!i)return%3Bconst%20s%3Di.getData(%22text%2Furi-list%22)%3Bif(s)%7Be.push(s)%3Bconst%20t%3Dqe(s)%2Ci%3Dthis.getFileExt(s)%3Bl.debug(%22dropped%20ext%22)%2Cl.debug(i)%2CEi.includes(i)%3Fthis.addMeshFromUrl(%7Burl%3As%7D).catch((t%3D%3E%7Bthrow%20t%7D))%3A%22NVD%22%3D%3D%3Di%3Fthis.loadDocumentFromUrl(s).catch((t%3D%3E%7Bthrow%20t%7D))%3Athis.addVolumeFromUrl(t).catch((t%3D%3E%7Bthrow%20t%7D))%7Delse%7Bconst%20e%3Di.items%3Bif(e.length%3E0)%7Bt.shiftKey%7C%7Ct.altKey%7C%7C(this.volumes%3D%5B%5D%2Cthis.overlays%3D%5B%5D%2Cthis.meshes%3D%5B%5D)%2Cthis.closeDrawing()%3Bfor(const%20i%20of%20Array.from(e))%7Bconst%20s%3Di.webkitGetAsEntry()%3Bif(l.debug(s)%2C!s)throw%20new%20Error(%22could%20not%20get%20entry%20from%20file%22)%3Bif(s.isFile)%7Bconst%20i%3Dthis.getFileExt(s.name)%3Bif(%22PNG%22%3D%3D%3Di)%7Bs.file((t%3D%3E%7Bthis.loadBmpTexture(t).catch((t%3D%3E%7Bthrow%20t%7D))%7D))%3Bcontinue%7Dlet%20n%3Bif(-1!%3D%3Ds.name.lastIndexOf(%22HEAD%22))for(const%20t%20of%20Array.from(e))%7Bconst%20e%3Dt.webkitGetAsEntry()%3Bif(!e)throw%20new%20Error(%22could%20not%20get%20paired%20entry%22)%3Bs.name.substring(0%2Cs.name.lastIndexOf(%22HEAD%22))%3D%3D%3De.name.substring(0%2Ce.name.lastIndexOf(%22BRIK%22))%26%26(n%3De)%7Dif(-1!%3D%3Ds.name.lastIndexOf(%22BRIK%22))continue%3Bif(Ei.includes(i))%7Bs.file((t%3D%3E%7BFe.loadFromFile(%7Bfile%3At%2Cgl%3Athis.gl%2Cname%3At.name%7D).then((t%3D%3E%7Bthis.addMesh(t)%7D)).catch((t%3D%3E%7Bthrow%20t%7D))%7D))%3Bcontinue%7Dif(%22NVD%22%3D%3D%3Di)%7Bs.file((t%3D%3E%7Bni.loadFromFile(t).then((t%3D%3E%7Bthis.loadDocument(t)%2Cl.debug(%22loaded%20document%22)%7D)).catch((t%3D%3E%7Bthrow%20t%7D))%7D))%3Bbreak%7Ds.file((e%3D%3E%7Bn%3Fn.file((t%3D%3E%7BJe.loadFromFile(%7Bfile%3Ae%2CurlImgData%3At%2ClimitFrames4D%3Athis.opts.limitFrames4D%7D).then((t%3D%3E%7Bthis.addVolume(t)%7D)).catch((t%3D%3E%7Bthrow%20t%7D))%7D))%3AJe.loadFromFile(%7Bfile%3Ae%2CurlImgData%3An%2ClimitFrames4D%3Athis.opts.limitFrames4D%7D).then((e%3D%3E%7Bt.altKey%3F(l.debug(%22alt%20key%20detected%3A%20assuming%20this%20is%20a%20drawing%20overlay%22)%2Cthis.drawClearAllUndoBitmaps()%2Cthis.loadDrawing(e))%3Athis.addVolume(e)%7D)).catch((t%3D%3E%7Bthrow%20t%7D))%7D))%7Delse%20s.isDirectory%26%26this.readDirectory(s)%7D%7D%7Dthis.drawScene()%7DsetMultiplanarPadPixels(t)%7Bthis.opts.multiplanarPadPixels%3Dt%2Cthis.drawScene()%7DsetMultiplanarLayout(t)%7B%22string%22%3D%3Dtypeof%20t%26%26(t%3DparseInt(t))%2Cthis.opts.multiplanarLayout%3Dt%2Cthis.drawScene()%7DsetCornerOrientationText(t)%7Bthis.opts.isCornerOrientationText%3Dt%2Cthis.updateGLVolume()%7DsetRadiologicalConvention(t)%7Bthis.opts.isRadiologicalConvention%3Dt%2Cthis.updateGLVolume()%7DsetDefaults(t%3D%7B%7D%2Ce%3D!1)%7Bthis.document.opts%3D%7B...ii%7D%2Cthis.scene.sceneData%3D%7B...si%7D%3Bfor(const%20e%20in%20t)%22function%22%3D%3Dtypeof%20t%5Be%5D%3Fthis%5Be%5D%3Dt%5Be%5D%3Athis.opts%5Be%5D%3Dvoid%200%3D%3D%3Dii%5Be%5D%3Fii%5Be%5D%3At%5Be%5D%3Bif(this.scene.pan2Dxyzmm%3D%5B0%2C0%2C0%2C1%5D%2Ce%26%26this.volumes%26%26this.volumes.length%3E0)for(let%20t%3D0%3Bt%3Cthis.volumes.length%3Bt%2B%2B)this.volumes%5Bt%5D.cal_min%3Dthis.volumes%5Bt%5D.robust_min%2Cthis.volumes%5Bt%5D.cal_max%3Dthis.volumes%5Bt%5D.robust_max%3Bthis.updateGLVolume()%7DsetMeshThicknessOn2D(t)%7Bthis.opts.meshThicknessOn2D%3Dt%2Cthis.updateGLVolume()%7DsetSliceMosaicString(t)%7Bthis.sliceMosaicString%3Dt%2Cthis.updateGLVolume()%7DsetSliceMM(t)%7Bthis.opts.isSliceMM%3Dt%2Cthis.updateGLVolume()%7DsetAdditiveBlend(t)%7Bthis.opts.isAdditiveBlend%3Dt%2Cthis.updateGLVolume()%7DgetRadiologicalConvention()%7Breturn%20this.opts.isRadiologicalConvention%7DsetHighResolutionCapable(t)%7Bthis.opts.isHighResolutionCapable%3Dt%2Ct%26%26!this.opts.isResizeCanvas%26%26(l.warn(%22isHighResolutionCapable%20requires%20isResizeCanvas%22)%2Cthis.opts.isHighResolutionCapable%3D!1)%2Cthis.opts.isHighResolutionCapable%7C%7C(this.uiData.dpr%3D1)%2Cthis.resizeListener()%2Cthis.drawScene()%7DaddVolume(t)%7Bthis.volumes.push(t)%3Bconst%20e%3D1%3D%3D%3Dthis.volumes.length%3F0%3Athis.volumes.length-1%3Bthis.setVolume(t%2Ce)%2Cthis.onImageLoaded(t)%2Cl.debug(%22loaded%20volume%22%2Ct.name)%2Cl.debug(t)%7DaddMesh(t)%7Bthis.meshes.push(t)%3Bconst%20e%3D1%3D%3D%3Dthis.meshes.length%3F0%3Athis.meshes.length-1%3Bthis.setMesh(t%2Ce)%2Cthis.onMeshLoaded(t)%7DgetVolumeIndexByID(t)%7Bconst%20e%3Dthis.volumes.length%3Bfor(let%20i%3D0%3Bi%3Ce%3Bi%2B%2B)%7Bif(this.volumes%5Bi%5D.id%3D%3D%3Dt)return%20i%7Dreturn-1%7DdrawAddUndoBitmap()%7B!this.drawBitmap%7C%7Cthis.drawBitmap.length%3C1%3Fl.debug(%22drawAddUndoBitmap%20error%3A%20No%20drawing%20open%22)%3A(this.currentDrawUndoBitmap%2B%2B%2Cthis.currentDrawUndoBitmap%3E%3Dthis.opts.maxDrawUndoBitmaps%26%26(this.currentDrawUndoBitmap%3D0)%2Cthis.drawUndoBitmaps%5Bthis.currentDrawUndoBitmap%5D%3Dfunction(t)%7Bconst%20e%3Dt.length%3Blet%20i%3D0%3Bconst%20s%3Dnew%20Uint8Array(e%2BMath.ceil(.01*e))%2Cn%3Dnew%20Int8Array(s.buffer)%3Blet%20r%3D0%3Bfor(%3Bi%3Ce%3B)%7Blet%20a%3Dt%5Bi%5D%3Bi%2B%2B%3Blet%20o%3D1%3Bfor(%3Bo%3C129%26%26i%3Ce%26%26t%5Bi%5D%3D%3D%3Da%3B)i%2B%2B%2Co%2B%2B%3Bif(o%3E1)n%5Br%5D%3D1-o%2Cr%2B%2B%2Cs%5Br%5D%3Da%2Cr%2B%2B%3Belse%7Bfor(%3Bi%3Ce%26%26!(o%3E127)%26%26!(i%2B2%3Ce%26%26a!%3D%3Dt%5Bi%5D%26%26t%5Bi%2B2%5D%3D%3D%3Dt%5Bi%5D%26%26t%5Bi%2B1%5D%3D%3D%3Dt%5Bi%5D)%3B)a%3Dt%5Bi%5D%2Ci%2B%2B%2Co%2B%2B%3Bs%5Br%5D%3Do-1%2Cr%2B%2B%3Bfor(let%20e%3D0%3Be%3Co%3Be%2B%2B)s%5Br%5D%3Dt%5Bi-o%2Be%5D%2Cr%2B%2B%7D%7Dreturn%20l.info(%22PackBits%20%22%2Be%2B%22%20-%3E%20%22%2Br%2B%22%20bytes%20(x%22%2Be%2Fr%2B%22)%22)%2Cs.slice(0%2Cr)%7D(this.drawBitmap))%7DdrawClearAllUndoBitmaps()%7Bif(this.currentDrawUndoBitmap%3Dthis.opts.maxDrawUndoBitmaps%2Cthis.drawUndoBitmaps%26%26!(this.drawUndoBitmaps.length%3C1))for(let%20t%3Dthis.drawUndoBitmaps.length-1%3Bt%3E%3D0%3Bt--)this.drawUndoBitmaps%5Bt%5D%3Dnew%20Uint8Array%7DdrawUndo()%7Bthis.drawUndoBitmaps.length%3C1%3Fl.debug(%22undo%20bitmaps%20not%20loaded%22)%3A(this.currentDrawUndoBitmap--%2Cthis.currentDrawUndoBitmap%3C0%26%26(this.currentDrawUndoBitmap%3Dthis.drawUndoBitmaps.length-1)%2Cthis.currentDrawUndoBitmap%3E%3Dthis.drawUndoBitmaps.length%26%26(this.currentDrawUndoBitmap%3D0)%2Cthis.drawUndoBitmaps%5Bthis.currentDrawUndoBitmap%5D.length%3C2%3Fl.debug(%22drawUndo%20is%20misbehaving%22)%3A(this.drawBitmap%3DIi(this.drawUndoBitmaps%5Bthis.currentDrawUndoBitmap%5D%2Cthis.drawBitmap.length)%2Cthis.refreshDrawing(!0)))%7DloadDrawing(t)%7Bif(this.drawBitmap%26%26l.debug(%22Overwriting%20open%20drawing!%22)%2C!this.back)throw%20new%20Error(%22back%20undefined%22)%3Bthis.drawClearAllUndoBitmaps()%3Bconst%20e%3Dt.hdr.dims%3Bif(e%5B1%5D!%3D%3Dthis.back.hdr.dims%5B1%5D%7C%7Ce%5B2%5D!%3D%3Dthis.back.hdr.dims%5B2%5D%7C%7Ce%5B3%5D!%3D%3Dthis.back.hdr.dims%5B3%5D)return%20l.debug(%22drawing%20dimensions%20do%20not%20match%20background%20image%22)%2C!1%3Bt.img.constructor!%3D%3DUint8Array%26%26l.debug(%22Drawings%20should%20be%20UINT8%22)%3Bconst%20i%3Dt.permRAS%2Cs%3De%5B1%5D*e%5B2%5D*e%5B3%5D%3Bthis.drawBitmap%3Dnew%20Uint8Array(s)%2Cthis.drawTexture%3Dthis.r8Tex(this.drawTexture%2CNi%2Cthis.back.dims%2C!0)%3Bconst%20n%3D%5B0%2C0%2C0%5D%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)for(let%20e%3D0%3Be%3C3%3Be%2B%2B)Math.abs(i%5Bt%5D)-1%3D%3D%3De%26%26(n%5Be%5D%3Dt*Math.sign(i%5Bt%5D))%3Blet%20r%3D1%3Bconst%20a%3D%5B1%2C1%2C1%5D%2Co%3D%5B!1%2C!1%2C!1%5D%3Bfor(let%20t%3D0%3Bt%3Cn.length%3Bt%2B%2B)for(let%20i%3D0%3Bi%3Cn.length%3Bi%2B%2B)%7BMath.abs(n%5Bi%5D)%3D%3D%3Dt%26%26(a%5Bi%5D%3Dr%2C(n%5Bi%5D%3C0%7C%7CObject.is(n%5Bi%5D%2C-0))%26%26(o%5Bi%5D%3D!0)%2Cr*%3De%5Bi%2B1%5D)%7Dlet%20h%3Dbe.range(0%2Ce%5B1%5D-1%2C1)%3Bo%5B0%5D%26%26(h%3Dbe.range(e%5B1%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ce%5B1%5D%3Bt%2B%2B)h%5Bt%5D*%3Da%5B0%5D%3Blet%20c%3Dbe.range(0%2Ce%5B2%5D-1%2C1)%3Bo%5B1%5D%26%26(c%3Dbe.range(e%5B2%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ce%5B2%5D%3Bt%2B%2B)c%5Bt%5D*%3Da%5B1%5D%3Blet%20d%3Dbe.range(0%2Ce%5B3%5D-1%2C1)%3Bo%5B2%5D%26%26(d%3Dbe.range(e%5B3%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ce%5B3%5D%3Bt%2B%2B)d%5Bt%5D*%3Da%5B2%5D%3Bconst%20m%3Dt.img%2Cu%3Dthis.drawBitmap%3Blet%20A%3D0%3Bfor(let%20t%3D0%3Bt%3Ce%5B3%5D%3Bt%2B%2B)for(let%20i%3D0%3Bi%3Ce%5B2%5D%3Bi%2B%2B)for(let%20s%3D0%3Bs%3Ce%5B1%5D%3Bs%2B%2B)u%5Bh%5Bs%5D%2Bc%5Bi%5D%2Bd%5Bt%5D%5D%3Dm%5BA%5D%2CA%2B%2B%3Breturn%20this.drawAddUndoBitmap()%2Cthis.refreshDrawing(!1)%2Cthis.drawScene()%2C!0%7Dbinarize(t)%7Bconst%20e%3Dt.hdr.dims%2Ci%3De%5B1%5D*e%5B2%5D*e%5B3%5D%2Cs%3Dnew%20Uint8Array(i)%3Bfor(let%20e%3D0%3Be%3Ci%3Be%2B%2B)0!%3D%3Dt.img%5Be%5D%26%26(s%5Be%5D%3D1)%3Bt.img%3Ds%2Ct.hdr.datatypeCode%3D2%2Ct.hdr.cal_min%3D0%2Ct.hdr.cal_max%3D1%7Dasync%20loadDrawingFromUrl(t%2Ce%3D!1)%7Bthis.drawBitmap%26%26l.debug(%22Overwriting%20open%20drawing!%22)%2Cthis.drawClearAllUndoBitmaps()%3Blet%20i%3D!1%3Btry%7Bconst%20s%3Dawait%20Je.loadFromUrl(qe(t))%3Be%26%26await%20this.binarize(s)%2Ci%3Dthis.loadDrawing(s)%7Dcatch(e)%7Bl.error(%22loadDrawingFromUrl()%20failed%20to%20load%20%22%2Bt)%2Cthis.drawClearAllUndoBitmaps()%7Dreturn%20i%7DfindOtsu(t%3D2)%7Bif(this.volumes.length%3C1)return%5B%5D%3Bconst%20e%3Dthis.volumes%5B0%5D.img%2Ci%3De.length%3Bif(i%3C1)return%5B%5D%3Bconst%20s%3D256%2Cn%3Dnew%20Array(s).fill(0)%2Cr%3Dthis.volumes%5B0%5D.cal_min%2Ca%3Dthis.volumes%5B0%5D.cal_max%3Bif(a%3C%3Dr)return%5B%5D%3Bconst%20o%3D(a-r)%2Fs%3Bfunction%20l(t)%7Breturn%20t*o%2Br%7Dconst%20h%3D255%2FMath.abs(a-r)%2Cc%3Dthis.volumes%5B0%5D.hdr.scl_inter%2Cd%3Dthis.volumes%5B0%5D.hdr.scl_slope%3Bfor(let%20t%3D0%3Bt%3Ci%3Bt%2B%2B)%7Blet%20i%3De%5Bt%5D*d%2Bc%3Bi%3DMath.min(Math.max(i%2Cr)%2Ca)%2Ci%3DMath.round((i-r)*h)%2Cn%5Bi%5D%2B%2B%7Dconst%20m%3DArray(s).fill(0).map((()%3D%3EArray(s).fill(0)))%2Cu%3DArray(s).fill(0).map((()%3D%3EArray(s).fill(0)))%3Bfor(let%20t%3D1%3Bt%3Cs%3B%2B%2Bt)m%5Bt%5D%5Bt%5D%3Dn%5Bt%5D%2Cu%5Bt%5D%5Bt%5D%3Dt*n%5Bt%5D%3Bfor(let%20t%3D1%3Bt%3C255%3B%2B%2Bt)m%5B1%5D%5Bt%2B1%5D%3Dm%5B1%5D%5Bt%5D%2Bn%5Bt%2B1%5D%2Cu%5B1%5D%5Bt%2B1%5D%3Du%5B1%5D%5Bt%5D%2B(t%2B1)*n%5Bt%2B1%5D%3Bfor(let%20t%3D2%3Bt%3Cs%3Bt%2B%2B)for(let%20e%3Dt%2B1%3Be%3Cs%3Be%2B%2B)m%5Bt%5D%5Be%5D%3Dm%5B1%5D%5Be%5D-m%5B1%5D%5Bt-1%5D%2Cu%5Bt%5D%5Be%5D%3Du%5B1%5D%5Be%5D-u%5B1%5D%5Bt-1%5D%3Bfor(let%20t%3D1%3Bt%3Cs%3B%2B%2Bt)for(let%20e%3Dt%2B1%3Be%3Cs%3Be%2B%2B)0!%3D%3Dm%5Bt%5D%5Be%5D%26%26(m%5Bt%5D%5Be%5D%3Du%5Bt%5D%5Be%5D*u%5Bt%5D%5Be%5D%2Fm%5Bt%5D%5Be%5D)%3Blet%20A%3D0%3Bconst%20f%3D%5B1%2F0%2C1%2F0%2C1%2F0%5D%3Bif(t%3E3)for(let%20t%3D0%3Bt%3C253%3Bt%2B%2B)for(let%20e%3Dt%2B1%3Be%3C254%3Be%2B%2B)for(let%20i%3De%2B1%3Bi%3C255%3Bi%2B%2B)%7Bconst%20s%3Dm%5B0%5D%5Bt%5D%2Bm%5Bt%2B1%5D%5Be%5D%2Bm%5Be%2B1%5D%5Bi%5D%2Bm%5Bi%2B1%5D%5B255%5D%3Bs%3EA%26%26(f%5B0%5D%3Dt%2Cf%5B1%5D%3De%2Cf%5B2%5D%3Di%2CA%3Ds)%7Delse%20if(3%3D%3D%3Dt)for(let%20t%3D0%3Bt%3C254%3Bt%2B%2B)for(let%20e%3Dt%2B1%3Be%3C255%3Be%2B%2B)%7Bconst%20i%3Dm%5B0%5D%5Bt%5D%2Bm%5Bt%2B1%5D%5Be%5D%2Bm%5Be%2B1%5D%5B255%5D%3Bi%3EA%26%26(f%5B0%5D%3Dt%2Cf%5B1%5D%3De%2CA%3Di)%7Delse%20for(let%20t%3D0%3Bt%3C255%3Bt%2B%2B)%7Bconst%20e%3Dm%5B0%5D%5Bt%5D%2Bm%5Bt%2B1%5D%5B255%5D%3Be%3EA%26%26(f%5B0%5D%3Dt%2CA%3De)%7Dreturn%5Bl(f%5B0%5D)%2Cl(f%5B1%5D)%2Cl(f%5B2%5D)%5D%7DdrawOtsu(t%3D2)%7Bif(0%3D%3D%3Dthis.volumes.length)return%3Bconst%20e%3Dthis.volumes%5B0%5D.img.length%2Ci%3Dthis.findOtsu(t)%3Bif(i.length%3C3)return%3Bthis.drawBitmap%7C%7Cthis.createEmptyDrawing()%3Bconst%20s%3Dthis.drawBitmap%2Cn%3Dthis.volumes%5B0%5D.img%3Bfor(let%20t%3D0%3Bt%3Ce%3Bt%2B%2B)%7Bif(0!%3D%3Ds%5Bt%5D)continue%3Bconst%20e%3Dn%5Bt%5D%3Be%3Ei%5B0%5D%26%26(s%5Bt%5D%3D1)%2Ce%3Ei%5B1%5D%26%26(s%5Bt%5D%3D2)%2Ce%3Ei%5B2%5D%26%26(s%5Bt%5D%3D3)%7Dthis.drawAddUndoBitmap()%2Cthis.refreshDrawing(!0)%7DremoveHaze(t%3D5%2Ce%3D0)%7Bconst%20i%3Dthis.volumes%5Be%5D.img%2Cs%3Dthis.volumes%5Be%5D.hdr%2Cn%3Di.length%3Blet%20r%3D2%3B5!%3D%3Dt%26%261!%3D%3Dt%7C%7C(r%3D4)%2C4!%3D%3Dt%26%262!%3D%3Dt%7C%7C(r%3D3)%3Bconst%20a%3Dthis.findOtsu(r)%3Bif(a.length%3C3)return%3Blet%20o%3Da%5B0%5D%3B1%3D%3D%3Dt%26%26(o%3Da%5B2%5D)%2C2%3D%3D%3Dt%26%26(o%3Da%5B1%5D)%3Bconst%20l%3Ds.scl_inter%2Ch%3Ds.scl_slope%2Cc%3Dthis.volumes%5Be%5D.global_min%3Bfor(let%20t%3D0%3Bt%3Cn%3Bt%2B%2B)%7Bi%5Bt%5D*h%2Bl%3Co%26%26(i%5Bt%5D%3Dc)%7Dthis.refreshLayers(this.volumes%5Be%5D%2C0)%2Cthis.drawScene()%7DsaveImage(t%3DLi)%7Bconst%20e%3D%7B...Li%2C...t%7D%2C%7Bfilename%3Ai%2CisSaveDrawing%3As%2CvolumeByIndex%3An%7D%3De%3Bif(l.debug(%22saveImage%22%2Ci%2Cs%2Cn)%2Cvoid%200%3D%3D%3Dthis.back%3F.dims)return%20l.debug(%22No%20voxelwise%20image%20open%22)%2C!1%3Bif(s)%7Bif(!this.drawBitmap)return%20l.debug(%22No%20drawing%20open%22)%2C!1%3Bconst%20t%3Dthis.volumes%5B0%5D.permRAS%3Bif(1%3D%3D%3Dt%5B0%5D%26%262%3D%3D%3Dt%5B1%5D%26%263%3D%3D%3Dt%5B2%5D)%7Bl.debug(%22saving%20drawing%22)%3Breturn%20this.volumes%5B0%5D.saveToDisk(i%2Cthis.drawBitmap)%7D%7Bl.debug(%22saving%20drawing%22)%3Bconst%20e%3Dthis.volumes%5B0%5D.hdr.dims%2Cs%3D%5B0%2C0%2C0%5D%3Bfor(let%20e%3D0%3Be%3C3%3Be%2B%2B)for(let%20i%3D0%3Bi%3C3%3Bi%2B%2B)Math.abs(t%5Be%5D)-1%3D%3D%3Di%26%26(s%5Bi%5D%3De*Math.sign(t%5Be%5D))%3Blet%20n%3D1%3Bconst%20r%3D%5B1%2C1%2C1%5D%2Ca%3D%5B!1%2C!1%2C!1%5D%3Bfor(let%20t%3D0%3Bt%3Cs.length%3Bt%2B%2B)for(let%20i%3D0%3Bi%3Cs.length%3Bi%2B%2B)%7BMath.abs(s%5Bi%5D)%3D%3D%3Dt%26%26(r%5Bi%5D%3Dn%2C(s%5Bi%5D%3C0%7C%7CObject.is(s%5Bi%5D%2C-0))%26%26(a%5Bi%5D%3D!0)%2Cn*%3De%5Bi%2B1%5D)%7Dlet%20o%3Dbe.range(0%2Ce%5B1%5D-1%2C1)%3Ba%5B0%5D%26%26(o%3Dbe.range(e%5B1%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ce%5B1%5D%3Bt%2B%2B)o%5Bt%5D*%3Dr%5B0%5D%3Blet%20h%3Dbe.range(0%2Ce%5B2%5D-1%2C1)%3Ba%5B1%5D%26%26(h%3Dbe.range(e%5B2%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ce%5B2%5D%3Bt%2B%2B)h%5Bt%5D*%3Dr%5B1%5D%3Blet%20c%3Dbe.range(0%2Ce%5B3%5D-1%2C1)%3Ba%5B2%5D%26%26(c%3Dbe.range(e%5B3%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ce%5B3%5D%3Bt%2B%2B)c%5Bt%5D*%3Dr%5B2%5D%3Bconst%20d%3Dnew%20Uint8Array(this.drawBitmap)%2Cm%3Dnew%20Uint8Array(e%5B1%5D*e%5B2%5D*e%5B3%5D)%3Blet%20u%3D0%3Bfor(let%20t%3D0%3Bt%3Ce%5B3%5D%3Bt%2B%2B)for(let%20i%3D0%3Bi%3Ce%5B2%5D%3Bi%2B%2B)for(let%20s%3D0%3Bs%3Ce%5B1%5D%3Bs%2B%2B)m%5Bu%5D%3Dd%5Bo%5Bs%5D%2Bh%5Bi%5D%2Bc%5Bt%5D%5D%2Cu%2B%2B%3Bl.debug(%22saving%20drawing%22)%3Breturn%20this.volumes%5B0%5D.saveToDisk(i%2Cm)%7D%7Dl.debug(%22saving%20image%22)%3Breturn%20this.volumes%5Bn%5D.saveToDisk(i)%7DgetMeshIndexByID(t)%7Bif(%22number%22%3D%3Dtypeof%20t)return%20t%3E%3Dthis.meshes.length%3F-1%3At%3Bconst%20e%3Dthis.meshes.length%3Bfor(let%20i%3D0%3Bi%3Ce%3Bi%2B%2B)%7Bif(this.meshes%5Bi%5D.id%3D%3D%3Dt)return%20i%7Dreturn-1%7DsetMeshProperty(t%2Ce%2Ci)%7Bconst%20s%3Dthis.getMeshIndexByID(t)%3Bs%3C0%3Fl.warn(%22setMeshProperty()%20id%20not%20loaded%22%2Ct)%3A(this.meshes%5Bs%5D.setProperty(e%2Ci%2Cthis.gl)%2Cthis.updateGLVolume()%2Cthis.onMeshPropertyChanged(s%2Ce%2Ci))%7DindexNearestXYZmm(t%2Ce%2Ci%2Cs)%7Bconst%20n%3Dthis.getMeshIndexByID(t)%3Breturn%20n%3C0%3F(l.warn(%22indexNearestXYZmm()%20id%20not%20loaded%22%2Ct)%2C%5BNaN%2CNaN%5D)%3Athis.meshes%5Bn%5D.indexNearestXYZmm(e%2Ci%2Cs)%7DdecimateHierarchicalMesh(t%2Ce%3D3)%7Bconst%20i%3Dthis.getMeshIndexByID(t)%3Bif(i%3C0)return%20void%20l.warn(%22reverseFaces()%20id%20not%20loaded%22%2Ct)%3Bconst%20s%3Dthis.meshes%5Bi%5D.decimateHierarchicalMesh(this.gl%2Ce)%3Breturn%20this.updateGLVolume()%2Cs%7DreverseFaces(t)%7Bconst%20e%3Dthis.getMeshIndexByID(t)%3Be%3C0%3Fl.warn(%22reverseFaces()%20id%20not%20loaded%22%2Ct)%3A(this.meshes%5Be%5D.reverseFaces(this.gl)%2Cthis.updateGLVolume())%7DsetMeshLayerProperty(t%2Ce%2Ci%2Cs)%7Bconst%20n%3Dthis.getMeshIndexByID(t)%3Bn%3C0%3Fl.warn(%22setMeshLayerProperty()%20id%20not%20loaded%22%2Ct)%3A(this.meshes%5Bn%5D.setLayerProperty(e%2Ci%2Cs%2Cthis.gl)%2Cthis.updateGLVolume())%7DsetPan2Dxyzmm(t)%7Bthis.scene.pan2Dxyzmm%3Dt%2Cthis.opts.yoke3Dto2DZoom%26%26(this.scene.volScaleMultiplier%3Dt%5B3%5D)%2Cthis.drawScene()%7DsetRenderAzimuthElevation(t%2Ce)%7Bthis.scene.renderAzimuth%3Dt%2Cthis.scene.renderElevation%3De%2Cthis.onAzimuthElevationChange(t%2Ce)%2Cthis.drawScene()%7DgetOverlayIndexByID(t)%7Bconst%20e%3Dthis.overlays.length%3Bfor(let%20i%3D0%3Bi%3Ce%3Bi%2B%2B)%7Bif(this.overlays%5Bi%5D.id%3D%3D%3Dt)return%20i%7Dreturn-1%7DsetVolume(t%2Ce%3D0)%7Bif(e%3Ethis.volumes.length)return%3Bconst%20i%3Dthis.getVolumeIndexByID(t.id)%3B0%3D%3D%3De%3F(this.volumes.splice(i%2C1)%2Cthis.volumes.unshift(t)%2Cthis.back%3Dthis.volumes%5B0%5D%2Cthis.overlays%3Dthis.volumes.slice(1))%3Ae%3C0%3F(this.volumes.splice(this.getVolumeIndexByID(t.id)%2C1)%2Cthis.back%3Dthis.volumes%5B0%5D%2Cthis.volumes.length%3E1%3Fthis.overlays%3Dthis.volumes.slice(1)%3Athis.overlays%3D%5B%5D)%3A(this.volumes.splice(i%2C1)%2Cthis.volumes.splice(e%2C0%2Ct)%2Cthis.overlays%3Dthis.volumes.slice(1)%2Cthis.back%3Dthis.volumes%5B0%5D)%2Cthis.updateGLVolume()%7DsetMesh(t%2Ce%3D0)%7Bthis.meshes.forEach((t%3D%3E%7Bl.debug(%22MESH%3A%20%22%2Ct.name)%7D))%3Bif(e%3Ethis.meshes.length)return%3Bconst%20i%3Dthis.getMeshIndexByID(t.id)%3B0%3D%3D%3De%3F(this.meshes.splice(i%2C1)%2Cthis.meshes.unshift(t))%3Ae%3C0%3Fthis.meshes.splice(this.getMeshIndexByID(t.id)%2C1)%3A(this.meshes.splice(i%2C1)%2Cthis.meshes.splice(e%2C0%2Ct))%2Cthis.updateGLVolume()%2Cthis.meshes.forEach((t%3D%3E%7Bl.debug(t.name)%7D))%7DremoveVolume(t)%7Bif(this.setVolume(t%2C-1)%2Cthis.mediaUrlMap.has(t))%7Bconst%20e%3Dthis.mediaUrlMap.get(t)%3Bthis.onVolumeWithUrlRemoved(e)%2Cthis.mediaUrlMap.delete(t)%7Dthis.drawScene()%7DremoveVolumeByIndex(t)%7Bif(t%3E%3Dthis.volumes.length)throw%20new%20Error(%22Index%20of%20volume%20out%20of%20bounds%22)%3Bthis.removeVolume(this.volumes%5Bt%5D)%7DremoveMesh(t)%7Bif(t.unloadMesh(this.gl)%2Cthis.setMesh(t%2C-1)%2Cthis.mediaUrlMap.has(t))%7Bconst%20e%3Dthis.mediaUrlMap.get(t)%3Bthis.onMeshWithUrlRemoved(e)%2Cthis.mediaUrlMap.delete(t)%7D%7DremoveMeshByUrl(t)%7Bconst%20e%3Dthis.getMediaByUrl(t)%3Be%26%26(this.removeMesh(e)%2Cthis.mediaUrlMap.delete(e)%2Cthis.onMeshWithUrlRemoved(t))%7DmoveVolumeToBottom(t)%7Bthis.setVolume(t%2C0)%7DmoveVolumeUp(t)%7Bconst%20e%3Dthis.getVolumeIndexByID(t.id)%3Bthis.setVolume(t%2Ce%2B1)%7DmoveVolumeDown(t)%7Bconst%20e%3Dthis.getVolumeIndexByID(t.id)%3Bthis.setVolume(t%2Ce-1)%7DmoveVolumeToTop(t)%7Bthis.setVolume(t%2Cthis.volumes.length-1)%7DmouseDown(t%2Ce)%7Bt*%3Dthis.uiData.dpr%2Ce*%3Dthis.uiData.dpr%2Cthis.mousePos%3D%5Bt%2Ce%5D%7DmouseMove(t%2Ce)%7Bt*%3Dthis.uiData.dpr%2Ce*%3Dthis.uiData.dpr%3Bconst%20i%3D(t-this.mousePos%5B0%5D)%2Fthis.uiData.dpr%2Cs%3D(e-this.mousePos%5B1%5D)%2Fthis.uiData.dpr%3Bthis.mousePos%3D%5Bt%2Ce%5D%2Cthis.inRenderTile(t%2Ce)%3C0%7C%7CMath.abs(i)%3C1%26%26Math.abs(s)%3C1%7C%7C(this.scene.renderAzimuth%2B%3Di%2Cthis.scene.renderElevation%2B%3Ds%2Cthis.drawScene())%7Dsph2cartDeg(t%2Ce)%7Bconst%20i%3D-e*(Math.PI%2F180)%2Cs%3D(t-90)%25360*(Math.PI%2F180)%2Cn%3D%5BMath.cos(i)*Math.cos(s)%2CMath.cos(i)*Math.sin(s)%2CMath.sin(i)%5D%2Cr%3DMath.sqrt(n%5B0%5D*n%5B0%5D%2Bn%5B1%5D*n%5B1%5D%2Bn%5B2%5D*n%5B2%5D)%3Breturn%20r%3C%3D0%7C%7C(n%5B0%5D%2F%3Dr%2Cn%5B1%5D%2F%3Dr%2Cn%5B2%5D%2F%3Dr)%2Cn%7DsetClipPlane(t)%7Bconst%20e%3Dthis.sph2cartDeg(t%5B1%5D%2B180%2Ct%5B2%5D)%3Bthis.scene.clipPlane%3D%5Be%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D%2Ct%5B0%5D%5D%2Cthis.scene.clipPlaneDepthAziElev%3Dt%2Cthis.onClipPlaneChange(this.scene.clipPlane)%2Cthis.drawScene()%7DsetCrosshairColor(t)%7Bthis.opts.crosshairColor%3Dt%2Cthis.drawScene()%7DsetCrosshairWidth(t)%7Bthis.opts.crosshairWidth%3Dt%2Cthis.crosshairs3D%26%26(this.crosshairs3D.mm%5B0%5D%3DNaN)%2Cthis.drawScene()%7DsetDrawColormap(t)%7Bthis.drawLut%3Dne.makeDrawLut(t)%2Cthis.updateGLVolume()%7DsetDrawingEnabled(t)%7Bthis.opts.drawingEnabled%3Dt%2Cthis.opts.drawingEnabled%26%26(this.drawBitmap%7C%7Cthis.createEmptyDrawing())%2Cthis.drawScene()%7DsetPenValue(t%2Ce%3D!1)%7Bthis.opts.penValue%3Dt%2Cthis.opts.isFilledPen%3De%2Cthis.drawScene()%7DsetDrawOpacity(t)%7Bthis.drawOpacity%3Dt%2Cthis.drawScene()%7DsetSelectionBoxColor(t)%7Bthis.opts.selectionBoxColor%3Dt%7DsliceScroll2D(t%2Ce%2Ci%2Cs%3D!0)%7Bif(this.opts.scrollRequiresFocus%26%26this.canvas!%3D%3Ddocument.activeElement)l.warn(%22Canvas%20element%20does%20not%20have%20focus.%20Scroll%20events%20will%20not%20be%20processed.%22)%3Belse%7Bif(this.inGraphTile(e%2Ci))%7Blet%20e%3Dthis.volumes%5B0%5D.frame4D%3Breturn%20t%3E0%26%26e%2B%2B%2Ct%3C0%26%26e--%2Cvoid%20this.setFrame4D(this.volumes%5B0%5D.id%2Ce)%7Dif(0!%3D%3Dt%26%263%3D%3D%3Dthis.opts.dragMode%26%26-1%3D%3D%3Dthis.inRenderTile(this.uiData.dpr*e%2Cthis.uiData.dpr*i))%7Blet%20e%3Dthis.scene.pan2Dxyzmm%5B3%5D*(1%2B10*t)%3Be%3DMath.round(10*e)%2F10%3Bconst%20i%3Dthis.scene.pan2Dxyzmm%5B3%5D-e%3Bthis.opts.yoke3Dto2DZoom%26%26(this.scene.volScaleMultiplier%3De)%2Cthis.scene.pan2Dxyzmm%5B3%5D%3De%3Bconst%20s%3Dthis.frac2mm(this.scene.crosshairPos)%3Breturn%20this.scene.pan2Dxyzmm%5B0%5D%2B%3Di*s%5B0%5D%2Cthis.scene.pan2Dxyzmm%5B1%5D%2B%3Di*s%5B1%5D%2Cthis.scene.pan2Dxyzmm%5B2%5D%2B%3Di*s%5B2%5D%2Cthis.drawScene()%2Cthis.canvas.focus()%2Cvoid%20this.sync()%7Dthis.mouseClick(e%2Ci%2Ct%2Cs)%7D%7DsetSliceType(t)%7Breturn%20this.opts.sliceType%3Dt%2Cthis.drawScene()%2Cthis%7DsetOpacity(t%2Ce)%7Bthis.volumes%5Bt%5D.opacity%3De%2C0!%3D%3Dt%3Fthis.updateGLVolume()%3Athis.drawScene()%7DsetScale(t)%7Bthis.scene.volScaleMultiplier%3Dt%2Cthis.drawScene()%7DsetClipPlaneColor(t)%7Bthis.opts.clipPlaneColor%3Dt%2Cthis.renderShader.use(this.gl)%2Cthis.gl.uniform4fv(this.renderShader.uniforms.clipPlaneColor%2Cthis.opts.clipPlaneColor)%2Cthis.drawScene()%7DsetClipPlaneThick(t)%7Bthis.opts.clipThick%3Dt%2Cthis.renderShader.use(this.gl)%2Cthis.gl.uniform1f(this.renderShader.uniforms.clipThick%2Cthis.opts.clipThick)%2Cthis.drawScene()%7DsetClipVolume(t%2Ce)%7Bthis.opts.clipVolumeLow%3D%5BMath.min(t%5B0%5D%2Ce%5B0%5D)%2CMath.min(t%5B1%5D%2Ce%5B1%5D)%2CMath.min(t%5B2%5D%2Ce%5B2%5D)%5D%2Cthis.opts.clipVolumeHigh%3D%5BMath.max(t%5B0%5D%2Ce%5B0%5D)%2CMath.max(t%5B1%5D%2Ce%5B1%5D)%2CMath.max(t%5B2%5D%2Ce%5B2%5D)%5D%2Cthis.renderShader.use(this.gl)%2Cthis.gl.uniform3fv(this.renderShader.uniforms.clipLo%2Cthis.opts.clipVolumeLow)%2Cthis.gl.uniform3fv(this.renderShader.uniforms.clipHi%2Cthis.opts.clipVolumeHigh)%2Cthis.pickingImageShader.use(this.gl)%2Cthis.gl.uniform3fv(this.pickingImageShader.uniforms.clipLo%2Cthis.opts.clipVolumeLow)%2Cthis.gl.uniform3fv(this.pickingImageShader.uniforms.clipHi%2Cthis.opts.clipVolumeHigh)%2Cthis.drawScene()%7Dasync%20setVolumeRenderIllumination(t%3D0)%7Bthis.renderShader%3Dthis.renderVolumeShader%2Ct%3E0%26%26(this.renderShader%3Dthis.renderGradientShader)%2Ct%3C0%26%26(this.renderShader%3Dthis.renderSliceShader)%2Cthis.initRenderShader(this.renderShader%2Ct)%2Cthis.renderShader.use(this.gl)%2Cthis.setClipPlaneColor(this.opts.clipPlaneColor)%2Cthis.gradientTextureAmount%3Dt%2Cthis.refreshLayers(this.volumes%5B0%5D%2C0)%2Cthis.drawScene()%7DoverlayRGBA(t)%7Bconst%20e%3Dt.hdr%2Ci%3De.dims%5B1%5D*e.dims%5B2%5D*e.dims%5B3%5D%2Cs%3Dnew%20Uint8ClampedArray(4*i)%2Cn%3D.2*Math.min(Math.min(e.dims%5B1%5D%2Ce.dims%5B2%5D)%2Ce.dims%5B3%5D)%2Cr%3D.5*e.dims%5B1%5D%2Ca%3D.5*e.dims%5B2%5D%2Co%3D.5*e.dims%5B3%5D%3Blet%20l%3D0%3Bfor(let%20t%3D0%3Bt%3Ce.dims%5B3%5D%3Bt%2B%2B)for(let%20i%3D0%3Bi%3Ce.dims%5B2%5D%3Bi%2B%2B)for(let%20h%3D0%3Bh%3Ce.dims%5B1%5D%3Bh%2B%2B)%7Bconst%20e%3DMath.abs(h-r)%2Cc%3DMath.abs(i-a)%2Cd%3DMath.abs(t-o)%3Blet%20m%3D0%3BMath.sqrt(e*e%2Bc*c%2Bd*d)%3Cn%26%26(m%3D255)%2Cs%5Bl%2B%2B%5D%3D0%2Cs%5Bl%2B%2B%5D%3Dm%2Cs%5Bl%2B%2B%5D%3D0%2Cs%5Bl%2B%2B%5D%3D.5*m%7Dreturn%20s%7Dvox2mm(t%2Ce)%7Breturn%20be.vox2mm(t%2Ce)%7DcloneVolume(t)%7Breturn%20this.volumes%5Bt%5D.clone()%7Dasync%20loadDocumentFromUrl(t)%7Bconst%20e%3Dawait%20ni.loadFromUrl(t)%3Bthis.loadDocument(e)%7DloadDocument(t)%7Bthis.volumes%3D%5B%5D%2Cthis.meshes%3D%5B%5D%2Cthis.document%3Dt%2Cthis.document.labels%3Dthis.document.labels%3Fthis.document.labels%3A%5B%5D%3Bconst%20e%3D%7B...ii%2C...t.opts%7D%3Bthis.scene.pan2Dxyzmm%3Dt.scene.pan2Dxyzmm%3Ft.scene.pan2Dxyzmm%3A%5B0%2C0%2C0%2C1%5D%2Cthis.document.opts%3De%2Cthis.setClipPlane(this.scene.clipPlaneDepthAziElev)%2Cl.debug(%22load%20document%22%2Ct)%2Cthis.mediaUrlMap.clear()%2Cthis.createEmptyDrawing()%3Bconst%20i%3Dt.encodedImageBlobs%3Bfor(let%20e%3D0%3Be%3Ct.imageOptionsArray.length%3Be%2B%2B)%7Bconst%20s%3Dt.imageOptionsArray%5Be%5D%2Cn%3Di%5Be%5D%3Bif(n)%7B%22colorMap%22in%20s%26%26(s.colormap%3Ds.colorMap)%3Bconst%20t%3DJe.loadFromBase64(%7Bbase64%3An%2C...s%7D)%3Bif(t)%7Bif(t.colormapLabel)%7Bconst%20e%3DObject.keys(t.colormapLabel.lut).length%2Ci%3Dnew%20Uint8ClampedArray(e)%3Bfor(const%20e%20in%20t.colormapLabel.lut)i%5Be%5D%3Dt.colormapLabel.lut%5Be%5D%3Bt.colormapLabel.lut%3Di%7Dthis.addVolume(t)%7D%7D%7Dthis.volumes.length%3E0%26%26(this.back%3Dthis.volumes%5B0%5D)%3Bconst%20s%3Dt.encodedDrawingBlob%3Bif(s)%7Bconst%20e%3Dt.imageOptionsArray%5B0%5D%2Ci%3DJe.loadFromBase64(%7Bbase64%3As%2C...e%7D)%3Bi%26%26this.loadDrawing(i)%7Dfor(const%20e%20of%20t.meshDataObjects%3F%3F%5B%5D)%7Bconst%20t%3D%7Bgl%3Athis.gl%2C...e%7D%3Be.offsetPt0%26%26(t.rgba255%5B3%5D%3D0%2Ct.tris%3Dnew%20Uint32Array(e.offsetPt0))%2Cl.debug(t)%3Bconst%20i%3Dnew%20Fe(t.pts%2Ct.tris%2Ct.name%2Ct.rgba255%2Ct.opacity%2Ct.visible%2Cthis.gl%2Ct.connectome%2Ct.dpg%2Ct.dps%2Ct.dpv)%3Be.offsetPt0%26%26(i.fiberGroupColormap%3De.fiberGroupColormap%2Ci.fiberColor%3De.fiberColor%2Ci.fiberDither%3De.fiberDither%2Ci.fiberRadius%3De.fiberRadius%2Ci.colormap%3De.colormap)%2Ci.meshShaderIndex%3Dt.meshShaderIndex%2Ci.layers%3Dt.layers%2Ci.updateMesh(this.gl)%2Cl.debug(i)%2Cthis.addMesh(i)%7Dif(t.data.connectomes)for(const%20e%20of%20t.data.connectomes)%7Bconst%20t%3DJSON.parse(e)%2Ci%3Dthis.loadConnectomeAsMesh(t)%3Bi.updateMesh(this.gl)%2Cthis.addMesh(i)%7Dreturn%20this.updateGLVolume()%2Cthis.drawScene()%2Cthis.onDocumentLoaded(t)%2Cthis%7Dasync%20generateLoadDocumentJavaScript(t%2Ce)%7Bconst%20i%3Dthis.json()%3Breturn%60%5Cn%20%20%20%20%20%20%20%20%24%7Be%7D%5Cn%5Cn%20%20%20%20%20%20%20%20async%20function%20saveNiivueAsHtml(pageName)%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%2F%2Fget%20new%20docstring%5Cn%20%20%20%20%20%20%20%20%20%20const%20docString%20%3D%20nv1.json()%3B%5Cn%20%20%20%20%20%20%20%20%20%20const%20html%20%3D%5Cn%20%20%20%20%20%20%20%20%20%20document.getElementsByTagName(%22html%22)%5B0%5D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20.innerHTML.replace(base64%2C%20await%20NVUtilities.compressToBase64String(JSON.stringify(docString)))%3B%5Cn%20%20%20%20%20%20%20%20%20%20NVUtilities.download(html%2C%20pageName%2C%20%22application%2Fhtml%22)%3B%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%5Cn%20%20%20%20%20%20%20%20var%20nv1%20%3D%20new%20Niivue()%3B%5Cn%20%20%20%20%20%20%20%20nv1.attachTo(%22%24%7Bt%7D%22)%3B%5Cn%20%20%20%20%20%20%20%20var%20base64%20%3D%20%22%24%7Bawait%20be.compressToBase64String(JSON.stringify(i))%7D%22%3B%5Cn%20%20%20%20%20%20%20%20NVUtilities.decompressBase64String(base64).then((jsonText)%20%3D%3E%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20var%20json%20%3D%20JSON.parse(jsonText)%3B%20%2F%2F%20string%20-%3E%20JSON%5Cn%20%20%20%20%20%20%20%20%20%20var%20doc%20%3D%20NVDocument.loadFromJSON(json)%3B%5Cn%20%20%20%20%20%20%20%20%20%20nv1.loadDocument(doc)%3B%5Cn%20%20%20%20%20%20%20%20%20%20nv1.updateGLVolume()%3B%5Cn%20%20%20%20%20%20%20%20%7D)%3B%5Cn%5Cn%20%20%20%20%20%20%60%7Dasync%20generateHTML(t%3D%22gl1%22%2Ce)%7Breturn%60%3C!DOCTYPE%20html%3E%5Cn%20%20%20%20%20%20%20%20%3Chtml%20lang%3D%22en%22%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Chead%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cmeta%20charset%3D%22utf-8%22%20%2F%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cmeta%20http-equiv%3D%22X-UA-Compatible%22%20content%3D%22IE%3Dedge%22%20%2F%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2Cinitial-scale%3D1.0%22%20%2F%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Ctitle%3ESave%20as%20HTML%3C%2Ftitle%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cstyle%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20html%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20height%3A%20auto%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20min-height%3A%20100%25%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20margin%3A%200%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20body%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20display%3A%20flex%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20flex-direction%3A%20column%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20margin%3A%200%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20min-height%3A%20100%25%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20width%3A%20100%25%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20position%3A%20absolute%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20font-family%3A%20system-ui%2C%20Arial%2C%20Helvetica%2C%20sans-serif%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3A%20%23ffffff%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20color%3A%20black%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20user-select%3A%20none%3B%20%2F*%20Standard%20syntax%20*%2F%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20header%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20margin%3A%2010px%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20main%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20flex%3A%201%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3A%20%23000000%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20position%3A%20relative%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20footer%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20margin%3A%2010px%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20canvas%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20position%3A%20absolute%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20cursor%3A%20crosshair%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20canvas%3Afocus%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20outline%3A%200px%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20div%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20display%3A%20table-row%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20background-color%3A%20blue%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fstyle%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3C%2Fhead%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cbody%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cnoscript%3Eniivue%20requires%20JavaScript.%3C%2Fnoscript%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cheader%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20Save%20the%20current%20scene%20as%20HTML%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22save%22%3ESave%20as%20HTML%3C%2Fbutton%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fheader%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cmain%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ccanvas%20id%3D%22gl1%22%3E%3C%2Fcanvas%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fmain%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cscript%20type%3D%22module%22%20async%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24%7Bawait%20this.generateLoadDocumentJavaScript(t%2Ce)%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20function%20saveAsHtml()%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20saveNiivueAsHtml(%22page.html%22)%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20assign%20our%20event%20handler%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20button%20%3D%20document.getElementById(%22save%22)%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20button.onclick%20%3D%20saveAsHtml%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3C%5C%2Fscript%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3C%2Fbody%3E%5Cn%20%20%20%20%20%20%20%20%3C%2Fhtml%3E%60%7Dasync%20saveHTML(t%3D%22untitled.html%22%2Ce%3D%22gl1%22%2Ci)%7Bconst%20s%3Dawait%20this.generateHTML(e%2Ci)%3Breturn%20be.download(s%2Ct%2C%22application%2Fhtml%22)%7Djson()%7Bthis.document.opts%3Dthis.opts%2Cthis.document.scene%3Dthis.scene%2Cthis.document.volumes%3Dthis.volumes%2Cthis.document.meshes%3Dthis.meshes%2Cthis.drawScene()%2Cthis.document.previewImageDataURL%3Dthis.canvas.toDataURL()%3Breturn%20this.document.json()%7Dasync%20saveDocument(t%3D%22untitled.nvd%22%2Ce%3D!0)%7Breturn%20this.document.title%3Dt%2Cl.debug(%22saveDocument%22%2Cthis.volumes%5B0%5D)%2Cthis.drawScene()%2Cthis.document.previewImageDataURL%3Dthis.canvas.toDataURL()%2Cthis.document.volumes%3Dthis.volumes%2Cthis.document.meshes%3Dthis.meshes%2Cthis.document.download(t%2Ce)%7Dasync%20loadVolumes(t)%7Bif(this.loadingText%3D%22loading...%22%2Cthis.drawScene()%2Cthis.thumbnailVisible)return%20this.deferredVolumes%3Dt%2Cthis%3Bif(this.volumes%3D%5B%5D%2Cthis.gl.clearColor(0%2C0%2C0%2C1)%2Cthis.gl.clear(this.gl.COLOR_BUFFER_BIT)%2Ct.length%3E1)return%20await%20this.addVolumesFromUrl(t)%2Cthis%3Bconst%20e%3D%7Burl%3At%5B0%5D.url%2Cheaders%3At%5B0%5D.headers%2Cname%3At%5B0%5D.name%2Ccolormap%3At%5B0%5D.colormap%3Ft%5B0%5D.colormap%3At%5B0%5D.colorMap%2CcolormapNegative%3At%5B0%5D.colormapNegative%3Ft%5B0%5D.colormapNegative%3At%5B0%5D.colorMapNegative%2Copacity%3At%5B0%5D.opacity%2CurlImgData%3At%5B0%5D.urlImgData%2Ccal_min%3At%5B0%5D.cal_min%2Ccal_max%3At%5B0%5D.cal_max%2CtrustCalMinMax%3Athis.opts.trustCalMinMax%2CisManifest%3At%5B0%5D.isManifest%2Cframe4D%3At%5B0%5D.frame4D%2ClimitFrames4D%3At%5B0%5D.limitFrames4D%7C%7Cthis.opts.limitFrames4D%2CcolorbarVisible%3At%5B0%5D.colorbarVisible%7D%3Breturn%20await%20this.addVolumeFromUrl(e)%2Cthis%7Dasync%20addMeshFromUrl(t)%7Bconst%20e%3Dthis.getFileExt(t.url)%3Bif(%22JCON%22%3D%3D%3De%7C%7C%22JSON%22%3D%3D%3De)%7Bconst%20e%3Dawait%20fetch(t.url%2C%7B%7D)%2Ci%3Dawait%20e.json()%2Cs%3Dthis.loadConnectomeAsMesh(i)%3Breturn%20this.mediaUrlMap.set(s%2Ct.url)%2Cthis.onMeshAddedFromUrl(t%2Cs)%2Cthis.addMesh(s)%2Cs%7Dconst%20i%3Dawait%20Fe.loadFromUrl(%7B...t%2Cgl%3Athis.gl%7D)%3Breturn%20this.mediaUrlMap.set(i%2Ct.url)%2Cthis.onMeshAddedFromUrl(t%2Ci)%2Cthis.addMesh(i)%2Ci%7Dasync%20addMeshesFromUrl(t)%7Bconst%20e%3Dt.map((async%20t%3D%3E%7Bconst%20e%3Dthis.getFileExt(t.url)%3Bif(%22JCON%22%3D%3D%3De%7C%7C%22JSON%22%3D%3D%3De)%7Bconst%20e%3Dawait%20fetch(t.url%2C%7B%7D)%2Ci%3Dawait%20e.json()%2Cs%3Dthis.loadConnectomeAsMesh(i)%3Breturn%20this.mediaUrlMap.set(s%2Ct.url)%2Cthis.onMeshAddedFromUrl(t%2Cs)%2Cs%7Dconst%20i%3Dawait%20Fe.loadFromUrl(%7B...t%2Cgl%3Athis.gl%7D)%3Breturn%20this.mediaUrlMap.set(i%2Ct.url)%2Cthis.onMeshAddedFromUrl(t%2Ci)%2Ci%7D))%2Ci%3Dawait%20Promise.all(e)%3Bfor(let%20t%3D0%3Bt%3Ci.length%3Bt%2B%2B)this.addMesh(i%5Bt%5D)%3Breturn%20i%7Dasync%20loadMeshes(t)%7Breturn%20this.loadingText%3D%22loading...%22%2Cthis.drawScene()%2Cthis.thumbnailVisible%3F(this.deferredMeshes%3Dt%2Cthis)%3A(this.initialized%2Cthis.meshes%3D%5B%5D%2Cthis.gl.clearColor(0%2C0%2C0%2C1)%2Cthis.gl.clear(this.gl.COLOR_BUFFER_BIT)%2Ct.length%3E1%3F(await%20this.addMeshesFromUrl(t)%2Cthis.updateGLVolume()%2Cthis.drawScene()%2Cthis)%3A(await%20this.addMeshFromUrl(t%5B0%5D)%2Cthis.updateGLVolume()%2Cthis.drawScene()%2Cthis))%7Dasync%20loadConnectomeFromUrl(t%2Ce%3D%7B%7D)%7Bconst%20i%3Dawait%20fetch(t%2C%7Bheaders%3Ae%7D)%2Cs%3Dawait%20i.json()%3Breturn%20this.loadConnectome(s)%7Dasync%20loadFreeSurferConnectomeFromUrl(t%2Ce%3D%7B%7D)%7Bconst%20i%3Dawait%20fetch(t%2C%7Bheaders%3Ae%7D)%2Cs%3Dawait%20i.json()%3Breturn%20this.loadFreeSurferConnectome(s)%7Dasync%20loadFreeSurferConnectome(t)%7Bconst%20e%3Dmi.convertFreeSurferConnectome(t)%3Breturn%20this.loadConnectome(e)%7DhandleNodeAdded(t)%7Bconst%20e%3Dt.detail.node%2Ci%3D%5B1%2C1%2C1%2C1%5D%3Bthis.addLabel(e.name%2C%7BtextColor%3Ai%2CbulletScale%3A1%2CbulletColor%3Ai%2ClineWidth%3A0%2ClineColor%3Ai%2ClineTerminator%3A%22none%22%2CtextScale%3A1%7D%2C%5Be.x%2Ce.y%2Ce.z%5D)%2Cthis.drawScene()%7DloadConnectomeAsMesh(t)%7Blet%20e%3Dt%3Bif(%22data_type%22in%20t%26%26%22fs_pointset%22%3D%3D%3Dt.data_type)e%3Dmi.convertFreeSurferConnectome(t)%2Cl.warn(%22converted%20FreeSurfer%20connectome%22%2Ce)%3Belse%7Bif(!(%22nodes%22in%20t))throw%20new%20Error(%22not%20a%20known%20connectome%20format%22)%3B%7Bconst%20i%3Dt.nodes%3B%22names%22in%20i%26%26%22X%22in%20i%26%26%22Y%22in%20i%26%26%22Z%22in%20i%26%26%22Color%22in%20i%26%26%22Size%22in%20i%26%26(e%3Dmi.convertLegacyConnectome(t)%2Cl.warn(%22converted%20legacy%20connectome%22%2Ce))%7D%7Dreturn%20new%20mi(this.gl%2Ce)%7DloadConnectome(t)%7Bthis.loadingText%3D%22loading...%22%2Cthis.drawScene()%2Cthis.meshes%3D%5B%5D%2Cthis.gl.clearColor(0%2C0%2C0%2C1)%2Cthis.gl.clear(this.gl.COLOR_BUFFER_BIT)%3Bconst%20e%3Dthis.loadConnectomeAsMesh(t)%3Breturn%20this.addMesh(e)%2Cthis.drawScene()%2Cthis%7DcreateEmptyDrawing()%7Bif(null%3D%3D%3Dthis.back%7C%7C!this.back.dims)return%3Bif(Math.min(Math.min(this.back.dims%5B1%5D%2Cthis.back.dims%5B2%5D)%2Cthis.back.dims%5B3%5D)%3C1)return%3Bconst%20t%3Dthis.back.dims%5B1%5D*this.back.dims%5B2%5D*this.back.dims%5B3%5D%3Bthis.drawBitmap%3Dnew%20Uint8Array(t)%2Cthis.clickToSegmentGrowingBitmap%3Dnew%20Uint8Array(t)%2Cthis.drawClearAllUndoBitmaps()%2Cthis.drawAddUndoBitmap()%2Cthis.drawTexture%3Dthis.r8Tex(this.drawTexture%2CNi%2Cthis.back.dims%2C!0)%2Cthis.refreshDrawing(!1)%7Dr16Tex(t%2Ce%2Ci%2Cs)%7Bt%26%26this.gl.deleteTexture(t)%2Ct%3Dthis.gl.createTexture()%2Cthis.gl.activeTexture(e)%2Cthis.gl.bindTexture(this.gl.TEXTURE_3D%2Ct)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_MIN_FILTER%2Cthis.gl.NEAREST)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_MAG_FILTER%2Cthis.gl.NEAREST)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_R%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_S%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_T%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT%2C1)%2Cthis.gl.texStorage3D(this.gl.TEXTURE_3D%2C1%2Cthis.gl.R16I%2Ci%5B1%5D%2Ci%5B2%5D%2Ci%5B3%5D)%3Bconst%20n%3Di%5B1%5D*i%5B2%5D*i%5B3%5D%3Breturn%20s.length!%3D%3Dn%26%26(s%3Dnew%20Int16Array(n))%2Cthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Ci%5B1%5D%2Ci%5B2%5D%2Ci%5B3%5D%2Cthis.gl.RED_INTEGER%2Cthis.gl.SHORT%2Cs)%2Ct%7DdrawGrowCut()%7Bif(!this.back%7C%7C!this.back.dims)throw%20new%20Error(%22back%20not%20defined%22)%3Bconst%20t%3Dthis.back.hdr%2Ce%3Dthis.gl%2Ci%3Dt.dims%5B1%5D*t.dims%5B2%5D*t.dims%5B3%5D%3Bif(!this.drawBitmap%7C%7Cthis.drawBitmap.length!%3D%3Di)return%20void%20l.debug(%22bitmap%20dims%20are%20wrong%22)%3Bconst%20s%3De.createFramebuffer()%3Be.bindFramebuffer(e.FRAMEBUFFER%2Cs)%2Ce.disable(e.CULL_FACE)%2Ce.viewport(0%2C0%2Cthis.back.dims%5B1%5D%2Cthis.back.dims%5B2%5D)%2Ce.disable(e.BLEND)%3Blet%20n%3Dfunction(t)%7Bconst%20e%3Dt.hdr.dims%2Ci%3Dt.permRAS%2Cs%3De%5B1%5D*e%5B2%5D*e%5B3%5D%2Cn%3Dnew%20Int16Array(s)%2Cr%3D%5B0%2C0%2C0%5D%3Bfor(let%20t%3D0%3Bt%3C3%3Bt%2B%2B)for(let%20e%3D0%3Be%3C3%3Be%2B%2B)Math.abs(i%5Bt%5D)-1%3D%3D%3De%26%26(r%5Be%5D%3Dt*Math.sign(i%5Bt%5D))%3Blet%20a%3D1%3Bconst%20o%3D%5B1%2C1%2C1%5D%2Cl%3D%5B!1%2C!1%2C!1%5D%3Bfor(let%20t%3D0%3Bt%3Cr.length%3Bt%2B%2B)for(let%20i%3D0%3Bi%3Cr.length%3Bi%2B%2B)Math.abs(r%5Bi%5D)%3D%3D%3Dt%26%26(o%5Bi%5D%3Da%2C(r%5Bi%5D%3C0%7C%7CObject.is(r%5Bi%5D%2C-0))%26%26(l%5Bi%5D%3D!0)%2Ca*%3De%5Bi%2B1%5D)%3Blet%20h%3Dbe.range(0%2Ce%5B1%5D-1%2C1)%3Bl%5B0%5D%26%26(h%3Dbe.range(e%5B1%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ce%5B1%5D%3Bt%2B%2B)h%5Bt%5D*%3Do%5B0%5D%3Blet%20c%3Dbe.range(0%2Ce%5B2%5D-1%2C1)%3Bl%5B1%5D%26%26(c%3Dbe.range(e%5B2%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ce%5B2%5D%3Bt%2B%2B)c%5Bt%5D*%3Do%5B1%5D%3Blet%20d%3Dbe.range(0%2Ce%5B3%5D-1%2C1)%3Bl%5B2%5D%26%26(d%3Dbe.range(e%5B3%5D-1%2C0%2C-1))%3Bfor(let%20t%3D0%3Bt%3Ce%5B3%5D%3Bt%2B%2B)d%5Bt%5D*%3Do%5B2%5D%3Blet%20m%3D0%3Bfor(let%20i%3D0%3Bi%3Ce%5B3%5D%3Bi%2B%2B)for(let%20s%3D0%3Bs%3Ce%5B2%5D%3Bs%2B%2B)for(let%20r%3D0%3Br%3Ce%5B1%5D%3Br%2B%2B)n%5Bh%5Br%5D%2Bc%5Bs%5D%2Bd%5Bi%5D%5D%3Dt.img%5Bm%5D%2Cm%2B%2B%3Breturn%20n%7D(this.back)%3Bconst%20r%3Dthis.r16Tex(null%2C33995%2Cthis.back.dims%2Cn)%3Bfor(let%20t%3D1%3Bt%3Ci%3Bt%2B%2B)n%5Bt%5D%3Dthis.drawBitmap%5Bt%5D%3Bconst%20a%3Dthis.r16Tex(null%2C33998%2Cthis.back.dims%2Cn)%2Co%3Dthis.r16Tex(null%2C33999%2Cthis.back.dims%2Cn)%3Bfor(let%20t%3D1%3Bt%3Ci%3Bt%2B%2B)n%5Bt%5D%3E0%26%26(n%5Bt%5D%3D1e4)%3Bconst%20h%3Dthis.r16Tex(null%2C33996%2Cthis.back.dims%2Cn)%2Cc%3Dthis.r16Tex(null%2C33997%2Cthis.back.dims%2Cn)%3Be.bindVertexArray(this.genericVAO)%3Bconst%20d%3Dthis.growCutShader%3Bd.use(e)%3Be.uniform1i(d.uniforms.finalPass%2C0)%2Ce.uniform1i(d.uniforms.backTex%2C11)%3Bfor(let%20t%3D0%3Bt%3C128%3Bt%2B%2B)%7Be.uniform1i(d.uniforms.labelTex%2C14)%2Ce.uniform1i(d.uniforms.strengthTex%2C12)%3Bfor(let%20t%3D0%3Bt%3Cthis.back.dims%5B3%5D%3Bt%2B%2B)%7Bconst%20i%3D1%2Fthis.back.dims%5B3%5D*(t%2B.5)%3Be.uniform1f(d.uniforms.coordZ%2Ci)%2Ce.framebufferTextureLayer(e.FRAMEBUFFER%2Ce.COLOR_ATTACHMENT0%2Co%2C0%2Ct)%2Ce.framebufferTextureLayer(e.FRAMEBUFFER%2Ce.COLOR_ATTACHMENT1%2Cc%2C0%2Ct)%2Ce.drawBuffers(%5Be.COLOR_ATTACHMENT0%2Ce.COLOR_ATTACHMENT1%5D)%3Be.checkFramebufferStatus(e.FRAMEBUFFER)!%3D%3De.FRAMEBUFFER_COMPLETE%26%26l.error(%22Incomplete%20framebuffer%22)%2Ce.drawArrays(e.TRIANGLE_STRIP%2C0%2C4)%7D127%3D%3D%3Dt%26%26e.uniform1i(d.uniforms.finalPass%2C1)%2Ce.uniform1i(d.uniforms.labelTex%2C15)%2Ce.uniform1i(d.uniforms.strengthTex%2C13)%3Bfor(let%20t%3D0%3Bt%3Cthis.back.dims%5B3%5D%3Bt%2B%2B)%7Bconst%20i%3D1%2Fthis.back.dims%5B3%5D*(t%2B.5)%3Be.uniform1f(d.uniforms.coordZ%2Ci)%2Ce.framebufferTextureLayer(e.FRAMEBUFFER%2Ce.COLOR_ATTACHMENT0%2Ca%2C0%2Ct)%2Ce.framebufferTextureLayer(e.FRAMEBUFFER%2Ce.COLOR_ATTACHMENT1%2Ch%2C0%2Ct)%2Ce.drawBuffers(%5Be.COLOR_ATTACHMENT0%2Ce.COLOR_ATTACHMENT1%5D)%3Be.checkFramebufferStatus(e.FRAMEBUFFER)!%3D%3De.FRAMEBUFFER_COMPLETE%26%26l.error(%22Incomplete%20framebuffer%22)%2Ce.drawArrays(e.TRIANGLE_STRIP%2C0%2C4)%7D%7De.drawBuffers(%5Be.COLOR_ATTACHMENT0%5D)%3Bconst%20m%3De.COLOR_ATTACHMENT1%2Cu%3Da%3Be.readBuffer(m)%3Bconst%20A%3De.getParameter(e.IMPLEMENTATION_COLOR_READ_FORMAT)%2Cf%3De.getParameter(e.IMPLEMENTATION_COLOR_READ_TYPE)%3BA%3D%3D%3De.RED_INTEGER%26%26f%3D%3D%3De.SHORT%7C%7Cl.debug(%22readPixels%20will%20fail.%22)%2Cn%3Dnew%20Int16Array%3Bconst%20g%3Dthis.back.dims%5B1%5D*this.back.dims%5B2%5D%2Cp%3Dnew%20Int16Array(g)%3Bfor(let%20t%3D0%3Bt%3Cthis.back.dims%5B3%5D%3Bt%2B%2B)e.framebufferTextureLayer(e.FRAMEBUFFER%2Cm%2Cu%2C0%2Ct)%2Ce.readPixels(0%2C0%2Cthis.back.dims%5B1%5D%2Cthis.back.dims%5B2%5D%2CA%2Cf%2Cp)%2Cn%3DInt16Array.from(%5B...n%2C...p%5D)%3Blet%20v%3Dn%5B0%5D%3Bfor(let%20t%3D0%3Bt%3Cn.length%3Bt%2B%2B)v%3DMath.max(v%2Cn%5Bt%5D)%3Bfor(let%20t%3D1%3Bt%3Ci%3Bt%2B%2B)this.drawBitmap%5Bt%5D%3Dn%5Bt%5D%3Be.deleteTexture(r)%2Ce.deleteTexture(h)%2Ce.deleteTexture(c)%2Ce.deleteTexture(a)%2Ce.deleteTexture(o)%2Ce.bindVertexArray(this.unusedVAO)%2Ce.viewport(0%2C0%2Ce.canvas.width%2Ce.canvas.height)%2Ce.bindFramebuffer(e.FRAMEBUFFER%2Cnull)%2Ce.deleteFramebuffer(s)%2Cthis.drawAddUndoBitmap()%2Cthis.refreshDrawing(!0)%7DdrawPt(t%2Ce%2Ci%2Cs)%7Bif(!this.back%3F.dims)throw%20new%20Error(%22back.dims%20not%20set%22)%3Bconst%20n%3Dthis.back.dims%5B1%5D%2Cr%3Dthis.back.dims%5B2%5D%2Ca%3Dthis.back.dims%5B3%5D%3Bt%3DMath.min(Math.max(t%2C0)%2Cn-1)%2Ce%3DMath.min(Math.max(e%2C0)%2Cr-1)%2Ci%3DMath.min(Math.max(i%2C0)%2Ca-1)%2Cthis.drawBitmap%5Bt%2Be*n%2Bi*n*r%5D%3Ds%3Bconst%20o%3D0%3D%3D%3Dthis.drawPenAxCorSag%2Cl%3D1%3D%3D%3Dthis.drawPenAxCorSag%2Ch%3D2%3D%3D%3Dthis.drawPenAxCorSag%3Bif(this.opts.penSize%3E1)%7Bconst%20a%3DMath.floor(this.opts.penSize%2F2)%3Bfor(let%20c%3D-a%3Bc%3C%3Da%3Bc%2B%2B)for(let%20d%3D-a%3Bd%3C%3Da%3Bd%2B%2B)o%3Fthis.drawBitmap%5Bt%2Bc%2B(e%2Bd)*n%2Bi*n*r%5D%3Ds%3Al%3Fthis.drawBitmap%5Bt%2Bc%2Be*n%2B(i%2Bd)*n*r%5D%3Ds%3Ah%26%26(this.drawBitmap%5Bt%2B(e%2Bd)*n%2B(i%2Bc)*n*r%5D%3Ds)%7D%7DdrawPenLine(t%2Ce%2Ci)%7Bconst%20s%3DMath.abs(t%5B0%5D-e%5B0%5D)%2Cn%3DMath.abs(t%5B1%5D-e%5B1%5D)%2Cr%3DMath.abs(t%5B2%5D-e%5B2%5D)%3Blet%20a%3D-1%2Co%3D-1%2Cl%3D-1%3Be%5B0%5D%3Et%5B0%5D%26%26(a%3D1)%2Ce%5B1%5D%3Et%5B1%5D%26%26(o%3D1)%2Ce%5B2%5D%3Et%5B2%5D%26%26(l%3D1)%3Blet%20h%3Dt%5B0%5D%2Cc%3Dt%5B1%5D%2Cd%3Dt%5B2%5D%3Bconst%20m%3De%5B0%5D%2Cu%3De%5B1%5D%2CA%3De%5B2%5D%3Bif(s%3E%3Dn%26%26s%3E%3Dr)%7Blet%20t%3D2*n-s%2Ce%3D2*r-s%3Bfor(%3Bh!%3D%3Dm%3B)h%2B%3Da%2Ct%3E%3D0%26%26(c%2B%3Do%2Ct-%3D2*s)%2Ce%3E%3D0%26%26(d%2B%3Dl%2Ce-%3D2*s)%2Ct%2B%3D2*n%2Ce%2B%3D2*r%2Cthis.drawPt(h%2Cc%2Cd%2Ci)%7Delse%20if(n%3E%3Ds%26%26n%3E%3Dr)%7Blet%20t%3D2*s-n%2Ce%3D2*r-n%3Bfor(%3Bc!%3D%3Du%3B)c%2B%3Do%2Ct%3E%3D0%26%26(h%2B%3Da%2Ct-%3D2*n)%2Ce%3E%3D0%26%26(d%2B%3Dl%2Ce-%3D2*n)%2Ct%2B%3D2*s%2Ce%2B%3D2*r%2Cthis.drawPt(h%2Cc%2Cd%2Ci)%7Delse%7Blet%20t%3D2*n-r%2Ce%3D2*s-r%3Bfor(%3Bd!%3D%3DA%3B)d%2B%3Dl%2Ct%3E%3D0%26%26(c%2B%3Do%2Ct-%3D2*r)%2Ce%3E%3D0%26%26(h%2B%3Da%2Ce-%3D2*r)%2Ct%2B%3D2*n%2Ce%2B%3D2*s%2Cthis.drawPt(h%2Cc%2Cd%2Ci)%7D%7DdrawingBinaryDilationWithSeed(t%2Ce%3D6)%7Btry%7Blet%20i%3Dfunction(t)%7Breturn%20t%5B0%5D%2Bt%5B1%5D*o%2Bt%5B2%5D*l%7D%3Bconst%20s%3Dthis.drawBitmap%2Cn%3Dthis.back.dims%5B1%5D%2Cr%3Dthis.back.dims%5B2%5D%2Ca%3Dthis.back.dims%5B3%5D%2Co%3Dn%2Cl%3Dn*r%2Ch%3Dl*a%2Cc%3Di(t)%3Bif(c%3C0%7C%7Cc%3E%3Dh)throw%20new%20Error(%22Seed%20index%20is%20out%20of%20bounds.%22)%3Bconst%20d%3Ds%5Bc%5D%3Bif(0%3D%3D%3Dd)throw%20new%20Error(%22Seed%20voxel%20is%20not%20part%20of%20a%20filled%20cluster.%22)%3Bconst%20m%3Ds.slice()%3Bfor(let%20t%3D0%3Bt%3Ch%3Bt%2B%2B)m%5Bt%5D%3Dm%5Bt%5D%3D%3D%3Dd%3F1%3A0%3Bthis.drawFloodFillCore(m%2Cc%2Ce)%3Bconst%20u%3Ds.slice()%2CA%3D%5B%5D%2Cf%3D%5B-l%2Cl%2C-n%2Cn%2C-1%2C1%5D%3BA.push(...f)%2Ce%3E6%26%26A.push(-n-1%2C1-n%2Cn-1%2Cn%2B1%2C-l-n%2C-l%2Bn%2C-l-1%2C1-l%2Cl-n%2Cl%2Bn%2Cl-1%2Cl%2B1)%2Ce%3E18%26%26A.push(-l-n-1%2C-l-n%2B1%2C-l%2Bn-1%2C-l%2Bn%2B1%2Cl-n-1%2Cl-n%2B1%2Cl%2Bn-1%2Cl%2Bn%2B1)%3Bfor(let%20t%3D0%3Bt%3Ch%3Bt%2B%2B)if(2%3D%3D%3Dm%5Bt%5D)%7Bconst%20e%3Dt%25n%2Ci%3DMath.floor(t%25l%2Fn)%2Cr%3DMath.floor(t%2Fl)%3Bfor(const%20a%20of%20A)%7Bconst%20o%3Dt%2Ba%3Bif(o%3C0%7C%7Co%3E%3Dh)continue%3Bconst%20c%3Do%25n%2Cm%3DMath.floor(o%25l%2Fn)%2CA%3DMath.floor(o%2Fl)%3BMath.abs(c-e)%3E1%7C%7CMath.abs(m-i)%3E1%7C%7CMath.abs(A-r)%3E1%7C%7C0%3D%3D%3Ds%5Bo%5D%26%26(u%5Bo%5D%3Dd)%7D%7Dthis.drawBitmap%3Du%2Cthis.drawAddUndoBitmap()%2Cthis.refreshDrawing(!0)%7Dcatch(t)%7Bl.error(%22Error%20in%20drawingBinaryDilationWithSeed%3A%22%2Ct)%7D%7DdrawFloodFillCore(t%2Ce%2Ci%3D6)%7Bif(!this.back%3F.dims)throw%20new%20Error(%22back.dims%20undefined%22)%3Bconst%20s%3D%5Bthis.back.dims%5B1%5D%2Cthis.back.dims%5B2%5D%2Cthis.back.dims%5B3%5D%5D%2Cn%3Ds%5B0%5D%2Cr%3Dn*s%5B1%5D%3Bfunction%20a(t)%7Bconst%20e%3DMath.floor(t%2Fr)%2Ci%3DMath.floor((t-e*r)%2Fn)%3Breturn%5BMath.floor(t%25n)%2Ci%2Ce%5D%7Dconst%20o%3D%5B%5D%3Bfor(o.push(e)%2Ct%5Be%5D%3D2%3Bo.length%3E0%3B)%7Blet%20e%3Dfunction(e)%7Bconst%20i%3Dh.slice()%3Bif(i%5B0%5D%2B%3De%5B0%5D%2Ci%5B1%5D%2B%3De%5B1%5D%2Ci%5B2%5D%2B%3De%5B2%5D%2Ci%5B0%5D%3C0%7C%7Ci%5B1%5D%3C0%7C%7Ci%5B2%5D%3C0)return%3Bif(i%5B0%5D%3E%3Ds%5B0%5D%7C%7Ci%5B1%5D%3E%3Ds%5B1%5D%7C%7Ci%5B2%5D%3E%3Ds%5B2%5D)return%3Bconst%20a%3D(l%3Di)%5B0%5D%2Bl%5B1%5D*n%2Bl%5B2%5D*r%3Bvar%20l%3B1%3D%3D%3Dt%5Ba%5D%26%26(t%5Ba%5D%3D2%2Co.push(a))%7D%3Bconst%20l%3Do%5B0%5D%3Bo.shift()%3Bconst%20h%3Da(l)%3Be(%5B0%2C0%2C-1%5D)%2Ce(%5B0%2C0%2C1%5D)%2Ce(%5B0%2C-1%2C0%5D)%2Ce(%5B0%2C1%2C0%5D)%2Ce(%5B-1%2C0%2C0%5D)%2Ce(%5B1%2C0%2C0%5D)%2Ci%3C%3D6%7C%7C(e(%5B-1%2C-1%2C0%5D)%2Ce(%5B1%2C1%2C0%5D)%2Ce(%5B-1%2C1%2C0%5D)%2Ce(%5B1%2C1%2C0%5D)%2Ce(%5B0%2C-1%2C-1%5D)%2Ce(%5B0%2C1%2C-1%5D)%2Ce(%5B-1%2C0%2C-1%5D)%2Ce(%5B1%2C0%2C-1%5D)%2Ce(%5B0%2C-1%2C1%5D)%2Ce(%5B0%2C1%2C1%5D)%2Ce(%5B-1%2C0%2C1%5D)%2Ce(%5B1%2C0%2C1%5D)%2Ci%3C%3D18%7C%7C(e(%5B-1%2C-1%2C-1%5D)%2Ce(%5B1%2C-1%2C-1%5D)%2Ce(%5B-1%2C1%2C-1%5D)%2Ce(%5B1%2C1%2C-1%5D)%2Ce(%5B-1%2C-1%2C1%5D)%2Ce(%5B1%2C-1%2C1%5D)%2Ce(%5B-1%2C1%2C1%5D)%2Ce(%5B1%2C1%2C1%5D)))%7D%7DdrawFloodFill(t%2Ce%3D0%2Ci%3D0%2Cs%3DNaN%2Cn%3DNaN%2Cr%3D6%2Ca%3DNumber.POSITIVE_INFINITY%2Co%3D!1)%7Bif(!this.drawBitmap)throw%20new%20Error(%22drawBitmap%20undefined%22)%3Bif(!this.back%3F.dims)throw%20new%20Error(%22back.dims%20undefined%22)%3Be%3DMath.abs(e)%3Bconst%20h%3D%5Bthis.back.dims%5B1%5D%2Cthis.back.dims%5B2%5D%2Cthis.back.dims%5B3%5D%5D%3Bif(t%5B0%5D%3C0%7C%7Ct%5B1%5D%3C0%7C%7Ct%5B2%5D%3C0)return%3Bif(t%5B0%5D%3E%3Dh%5B0%5D%7C%7Ct%5B1%5D%3E%3Dh%5B1%5D%7C%7Ct%5B2%5D%3E%3Dh%5B2%5D)return%3Bconst%20c%3Dh%5B0%5D%2Cd%3Dc*h%5B1%5D%2Cm%3Dd*h%5B2%5D%3Blet%20u%3Dthis.drawBitmap.slice()%2CA%3Dthis.drawBitmap%3Bif(this.clickToSegmentIsGrowing%26%26(u%3Dthis.clickToSegmentGrowingBitmap.slice()%2CA%3Dthis.clickToSegmentGrowingBitmap)%2Cu.length!%3D%3Dd*h%5B2%5D)return%3Blet%20f%3D-1%3Bo%26%260%3D%3D%3Dthis.drawPenAxCorSag%3Ff%3D2%3Ao%26%261%3D%3D%3Dthis.drawPenAxCorSag%3Ff%3D1%3Ao%26%262%3D%3D%3Dthis.drawPenAxCorSag%26%26(f%3D0)%3Bconst%20g%3Dt%3D%3Ethis.vox2mm(t%2Cthis.back.matRAS)%2Cp%3Dg(t)%2Cv%3Da**2%3Bfunction%20x(e)%7Bconst%20i%3Dfunction(t)%7Bconst%20e%3DMath.floor(t%2Fd)%2Ci%3DMath.floor((t-e*d)%2Fc)%3Breturn%5BMath.floor(t%25c)%2Ci%2Ce%5D%7D(e)%3Bif(f%3E%3D0%26%26i%5Bf%5D!%3D%3Dt%5Bf%5D)return!1%3Bconst%20s%3Dg(i)%3Breturn(s%5B0%5D-p%5B0%5D)**2%2B(s%5B1%5D-p%5B1%5D)**2%2B(s%5B2%5D-p%5B2%5D)**2%3C%3Dv%7Dconst%20w%3D(C%3Dt)%5B0%5D%2BC%5B1%5D*c%2BC%5B2%5D*d%3Bvar%20C%3Bconst%20b%3Du%5Bw%5D%3Bif(b!%3D%3De)%7Bfor(let%20t%3D1%3Bt%3Cm%3Bt%2B%2B)if(u%5Bt%5D%3D0%2CA%5Bt%5D%3D%3D%3Db)%7Bif(!x(t))continue%3Bu%5Bt%5D%3D1%7Dif(this.drawFloodFillCore(u%2Cw%2Cr)%2C0!%3D%3Di)%7Bconst%20t%3Dthis.volumes%5B0%5D.img2RAS()%3Blet%20a%3Dt%5Bw%5D%2Co%3Da%3Bif(isFinite(n)%26%26isFinite(s))a%3Dn%2Co%3Ds%3Belse%7Bfor(let%20e%3D1%3Be%3Cm%3Be%2B%2B)2%3D%3D%3Du%5Be%5D%26%26(a%3DMath.max(a%2Ct%5Be%5D)%2Co%3DMath.min(o%2Ct%5Be%5D))%3Bi%3D%3D%3DNumber.POSITIVE_INFINITY%26%26(a%3Di)%2Ci%3D%3D%3DNumber.NEGATIVE_INFINITY%26%26(o%3Di)%7Dl.debug(%22Intensity%20range%20of%20selected%20cluster%20%3A%22%2Co%2Ca)%3Bfor(let%20e%3D1%3Be%3Cm%3Be%2B%2B)if(u%5Be%5D%3D0%2Ct%5Be%5D%3E%3Do%26%26t%5Be%5D%3C%3Da)%7Bif(!x(e))continue%3Bu%5Be%5D%3D1%7Dthis.drawFloodFillCore(u%2Cw%2Cr)%2Ce%3Db%7Dfor(let%20t%3D1%3Bt%3Cm%3Bt%2B%2B)2%3D%3D%3Du%5Bt%5D%26%26(A%5Bt%5D%3De)%3Bthis.clickToSegmentIsGrowing%3F(this.clickToSegmentGrowingBitmap%3DA%2Cthis.refreshDrawing(!0%2Cthis.clickToSegmentIsGrowing))%3A(this.drawBitmap%3DA.slice()%2Cthis.opts.clickToSegment%7C%7Cthis.drawAddUndoBitmap()%2Cthis.refreshDrawing(!0%2Cthis.clickToSegmentIsGrowing))%7Delse%200!%3D%3Di%3Fl.debug(%22drawFloodFill%20selected%20voxel%20is%20not%20part%20of%20a%20drawing%22)%3Al.debug(%22drawFloodFill%20selected%20voxel%20is%20already%20desired%20color%22)%7DdrawPenFilled()%7Bconst%20t%3Dthis.drawPenFillPts.length%3Bif(t%3C2)return%20void(this.drawPenFillPts%3D%5B%5D)%3Bconst%20e%3Dthis.drawPenAxCorSag%3Blet%20i%3D0%2Cs%3D1%3Bif(1%3D%3D%3De%26%26(s%3D2)%2C2%3D%3D%3De%26%26(i%3D1%2Cs%3D2)%2C!this.back%3F.dims)throw%20new%20Error(%22back.dims%20undefined%22)%3Bconst%20n%3D%5Bthis.back.dims%5Bi%2B1%5D%2Cthis.back.dims%5Bs%2B1%5D%5D%2Cr%3Dnew%20Uint8Array(n%5B0%5D*n%5B1%5D)%3Blet%20a%3D1%3Bfunction%20o(t%2Ce)%7Bconst%20i%3DMath.abs(t%5B0%5D-e%5B0%5D)%2Cs%3DMath.abs(t%5B1%5D-e%5B1%5D)%3Br%5Bt%5B0%5D%2Bt%5B1%5D*n%5B0%5D%5D%3Da%2Cr%5Be%5B0%5D%2Be%5B1%5D*n%5B0%5D%5D%3Da%3Blet%20o%3D-1%2Cl%3D-1%3Be%5B0%5D%3Et%5B0%5D%26%26(o%3D1)%2Ce%5B1%5D%3Et%5B1%5D%26%26(l%3D1)%3Blet%20h%3Dt%5B0%5D%2Cc%3Dt%5B1%5D%3Bconst%20d%3De%5B0%5D%2Cm%3De%5B1%5D%3Bif(i%3E%3Ds)%7Blet%20t%3D2*s-i%3Bfor(%3Bh!%3D%3Dd%3B)h%2B%3Do%2Ct%3E%3D0%26%26(c%2B%3Dl%2Ct-%3D2*i)%2Ct%2B%3D2*s%2Cr%5Bh%2Bc*n%5B0%5D%5D%3Da%7Delse%7Blet%20t%3D2*i-s%3Bfor(%3Bc!%3D%3Dm%3B)c%2B%3Dl%2Ct%3E%3D0%26%26(h%2B%3Do%2Ct-%3D2*s)%2Ct%2B%3D2*i%2Cr%5Bh%2Bc*n%5B0%5D%5D%3Da%7D%7Dconst%20l%3D%5Bthis.drawPenFillPts%5B0%5D%5Bi%5D%2Cthis.drawPenFillPts%5B0%5D%5Bs%5D%5D%3Blet%20h%3Dl%3Bfor(let%20e%3D1%3Be%3Ct%3Be%2B%2B)%7Bconst%20t%3D%5Bthis.drawPenFillPts%5Be%5D%5Bi%5D%2Cthis.drawPenFillPts%5Be%5D%5Bs%5D%5D%3Bo(h%2Ct)%2Ch%3Dt%7Do(l%2Ch)%3Bconst%20c%3D%5B%5D%3Bfunction%20d(t)%7Bif(t%5B0%5D%3C0%7C%7Ct%5B1%5D%3C0%7C%7Ct%5B0%5D%3E%3Dn%5B0%5D%7C%7Ct%5B1%5D%3E%3Dn%5B1%5D)return%3Bconst%20e%3Dt%5B0%5D%2Bt%5B1%5D*n%5B0%5D%3B0%3D%3D%3Dr%5Be%5D%26%26(c.push(t)%2Cr%5Be%5D%3D2)%7Dfor(let%20t%3D0%3Bt%3Cn%5B0%5D%3Bt%2B%2B)d(%5Bt%2C0%5D)%3Bfor(let%20t%3D0%3Bt%3Cn%5B0%5D%3Bt%2B%2B)d(%5Bt%2Cn%5B1%5D-1%5D)%3Bfor(let%20t%3D0%3Bt%3Cn%5B1%5D%3Bt%2B%2B)d(%5B0%2Ct%5D)%3Bfor(let%20t%3D0%3Bt%3Cn%5B1%5D%3Bt%2B%2B)d(%5Bn%5B0%5D-1%2Ct%5D)%3Bfor(%3Bc.length%3E0%3B)%7Bconst%20t%3Dc.shift()%3Bd(%5Bt%5B0%5D-1%2Ct%5B1%5D%5D)%2Cd(%5Bt%5B0%5D%2B1%2Ct%5B1%5D%5D)%2Cd(%5Bt%5B0%5D%2Ct%5B1%5D-1%5D)%2Cd(%5Bt%5B0%5D%2Ct%5B1%5D%2B1%5D)%7Da%3Dthis.opts.penValue%3Bconst%20m%3Dthis.drawPenFillPts%5B0%5D%5B3-(i%2Bs)%5D%3Bif(!this.drawBitmap)throw%20new%20Error(%22drawBitmap%20undefined%22)%3Bif(0%3D%3D%3De)%7Bconst%20t%3Dm*n%5B0%5D*n%5B1%5D%3Bfor(let%20e%3D0%3Be%3Cn%5B0%5D*n%5B1%5D%3Be%2B%2B)2!%3D%3Dr%5Be%5D%26%26(this.drawBitmap%5Be%2Bt%5D%3Da)%7Delse%7Blet%20t%3D1%3Bconst%20i%3Dthis.back.dims%5B1%5D*this.back.dims%5B2%5D%3Blet%20s%3Dm*this.back.dims%5B1%5D%3B2%3D%3D%3De%26%26(t%3Dthis.back.dims%5B1%5D%2Cs%3Dm)%3Blet%20o%3D0%3Bfor(let%20e%3D0%3Be%3Cn%5B1%5D%3Be%2B%2B)for(let%20l%3D0%3Bl%3Cn%5B0%5D%3Bl%2B%2B)2!%3D%3Dr%5Bo%5D%26%26(this.drawBitmap%5Bl*t%2Be*i%2Bs%5D%3Da)%2Co%2B%2B%7Dif(!this.drawFillOverwrites%26%26this.drawUndoBitmaps%5Bthis.currentDrawUndoBitmap%5D.length%3E0)%7Bconst%20t%3Dthis.drawBitmap.length%2Ce%3DIi(this.drawUndoBitmaps%5Bthis.currentDrawUndoBitmap%5D%2Ct)%3Bfor(let%20i%3D0%3Bi%3Ct%3Bi%2B%2B)0!%3D%3De%5Bi%5D%26%26(this.drawBitmap%5Bi%5D%3De%5Bi%5D)%7Dthis.drawPenFillPts%3D%5B%5D%2Cthis.drawAddUndoBitmap()%2Cthis.refreshDrawing(!1)%7DcloseDrawing()%7Bthis.drawClearAllUndoBitmaps()%2Cthis.rgbaTex(this.drawTexture%2CNi%2C%5B2%2C2%2C2%2C2%5D%2C!0)%2Cthis.drawBitmap%3Dnull%2Cthis.clickToSegmentGrowingBitmap%3Dnull%2Cthis.drawScene()%7DrefreshDrawing(t%3D!0%2Ce%3D!1)%7Bif(!this.back%3F.dims)throw%20new%20Error(%22back.dims%20undefined%22)%3Bif(!this.drawBitmap)throw%20new%20Error(%22drawBitmap%20undefined%22)%3Bconst%20i%3Dthis.back.dims.slice()%2Cs%3Dthis.back.dims%5B1%5D*this.back.dims%5B2%5D*this.back.dims%5B3%5D%3B8%3D%3D%3Dthis.drawBitmap.length%3F(i%5B1%5D%3D2%2Ci%5B2%5D%3D2%2Ci%5B3%5D%3D2)%3As!%3D%3Dthis.drawBitmap.length%26%26l.warn(%22Drawing%20bitmap%20must%20match%20the%20background%20image%22)%2Cthis.gl.activeTexture(Ni)%2Cthis.gl.bindTexture(this.gl.TEXTURE_3D%2Cthis.drawTexture)%2Cthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Ci%5B1%5D%2Ci%5B2%5D%2Ci%5B3%5D%2Cthis.gl.RED%2Cthis.gl.UNSIGNED_BYTE%2Ce%3Fthis.clickToSegmentGrowingBitmap%3Athis.drawBitmap)%2Ct%26%26this.drawScene()%7Dr8Tex(t%2Ce%2Ci%2Cs%3D!1)%7Bif(t%26%26this.gl.deleteTexture(t)%2Ct%3Dthis.gl.createTexture()%2Cthis.gl.activeTexture(e)%2Cthis.gl.bindTexture(this.gl.TEXTURE_3D%2Ct)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_MIN_FILTER%2Cthis.gl.NEAREST)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_MAG_FILTER%2Cthis.gl.NEAREST)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_R%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_S%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_T%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT%2C1)%2Cthis.gl.texStorage3D(this.gl.TEXTURE_3D%2C1%2Cthis.gl.R8%2Ci%5B1%5D%2Ci%5B2%5D%2Ci%5B3%5D)%2Cs)%7Bconst%20t%3Dnew%20Uint8Array(i%5B1%5D*i%5B2%5D*i%5B3%5D)%3Bthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Ci%5B1%5D%2Ci%5B2%5D%2Ci%5B3%5D%2Cthis.gl.RED%2Cthis.gl.UNSIGNED_BYTE%2Ct)%7Dreturn%20t%7DrgbaTex(t%2Ce%2Ci%2Cs%3D!1)%7Bif(t%26%26this.gl.deleteTexture(t)%2Ct%3Dthis.gl.createTexture()%2Cthis.gl.activeTexture(e)%2Cthis.gl.bindTexture(this.gl.TEXTURE_3D%2Ct)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_MIN_FILTER%2Cthis.gl.LINEAR)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_MAG_FILTER%2Cthis.gl.LINEAR)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_R%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_S%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_T%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT%2C1)%2Cthis.gl.texStorage3D(this.gl.TEXTURE_3D%2C1%2Cthis.gl.RGBA8%2Ci%5B1%5D%2Ci%5B2%5D%2Ci%5B3%5D)%2Cs)%7Bconst%20t%3Dnew%20Uint8Array(i%5B1%5D*i%5B2%5D*i%5B3%5D*4)%3Bthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Ci%5B1%5D%2Ci%5B2%5D%2Ci%5B3%5D%2Cthis.gl.RGBA%2Cthis.gl.UNSIGNED_BYTE%2Ct)%7Dreturn%20t%7DrequestCORSIfNotSameOrigin(t%2Ce)%7Bnew%20URL(e%2Cwindow.location.href).origin!%3D%3Dwindow.location.origin%26%26(t.crossOrigin%3D%22%22)%7Dasync%20loadPngAsTexture(t%2Ce)%7Breturn%20new%20Promise(((i%2Cs)%3D%3E%7Bconst%20n%3Dnew%20Image%3Bn.onload%3D()%3D%3E%7Bif(!this.bmpShader)return%3Blet%20t%3B4%3D%3D%3De%3F(null!%3D%3Dthis.bmpTexture%26%26this.gl.deleteTexture(this.bmpTexture)%2Cthis.bmpTexture%3Dthis.gl.createTexture()%2Ct%3Dthis.bmpTexture%2Cthis.bmpTextureWH%3Dn.width%2Fn.height%2Cthis.gl.activeTexture(33988)%2Cthis.bmpShader.use(this.gl)%2Cthis.gl.uniform1i(this.bmpShader.uniforms.bmpTexture%2C4))%3A5%3D%3D%3De%3F(this.gl.activeTexture(33989)%2Cnull!%3D%3Dthis.matCapTexture%26%26this.gl.deleteTexture(this.matCapTexture)%2Cthis.matCapTexture%3Dthis.gl.createTexture()%2Ct%3Dthis.matCapTexture)%3A(this.fontShader.use(this.gl)%2Cthis.gl.activeTexture(33987)%2Cthis.gl.uniform1i(this.fontShader.uniforms.fontTexture%2C3)%2Cnull!%3D%3Dthis.fontTexture%26%26this.gl.deleteTexture(this.fontTexture)%2Cthis.fontTexture%3Dthis.gl.createTexture()%2Ct%3Dthis.fontTexture)%2Cthis.gl.bindTexture(this.gl.TEXTURE_2D%2Ct)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_WRAP_S%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_WRAP_T%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_MIN_FILTER%2Cthis.gl.LINEAR)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_MAG_FILTER%2Cthis.gl.LINEAR)%2Cthis.gl.texImage2D(this.gl.TEXTURE_2D%2C0%2Cthis.gl.RGBA%2Cthis.gl.RGBA%2Cthis.gl.UNSIGNED_BYTE%2Cn)%2Ci(t)%2C4!%3D%3De%26%26this.drawScene()%7D%2Cn.onerror%3Ds%2Cthis.requestCORSIfNotSameOrigin(n%2Ct)%2Cn.src%3Dt%7D))%7Dasync%20loadFontTexture(t)%7Breturn%20this.loadPngAsTexture(t%2C3)%7Dasync%20loadBmpTexture(t)%7Breturn%20this.loadPngAsTexture(t%2C4)%7Dasync%20loadMatCapTexture(t)%7Breturn%20this.loadPngAsTexture(t%2C5)%7DinitFontMets()%7Bif(!this.fontMetrics)throw%20new%20Error(%22fontMetrics%20undefined%22)%3Bthis.fontMets%3D%7BdistanceRange%3Athis.fontMetrics.atlas.distanceRange%2Csize%3Athis.fontMetrics.atlas.size%2Cmets%3A%7B%7D%7D%3Bfor(let%20t%3D0%3Bt%3C256%3Bt%2B%2B)this.fontMets.mets%5Bt%5D%3D%7Bxadv%3A0%2Cuv_lbwh%3A%5B0%2C0%2C0%2C0%5D%2Clbwh%3A%5B0%2C0%2C0%2C0%5D%7D%3Bconst%20t%3Dthis.fontMetrics.atlas.width%2Ce%3Dthis.fontMetrics.atlas.height%3Bfor(let%20i%3D0%3Bi%3Cthis.fontMetrics.glyphs.length%3Bi%2B%2B)%7Bconst%20s%3Dthis.fontMetrics.glyphs%5Bi%5D%2Cn%3Ds.unicode%3Bif(this.fontMets.mets%5Bn%5D.xadv%3Ds.advance%2Cvoid%200%3D%3D%3Ds.planeBounds)continue%3Blet%20r%3Ds.atlasBounds.left%2Ft%2Ca%3D(e-s.atlasBounds.top)%2Fe%2Co%3D(s.atlasBounds.right-s.atlasBounds.left)%2Ft%2Cl%3D(s.atlasBounds.top-s.atlasBounds.bottom)%2Fe%3Bthis.fontMets.mets%5Bn%5D.uv_lbwh%3D%5Br%2Ca%2Co%2Cl%5D%2Cr%3Ds.planeBounds.left%2Ca%3Ds.planeBounds.bottom%2Co%3Ds.planeBounds.right-s.planeBounds.left%2Cl%3Ds.planeBounds.top-s.planeBounds.bottom%2Cthis.fontMets.mets%5Bn%5D.lbwh%3D%5Br%2Ca%2Co%2Cl%5D%7D%7Dasync%20loadFont(t%3DTe%2Ce%3DVe)%7Bawait%20this.loadFontTexture(t)%3Bconst%20i%3Dawait%20fetch(e)%3Bif(!i.ok)throw%20Error(i.statusText)%3Bconst%20s%3Dawait%20i.text()%3Bthis.fontMetrics%3DJSON.parse(s)%2Cthis.initFontMets()%2Cthis.fontShader.use(this.gl)%2Cthis.drawScene()%7Dasync%20loadDefaultMatCap()%7Breturn%20this.loadMatCapTexture(%22data%3Aimage%2Fjpeg%3Bbase64%2C%2F9j%2F4QrFRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAdAAAAcgEyAAIAAAAUAAAAj4dpAAQAAAABAAAApAAAANAACvyAAAAnEAAK%2FIAAACcQQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKQAyMDE4OjA3OjEzIDE3OjU0OjI3AAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAACAKADAAQAAAABAAACAAAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAAmPAAAAAAAAAEgAAAABAAAASAAAAAH%2F2P%2FtAAxBZG9iZV9DTQAB%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAoACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A0FEqSiVItYFNCcpAJKXa1EDFZ6f0zKzn7aG%2B0fSedGj4ldFV0npfTKhbln1rO27gn%2BRV%2Bd%2FbQKXncbpuXlGKKnPHiBp%2Fnn2f9JalX1WeG78q5lLe%2Ff7%2FAObb%2FwBJHyOu3v8AZjNFFY0B0Lo%2F6hqz7LH2u3WuNjvFxn8qCWy%2Fp3QaGn9K%2FIsHZgEf523b%2FwBNVXVY8%2BysNHgdf4BKU6IVTA0VHljfuCg7Dx3c1t%2BQj8iPCeEUOfZ0yo%2FQJb%2BIVW3AvZwN48ufuW1CYslFDzxaQYOh8FGFt34ldg9w17Hus3IxH1aj3N8e4SQ1wnBTJJKZAqUocqQKSn%2F%2F0NFRIUkoUi1GQtPovRbeov8AVfNeK0w5%2FdxHLa%2F%2FACaH0fpbup5DtxLcKg%2Fp7OJPPosd%2FwBX%2B5%2F22rXVeui4fY%2Bn%2FosKsbAWabwNPb%2B7T%2F58QJSA6eV1nEwWfZOnNadmhcPoA%2F8Aox6xbcm2%2Bw2WuL3HuVTa5FaUF1JgVMKDUQJKXAUgEwUgipcBOAkFIIoWhKFKEkUMC1DfUCjwmISQ42XhRL6x8WqjC6J7JWXnYkTawf1h%2FFJTRThMnhJT%2F9HSUXNtttqxaBN%2BQ4MZ5T%2BcVKQBJMAak%2BSrYfVPsmRdmtE5GwsxgeGl3tNn9itPK0Ox1rOpwcZvQenu%2FR1CMu0cucfc6uf5f07%2FAPtlY7HSqbXlxJcS5xMlx5JPLirNZTbXgNqtWGKtWrDCklO1EahNKI1FSQKQUQpBFDIKQUQpBFC6SJVU%2B1wawST2R7enZNTN7m6DmNYRQ1EykRCZJDAhBsZIRyoOCSnEyaPSs0%2Bi7hC2rUyqg9p8eQqQYgVP%2F9Kzn2%2Bnj7RzYY%2BQ1csg2SVa6tb%2BmDOzGj7z7lntOqUjqmIblRVyoqjSVbqKAXN1hR2FVayjsKcpstKK0quwozSkhMFMITSpgpwQUgThQBUgUUOt0XYX2En3gCB5d1rLlq7HMcHNJaRwRorB6jlFu02GEDG%2BqGXUm1NyniuI0kDifzlUSLp5TSnKUouTyolJCKwSFRe2HEK%2B9U7xDpQKn%2F%2FTo579%2BVZ%2FWI%2B72oO0tUnfpMsjxefxKs5VBrA0Uc5eqmWEfTaOoq3W5UWGCrVbuE4ILdY5HY5U2OVhjk5DbY5Ga5VWORWuRQ2WuUwUBrlMOTghOCnlCDk4cihLKfchbk%2B5JCSU0qEpSipnKYlRlIlJDFxVXJ%2BiT4Kw4qtkH2H4IKf%2F1M6qBnie1sH%2FADl0PWsMNY17RpAC53LBq6hcB2eSPmd4XYXubmdPa4al7Nw%2BPKp8yTHJA9LILd5UCeOcetAh5Fw2uhFY9Ty6YO4d9VXaYKnhKwwSjRbtblYY5UWPVhj1IFjcY5Ga5VGPRmuTghtNciByrNciNcihsBycOQQ5SDk5CXcn3IW5PuSQllKUPcn3JKZykXKEpi5FCnOVa93tKK5yrWulwb4kIKf%2F1afW6%2FTzW2drWA%2FNvsd%2F31afR88nFFTj%2FN6BC63R6uH6oHuoO7%2Byfa%2F%2FAL6srByDW%2BJ0d%2BVRczj4h%2BLNy2UwNjydjIY1wc0djp8DqFmWsLXK2cng%2FI%2FBBtcHKKFhmnUkLXQjseqp0Km16nBYCG8x6O16osejsenhYW416I16qteitenBDZDlIOQA9SDkUJw5PuQQ5S3IqS7k%2B5C3J9ySEm5MXIe9Rc9JS73oDTuu8mgn79E1lkBRxz7C88vOnwGgSQ%2F%2F1tAhrgWuEtcCHDxB0K5fJodiZL6Ha7D7T4tP0Hf5q6WVQ6vifaKRbWJtpB0HLmcub%2FWZ9NifONhETRcxlxI15UxZ2VNro%2FgVMPVbhbAk2C6UwOqGCSpApwCCWwxyOx6ptcisenhYW416K16qNeitenha2g9ED1VD1MORQ2g5SDlXD1IPRUm3Jb0LeoufCSEpehvsQnWqvdkAAklJSSx5scK2nV3fwH5xVgEAADQDQBV8WtwabXj3v4Hg3sP7SMkgl%2F%2FXtSlJ5HZMmUqxyOqYHpE5FQ%2FQuM2NH5jj%2Bd%2FxT%2F8AwNUGyDqum8jqDoQdRCyc3phqm3HBdVy6saln9X96v%2FqEycOoXxl0LTBUwhN01GoUwUyl9swptKGHBSBCSkzXojbFXCkHJwQ22vRA9Uw9TFiKG4Hpw9VBan9VFDa9RQstVZ18KvdlAaJWhsWZAHdTw6HXuF9o%2FRDVjT%2Bcf3v6jUPDwH3EXZIIr5bWdC7%2Bt%2B6xaoH%2BwJUgrQlCmAnhFD%2F%2F0LCSSZTLFKTdDIUVIIKauV0uq8myoim08%2FuO%2FrNH0f6zVl3Y9uO7bew1k8O5af6r10ITkBzS1wDmnlpEg%2FIppC4F5vb3TgLXt6VjOk1E0Hwbq3%2FMd%2F5JVX9Ly2%2FR2Wj%2BSdp%2FzX%2F%2BSTeFdxNQJ0R2Nks%2BlTYP7JI%2F6O5QLXDlrh8WkfwSpVqS3JBrzw0n4AqTcXJd9Gp%2F%2BaR%2F1UIqtiXqDrSrbOl5L%2Fp7WDzMn7mqzV0rHZrZNp89B%2FmhGitsOVXXkZDttTS7xPYf1nLRxOm1UkPti20aj90HyH539pXtrWgNaAGjgDQJkQEEsgpBQCmEUMgnUZTykp%2F%2F2f%2FtErpQaG90b3Nob3AgMy4wADhCSU0EJQAAAAAAEAAAAAAAAAAAAAAAAAAAAAA4QklNBDoAAAAAAO8AAAAQAAAAAQAAAAAAC3ByaW50T3V0cHV0AAAABQAAAABQc3RTYm9vbAEAAAAASW50ZWVudW0AAAAASW50ZQAAAABJbWcgAAAAD3ByaW50U2l4dGVlbkJpdGJvb2wAAAAAC3ByaW50ZXJOYW1lVEVYVAAAAAEAAAAAAA9wcmludFByb29mU2V0dXBPYmpjAAAAEQBBAGoAdQBzAHQAZQAgAGQAZQAgAHAAcgB1AGUAYgBhAAAAAAAKcHJvb2ZTZXR1cAAAAAEAAAAAQmx0bmVudW0AAAAMYnVpbHRpblByb29mAAAACXByb29mQ01ZSwA4QklNBDsAAAAAAi0AAAAQAAAAAQAAAAAAEnByaW50T3V0cHV0T3B0aW9ucwAAABcAAAAAQ3B0bmJvb2wAAAAAAENsYnJib29sAAAAAABSZ3NNYm9vbAAAAAAAQ3JuQ2Jvb2wAAAAAAENudENib29sAAAAAABMYmxzYm9vbAAAAAAATmd0dmJvb2wAAAAAAEVtbERib29sAAAAAABJbnRyYm9vbAAAAAAAQmNrZ09iamMAAAABAAAAAAAAUkdCQwAAAAMAAAAAUmQgIGRvdWJAb%2BAAAAAAAAAAAABHcm4gZG91YkBv4AAAAAAAAAAAAEJsICBkb3ViQG%2FgAAAAAAAAAAAAQnJkVFVudEYjUmx0AAAAAAAAAAAAAAAAQmxkIFVudEYjUmx0AAAAAAAAAAAAAAAAUnNsdFVudEYjUHhsQFIAAAAAAAAAAAAKdmVjdG9yRGF0YWJvb2wBAAAAAFBnUHNlbnVtAAAAAFBnUHMAAAAAUGdQQwAAAABMZWZ0VW50RiNSbHQAAAAAAAAAAAAAAABUb3AgVW50RiNSbHQAAAAAAAAAAAAAAABTY2wgVW50RiNQcmNAWQAAAAAAAAAAABBjcm9wV2hlblByaW50aW5nYm9vbAAAAAAOY3JvcFJlY3RCb3R0b21sb25nAAAAAAAAAAxjcm9wUmVjdExlZnRsb25nAAAAAAAAAA1jcm9wUmVjdFJpZ2h0bG9uZwAAAAAAAAALY3JvcFJlY3RUb3Bsb25nAAAAAAA4QklNA%2B0AAAAAABAASAAAAAEAAQBIAAAAAQABOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD%2BAAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNJxAAAAAAAAoAAQAAAAAAAAABOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FA%2BgAAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwPoAAAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAAAD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FA%2BgAADhCSU0EAAAAAAAAAgAAOEJJTQQCAAAAAAACAAA4QklNBDAAAAAAAAEBADhCSU0ELQAAAAAABgABAAAAMjhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAAM9AAAABgAAAAAAAAAAAAACAAAAAgAAAAAEAG0AYwA2ADEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAAAAABudWxsAAAAAgAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAIAAAAAAFJnaHRsb25nAAACAAAAAAZzbGljZXNWbExzAAAAAU9iamMAAAABAAAAAAAFc2xpY2UAAAASAAAAB3NsaWNlSURsb25nAAAAAAAAAAdncm91cElEbG9uZwAAAAAAAAAGb3JpZ2luZW51bQAAAAxFU2xpY2VPcmlnaW4AAAANYXV0b0dlbmVyYXRlZAAAAABUeXBlZW51bQAAAApFU2xpY2VUeXBlAAAAAEltZyAAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAACAAAAAABSZ2h0bG9uZwAAAgAAAAADdXJsVEVYVAAAAAEAAAAAAABudWxsVEVYVAAAAAEAAAAAAABNc2dlVEVYVAAAAAEAAAAAAAZhbHRUYWdURVhUAAAAAQAAAAAADmNlbGxUZXh0SXNIVE1MYm9vbAEAAAAIY2VsbFRleHRURVhUAAAAAQAAAAAACWhvcnpBbGlnbmVudW0AAAAPRVNsaWNlSG9yekFsaWduAAAAB2RlZmF1bHQAAAAJdmVydEFsaWduZW51bQAAAA9FU2xpY2VWZXJ0QWxpZ24AAAAHZGVmYXVsdAAAAAtiZ0NvbG9yVHlwZWVudW0AAAARRVNsaWNlQkdDb2xvclR5cGUAAAAATm9uZQAAAAl0b3BPdXRzZXRsb25nAAAAAAAAAApsZWZ0T3V0c2V0bG9uZwAAAAAAAAAMYm90dG9tT3V0c2V0bG9uZwAAAAAAAAALcmlnaHRPdXRzZXRsb25nAAAAAAA4QklNBCgAAAAAAAwAAAACP%2FAAAAAAAAA4QklNBBQAAAAAAAQAAAAyOEJJTQQMAAAAAAmrAAAAAQAAAKAAAACgAAAB4AABLAAAAAmPABgAAf%2FY%2F%2B0ADEFkb2JlX0NNAAH%2F7gAOQWRvYmUAZIAAAAAB%2F9sAhAAMCAgICQgMCQkMEQsKCxEVDwwMDxUYExMVExMYEQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQ0LCw0ODRAODhAUDg4OFBQODg4OFBEMDAwMDBERDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz%2FwAARCACgAKADASIAAhEBAxEB%2F90ABAAK%2F8QBPwAAAQUBAQEBAQEAAAAAAAAAAwABAgQFBgcICQoLAQABBQEBAQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMMMwEAAhEDBCESMQVBUWETInGBMgYUkaGxQiMkFVLBYjM0coLRQwclklPw4fFjczUWorKDJkSTVGRFwqN0NhfSVeJl8rOEw9N14%2FNGJ5SkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9xEAAgIBAgQEAwQFBgcHBgU1AQACEQMhMRIEQVFhcSITBTKBkRShsUIjwVLR8DMkYuFygpJDUxVjczTxJQYWorKDByY1wtJEk1SjF2RFVTZ0ZeLys4TD03Xj80aUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9ic3R1dnd4eXp7fH%2F9oADAMBAAIRAxEAPwDQUSpKJUi1gU0JykAkpdrUQMVnp%2FTMrOftob7R9J50aPiV0VXSel9MqFuWfWs7buCf5FX539tApedxum5eUYoqc8eIGn%2BefZ%2F0lqVfVZ4bvyrmUt79%2Fv8A5tv%2FAEkfI67e%2FwBmM0UVjQHQuj%2FqGrPssfa7da42O8XGfyoJbL%2BndBoaf0r8iwdmAR%2Fnbdv%2FAE1VdVjz7Kw0eB1%2FgEpTohVMDRUeWN%2B4KDsPHdzW35CPyI8J4RQ59nTKj9Alv4hVbcC9nA3jy5%2B5bUJiyUUPPFpBg6HwUYW3fiV2D3DXse6zcjEfVqPc3x7hJDXCcFMkkpkCpShypApKf%2F%2FQ0VEhSShSLUZC0%2Bi9Ft6i%2FwBV814rTDn93Ectr%2F8AJofR%2Blu6nkO3EtwqD%2Bns4k8%2Bix3%2FAFf7n%2FbatdV66Lh9j6f%2BiwqxsBZpvA09v7tP%2FnxAlIDp5XWcTBZ9k6c1p2aFw%2BgD%2FwCjHrFtybb7DZa4vce5VNrkVpQXUmBUwoNRAkpcBSATBSCKlwE4CQUgihaEoUoSRQwLUN9QKPCYhJDjZeFEvrHxaqMLonslZediRNrB%2FWH8UlNFOEyeElP%2F0dJRc2222rFoE35DgxnlP5xUpAEkwBqT5Kth9U%2ByZF2a0TkbCzGB4aXe02f2K08rQ7HWs6nBxm9B6e79HUIy7Ry5x9zq5%2Fl%2FTv8A%2B2VjsdKpteXElxLnEyXHkk8uKs1lNteA2q1YYq1asMKSU7URqE0ojUVJApBRCkEUMgpBRCkEULpIlVT7XBrBJPZHt6dk1M3uboOY1hFDUTKREJkkMCEGxkhHKg4JKcTJo9KzT6LuELatTKqD2nx5CpBiBU%2F%2F0rOfb6ePtHNhj5DVyyDZJVrq1v6YM7MaPvPuWe06pSOqYhuVFXKiqNJVuooBc3WFHYVVrKOwpymy0orSq7CjNKSEwUwhNKmCnBBSBOFAFSBRQ63RdhfYSfeAIHl3WsuWrscxwc0lpHBGisHqOUW7TYYQMb6oZdSbU3KeK4jSQOJ%2FOVRIunlNKcpSi5PKiUkIrBIVF7YcQr71TvEOlAqf%2F9Ojnv35Vn9Yj7vag7S1Sd%2BkyyPF5%2FEqzlUGsDRRzl6qZYR9No6irdblRYYKtVu4Tggt1jkdjlTY5WGOTkNtjkZrlVY5Fa5FDZa5TBQGuUw5OCE4KeUIOThyKEsp9yFuT7kkJJTSoSlKKmcpiVGUiUkMXFVcn6JPgrDiq2QfYfggp%2F%2FUzqoGeJ7Wwf8AOXQ9aww1jXtGkALncsGrqFwHZ5I%2BZ3hdhe5uZ09rhqXs3D48qnzJMckD0sgt3lQJ45x60CHkXDa6EVj1PLpg7h31VdpgqeErDBKNFu1uVhjlRY9WGPUgWNxjkZrlUY9Ga5OCG01yIHKs1yI1yKGwHJw5BDlIOTkJdyfchbk%2B5JCWUpQ9yfckpnKRcoSmLkUKc5Vr3e0ornKta6XBviQgp%2F%2FVp9br9PNbZ2tYD82%2Bx3%2FfVp9HzycUVOP83oELrdHq4fqge6g7v7J9r%2F8AvqysHINb4nR35VFzOPiH4s3LZTA2PJ2MhjXBzR2OnwOoWZawtcrZyeD8j8EG1wcooWGadSQtdCOx6qnQqbXqcFgIbzHo7Xqix6Ox6eFhbjXojXqq16K16cENkOUg5AD1IORQnDk%2B5BDlLcipLuT7kLcn3JISbkxch71Fz0lLvegNO67yaCfv0TWWQFHHPsLzy86fAaBJD%2F%2FW0CGuBa4S1wIcPEHQrl8mh2JkvodrsPtPi0%2FQd%2FmrpZVDq%2BJ9opFtYm2kHQcuZy5v9Zn02J842ERNFzGXEjXlTFnZU2uj%2BBUw9VuFsCTYLpTA6oYJKkCnAIJbDHI7Hqm1yKx6eFhbjXorXqo16K16eFraD0QPVUPUw5FDaDlIOVcPUg9FSbclvQt6i58JISl6G%2BxCdaq92QACSUlJLHmxwradXd%2FAfnFWAQAANANAFXxa3BptePe%2FgeDew%2FtIySCX%2F9e1KUnkdkyZSrHI6pgekTkVD9C4zY0fmOP53%2FFP%2FwDA1QbIOq6byOoOhB1ELJzemGqbccF1XLqxqWf1f3q%2F%2BoTJw6hfGXQtMFTCE3TUahTBTKX2zCm0oYcFIEJKTNeiNsVcKQcnBDba9ED1TD1MWIobgenD1UFqf1UUNr1FCy1VnXwq92UBolaGxZkAd1PDode4X2j9ENWNP5x%2Fe%2FqNQ8PAfcRdkgivltZ0Lv637rFqgf7AlSCtCUKYCeEUP%2F%2FQsJJJlMsUpN0MhRUggpq5XS6rybKiKbTz%2B47%2Bs0fR%2FrNWXdj247tt7DWTw7lp%2FqvXQhOQHNLXAOaeWkSD8imkLgXm9vdOAte3pWM6TUTQfBurf8x3%2FklVf0vLb9HZaP5J2n%2FNf%2F5JN4V3E1AnRHY2Sz6VNg%2Fskj%2Fo7lAtcOWuHxaR%2FBKlWpLckGvPDSfgCpNxcl30an%2F5pH%2FVQiq2JeoOtKts6Xkv%2BntYPMyfuarNXSsdmtk2nz0H%2BaEaK2w5VdeRkO21NLvE9h%2FWctHE6bVSQ%2B2LbRqP3QfIfnf2le2taA1oAaOANAmRAQSyCkFAKYRQyCdRlPKSn%2F%2FZADhCSU0EIQAAAAAAUwAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAAABIAQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAEMAAAABADhCSU0EBgAAAAAABwAGAAAAAQEA%2F%2BESK2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTgtMDctMTJUMjA6MDc6NDcrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE4LTA3LTEzVDE3OjU0OjI3KzAxOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE4LTA3LTEzVDE3OjU0OjI3KzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL2pwZWciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo3MmVhYjVmZS02NDZkLWVhNDMtODQyNC0xNWQzZTgwOWExNDQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0OGNjMGI3YS1iYTJkLWZmNDAtYmNkNC1jNGQzMzIyZjBiNzQiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDphYzFjM2NhNS1hYTg4LWI5NGMtOGE4MS05YmU4MjA3ZGZiODciPiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT5hZG9iZTpkb2NpZDpwaG90b3Nob3A6YThjMGNhZTYtODNjYy1hYzQ4LWI2YzAtN2FiODNlOWJkMGM3PC9yZGY6bGk%2BIDwvcmRmOkJhZz4gPC9waG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM%2BIDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YWMxYzNjYTUtYWE4OC1iOTRjLThhODEtOWJlODIwN2RmYjg3IiBzdEV2dDp3aGVuPSIyMDE4LTA3LTEyVDIwOjA3OjQ3KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIi8%2BIDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpjYmI3MzZlZC0zOTRhLTM2NDgtYThiOC02Mzk1MmY0NDcxMjIiIHN0RXZ0OndoZW49IjIwMTgtMDctMTNUMTY6MTM6NTgrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQ2YjNkYTI3LWI4YjEtYmU0Yi1hYTQ4LTExZGM5NmZkNTIyZiIgc3RFdnQ6d2hlbj0iMjAxOC0wNy0xM1QxNzo1NDoyNyswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvanBlZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iZGVyaXZlZCIgc3RFdnQ6cGFyYW1ldGVycz0iY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9qcGVnIi8%2BIDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo3MmVhYjVmZS02NDZkLWVhNDMtODQyNC0xNWQzZTgwOWExNDQiIHN0RXZ0OndoZW49IjIwMTgtMDctMTNUMTc6NTQ6MjcrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk%2BIDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjQ2YjNkYTI3LWI4YjEtYmU0Yi1hYTQ4LTExZGM5NmZkNTIyZiIgc3RSZWY6ZG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjg3NjM1NDk5LWZiMTItYWU0MC04NWEzLThkMWFiN2NkZGVhOSIgc3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmFjMWMzY2E1LWFhODgtYjk0Yy04YTgxLTliZTgyMDdkZmI4NyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hwYWNrZXQgZW5kPSJ3Ij8%2B%2F%2BIMWElDQ19QUk9GSUxFAAEBAAAMSExpbm8CEAAAbW50clJHQiBYWVogB84AAgAJAAYAMQAAYWNzcE1TRlQAAAAASUVDIHNSR0IAAAAAAAAAAAAAAAEAAPbWAAEAAAAA0y1IUCAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARY3BydAAAAVAAAAAzZGVzYwAAAYQAAABsd3RwdAAAAfAAAAAUYmtwdAAAAgQAAAAUclhZWgAAAhgAAAAUZ1hZWgAAAiwAAAAUYlhZWgAAAkAAAAAUZG1uZAAAAlQAAABwZG1kZAAAAsQAAACIdnVlZAAAA0wAAACGdmlldwAAA9QAAAAkbHVtaQAAA%2FgAAAAUbWVhcwAABAwAAAAkdGVjaAAABDAAAAAMclRSQwAABDwAAAgMZ1RSQwAABDwAAAgMYlRSQwAABDwAAAgMdGV4dAAAAABDb3B5cmlnaHQgKGMpIDE5OTggSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkAAGRlc2MAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAADzUQABAAAAARbMWFlaIAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9kZXNjAAAAAAAAABZJRUMgaHR0cDovL3d3dy5pZWMuY2gAAAAAAAAAAAAAABZJRUMgaHR0cDovL3d3dy5pZWMuY2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2aWV3AAAAAAATpP4AFF8uABDPFAAD7cwABBMLAANcngAAAAFYWVogAAAAAABMCVYAUAAAAFcf521lYXMAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAKPAAAAAnNpZyAAAAAAQ1JUIGN1cnYAAAAAAAAEAAAAAAUACgAPABQAGQAeACMAKAAtADIANwA7AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3AHwAgQCGAIsAkACVAJoAnwCkAKkArgCyALcAvADBAMYAywDQANUA2wDgAOUA6wDwAPYA%2BwEBAQcBDQETARkBHwElASsBMgE4AT4BRQFMAVIBWQFgAWcBbgF1AXwBgwGLAZIBmgGhAakBsQG5AcEByQHRAdkB4QHpAfIB%2BgIDAgwCFAIdAiYCLwI4AkECSwJUAl0CZwJxAnoChAKOApgCogKsArYCwQLLAtUC4ALrAvUDAAMLAxYDIQMtAzgDQwNPA1oDZgNyA34DigOWA6IDrgO6A8cD0wPgA%2BwD%2BQQGBBMEIAQtBDsESARVBGMEcQR%2BBIwEmgSoBLYExATTBOEE8AT%2BBQ0FHAUrBToFSQVYBWcFdwWGBZYFpgW1BcUF1QXlBfYGBgYWBicGNwZIBlkGagZ7BowGnQavBsAG0QbjBvUHBwcZBysHPQdPB2EHdAeGB5kHrAe%2FB9IH5Qf4CAsIHwgyCEYIWghuCIIIlgiqCL4I0gjnCPsJEAklCToJTwlkCXkJjwmkCboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3ArzCwsLIgs5C1ELaQuAC5gLsAvIC%2BEL%2BQwSDCoMQwxcDHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakNww3eDfgOEw4uDkkOZA5%2FDpsOtg7SDu4PCQ8lD0EPXg96D5YPsw%2FPD%2BwQCRAmEEMQYRB%2BEJsQuRDXEPURExExEU8RbRGMEaoRyRHoEgcSJhJFEmQShBKjEsMS4xMDEyMTQxNjE4MTpBPFE%2BUUBhQnFEkUahSLFK0UzhTwFRIVNBVWFXgVmxW9FeAWAxYmFkkWbBaPFrIW1hb6Fx0XQRdlF4kXrhfSF%2FcYGxhAGGUYihivGNUY%2BhkgGUUZaxmRGbcZ3RoEGioaURp3Gp4axRrsGxQbOxtjG4obshvaHAIcKhxSHHscoxzMHPUdHh1HHXAdmR3DHeweFh5AHmoelB6%2BHukfEx8%2BH2kflB%2B%2FH%2BogFSBBIGwgmCDEIPAhHCFIIXUhoSHOIfsiJyJVIoIiryLdIwojOCNmI5QjwiPwJB8kTSR8JKsk2iUJJTglaCWXJccl9yYnJlcmhya3JugnGCdJJ3onqyfcKA0oPyhxKKIo1CkGKTgpaymdKdAqAio1KmgqmyrPKwIrNitpK50r0SwFLDksbiyiLNctDC1BLXYtqy3hLhYuTC6CLrcu7i8kL1ovkS%2FHL%2F4wNTBsMKQw2zESMUoxgjG6MfIyKjJjMpsy1DMNM0YzfzO4M%2FE0KzRlNJ402DUTNU01hzXCNf02NzZyNq426TckN2A3nDfXOBQ4UDiMOMg5BTlCOX85vDn5OjY6dDqyOu87LTtrO6o76DwnPGU8pDzjPSI9YT2hPeA%2BID5gPqA%2B4D8hP2E%2Foj%2FiQCNAZECmQOdBKUFqQaxB7kIwQnJCtUL3QzpDfUPARANER0SKRM5FEkVVRZpF3kYiRmdGq0bwRzVHe0fASAVIS0iRSNdJHUljSalJ8Eo3Sn1KxEsMS1NLmkviTCpMcky6TQJNSk2TTdxOJU5uTrdPAE9JT5NP3VAnUHFQu1EGUVBRm1HmUjFSfFLHUxNTX1OqU%2FZUQlSPVNtVKFV1VcJWD1ZcVqlW91dEV5JX4FgvWH1Yy1kaWWlZuFoHWlZaplr1W0VblVvlXDVchlzWXSddeF3JXhpebF69Xw9fYV%2BzYAVgV2CqYPxhT2GiYfViSWKcYvBjQ2OXY%2BtkQGSUZOllPWWSZedmPWaSZuhnPWeTZ%2BloP2iWaOxpQ2maafFqSGqfavdrT2una%2F9sV2yvbQhtYG25bhJua27Ebx5veG%2FRcCtwhnDgcTpxlXHwcktypnMBc11zuHQUdHB0zHUodYV14XY%2Bdpt2%2BHdWd7N4EXhueMx5KnmJeed6RnqlewR7Y3vCfCF8gXzhfUF9oX4BfmJ%2Bwn8jf4R%2F5YBHgKiBCoFrgc2CMIKSgvSDV4O6hB2EgITjhUeFq4YOhnKG14c7h5%2BIBIhpiM6JM4mZif6KZIrKizCLlov8jGOMyo0xjZiN%2F45mjs6PNo%2BekAaQbpDWkT%2BRqJIRknqS45NNk7aUIJSKlPSVX5XJljSWn5cKl3WX4JhMmLiZJJmQmfyaaJrVm0Kbr5wcnImc951kndKeQJ6unx2fi5%2F6oGmg2KFHobaiJqKWowajdqPmpFakx6U4pammGqaLpv2nbqfgqFKoxKk3qamqHKqPqwKrdavprFys0K1ErbiuLa6hrxavi7AAsHWw6rFgsdayS7LCszizrrQltJy1E7WKtgG2ebbwt2i34LhZuNG5SrnCuju6tbsuu6e8IbybvRW9j74KvoS%2B%2F796v%2FXAcMDswWfB48JfwtvDWMPUxFHEzsVLxcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8%2B40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1%2BDYZNjo2WzZ8dp22vvbgNwF3IrdEN2W3hzeot8p36%2FgNuC94UThzOJT4tvjY%2BPr5HPk%2FOWE5g3mlucf56noMui86Ubp0Opb6uXrcOv77IbtEe2c7ijutO9A78zwWPDl8XLx%2F%2FKM8xnzp%2FQ09ML1UPXe9m32%2B%2FeK%2BBn4qPk4%2Bcf6V%2Frn%2B3f8B%2FyY%2FSn9uv5L%2Ftz%2Fbf%2F%2F%2F%2B4ADkFkb2JlAGRAAAAAAf%2FbAIQAAgICAgICAgICAgMCAgIDBAMCAgMEBQQEBAQEBQYFBQUFBQUGBgcHCAcHBgkJCgoJCQwMDAwMDAwMDAwMDAwMDAEDAwMFBAUJBgYJDQoJCg0PDg4ODg8PDAwMDAwPDwwMDAwMDA8MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgCAAIAAwERAAIRAQMRAf%2FdAAQAQP%2FEAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4%2FPE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BCk5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0%2BPzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BDlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq%2Bv%2FaAAwDAQACEQMRAD8A7B9HTNg4bWKteOKVp7%2FjgVYcVUmxSpN92FVFvuxVSNNzUbb0Nd9%2Bm2FVBvDFVP8Ajiq3FLYHfFV4FcWSqFwJVVXAlXVTkUqoWv8AA4GSqqCu%2FhtgSvCYErgntilv09%2FDFXenXFLXo4obW1dzREZz7AnCqKj0W9l%2BzAVB7tthpFhHR%2BV7px%2B8dU%2BQJyVMbR8fk9f92SufECgw0i0dH5Ps%2FwBpGbxJJw0i0YnlPT1p%2FooNO5FcKFceWNPH%2FHon%2FAjChf8A4bsB%2FwAeyf8AAjFWj5asD1tU%2FwCBGFFKLeVtNYb2kf8AwIxWkJJ5O0tq%2FwCioPkKH8MKKS%2BXyNp7fZRl9wxxWkpn8hJv6U8in3oRihJbjyTfx1MUiyexBGFUjuPLuqQFudqXA7oQfwxQk8lpLESJYnjPcMpH68VQ5jPzGFVnE4oa47bjCq0rv0xQtK%2F7WKrSuKrSu%2BKrKVO2KGqDbck0qa%2FPArWKt%2FwxVcMVXg%2B%2BBVQHwxSqV967DAq8Hpiq4H%2B3FK8HfFVQHAq8HFV4PTtiq6uBW69PxOKurir%2FAP%2FQ7D8%2B%2BbBw2v1UxVaT1xSt%2BjAqkcVUzilSJ64VUGOKqJ%2FHxwqpnFVn%2BZxVrqfc4pX0HvilVVT1oaeOBKsq9TTftgZK6rgSrqmRZKyodsCVVU%2B%2FAlVEdcCV4jxSi4bCeb7CEjxO2NLabQaBK5Blag7qv9ckIseJkeneU3upY4LWylvLh9kjRGkYn2UVyYgxM3q2ifkr5z1NY2TRWsIXpSW7IgoPHi3xU%2BjEmI5kMbt6dpf%2FADjpdsFbVtdgtqqCY7WNpSDXcVcoOnfIHNAcrK1Jndh%2BQflC2Rfrd1fX0gHxNzWJSd9%2BIUkdfHInUdw%2FH2LwHvZPD%2BUnkS3UBNESQgg8pXdzsa%2BPvg%2FMnuDGWM9Cwjznp3lfyjGhTStKMr7JbrvKOIqpZSNv45nYc0SLI%2BwNJxyvm8UvvM1pNyFvpNtEDuKIOvjkjlHQMxjPexS5uvrJJ9FI69eIAyoytmIoHgPDAmmigxWnen7YoWmMb7UwqtMQxQpmAHthVRa2U9sUIWSxRhuoOFUtuNGt5QQ8SmvYiuKKYve%2BTbCapWH0yejJt%2BGFFMSvfJdxHU28vLwVxT8Rihi11pF7akia3YAbcwKj8MKpYY8VWGMiuKrCv0YoWFcVWFfbFVnH%2BzArQ2IJHIA7qehxVr5Yq33xVf8AhgVeDQ9e%2BKrh%2BGKqimhB8PH%2BhxVcDgVcDvXqfHFV4NMVXg%2F7eKV4OBVwbFV307Yq3Xv098Cv%2F9HsP0ZsHDa64qtOKVpGKqZ%2B7FVE4qot%2Ft4pUSfDFVJv8zhVTOKtH8e%2BKXAYpVFHhgSrKvbAlEKvSmBKJRP9vAyRCr%2FtZFkrrH%2BGBKISEueKKWPYDAlN7bR55aF%2FgU9u%2BERQZUyzSvKtxdzRw2dlLeXEhARI0LsSfAAHJiDEze6%2BWvyF8y6okc%2BomLQ7YkVFwGM1O9IgNv8AZEYJTjHr8mO5e5aD%2BR%2Fk3SQkl8k2t3C9TO3pxV8RGhB%2B9jlRznoKTw971Sw0nS9KRk0zTrawVvti3iWOtOleIFcqlOUuZZCICOd0jRpJGCIgLO7GgAG5JJ6ZHmlh2rfmD5Q0bmt1rUMkydYLeszV8KpVQR3BOWDFIo4nmOsfnxYxFo9E0iS4NPguLtggrTesaVOx%2FwArLBhHUot5Zrf5s%2BcdYEkQ1D9HWzkn0LNRFQGopz3cih6cssjCIV5zPdT3MjSzyvNI27O7FiT7k5O0Uh61wq39OKuwodTbFW6YUOp7Yq1xwq6gxQt44oWlK4VUzGMKFBoQe2KoSS2Vq7YoSy402OQEFQa9dsKKYnqHlSzueTCLg%2F8AOu2FFMHv%2FKt5b8mh%2FfIO3Q4qxea3khYpJG0bDsRTFUOyfhgVTK4qplfDFCmRTpiq3FXdNsVbH%2B2cVbr7YFXg4q3Xriq8H3xVcCd8VXg%2FhgVcDiqoDilcDgVfWuKr6mgqa06Yq%2F%2FS7DmwcN34jwxVYa9t%2FHFVhxSpsKd698CqJ6YUqTHFVFsVUjhVTNDtirqU%2BZxSuAPzrilWVelR8sCUQijbAyRKpkUopE%2FzOBkiooXchVXk3amRSyKx0Kacjmp36KMIjamT2Tyl%2BUnmPzAFew01o7atHvJv3cXavxN1pUGgqcmQI8zTDiJ5Pozy3%2BQWh2HpTa9evqUy0LWkH7uGoPQufjYH245VLOOgTwl7XpOh6RoVv9V0jToNPhO7LEoBY%2BLN1Y%2FM5TKcpcyyEQEykljhRpZpFijQVeRyFUD3J2yIBOwSTTzvXvzT8o6GHQXv6SuUqPQtfiFR4uaL91ctGA9dmPF3PGta%2FPTW7l2XR7WDTIQTxdgJpCKdyw4%2F8LlgxxHmu7ynVfNmvay7NqOq3N1y%2FYeRio9gtaAbnpk7XhY%2B0zNUkknG00sqTirf04Vb264q39GFDdRiruXhhQ3WuKt1wobBwq3ihvY4VdxB3xQ0VHX78VWlMKFhX%2FaxVTKe3TChQaIHtiqFkgB7YUJdNZhgajFDHNQ0K2ugRLEDXvTCimAaj5VlhLPankOvpt%2FA4qxCa2lhYpKhjYeOBUMV6AjpsO3viqky138MVUiuxB%2BjFC2m5xVr8cVdTFV2Kt%2F574FX1FcVXBiCGBII6YquB8Diq4HbFVwOBV4OKVQHAq8H7sVf%2F9PsPvvmwcNrfFWjTFVh8PHrilSP%2BZxVSOKqBxSpHfvhVSNKbfaqamu1NqYqs7YpbA6e2KVRR4%2FRgSrquBIRSL09sDJFohJAAqe2RSn1hpM90y0UgHtTEBN0928jfk%2FrnmMpJBafV7IMBLfTDhGOlaE7k%2BwBOSNR5sOInk%2Bs%2FKn5Q%2BV%2FLaJJc266zfqa%2BvOg9Nf9WKpH31%2BjKZZz%2FDsyEO96qAFAVQFVRRVGwAGY5Ns0u1TWNL0W3Nzql9FZRAEgyNQtTrxXqx%2BQyUYGXJBkA8O8yfnnZ2%2Fq2%2Fl6yM70ol9cGig%2BIj7%2FAEnL44YjnuxsnyeDa%2F568w%2BYnLalqLyp%2BzEtEQD2VaDLAaFDZIixBpmY7kn54LZUt5VxTTYOKrq4q3X3wobrirfLFWwcKG64VXDFDYwquGFC6mKt0%2BnChdTFDgMKrqYobphVqgxQsKV%2FjhVYY%2FbbFCi0XXbriqg8PthQgpIAdvwxVLJ7NWB%2BHChjGpaJBcqweIH3pvih55qfly4tS0kNZIxU8e4xVi7xlSQRxI2IwKh2XFVMin0YqtIxQ10FPlirQ2xVd32Fa4q2MVdXAq4HFWwdjviqoD1xVeG8MCr1Ndu5wJVAcVf%2F1OxZsHDapirR%2FV2xVYcUqZ%2B7FVBvnilSIb4qVpT4qdKVxVQOFVMj%2B3FVoH3YpX8eJYEiqmlAaj6CNsCVRR74pRCCu9MiyR8EDysqqCa4EvSfKvkrUdau4LWztHurmZqJGgJr3yQigyp9reRfyO0vRUhvPMIS%2Bu6VFgv92hI%2FaYH4iPAbe5yqecDaPzUQJ5vfI4o4Y0ihjWKKMcY40AVVA7ADYZjEk7ltApqWaKCN5ppFiijFZJHICgeJJxAJ2Ck08T85%2Fm5a6aslnoPGefcNesPhH%2Bovf5nMiGIDcsCSXzDrnmbUdZuXub%2B8kuZW6vIxPTYZYSkRYy8xbqcjbOlnKpwKuDffileGwq3yxVdXxxVcDhQuGKrhhVcPuxQuGFV4GFC4DwwoXgeHTFVwFBhQupihfTvhVsDChvjirfH6cUN8cKtFfbFDXH6cKrSgxQpNED0wqh3i9vpxQhJIR1piqXy2wbthQktzYhgQVG%2BKGEav5diuAzovCQdGGKvPL6wuLRysybV2em3%2Be2BUtK%2B2KqRWlcULKYq1T78VdirsVbrtSv0Yq2PmBtWpr2wK30ANeo2%2FzGKrgd9vuxVeO1cCVSo23Ne%2FtiqoCDTYCg3O%2B%2FfAr%2F%2FV7EM2Dhu%2FhirXGor0xSsI%2FDFVI4qpN398UqLbinhv9%2BKqJB%2F28VUiMKXU9sVXKMCVdRXAyTKztJLhwiLXfc%2BGBL6D%2FLP8ptU813MZjhaCwjI%2Bt6g6%2FAgr0FaVO%2FQb4TURckWTsH3f5T8m6L5PsktdMt19coFur9gPUlNa706CvQD6anfMTJlM%2Fc2RiAyzK2TGvMPmvSPLcDSX1wpmAqlqhBc%2FPwGWQxmXuYmVPlnzt%2Baeoa4z28UhtrMH4LeM0HzPicyABHkgC%2Bbxi51CSZmZmJJwEswEAZST1wMmw3jiq8NgSuDYqvBwqqA1%2BWKrhhVePliheMKrwMKFQDCq8DFC8DCheB7YVXgbYoXgdMKFwH4YqvphQ3xwoXBeuKt8a4UN8cVdxxQ1x3wq0V%2BnFC3h1wqsKfj3xQoPDXtiqFkh26YVQEtvWtBihKbm0BB2xQxbUdJjnVldAa4q8x1XQ5bRmeJS8f8AL4YqxtlofDAqmRiq3buae%2FXftihbt8sVdirWKu2p716Yq2PnQYFbr%2Ft4qvBwJXg4qqKcCv8A%2F9bsfTNg4bsVaxSsI%2BnAqmR1%2FHFVIjrhSpMPvxVRYHscUqZHbFXU38ffFK4L%2FbilMrGzku3AjU8K7t4%2FLIpfWn5Rfklda%2BttrGsxtY6CrAx1FHueJ3CA7gduRHyrglMQ58%2B5QCX3Bp2m2Gk2kNhptpHZWkACxQRLQCgpU%2BJ8SdzmJKRkbLaAByX3t9aadbyXd9cJa20Qq8shoPl7n2GMYmRoKSBzeAecvzpgtxLZ6Bt1BvW%2B0f8AVHbMmOIR57lrsy8nzPrHmi91OaSW4uHkZzVmYk1JwmTMRpi73LOSSa5ElnSl6hOBK8N%2BGBKoGwpVAcVVAcVVBiqqMKqi4oVAMKqij6cKFQDCqoAMUKgGFC8DCq8DphQvAGKF9P7MKrguKF4HjuMKF1DhVdTFDfHChcBirVPuxVun04UNU%2F2sVa41xQsK4VWMvfFCiyDviqGkh%2B7ChASQddsVSue2BqKYoY7e6csgYFa4q811ry%2BVZ5YFo1akdjirCXjZGKsvFl2IPXAqiQBXFVtMVap79cULcCu%2BeKuOKuHfAleCemKrwe2BV4P%2B3il%2F%2F9fslDvTem5zYOG7FXHAlYRiqwivviqkR49sUqTDwxVSZcKVOn0Yq6lASSABuSemBKJsrWS9kVVU%2BkSKCm7HBbIB9v8A5M%2FkWssNt5k83WskFuCsmmaO44NKBuHmBFQh7DqevTrCeTg5c%2FuUDi9z7HRFjVURQiIAqIooABsAAMxSb3LcxLzd520PybZNc6pcKbl0LWmnqf3spG3%2BxFf2jtk8eIy9zGUqfFfnX80NY803TtNcGK0QkW1mmyID7dyfE5lWIiosRG9y8umv5JSSzEk98rJbAEL61T1wWypcHrgSqhtv1YpVVauKaVVOKqymuKqynFVYYVVlGKqqjChVAwoVQNsKr6YUKgGKFQDCq8DCheBT28cKF4GKF4GFVwGKF4FcKF1MKrwMUN0%2FswquptihwGKup1wodT%2FaxVqmKGiu%2BFVpXFCkV7YqpMnXCqGePrt2xQgpIevfFUsnt%2BopihILyxVgarXFXm%2BuaAG5SRrxcVII%2FUcUPP5onido5AVZe2BKhT6MVWEeH3Yqt6%2B%2BBWsVa2wK3%2FmcVXDx%2B7Aq4YpVAcCv%2F9DstM2DhuxVxH9MCVv44qtI%2FtxVTI2JxSpsPamKqRUeGKVNqKCxNAN2Y7DFKlbxvfyqqqfRqOC93PiciSyAfe35IfkUdOFr5p85WQScBZdJ0SUAlagMss69iOyHev2vDITycGw5%2Fd%2B37vfyMRxe59d5itrxH8xvzm0XylHcadpM0Wp66F4%2FCwaGAmu7EVDMP5fv8MyIYa3l8mBlfJ8Q%2BYPNmp%2BYL%2B41DUrt7q6uGq8rmp8APYAbAdhtlhkkRY2bgseuQtmA4S%2B%2BBlSor1wJV1b3xSrK3TFVdTilEriqIXCquoxVEKP7cKFVRhVWXFCqBhVUGFCpTFVQDCheB%2FtYULwMKFQDFC8DCq%2BmFC7FC8DCq4DFC6mFV1PbFDYGFC6mKuphV1MUNUpXbbFXFcKFpGKrSuKFMr%2BPbCqiyfR74oQzx1xVByRVxVLJ4K9sUJBeWYdSOOKvONe0EOrPGtGWtGAxV51LHJEzRupQ9GXxGBVAjv8AjgVYR44qtpirXTw26YFbGKrh88CW8CqgxV%2F%2F0ey07ZsHDbpirqClO%2BBLjU7mpJ7nFVpHcYqsp3xSpkYpU2UAVJoBuT4Yqk5dr%2BZUjr6ANAB1c5Am2YD7x%2F5x%2FwDyQaz%2Bo%2Bd%2FNdrwkUCXQdIlUE7j4biVWBpTqg61%2BLwrGc%2BDYc%2Fu%2Fb93v5EDi9z7Id0iR5JHWOONS0kjEBVUCpJJ6AZigW2vjn82%2FwA%2BTJJdeXfKNzwtVrFe6qho0vZljPZffvmXGAx%2BZ%2B5r3l7nyTcajLcOzyOXZjUsTXAZW2AIYTV75C2QCoslSN8FpV1fFkiFbFUQrVxSiUJ2OKopMUotMKohcUIlcKqw98Kqy4oVhhVVGFCoPvwqqAYoVFwoXj5YUKgFP44ULwMKrwMULwMKF4xVcBhQvA2woXAYquA2xQ3T%2BuFW8UOp2wq3Tpt1xQ6mKuI%2FswoW0xVaRihaRiqky%2FjhVSKYoQrpWuKoOSIeGKEsmhBriqQXtmHDAiuKvMfMOhV5SxrRl3GBXnroyMVZaFTuMCqXYj8cVaIpvgVbTc%2Fhirf44Et0%2FswKuAPhXFK4YFf%2F0uzUzYOG332O3yxVvAl1PDFWiBT3xStpgVYVxSx2%2Fu%2FrEn1WFqxqaTOP2iOw9siSzAfXP%2FOOf5KjXZLbzt5jg46NYThtKsJF%2FwB6pYqMHYEbxqf%2BCO3jglLgHmeX6%2F1Jri26P0AkeOGN5ZXWKKJS0kjEKqqoqSSdgAMxQLbOT4Z%2FO%2F8APM6s1z5V8q3LR6UjFL%2FUEJDXJHVVPUIPx65kxiMfv%2B5j9XufJj3LOSSanIktgDQlr3yNsqV1fFKIRsCUUjVxSikOKoxDilFphVFp%2FtYqi0wqiUxVELhVXXChWXFVVcKFVcKFUdsKqgxQvGFCqB%2FtYULwMKrxhQvGKF4HTthQvGKrwMKF1MVXAYULgMUN0wquoPuxQ6mFW%2FxxV1MUOoMVaOFC2hxVaRihYV%2B%2FCqky9sUKLLiqGdf9rFUFLH%2BPfFCVzw1rt8sVY7fWYdWBFa4q8l8w6K0LNPEvT7QHhgVhZFKjAlaRgV1O2BXUr1wKupilunt0wK3TFX%2F%2F0%2Bz5sHDbwK2MUt70xV1PbAlqnjiqQ6xf%2FV1%2Bqwt%2B%2FkHxkdVX%2BpyMiziLeo%2FkV%2BVM%2FwCY%2FmSNLpXi8u6XSbWbpdmK78Y0J7uRT2G%2BAbDiKTfIc36sWlpbWFrb2VnAltaWsaxW8EYCqiKKAADMaUjI2W2IoUHxl%2FzkL%2BdixG58keV7yoo8Ov3se1W6GFGr07NmRGPhjf6vu%2Faw%2Bs%2BT4ia5Z2JJqT1yBLaA2svvkWVK6v74pRSP9%2BBki0OKoyPFKNTClGxj2xVGxjpiqMTCqKTt2wqiV7YoV1wqrrhVXX8cUKwwoVFwqqjChUA%2F28UKgHthQqDCqoBhQuAwoVB%2BIxQvFa%2BOFV4xQvA6fqwoXU%2FHCq4dcUL6Yq4d8KF1P9vFXU%2BnCh2Kt98UOp%2BGKtUwoW%2FL5Yq0Riq0jFCmR7YVUyK1xQoMvhviqFkTFUBLHWuKEquIag4qxbUrBZkZWWoIOBXjet6W1lOzKp9NjufDAlIadsCt0PhTArYBwJbCA1qQB1qa9t%2B1cCruIpgS3TFX%2F9Ts4zYOGu%2F28CV330xVsYq3Tv1wJQOoXkdjbvO27dIk%2FmbtgJpIFsa8uaNqfmzXrHSrCJrnUNVnWKNF8XPvkIx4i2E8IfsP%2BXHkTTfy78q6f5esFDSxKJNRu%2B81wwHqPv0Feg7DKsuTiO3IcmUI0LPMvHv%2Bchfzkj8kaY%2FljRJ1bzHqsJ9eZG%2BK0heoDDj%2B01D16D55PFHg9R59P1%2FqQfUaHLq%2FNee9kuZZJpnMkkrFndjUkk1J%2BnIk23ALVk98iypEI%2BKUWjdMUoyNsUo6PtiqPj7YpR0f%2B1iqOTCqMTtviqMTthVFJ2wqiV7fjiquuFVdcKFdcVVRhQrDChVGFCqMKr1xQqAYULxhQqAYoVAP7MKF4GFV4H9uKF1MKF48PuxVumFC7viq7Chun%2B3irdDhQ3Tr7Yq1irsUOrhQtpirWKrT%2FtYoWkdMKqZGKFJlqMVQ7L%2FZiqEdOuKEvmj9sVSe4hBrt9OKsJ1vS1uIpFKgmhwK8furV7WZ4mHQ%2FCcglD8e2BK4DAq4LilcF9sCt8Pb6cCv%2F9XtGbBw12%2F9mBK7FWxgVskKGZiAAKlj2GKXmur6idQuzwP7iL4YV8fE%2FTlUjbbEP0A%2F5xN%2FK79HadJ%2BYGr2%2FwDpl%2Bpi0RGG6RdGk6%2FtdqjpQ5LIeCFdZfd%2B1A9UvIfe%2Bhfzb%2FMvT%2Fy08rXOqTSK%2BqXCmLSbPu0hH2qUOy%2B%2FemVYsYPqlyH4plOW%2FCOb8jfMHmPUfMmrX2sapcvdXt%2FK808rkklmNT1%2BeM5cRbYxoJQsm%2FXIM6RSP0xSi0b3xSjYz0xSj4zilMIsVTGLCqOjxSjo8KoxO2KotMKopMVRK4VRC4UK64VV1xQrDChVUdMKFYYUKijCqqMUKgHTbChUH6sKF9MKF4xVUGFC8YoXAb4VXU8NsKF4BxVunbFC6n31woboMVdSpxQ3TCru3TbFWqYodhVrFC0jFWiMULCOuKrD12xVYwwoUGH44qhnXFUHIuKEumjrXFUivIAwO3zwK8z8yaTzUyotGXfIlLAAhB36jIpXBPHAlcE9sCrwvt88CruBpX7hil%2F%2F1u09c2Dhrhsa%2BGBK4D%2BwYq2P9vArFvM%2Bp%2FVYBZxNSW4H7wjsn9uQmWcRa38r%2FKM%2FnjzjpGhxIXhmmVrxgNhEpq1fnTDhhxS35MskuGNv2InvtE8h%2BWIkJS2sNHtQkUdQAFjXuT403ORjjlnmTyH6GoZRCIA3L8mPzi%2FM%2B%2B%2FMbzVdXzzOdNtWaLToDsAgP2qe%2FwDTHNkB9MeQcjFjoWeZeSrLXvlDfSJR8CUZG9aYpR8ZxSmMR6YpTGLthVMYu2KphFhSjo8VRsfbCqNTFUWmFUUm2KolPDCqJXChXWu2Kq6%2FLChWXChXX3wqqinbChUBxQqg%2FwC3hQvGFC8dcKFUVxQvFf6YVXj9WFC8E4ULhiq8YULx7YquAxQuGFV1K%2F0xQ6nXFXf5nChr%2BmKupihrt1wq12%2BeKrfpxQ0f1YqsOKFp%2B7xxVYevthVRYdcUKLD8cVQrrviqBlTFCVXEda4qxnUbUSKwp2yJS8m1awNtcMQPgY5ApCWhBQUBrT4vfftkUrxH%2BHfAlf6ft0wK7h7Yq%2F%2FX7SM2DhrhgSupiqncTx2sEs8ppHEpY%2FRgKQ8Y1G%2FkvbqWdzvI1QPAdhlBNt8RT7o%2F5xZ0CDQ9NvfNl6irc3g4WzsN1jHWlfE5sdNguB83D1MrNMY%2F5yR%2FOKbUpG8qaXdFY611B0NDQHZMr1OQY48Efi2abDfqL4xEpJzWW59K6SYskbG%2BKUfEemKUyiPTFUyhwqmcXQYpTCPthVMIziqPjwpRsZxVGRnwwqi0NcKotP8AMYoRK4VRKnFVdcKEQpwoVlwqqjthQrDFCoMKFQdsKFUYUKg8MKF4xVeMKF4%2FVhQvFMVVAMKFy7YoXjfCqoBiheB9OFV4Xtihvh7fRhVoqfDFC2lP4Yqtp44q1iho%2BGFVvz7YoW%2FRiq04oWHFVp9u2KqZxQpMK4VQzjFUJIvXFUvmSvbFUluoq12rgVgut2AljY8antkSEhgRiKMQdqZUyXiP2pgVcEwJbEZxV%2F%2FQ7V29%2FHNg4a4D%2B3Ald0264qwTzlqgRE0%2BNtz8c%2F8AxqP45VM9GyAefWMf1y%2Btrb%2Ff0iqT7E5XEWabuQfZGs%2FmBbeSvJkFhZyKtwkASKNTSrUp2zazzDHBw44%2BOT4xv9UuNSvLi9uZDJPcuXkY%2BJNc005GRsuxjGgoLJU9ciyRkb1wJTCJumFKZwnpiqZxHphVNIuuFKZRHFUxiOFUfFilHx9sKo2M4qjEOFUWh3xVFofxwqiVPhhVEKcUIlThQrqfbCqspwoV1xQqLhQrLhQqLhQqjChUGFCoMVXj3woXj%2FMYULxiq8frwoXjxxVUG%2BFCsqk%2FPChEpESdhiqMjtHbYLhQrnT5KbqcUWh5LR16riqCeMjFVIinXFVOmKrT74ULTiq2njihafliq3FCw4qsOKqRA%2BWKFBh9HvhVDOteuKoGUdf14qlk6dTgVjt9AGUimAq861G09OZmAoD2yqQZBACPp%2BGQZL%2BFeuBW%2FTxV%2F9HtXhme4a4YpU57hbWGW4duKwqXJ6dN9sBUPBtW1B7y6nuJD8UrFqeHgPozHkXIiELpl%2Btlew3Tf7pPJfmMEZUbZkWFXXfMd1rdwJJnPpx7RpXYe%2BDJlMiyhDhSRZK5TbaAiUeuKUfE3TFKaQnphVNYThVNYsKpnEcVTKM9MKplGcUo%2BM4VR0Z6YVRqHocVRiHCqMQ4qikOFUShxVEqcKEQvbCqIU4oV1woVlwoVl%2FHChWGFCoMKFQfrwoVB22wqqDFC8H6cKFQHCheOmKrxhQvHt44qqqN8KEZClSNsKGU6Xpb3TqqoSSemGmJL2HRfIXqRrJc0jUjYHr92VTzRhtzQASyj%2FA2l8OPI17mgyr815MvDLFtY8gFUeS2pKoBNB2y6GeMvJgQYvItU0aW0dlZCtDlxCgsWliKEjAlCMMCVh%2F2sULcKrTiq04oWnFVhxQsOKqZxVSYYoQzqDXbFUJIOuKpfMvXFUmuY6g4qwzVbXkGoPfISCQxj06bfeMpLNeE6e2BWym2BL%2F%2F0u1D%2FM5sHDXAYEsJ86al9Xs47JGo9yeUlP5V7fScrmWcA8YnmqSa5jkuQAlzze%2BQJbAFP1d8hbMBWSTBaUbE%2BFKaQGtMVTaE9MKpvCemFU0hOFU0iOFKYxHCqYxGmKo%2BM4VRyHFKNQ9MKo1DiqLQ74VRSHviqKQ98KEUhwqiVOKFdcKEQpwoVhhVWBwoVVwoVRhYqowqqD9WFC8eGKFQfPChePvwoXDFV4%2FDChVGKqyb%2FwBcKE2so%2BTr%2BvJBBe%2B%2BQdGSQi5kSqRitexPbK88%2BCPmWAFl7B02GwHQZrm92KuxVjet%2BWbHWInqohuCDxlA2J9xmTi1Jhsdw1Sx9z5y8y%2BX7nSbmWKaIrueJ8R2NR45n2JCxyYAsGkUg0yKUOa7YEqZwoW1xVbihadsVWHFC0%2B%2BKqZ%2BjFVI9cUKDjriqGcYqgpR13xVKp12I8MVY5fw1VqjIlLDJouEhHSuUyDILeOQZO4Yq%2F%2FT7UKZnuG2TQe2KXhXmrU%2Fruo3Dq1Y0Ppxf6q7fjmPM7t8AwOabc75SS3AJeZanrlZLYA4SZG2YCKjetMCaTGFumFU3gPTJKnEJ6eOFU2hPTCqawnCqZxHphVMojiqYRHphVHxnClHRnFUbGem%2BFUYhxVGIfDCqLQ9MVRSHChEocVRKnChEqcKFdThVXBwoVlPTChWB3wsVVd8KFQHCqoMUKg%2FDChUGFC8YVXDFCoDhQvBxVEIenthQyLSV5TR96kADJxDEvrLy1Yix0i1Ugc5VEjU3FD0pT2zB1M%2BKddycY2tP8x2x2KuxV2KsB%2FMLTILvRzdsi%2BtaGgk2B4t2r86ZmaOe5i1ZB1fLl2tJH8K%2FRmWWIS1silTP%2B3ihYT198KtVxVZihbXFVhxQsOKqZxVRYe2KEO%2BKoOQYql0y9fbFUluo6hv1YFYdfRcXr4ZXMMgguPTKWbuOKv%2F1O1jM9xEm16%2BFhpd3ODRynCP%2FWfYfdkZGgmIsvnS9nLM1T1zFkXJiGPzy7nfKiW0BBGXfKyW0Bej%2B%2BRtlSOibphSmsBwoTiA9MkFTiA9MkhNoT0wqmsJwqmcRxVMojhVHxn%2B3ClHxnFUdGcKo2M4qjEPTCqMQ4qjEPQ4VRSHFUUhwoRKHChEocKq6nFCupySFcHChVXthQqqcKFVThQqg%2F2YoVBX%2B3ChcMKF4PXChUBxVeDhQuB8fwxVXQ7jvhQn%2BlTiKeNidgQd8nFjJ9gaBex3%2BkWFxEaj0lRh4FQBvmv1EeGZ892UDYTjKWbsVdirsVee%2FmJqiWukGzVh6l0auvcKPb3OZujhzk1ZD0fL944Z2I7k0zKLEJY33nIpUycVW1%2FDFCwnFVp64ULa4qtP68ULD%2FmMVWHFVFu5xQoP8sVQj%2FLFUDKMVSm4WoIwKxfUItj45EpCRgdu42zHLY6nhir%2FAP%2FV7X0B9sz3DeZ%2Bf7%2FhFa2at15SyD8F%2FjlWQtuMPEbuWpO%2BYsi5EQkcsm%2BVSLcAhvUyslsAV42wWypMYj03yQVN4D0yQQnMB6ZJCcQnphVNoW6fhhQmkLdMKUziOFUxiOFUwiPTFUfG3TCqOjbFUbG1cKo1GxVFo2FUYh6YqikOFUUjdMKEUh6YqiVOFCIU4UK6nChWU4WKupwqqg4UKgOFCqDhQvBwoVAcKFwOFV4OKFQHxwoXVNfpxVVVsKEbBKVYEYQh6p5Q863GjMIi3qW7kerCTUH5b7HfthlCOQVJhuNw9307zXo2oqClyIHO3pykDtXqDT76Zhz0s48t%2FczGQdU%2FSeCSvCZHp14sD%2BrKDCQ5hlxDvUJtQsrdS011GgXr8QJ%2B4VOSjhnLkFMwOrENZ886bYxuto4nn6Bjso%2BXjmTj0h5zazkvk%2Bf9f12bU55JZpCxYmpPzzMJHIMQGGSyVJ365WWSFY%2FTiqw998VWE1xQtriq0nFVtcULSf8AMYVWkjFCmcVUmOKqLYoQz98CoKQbYVSyYdcCWP3sfJW8MBVjDCjkU65TMMw0e%2F68gl%2F%2F1u0OdqeOZ7iPAfOl%2FwDWdVuqNVIT6Sf7Db9eY2Q7t8Bs8zuZeormPIuREJRJJU5QS2xCkGyFtoCKjbEFKZQnpkwhOYD0yQQnNua0yQYpvC3TJKm0J6YVTSI4VTOJsKpjE3TCqPjbpiqPjbClHRtiqNjbpvhVGo2KEYjYqjEb6cKopGxVFo3TChFI2FCJQ%2B%2BFCIU4VV1PTChXU4UKynChWU4UKgPbChVBwoVAfwwoXA9MKF4OKrwcKF9cULwfwwquB3xVWV6EGuFCLinKEEGnvhBRScW%2BqzRdHI965MSY0nEfmS7QcVnYClDvkuMo4VsvmO8kqWnY1G9TtjxleFJp9RkkLFnqT75ElNJZJMWrU5FKGZ64qpk4qsJ%2FHFC0nxxVonr44oWHFVpJxQtJ%2B7wxVaThQswKpMfwxVSbCqGem%2BBCEk%2FHFUvlxSkt0tQcBVid2vCSvvlcwyCHr%2FacqZP%2F1%2Bv3s4t7e4nOwhjZz9ArmeXED5c1W5aSaV2NWZix%2BZzDmXKiGJXEm5%2FHMeRb4hLGapyiRbohteuQttpFxYQUJnCemWBBTeA9MkGKc27dMmEJvC2FU1hbphQmkLYVTKJsKplE3TCqPjbphSj426Yqjo2wqjY2xVGo2FUZG3TFUZG39uKEWjdPfCqKRsKEUjYUIlWwoRCNhQiFbChXU4UKyt03woVlNcKFUHChUB6YVVA2FCoDiheDhQuDfjhVeDihcGwquBxVeG98UKgany7YVXiSg2OKqgmPjhQ36p8cbVaZK9ScVWF8VW8sULeVaEnFVpOFC2p%2F28Var%2BOKGq%2F7eKrK4oaJ%2FDFVte%2BKFOv04qsOKqLHt2xVDtihCydMVQMo64pSi4Gx74FYtqCdTkCyCUhtgTlTJ%2F%2FQn%2FnC7%2BraHeEGhmKxD6Tv%2BAzNmdnGiN3zLfy1ZvnmFMuVEMbnepzHkW%2BIQo3OY8i3xCuo6ZC2ykRH1GTCCmMJ6ZYGJTaBumTDEpxA3TJoTeFumSQmsLYVTSJumFUyibphQmMbdMKUfG3TFUfG2FUdG2Ko2NsKo2NsVRkbf2YUIxGxVFocKotDhQikbFCJVum9MKESpySEQrYUK6nChWVu%2BFCsp%2F28KFVWwoVAcKqoPbCheD%2BGFC%2FlihdXCq4HFC%2BuFV3LFV3LFC4NhVdy%2FDFV3L3xV3P3pirfLChrlvirRP4Yoa5eGKtVxVbyG%2BFDuX4YoWkjFVpOKFpOKrSfpxVaTihSJriqmx64qoN%2FbiqFf9WKoKTeuKpXONjgVjl%2BtVORKWMlqEivQ5UWb%2F%2FRPPzHuvTsLO3BoZZGcj%2FVFB%2BvMrKdnHxjd88XstS2YUy5cQkcjVOY0y5EQ2i7V8Mxyd3IiESF26ZG2dL1FDlkSxIRsR6ZaGBTWFumWBim8DdN8kGKbQtklTWFsKE0ibpklTKJumFUwibFUwjbphVHxtiqOjbCqNjbFUajbfqwqjI2xQjUYbYVRaNhQi0bviqKRsKESrYUIhWwoRKt0ySFdWwoV1bChWDHChVU4UKgbCqoGwoVA3XFC8HCheDhVdyBxQu5bYVXcsVXcsVb5YoXBvf5YVb5Yq7l9GKu5e%2BKHcvpxVvkO%2BFWuVffFDVffFWq4oW1%2FswoarirRI8aYoariqytOmKrSa%2F1xQsJxVSY4qoMTiqHf8fDFUFJ39%2B%2BKpdN3wKkF4oo2RKWH3B4ysPHKyyf%2F9JP8zbn%2FTLWAHaKCp%2BbMf6ZkZi043hd29Scwply4hLNycxZlyYBMooeSj3pmKZbuSIolo6DpgBZkKBFMuiWshERmlMuDWUxhbplgYlNoG6ZIMU2hbpkkJrC3TJKmcTYUJlE%2FTCqYxN0wqj43xVHxt0wqjo2wqjUbpiqNjfFUajdMKEYjYqi0bChFo3TChFK2FUUjffhQiEbthQiFbChEK2SQrhsKFZWwoVVbFCqGySqgbFCoGwoXhvuwoXBsKrw23XFC7liq7lhVsHFVwbpihvl92Krg2FXcu%2FjirfLFDuX%2BYxV3Lb%2BOFWqjFDXLwOKur74oar1woaLe%2BKra4q1WpxQ1WnU4qsJpihaTiqkx%2B7FVFjiqGc4qhJOnbAqXTHriqSXXQ98iUsK1D4ZAe5qMrLJ%2F9OO%2FmPcc9cuVrtEiLT%2FAGIP8cuzHdrx8nj1w25zBmXLgFGFeTDMTIXKgGT29uaLtmHKTmRivmhoMYySQlki0OZMS0yDk2y4FrKPiO%2BWBgU1hbpkwxTSFumSQmsLdMkhM4m6YVTKJsKpjG3TCqPjfCqPjbFCOjf3wqjo2wqjI3xVGo2FCMRvHFUWjDChGI3TChEo3vhQikbCqIV8KESrYUIhW74UKythQrhskhVVvffwxQrBsKr1bChUDeGFC8N2wqvDYoXBsKF3LFV4bFW%2BWFV3LFDfLpirYbCruWKt8sUO5Yq3Wnzwq6vvihqvvirg3fFDXLan3YUNE4q4HcYoW8j%2FAExVqv4YqsJ%2FsxQtJxVSY9cVUWO36sCodztiqEkOKpfKfuxVJ7k7HIlLCtV2IPgeuQKX%2F9SB%2Be5i%2Bu6ma1pMy%2F8AA7ZZmO7DHyeYzGrHMGZcuARliheRPc5g5S5uMM8trTZdu2YEpOfGKldW5AO2ThJZRY5OnE5lQLjSCGHXMiJaSEXEemWhgUyhbpkwxTWFumSCE3hIFK5MMUxjalPDCqYRP0wqmMb4qmEb4VR8b9MKo6NsKEbG%2BKo2N8KEbG%2FTFUWjYUI2N6YVRSPthQikb3woRKNhQiUbChEq39mFUQrYUK6sO2FCsrYUKwb3woVQ2FCoG6YVVA2FC8NhQvDYqvDeOFV3LpihcG6Yq3ywq2G6%2FjihdyxVdy9%2BuKu5dcKu5e%2BKtg4odyp7DFW%2BXv0wocW64oa5Yq6v9mFDVcVar0xVrlihsEYqtY4oUicVU2OBVFj4Yqh3OKoSQ4qgJT74EpRcdD2wFWG6vTifnkCl%2F9XmHnGXnrOpt43Mv%2FEjks3NGPkwBzVswMhcuDINGi53EQ981%2BeWzn4RZesW1gaCq1%2BEHNXLI7aGNL9QtOAbvt4ZbjkwyQphV7Fxb6czsZcKYSphQ5kxLjyCohy4FrKYRN75YGKZwtuMkGKcwN0ywITFW6YqjYn6YVTGNsKEwifp%2BrCqOjf3%2BjFUfG%2BFCNjbCqNjbFCMjf78Ko2N%2BmFCMR8KopHwoRSP74UIlHwoRKPhQilbChXVsKohXO2FCsrYUK6thQqBsKFUNhVUDfLCheGxQvDYVXA%2FTXFV4bChdy%2BnFVwbCrfLFDYbFW%2BW%2BKt8u%2BFV3L6Tih3Lr2xVwbfFW%2BWFDuXh1xV3LFDXLFXE98KGq%2F7eBXE4ULgcVWsdsUKBOBVhP%2B1iqgxr7Yqh3P3YqhZDiqAlP6sCUquDsd8BVh2r%2FYbIFk%2F%2F1uSebHrquo7%2FAPHxL%2FxI4c3NGPkwmtXzX5HMxsz8tx8723Xrvms1J9Jdnphcg%2BhLLSiwI4V%2FdivcjoeuaGWV6LHgtj2sWBXkSpFR4UzKw5HGzY6eZ6nBxbNnik6zLFjkqUJzLiXFkFNdjl4LUQi42ywMCmcDbjJhiU4hbplgYpgr7D8cKo2J%2BmKpjE%2FTCqPjfphVHxvhQjo2woR0b%2FR74qjY26YUIxHwqjEetMUIyN8KEYj%2B%2BFUSj%2B%2BFCJR8khFI2FCIV8KESj4UK6thVXVsKFZWwoVVc9cKFUPhVUD%2B%2BFCoG98VXhsKF4b32xVcG%2FDChdyxVvliq7lhVsNihdy%2BjFXcvxwqu5YodyxVvl3xVuuFDq4odyp9OKu5Yody%2FHFWicKtVxQvBxVpjtihQLYFU2Pjiqix%2FDFUM7fTiqFkbr3xVASHAlK7hutcCsQ1U%2FA%2B%2BQLJ%2F9fj%2Fm001fUh4XMo%2FwCGOHNzXHyYYm75rsrm43oXlBQ2p2g8WzU6s%2Bgu10Y9YfY%2BkaLzQ0UgCAbU4khyaHfp065yGXPR%2BL3mm0lj4MM8zaYY2kpRupB3%2BzuRSu%2BbDS5bdZrcHCXiet2xV%2Bn7WbvBJ0GeO7C7mOhOZ0C4Uwl5FDmREtBCqhy0FrKYwNuPfLAxITiFu5ywMEaH3AwrSNifFUxifChMI36YVR8b9MKEbG%2F9mFUdG%2FvhQjY3%2B7CqMR8UIyN8KEaj9MKEWj4UIpH98KESr5JCKR%2FxwqiUfbrhQiFf3woV1bCqIV8KFZWwoVVbChVD9MKqgfFCoGwoXhsKrg39uKrw2FC4Niq8NirfLChvliq4N1xVvl1%2FXirfLthQ3yxVvl9OKHA%2B%2FXCrfLfFDfLFXV674q1XFDuXj9GKtcsUKgOw98KrXagxQhycCqZbFVFmxVDu2KoSRuuBKBlbriqUztsfbIlWJaoaqcgWT%2F%2FQ5B50X09c1VT2upf%2BJnDn5lGLkwmM%2FGPnmtyudjekeTX46tY7dZAKD%2FM5qdYPQXb6L6w%2FRjQLNI7a3kXZZbZSFrWik1Ph3%2FzGec55kyI831nBAQgCO4ME86aVEEeSPbnViKUHTp9ObPQZjyLq%2B1NOKsPmnzJaem1eJB5jY9d86jTTt4vVQovPL2Clds2MJOunFIZFoT2zKiXGkFNdjlwLUQi42pTLAWBTWKbYZYCwpGRyVPzw2qYRPSmFUwifp%2BrChMI36ZJCPjfFUdG%2BFCOjfphQjUfCqNjfphQjI3woRkb4UItHwoKKR8KEUj5JCJR%2Fowqikfp74UIhX98KEQr4VVlbChXD4UKwfCqqr%2B%2BKFQNhQqBsKrw2FC8Niq8NihcG%2BnCq4Niq7lX2woXcsVb5Yq3yxV3LChdyxVvl70xVcD9%2BKHct%2BuFDfLFXcv8AbxV3LwxQ1yxV3LFC5XAG%2BFVjPX5YFUi2KqbNihRZsVQrtgVCyNilAyt1xVKLhtvfIlLFNQarBfcDIFL%2FAP%2FR5T%2BYcfpeY9WXcVnZv%2BC3%2Fjk9QN2OHk8%2BjPxfTmsyOfjZ75YmMWo2UgJqsqEU%2BYzV6oXEu00pqYL9NfKpSfTtLZeQMtvtzBB5bUrUGoqD888y1O05e99YjO8MT0oIfzNYrNBL8PPjViqn%2FMHrlulyUWU4%2BJiovlfzlp%2FoiUgA8GB%2BHoKHOu0WS3ie0MPDbyi%2FtqBjTx7ZtscnS5IsQuYqE7ZmQLhyigCKZkRLSQqI2WgtZRkbdMmGJTCN8kEJhE%2BSCExifChHxvkkI%2BN%2BmFCPjfphQjY3woRsb1phVGo%2BKEYj9MKEbG%2FvkkItH6YUIpHwoRSNhQiUfChEo%2BFUSrbdcKEQr4VRCv0ySFYPihVD%2B%2BFVZWwoVA3vhQqhvuwqvDe%2BKF4fCq8Nihfy998Kth%2FemKrw3vihsNhVcGxV3LfFV3LFDYauFVwbFDuWKruXvthQ3yxV3L%2FbxV1cUO5fdirXLFWq4oWluuKrC2KqTMfHFVFmPY4FQzNiqEkb%2FaxVASt92BUouX2OApYvdNymjXr8Qyspf%2F%2FS55%2Ba8HpeZbtqUEyRv96Afwy3Ujdhh5PJ4zRs1eRz8bLtGl9OeFq04spG%2Fgc12YWC7HAaIfpl%2BXN8t3oOhzJuUUIxqak71ALe1M8z7Rhw5ZB9V0shk0kT5M11WIPGQVBLj4h2oNq%2FcBtmNiLkaYvnTz3pQMFyyxhQwalDtyAr4eGdL2dm3DpO2NPQJeB3dsHiD02IBr886GMqLyk42GD31uVLbdMzccnByRSCRKH%2BGZUS4sgpDbLgWshEI2WAtZCNjfJhCYRvkghHxv0woTCN8khHxv0woR0b%2B%2BFCOjfChGxvhQjY398KEWj%2B%2BFCOjf3woRiP0ySEUj4UIpHrTChEo%2BFUSj%2B9MKESr4UIhXwqiFb8MKFZXwoVlfphVWD4UKobChUV8VVA%2BFCoHwquDYoXBqYVXhsVXcsULg344quDV%2BjCruXXFW%2BXviheG74VcG6YoXVxVvlirfL8MKG%2BWKu5e%2FyxQ7l%2FtYq1yPjirXLFC0tiqwtgVSZvfFVB2xVDO2KoORvE1wKl8zbHfFUnuX2ORKWO19S8QeFTkCl%2F%2F9OMfnNbcNRsbmm09rxJ90Y%2F1zI1IasJeDqaNmpyB2GNkWnSUZT4ZgZA52Iv0D%2FJXWTc%2BX4LfkGaAowQbsexqDWu9O39M8%2F7aw8OW%2B99N7By%2BLpuE9Hvd3Kso7PQDm21TWm1ATTuc0sBTscUTF5b5rsVmgkNN2DJv3FK1qR1oM2ujyUU6%2FEJ47fMdxa0E8RX4oHdGB6ijGg%2B7wzrBLke94SUKsdzB9SteLMKeOZmObgZYMOuYuJO2ZsJOFOKXMKHMiJaSHKctBayEVG9MmCwR0b9MkEI%2BN%2Bm%2BSQmEcmSDFHxvhQjo5MKEbG%2FTChHRydMKEaj5JCLR%2BmFUbG%2BEMUaj4UIpHySEUj%2B%2BFCJR%2FfCqKR8KESr4UIhXwqiFfChXV%2BmFCsH6YVVg%2BFCoHwoVQ2KqgfCheHxVUDeGFVwfwxQvDf7WFVwb3xVeGxQu5YVdyxVdy%2FDFDfLFV3LChcG%2FDFW%2BWKt8sUO5YVb5Yoa5e%2BKu5Yqt5f24oW8sCqbN4YqpM3XFUOz4qh3fFUFI%2FXAqXzPQHfbAlJLqTY79MBSlFiPUupGpsqn8crUv%2F%2FUb%2BctkZNK06747wyvE23aRQw%2F4jmXqB6XHwnd8v1o2anIHYwKcWT0IzAyBzcZfXX5F64sAFvIRxEoWhrvXem3bOR7dwXuHufZnU1cT1fXzyF0%2FnDdKb0Dd6nOSD2QjRY7q6iS1lDASFxzUdAtAaEGntXMrCakGWWIMCHzdrNn9X1i7jOwlAkHIbmvwnpt92dVgnxYwXh9Vi4MxDB9Vs%2Fiai1%2Fz%2BWZ2Kbrs2NgF9bFS23Xpmfjk67JFjk0ZBO2ZUZOLKKFO2XxLUQqo1MsBayEXG%2FSmSDFHRvkwgo%2BN%2FfCGKOjfJIR8b4UI6N%2Bm%2BSQjY398KEYj4UI2OTChGxyYWKNR8khFo%2BFCJR8khFI%2BFCKV%2FfCqIV%2BmFCJV8Kq6vXChXV8Kq6vhQrK%2FTChVDYqqh8KFQPhQvDYqqBsKrw%2BKF3LCqoGxVdzxQu5YVdy8cVX8sVbDYoXBsKruWKGw2Kt8vwxQ3yxV3Lpih3LFWuWFVpbAhaWxVSLYqps3XFUOz4qhHf3wKg5H64qls0nXfAlILyWgNciUrNGXkJ5T3IUfRvkFL%2F%2F1ZV%2BZFj9e8p6kAKvalbhf9gaH8Ccz8ouLi4zRfGU3wyt7HNRlDscZRtpJQjMHIHMxl7V%2BWWrmx1ZVEnDnQg1p7HcexzSdp4uODv%2ByM%2Fh5X3bp2qx3en20xowZaP86DYr1APhnCZMRjIh9Rw5RkgJd7VzdRs8iLUEKHaOh%2BKpoKnfb4qdNhk4RLKUwDTxvznAIr21vIxWPkYpaCgAbx2I6jN%2FoJXExLyfasOGYkOXJhWo2wkj5hOorXM7HKi6vLCxbz7UbTdts2GObrMsGG3UFCfbMyEnCnFJ5EocyIlokFIGhy4FqIV0amTBYEIyN8mGJRscmSYo%2BOTpkkI6OTChHRv03yQYo2OT3woRscnvhQjI5MkhHRSe%2BFCNST3ySEYj4UIlHwoRSPhQiVfpkkIpXGFUQj4UIhHwoV1f3woV1fFVYPhQqq%2FTCqqHwoVQ%2FwBOKrw2FCpzwqu5e%2BKFQP8ATiq4NhVeGxVeHxQ4NhVeGxQu5Yqu5YquD4UN8sVbDHxxQ3yxV3LFDuXj9%2BKtcsVWlsULC2KqZbFVBnxVDuxwKhHfrviqBkfbrilLJ5OuBWOX8tFYVyBSE50iPhZRk7GQlq%2FhkVL%2FAP%2FW6zqlot7Y3tmwqt1BJEf9kpGbIi3CD4M1SB7e7nhccWjdlYHsQaHNTli7HGVG3ehGYGQOZAsz0C%2BNpfWs3LiFcciPA5gaiHFEh2GnycMgX2d5P1xfqixk8mbiRIOJYEdDv40p93XOO1mDe30HszVgRpnf19pl5NL8DgiKMsSabE1INT4VzCGOnb%2BPxDnt0Yl5hiF9YzIn2ioZBT4hQChr47Zn6WXBIOp10fEgQGARObm2UsPiX4G%2BamhGbOQ4ZOlieKLGdRtQedFp361zJxzcTLBg19bbmgzOxycDJBjFxDQnbMqMnElFLmWhy%2BJaCGlOWgsCEQjdMmCwIRkb5IFjSOjkyYYo2OTJMUdHJhQjUkySEbHJ92FCNR8KEdFJv1yQYo6N8KEWknvkkIpJMKEUj%2F7eFCJR8KESr4VRKvhQiEfpvkkIhXxVXV8KFZXwoVVc4VVVfChVD4qqB8KF4fFV4f8AtwqvD4oXhsVVA2FV3LwxQuDYquDYVXBsULg2Krg22KFwb3xVvn2wody964q3y98Va5Yoa54q0WxVTLYoUmfFVBnpXAqGd%2FfFUHI%2BKoCWTrgSlM8uxwKxm8kLuqDfkwFMgWQZzAnowRRfyIFP0DAxf%2F%2FX7O42r4Zs3CfGf5n6WdN806kAnGO5f6xF7iUcj%2BNRmv1Ed3Mwy2edxNQ5rcgc6BTy1loVIO4O2Ykw5cC%2BhvJetk21uTJTjRWX3Gc%2FrMO5el0Go2G72qDUhJGrq3w8eJBHYb7n3H%2BffNOcdF6OOexbct36sfpF2oAahutWA33PTbJxhRtEsnEKYKpNrqNxbnaKerxk%2FwAw6%2F1zZfVAHudP9GQjoVK%2BiVq0G3Sm2HGVyxthl%2Fb9dvfMzHJwMkGH3lvQnbMyEnCnFIJoiCcyYycaUUGRTLgWkhcrUywFrIRCP75YCwIRkb075JijY5PfJBijo5OmSQUbHJ0yQQjY5OmFiUaknvkkI2KTcb4Qgo%2BOTJMUYj4UIpJOmSQilfChEo%2FTfChEo%2BFUUj9MKESknTChXV%2FfCqur4UKyvhQrK%2BFVZXxQqh8Krw%2BKF4fCq%2Fniq8PhVUDYoVA2FV%2FLbY4oXBuvhiq4N2xVcHwoX8vpxVsNihdyxVvlhV3PFDfP3xVrnihotTFVpbFVJnwKpM%2BKFBnxVCO%2FhiqDkk64EpdLJ13xVJbqbY75EpSiwX61qkKdVQ8m%2BQ3yCWf8sLF%2F%2F9DtLbjxzZuC%2Bfvzt0kvBpuron2eVtOw%2FwCCT%2BOY2ojYtvwnenzTXi2avIHYQKZW8lKZhzDlwL0jyhqbQTtByID%2FABL8xmt1eOxbtNHl4TT3XTdUZkUFgGAoBTx7%2B2aXJiehw5k7S%2Bq6%2Fs%2B1d69um22V8DkDJulGsEkx3SUMkJDIOhIXqNvbbMjT9x6uNqf5w5hr1xPGsgaqspP0dO%2BS4aNI4uIWkt3HyBY%2B5Nfvy6BaJhid5APi2zLhJwpxYvdQ0J2zKhJxZxSeRKHL4lx5BD5cC0kL1amWAsCESj5MMCEXHJ0yYYlGxyZIMSjUkyTEo1H98KEbHJkkI6KTfrhDFHxyZJCMR8kEItJMLFFI5ySopHwoRKPhQilfChXR8KESsnvhVEq%2BFCur%2B%2BFCsr4VVVfFCoHwqqB8VXh%2FDChUDdMVXh8KqgbFCqGwqv5YoXBvoxVdyxVdyOKF3LcYVb5YquDYob5Yq7lih3PFWue2KtF%2FHFCwviqkz9cVUWfFUO7%2FAI4oQjydd8CUDLJt1xVK5pRvgVIL2egY1yJSi%2FLERZrm7Pf4EP4nIhSy4thYv%2F%2FR7TXNm4LEfO2jjWvLeqWQXlKIjNb%2BPqR%2FEAPnSmQnGwziaL4aukMUrqRQg5qskXYQLcD0IzDmHLgWQ6fdNBNHKpoVIzEyRsU5eOVG3tWlaiHjidW2YVHtXfNNkhu7zDk2ZTHf0IblU0qa9Mo4HLGRWa6DoQB1oNunfCI0kzsJdZ3vpSSWrmij4oj7N1p8svnGxbRjnwnhV5pgeQO%2F%2B1kIhslJI7ojcDMiLjzY5dIDXMiBcaYSCdKVOZMS40glrihy6JaJBTr75aC1EKqvlgLAhEo%2BTDAhGRydMmGJRscmSDFGJJhQjY5K5JiUfFJkggo9JPfJMUWkmFCMSTpkkItJMKEWj5JCLR8KESj4UIhXwoRKt0wqiVauFCurbjfChWV8KqivihUD4VXh8VVA%2FwDt4UKoY4qvD9MVVQ2FCqre%2FwBOKr%2BW38MKFwbFV4bFV3LvXFDuWKruW%2BFW%2BeKG%2BWKt88UNc8VaL7YoWF8VWs%2FbFVFn74qoO%2BKoZ5NsVQckmBUvll64qlNxNsflkSli1%2FPWqg%2FaNBkSkM70iH6rYW8Z2Zhzf5tviGJTPnhQ%2FwD%2F0u0Zs3BWsARQ9%2BoxS%2BKvzI0I6J5kv4ETjbyt69r4cJNwB8jUZr88KLmYZWHnqNQ5gTi5sCmkElKZiSDkxL0Hy9qJKegzbp9n3Ga%2FUY97dlpsm1M4iu6jrSo%2FjmIYudGaKS9I6k%2BwwcDMTQ11cEMsyH4kNfmO4y2A6Nc5dVYXwkQMCKHfr44OCiyGS1CWflU1G%2FXJAIMkrmcNloailE4Brl0S0yCVSr1y%2BJaJBCN1y2JaiGgafRloLUQrI%2BTBYEIpH98mGJRccnvkwwKNjkyQQjY5OmSDEphHJt1yQYo5JOmFCMST3yQYoxJOmFCNjevXJIRaP0woRSPkkIpXwoRKPTCqIWTChErJhQrLIcKFdZMVVRJhVUD4oXh8Kqiviqqr4UKofFVQNhQrK2KqgbFDfLCq8Niq7nihxb3xVwfFV3P3wodzxV3P%2B3FDueKrS%2BKrS%2Ff8MUKZf3xVRaTFUO0nXfAqFeTFUDLLt1xVLZptjvgSkd1Psd8iVSexjN%2FqcMX2kVucnyGR5lJelhwBTsBk2tvmCetK9W8MVf%2FT7PmzcF2KvFfzl8v%2FAF7SINZhSs2nN6dxQbmJzsT8m%2FXlGeNi27FKi%2BT3UoxHhmsnFz4FEQyUOYk4uVAp9Y3RglRwaU6%2B4zGyRsOVjnRZ7Beh0VlNajbMAwp2EZ2jBd7bHvg4WfGvN1yFK1wiK8ShHdFGKV%2BE7r7HuMsMbYiVIgXPYnI8LLiUXl9%2BuSAQShJGrkwwKAly0FrkEC%2B2WgtRCgTloLUQuVssBayFdX75MMCEUknTfJhiUZHJ0yYYlMInyQYFHJJkghGxv0yTFGxvkkI%2BNsIQjUkyTFEo%2FTChFK%2FvhQikfJIRKP74VRCvhQiFf3woV1fFCusnvhVWD4VVA%2FvihUD4VVQ%2BKFVXwqqhsVVVb3woVg3hiqoGxQu5e%2BFXcx44oXh8VXFqjFVvLFW%2BeKHc%2FcjFXc8UNc8KrS9fbFVhfAhSaTFVBpMVQzyYqhJJffFUvll264FSmeelcCWOX11QNv0yJSnPle3Kwy3rj4pzxjr%2FACjr95wxDGRZaHyTBvmveoO9T1%2BWKv8A%2F9TspObRwXYFQWoWcOo2V1Y3K8oLyJopB7MKYkWkbPhLzLpE%2Bi6re6fOtJLWVkJ7EdiPYjfNZlhRc7HKwkCkg5hzi5cJJhDJmLIOTEsi0%2B8KERk7Hp7ZjZIdXKxTpPFuD45TTfxKy3HvhpPE08vIdaEb4QFJXJc1FO464TFRJV9eo640ytTMlcNItRZ65MMShXyYYFDk75aC1kLOWWAtZC9XywFrIRKPU5MMCjompTJhgUYkmTDFHRyZIIR0bV75IMSj426ZIMUakmFCLSTJIRaPhYotJPfCqJR8LFEo%2BFUQr4UIhXwoRCvhVXV%2FfChVWTbCqqr4oVVf33wqrK344oVlbCqqrYoVQ%2BKqobChUD4qvD4q3WuFDfP36YquD4qtL4oa54q7n74q1zxQ0ZMVWl8VU2k98VUWkxQh3kxVCvLiqCkm674FSyabqcCUlurild8BVjUhe8uorWPdpWAGR5p5PULeNLaGKCPZIlCr9GWNRV%2BfvhV3P8emKH%2F%2F1exV%2FHNo4LVdvn4Yq6uBL5%2F%2FADo8terHb%2BYraOpWlvqFB%2FwDn9X3Zj54WLbsMq2fNLDic104udAqkb0OYk4uVApjFIRQg5SQ3Ap7Bdc1AJ%2BIbHMeUaLkxlaJE243wUytUE3vjSbd6tDUdckEWqrN740y4l%2Fq1740m2i9R1w0i1NmyQQVFjkwxKiTlgay2G3ywNZRKGmWBrKLRz2yYYFGRtkwxKPjbpXfJBiUfG9Kb5MMUZHJ74WJRiSZJCMSTChFpJkkIpX98KEUsmFCJSTChEpJhQiFk74UK6v0wqrLJhQqiTFVZZPfChXV8VVlcYUK4bCqqH7YoVQ%2BKqgfbChUD4qvD4qvD1wodyxVvnirueKFL1MVdzxVr1MVW%2BpihYZPfFVJpMVUGl%2BnFUM8uKEHJNgVASzbYEpTPcdd8CsbvbviCa5EpTLyraF2l1KVdt0t6%2F8ADH%2BGSgGEyzjl75Ywdy%2FsxVvlTFD%2FAP%2FW67Xv4ZtHBdU4qtJxSgNTsbfVdPutPukD295G0cg8K9CPcdcBFhQafDnmTRbjQtWvdMuRSS2cqGpsyndWHzGa7LCi52Odhj1aHMKcXKgUVFJXvmLIU5UTaOilKkUOQItmDSYpPyHXfvlZjTcJWrCX3wUm14k98K2uElP44aTaosuNJtf6mNJtxf3wgItYXyQCCplssDAr1y0BrKurZMNZRKE%2BO2TDAo2N6UpkwxKMjfbrkgxKMR%2FuyQYlGJJkkItJPfChGJJ0yTFFpL03%2BWFCLR8KEUj9MkhEo%2FvhQiVf3woRCvhVXV%2FffChVWTFVVX98KFZZMUK6ydMKqyy4UK6ydN8VV1fChWD4qqB8KFQP9GKrw%2BKrw%2BKG%2BeFWueKHc%2B%2BKqbPQ1xVZ6nviq0yUwKsMtO%2BFCmZPfAqk0vvXFUO83viqEkm2PtiqBlmFOuBUsmuKV3xVI7q6pXfIlLHf3uo3kVnDu0rAH2Hcn5DfABZUmnrFrBHaW8VvEPghUKPo7n55cA0kokNT%2BmKHcuu%2BFXcq7dcVf%2F%2FX6wW6ZtHBW8sVcWxVaWxV4z%2BbnlQ6npo8wWcRN1pi8bwKPtQmpqfddz8q5TmhYbcU6L5cdfDNbOLnxkpBihp2zEnFyoSRqSe%2BUENwKJSUjocSLZA0iVlyumwFVEmNJtU9T3w0trhJ74aW14kxpNr%2FAFMIC21z98mAxJXqfpyYDElVFTkwGBKqu2TDAq6t75MMSiUfJBBRaOMLEotH98kGKLSTJMUYkmSQi0kwoRaPkmKLSTChFJJ74UIpJMKESj4VRCvhQrLJhQrK%2BFVZX6YUKofFVYPhQrK%2BKolH98KEQr4UKofFVQPihUD4VX88ULg%2BKrhJ774q3zwoWc8VWs%2B3XfAqgZMVWGTauKqZlxQpNLiqg02KoZ5vA4qg5J%2FfAqXTXHv9GKpNcXNK74FY1e3lAd9%2B2RKWXeUtMaGBtRnX99cikIPZPH6f1ZZAU1zLMq9cmwbrirq4obrir%2F%2FQ6kXLGrMSQAKnegAoB9AGbVwVpbFVvKlMVWluorilSkCSI8cih0kUq6kbEHYgjAr4%2FwDzA8rN5Y1uRIkP6MviZbB%2BwH7UdfFf1ZhZ8dOXinbz91zBnFy4yaRyKDMWUXJhJFK%2BVNqsr4atbpWWTBwshJUEmNJtfzOEBeJUDHCIrxKgY9MmAx4ldQMkIoMlUGmSpja4H3wqqK2SQrK2FirK2SCCiUfJBiUUj5IIKKSTJMUYknvhQjEk6ZJiikkwoRaSZJCKSTChFI%2BFCJSTChEpJ74UK6v3woV1bCqsr4oVQ%2FbCqqr4oRCNhQiFamFVYSe%2BKFUPhVVEnviheHxVd6mFC8SYq36nv88Vb9TbFDRf3xVZ6la9sVQ7SbkVxVQaXFVIzYqotN74oQ7z%2B%2BBUG8%2FviqAluMCpVPc9d8bSkF3eUB3%2BnIkqoaHpz63qIVq%2FVIPjuH9uy%2FM4YiyiRp7IiqiqqgKqgBVHQAbAZc0rq7U7DpihrCrf0Yq7v74q%2FwD%2F0elcv9rNq4LXKn8cVcW8cVWFq9ehxVaWxVi3m3y7beaNHuNOmASahezuKbxygfCfl2ORlHiFMoyovji8s7nT7u4sL2Iw3do5jmjPiP4HNdlhRc6E7CXutNxmJOLkwk5Xp1zFlGnJjJEK%2FwDt5FmrK%2BSDFWVslS2qgjDS2qKSTQYQFJRSCg98mAxtUFe2GltUDf7WKqgOFVwwqvDYoVlb%2FaySFZX98kEIlXwsUUj%2B%2BSCEWj98kxRSSYUItJOmSYopJMKEUknvhQikkwoRSSdMkhEpJ74oRCvhVWWSmFCssmFVUSf2YoV0fChEpJhVEB%2FfFCqJPfChUEmKqgfCheJMVX%2Br74oXCTFW%2FUphVv1PfFDvUxVTeSm%2BKoWSTcGuKoV5cCqDTDxxVQefrviqEknp3xVAy3HXfAqWTXVK70wKkd1eUrvgVIazX9zHbW6mSSZgqqO5OAbpJp7boulRaRYx2yCsh%2BK4lH7Tnr9A6DLwKaCbTamFDqYocRTCrdMVdTevXxxV%2F9LowYdCSOtKZtXBWcvfFWq%2BHfFVpOKrSdqV2wqtrgV5B%2BaHks6xanXdMirqlin%2BkRKN54h%2FxsvbKsuPiDbjnwl82CjrXv3HvmunGnOjJDupU7ZjTg3xk5X98xjFyQVZWwBKIR8sDFEJVumSAQSjEFPn45MBiSrA5JFqgOK2v2ONJtcMaW14OKr%2BQp1wqvXxwhVZThQrq1MkhXV8LFFI%2BSQikfpkmKJST3woRaSdMKEUkmSQiUkwoRSSdMKEUknvhQrrJhQrrJihXVsKqyvhQrq%2BFCJWTCqsJPfFCqJPfFVUSYULxJ74qu9TsMUNhziqoJfvwobEle%2B2Kt%2BphQtMuKrDL4nFUJNJQV7YFQLzdd8VQrT9d8CoZ7j3xVAyXFK74ql011Su%2BBUluLyld8CWPXN20jcVNScir1byZ5d%2BowDUryOl5cL%2B5RhvGh%2FicuhGmqUrZ5TJsG6fq3xV1D1xQu4t2HQEkdcKuHQ7VqNj4Yq4Lir%2FAP%2FTn%2FLNs4LVaDFWiduo%2BWKtvI0js7sZHclndjUknckn3xVSr9J98VW1%2FwBrFWifpr1xV84%2FmX5HbTLiXzHpENbCduWpWyD%2B6c9ZAP5T38Mxs2K93IxZK2LyIgOtRuDmvlFzIyQjoVPt45jzg3xk0rUOUEU3goqLfc9MnEIJTGMgZaGsopThVUHb9eFVVcVXjCtrxiq%2FFNtUIII3xpbVFPjiFVRWlRhQqqckhVVumFCIR8KEQr9N8khEJJhQiUkwsUUknvkkIlJPfChFJL74UIpZemFCusnvhQiUk%2B%2FCqIWTChXWT364UK6yYqrLJhQrCTFCqJPfCqoJMUKgk71wqvEgxQu9TFW%2FUHWuFDfq4q0Zvf6MVWmXvXFCm0w8cVQ00tVO%2BKpVJPTauBUFJce%2BKUFJde%2BBUuluvfFUouLyld8FqkNxdljQb16DIpZ55I8sNdyJq9%2FH%2Fo6GtrE3%2B7GH7W%2FYdvHLIRa5y6PYwO2WtS6ncb%2B2Kup3riq7jt1%2BeKHcRTata9KYq3Tx7YVdxBqa7joPH2xV%2F9Sd1zbOC1X8MVarirWKramvWmKuYr%2BySRQdRTem%2Fc98VWE%2FRXFVKaKK4ikgmjEsMqlJI2FQVIoQRir5c89%2BSZvK1219Yo0ug3bfARubdz%2Bw3t4H6MxM2LqHKxZOhYAyhhUbjtmDKLlxkhhGAx8cpMG0SVlNMjTO0TG2KotHySESpwoVRhW1QYVXjFK8YqqDCq7FXUI6Y0tqisSNxiFVVJySFQNhQqhqYVV1c4WKuslMkhEpJ74UIpJcKESkvvhQiVkwoRCy%2B%2BFCJWSnfChELJhQrrL74VV1lwoVlk264oVRL4YVVRJ74oVRJhQqCX3xVcJcKF3q%2B%2BKt%2Btiq31sUNet74qsM3XChRaf3xVCS3HwnfAqVzT1B3xSlUtzStTgVLprrrvgVKJ72ld8CUlnuyxoDX2wKzHyf5Vl1ucXl4pXTYW%2BM9PVI%2FYX28Tk4xthKVPe4okiRI41CJGAERRQADoBlrSrcfHthVsD3xVvj4d8VXcfbFW%2BJxQ3xHhU9sVdTFX%2F%2F1Zx%2FmBm2cFon%2FbxVqtcVaqMVaJxVafHFWtzXfp1xVaT%2BGKqF3a29%2FbzWl5CtxbXClJYXFQwO2ClD5d86eSrrypdtcW6tcaFcv%2Fo9x1MJP%2B65PD2PfMTLircOXiyXswdkB3H0HMOUXKEnGPao3ysxZiSwEg5CmdohHxSjUfpkkIlTXChVGKrwcKqgxVeMKrxiq8YVXDfGlXiuFV4PTthVeDiheGwqqq2FCur4UK6vvhQiFkwsUSr4VRCye%2F04UK6ye%2BFCIWTChXWTChXWXChXWX3wqrrNihUEvvhQqCXFV%2Fq%2B%2BFDfrgbVxtWxPXFDXre%2BKtet74VWGf3xQptP74qh3uPfFUDPc%2FD1wKlUt113wKk91dd64pSOe%2B675G00lMl0ZGoNz4YFZp5Q8pXGvTi4uA0WmxNSaYbFz%2FIn8TlkY21ylT6HtraG1git7aIRQwqFjjUUAAy1qRagE9Nj70%2BWFDYHhiq4Dviq%2FjUk%2BPbFVwXtirYXw%2B7FXccVb4Yq%2FwD%2F1prXx75tnBapTFXYq1iq36MVaPXxPcYq11qa0p098UNVr%2FXFLeKqN1a299by2l3Cs9tcKUlicVBBwFIfNHnTyHdeWZXvLFXutEkOz9WgJP2X9vA5iZcVbhyceW9iwJdtxup7ZiEOUC5ogw5LkDFkJKBVhUbjwOVkNgKtG5Gx6jviEo6N8khFKcKF1cKr1cd8UqykHChVGKrhhVeBiq4YVXYquHtihuuFV4OFCoGwqqq2FCssmFCusmFCusmFCIWTChWWU%2BOFVdZffFCssvvhQrrL74UKwmG2%2BKqgmwoXib3xQ361R1pirYlA6b%2B%2BFW%2FW98UNev74ULTP74qpNce%2BKqD3HvihCvddcVSy5vKCld8CUkmvOu%2BBUlu77Y%2FFv2wWlKDLJM23TuT0wK9E8m%2BSp9bkW7u1aDS0O7nZpiOy%2B3icsjC2uU6fRFrawWkEVvbRLDDEAscaigAGXNKLA6YqvA%2FDFVwX78CrwtcVX8dvniq8LhVvjgVsKNwRXwwq7jgV%2F9eZ%2BPfNs4Lv1YVaJJ3PbbbbArX4VxVr9WFDgSOlO43oeuBVvz2xVqvv1xS4YqqDpt08MCtSRRzxPDNGssUqlZI3FVIPYg4EvAvOn5ay6cZdU8vxNNY7tcaeKs8XiU8V9uozGyYuocjHl6F5KCVNafNTmKY05QKpwWQVHXuMgQyBpQMbL0yBizBXqSPowJRaPklV61GKFhJGKVyyEfxxSiEl8cKEQr1woVA4wqvDDtiq8HthVfhQu2OKupiq7cYULwcVXq2FCqrYUKofCqsJPffChVWQ7YUKyy4oVRLhVWWX3woVRNihUE3vhVcJsULvWwq362KGjN74ULDP74qptcU74qoNc9d8UISS6HSvzxVBS3fEHfArHrq%2FAJJagwWlIZtQaQlUOC00poGl%2B0Kljt4%2FLDSCXr3k78v5Lv0tR1mMw2go0Fkdmk8C3gPbLYwapT7nu8EMcMaRRIsccYCpGoAAA6ADLWpEqMCqlPpxVeBiq8DfAqoF%2B7FV4Xpiq%2FgR1B7H6DirfHFW%2BO%2FtiruIr88Vf%2F%2FQmebdwWuu2Ku698CrThQt69sVar%2FbirifbbFWvlgVvf2xSvFaVptWhNMCqi4pVV%2F28CXl%2FnD8tbXV%2FV1HRVSz1E1aW36RTH%2FjVj45TkxiTdDIQ%2BfLyxvNNuZLa8ge2uYTSSJxQj%2BozElGnJEgViMr7HZvDIUytcYa9MBiyBWemQfDI0ytUUkbHFVXYjFVhWmNMrcDiqsrHxxVVBOFCqrEYVVlbChWVsVVRhQuwq3ihcMKtgYqu%2BnChcCcVXhj44UKgY4UKgY%2BOFVQOfHFCoH98KqgkxQvEuFC71vfCh3re%2BKtGfFC0z074VUmuPfFUPJddgcUIN7v3xVAyXXU1%2B7AqT3l8wU0PyGAlNJG5kmNXNAei4ptH6fp1zfTx21nbvPPKaKiCp%2F2skIsDJ795S%2FL620v077VQt1fijJD1jiP%2FGxGXRhTRKdvU0WlKdu2WMFcDAqqB0xSvA2wKqAYqvA2%2FDAqqB4bYqvAxVcB%2BPfFV1PbFW6AEivKh6jv9%2BKupir%2FAP%2FRmObdwHH54q4nffFVpoaU603%2B%2FFVte%2F4Yq7riq3FXeG9TgVd0J6YquXrvt3rgSqLilWGBKuvf374EpD5g8r6V5lt%2FRv4aTKP3F4m0iH2PcexyEogs4yIfOnmjyHq%2FlxmmKG70%2BvwX0QNAP8sfs%2FqzFnjIcmGQFhqSMnwvuPHK2aLUK48RgpNuMXfqMFJtr06f0wUm3FCMaTawrgpNtgHFbVlOFVdCp6%2FfhQq8QemGltcEI6YraqtcKFQA4qvAOFC6mFW8VbxQ2MKrhiq4HChcDirYbChcHwq36mKHer74Va9U4oW%2Bt7%2FTiq0z074oUmuPfFULJcnoD8ziqDkuTTr8xihBvcHuaDFUvlumaoT%2FAILsMVQgDOdtyf2jhAQSzTy35K1PXWWUKbWyr8d3IDQ%2F6g%2FaOWRhbXKdPoDQfLem6BAIrKH96w%2Fe3L7yP8z4ewy4RppMrZOgp%2FDCxVgOnh44pVQMVVAPxwKqAHAlUG3XFVQDFVQDpgVeBiq%2BmKtgYqupirXhir%2F%2F0ph3zbuA3XYigoTX329%2BvfFVvtTFWhU1%2BVdzToPfFVpxVr8MVa2264q7FV3ttgVeDvilUX9eBKsv%2BYwJVlOBKqvbAleyJKjRyIHjccWVhUEHqKYEvKvM%2FwCVlhqPqXeiMun3RqTan%2B5Y%2B38v6sqliB5NschHN4Pqmh6roVw0F%2FayWzj7JYfCw8VbocxzEhvEgULFcCtH%2BE%2BPbIpRgCP%2FAJJPfthpbcYyOo28cjSbW8AeoxpNrDF4YKTbXpnFbXAHCqqvIYqqhj4YUKob2wqqA4qv8MKHVOKrq4q3XCrdcUN1wq7FW64UNcvvxVrlirRb3woWl8VWGSmKFJpdsVUWmOKoZ5j41woQzSk4qhmYnFUO4Lmgq3thpFpjpmh6hq0ywWVs87d%2BIoqjxJ6DJCNsDKns%2Fl38ubKx4XGqlby4FCLcf3Sn3%2Fm%2FVl0YNMp29PihjjCoqiNFAAVRsAPAbZY1ogCmKqoxVVH6sVVRv17YEqq1%2BXvgVVQlSCpoV3BGxB9sVXr%2FAJjAqoPbFKoMVXjFVw7YFbxVugxVvFX%2F05eM27gNVpirjirVe%2Fh2xVaeuKtdsVdtirX8MVXdsCrxv02xSqL9%2FvgVWXAlWXx8MDJWGBKqMCqg8emKUJf6dY6nbtbahax3ULdUkWtPceH0YCAUg08b8w%2FlIrGS48v3AFan6jMfwR%2F65TLF3Nscve8fv9J1XRZjBfWstq46K6mh%2BR6H6MpMSG4EFRiugCA23semBUavpSDrxJ%2B7GltzQsN6VHYjGk2t4jBSbdxGGltsLitrgBiq8KMVXAYVX4odirdcKt4q3XChquKurirRNMKreQ8a4oWlvbFVhY4qpl%2FfChSZ%2FpxVRZ%2FDFVAsxxQpkE4VW8SdhucNItHWOjX%2BpSiK1t5J3P7KDYfM9B9OSEbYGVPUNE%2FLRV4TaxLWm%2F1SI%2F8AEn%2Fp9%2BWxg1ym9Ss9OtLCJYbO3S3iX9hAB9J8csAaiUcFp9GFC7CheDTvSvXFV4xSqjAqoMVVh49PfAqqu1MCVQYqvGKqnjgVd1IxSv8Ao%2BeKt1xVv%2BOKrq16Cmw2xV%2F%2F1Jea%2FLwzbuAtOKte%2BKur7U98VWn6B8sVa26djirq70xV2Ktg%2FwC3iq8d%2FbrgSqDtgVVT78Uqy4Eqy4Eqo%2B7AlVGBK4dvfFV2BKEvLGz1CFoL61ju4W6pIob7q9MSLUF5brf5T6ZdF5dHuDYSk7W8lXi%2Bg%2FaH45VLEDybBlI5vKdV8leYtDLNPZPJAv8Ax8Q%2FvI6eJpuPpGVGBDaJgseS5liNGU7df9rIskYtxFJ1Ar92KFTgp%2By30HGk216bDtjS26mKupireKt4VbxV1cVdXFWq%2B%2BFXVxQ1XCqw0PXfFVtadBQYqsLYULCTiqw1xpCziT2wra0pT%2BmGkWuWF3NFTDSLZHpnk%2FWNTKmK1ZYm%2FwB3SfAlPp6%2FRkhC2BmA9I0n8uLG34yajKbqQUPop8KfSepywQazN6Ba6dbWUYhtYEgjXYKgAGTAYEov0wO2SQ0V%2B7FC04UNf5jFVwxVeP8AM4qqDqMVVh1%2FjgSqDFVUdh08TgVUBxVf74Ergdq4quriq%2Bv0YqvWpBIp8Iqd%2FwBWBWwcVbxV%2F9WXfx7Zt3Aa98Va7dfkPbFWj%2FmMVa%2B7FVpxV23TFW8Vd%2BFDgVeNziqoMCVdeND41G3anev%2B1ilUBwJVl%2BW2BKqMCVQHwwJVAabjcj6cVdX6MCrsVdt9OKXca1Boa9RirGdV8n%2BXtX5Nd6dGsrf7vhHpv86r1%2BnImALISIec6n%2BUSnk%2Bk6lTwhuV%2FwCN1%2FplZxdzMZe9gl%2F5G806YWLafJPGP92QfvVP0Lv%2BGQMCGwTBY4zXVuxSaFkYbMrAqR9ByKVy3KnZgRitKgkibowriq%2F4exwq3T3xW2uOK24jFbW0OK21TFDW%2BFba4nFba4k4UW1wONLbXDxOGltrgPnjSLVI7aaUhYoixPQAVP4ZIBFsisvJmu3tCLN4kP7UvwD7jvkhAsTMM00%2F8tFHFr%2B7%2BccI%2FwCNm%2FpkxjYHIznTvK2j6dxMFkhkH%2B7ZPjb7z%2FDJiIDAyLIVgAHTbJMVT0gPkMULSoH0YVU2Hf8ADFCkcKqRxQ1irYp4b4quHbFVZcVVR0xVVB8cCV4xVUU03G3bAq4E%2FP5Yquriq6vTFK%2Bv%2BZwKvG5UAipNBvT8TirdcVXVxV%2F%2F1pd%2BvNu4C35YVargVrt8sVa8fbFDX%2BdcVcf9vFWv1eGKV2%2BKrh2wKqDx%2B84pVQe%2BBKspwJVl%2BWBKqO3vgVUHf2xSvr%2FbgSuGKt4q2MVbGKrhirdB1pvgS1wO9DiqDudNsr0cLyyhulPaSNW%2FWMaW2KXv5eeVryrCwa0Y%2FtQOy%2F8ACmo%2FDImALMTLF7v8pLB97PVZYf8AJmQOPvHHInEEjKWP3H5TazHU21%2Fa3A7VLof1H9eROIsvFCTzfl35tgrxsxMB3jlQ%2FrIweGU%2BIEtl8o%2Ba4ah9IuTTqVTl%2FwARwcEk8cUG%2Bh%2BYo9n0i6Hzgf8ApjwleIKJ0vWx10u5H%2FPF%2FwCmPCVsNjS9ZP8A0q7k%2FwDPJ%2F6Y8JWwrJoevSbJpF0T%2FwAYn%2Fph4SjiCNi8qeZpacdInH%2BsnH9dMlwFHGEzi8geZ5acrNYa93kQfqJw%2BGWJyBNoPyy1Vt7i8t4h3ALMfwAyQxI8ROrb8sbNKG61CSXxWNAv4ktkhjDE5GQ2nkfQLah%2BqG4YdDKxP4CgyQgGJmWR2%2BmWlqAttaxQAf77QL%2BoZKmNo4QAdsKFQRAdsVXhBirqAdsULCMVUmwqotihQbCqytOmxxQsxVv6aYquHthVUGBVRcVVlNfliq8H%2BzFV4NP64FXV74pXV3xVuuBV%2FLFVwOKr64pXA4Ff%2F9k%3D%22)%7Dasync%20loadDefaultFont()%7Bawait%20this.loadFontTexture(this.DEFAULT_FONT_GLYPH_SHEET)%2Cthis.fontMetrics%3Dthis.DEFAULT_FONT_METRICS%2Cthis.initFontMets()%7Dasync%20initText()%7Bthis.fontShader%3Dnew%20h(this.gl%2C%22%23version%20300%20es%5Cn%23line%20576%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnuniform%20vec2%20canvasWidthHeight%3B%5Cnuniform%20vec4%20leftTopWidthHeight%3B%5Cnuniform%20vec4%20uvLeftTopWidthHeight%3B%5Cnout%20vec2%20vUV%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ct%2F%2Fconvert%20pixel%20x%2Cy%20space%201..canvasWidth%2C1..canvasHeight%20to%20WebGL%201..-1%2C-1..1%5Cn%5Ctvec2%20frac%3B%5Cn%5Ctfrac.x%20%3D%20(leftTopWidthHeight.x%20%2B%20(pos.x%20*%20leftTopWidthHeight.z))%20%2F%20canvasWidthHeight.x%3B%20%2F%2F0..1%5Cn%5Ctfrac.y%20%3D%201.0%20-%20((leftTopWidthHeight.y%20%2B%20((1.0%20-%20pos.y)%20*%20leftTopWidthHeight.w))%20%2F%20canvasWidthHeight.y)%3B%20%2F%2F1..0%5Cn%5Ctfrac%20%3D%20(frac%20*%202.0)%20-%201.0%3B%5Cn%5Ctgl_Position%20%3D%20vec4(frac%2C%200.0%2C%201.0)%3B%5Cn%5CtvUV%20%3D%20vec2(uvLeftTopWidthHeight.x%20%2B%20(pos.x%20*%20uvLeftTopWidthHeight.z)%2C%20uvLeftTopWidthHeight.y%20%20%2B%20((1.0%20-%20pos.y)%20*%20uvLeftTopWidthHeight.w)%20)%3B%5Cn%7D%22%2C%22%23version%20300%20es%5Cn%23line%20593%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20highp%20sampler2D%20fontTexture%3B%5Cnuniform%20vec4%20fontColor%3B%5Cnuniform%20float%20screenPxRange%3B%5Cnin%20vec2%20vUV%3B%5Cnout%20vec4%20color%3B%5Cnfloat%20median(float%20r%2C%20float%20g%2C%20float%20b)%20%7B%5Cn%5Ctreturn%20max(min(r%2C%20g)%2C%20min(max(r%2C%20g)%2C%20b))%3B%5Cn%7D%5Cnvoid%20main()%20%7B%5Cn%5Ctvec3%20msd%20%3D%20texture(fontTexture%2C%20vUV).rgb%3B%5Cn%5Ctfloat%20sd%20%3D%20median(msd.r%2C%20msd.g%2C%20msd.b)%3B%5Cn%5Ctfloat%20screenPxDistance%20%3D%20screenPxRange*(sd%20-%200.5)%3B%5Cn%5Ctfloat%20opacity%20%3D%20clamp(screenPxDistance%20%2B%200.5%2C%200.0%2C%201.0)%3B%5Cn%5Ctcolor%20%3D%20vec4(fontColor.rgb%20%2C%20fontColor.a%20*%20opacity)%3B%5Cn%7D%22)%2Cthis.fontShader.use(this.gl)%2Cawait%20this.loadDefaultFont()%2Cawait%20this.loadDefaultMatCap()%2Cthis.drawLoadingText(this.loadingText)%7DmeshShaderNameToNumber(t%3D%22Phong%22)%7Bconst%20e%3Dt.toLowerCase()%3Bfor(let%20t%3D0%3Bt%3Cthis.meshShaders.length%3Bt%2B%2B)if(this.meshShaders%5Bt%5D.Name.toLowerCase()%3D%3D%3De)return%20t%7DsetMeshShader(t%2Ce%3D2)%7Blet%20i%3D0%3Bif(i%3D%22number%22%3D%3Dtypeof%20e%3Fe%3Athis.meshShaderNameToNumber(e)%2Cvoid%200%3D%3D%3Di)throw%20new%20Error(%22shaderIndex%20undefined%22)%3Bi%3DMath.min(i%2Cthis.meshShaders.length-1)%2Ci%3DMath.max(i%2C0)%3Bconst%20s%3Dthis.getMeshIndexByID(t)%3Bs%3E%3Dthis.meshes.length%3Fl.debug(%22Unable%20to%20change%20shader%20until%20mesh%20is%20loaded%20(maybe%20you%20need%20async)%22)%3A(this.meshes%5Bs%5D.meshShaderIndex%3Di%2Cthis.updateGLVolume()%2Cthis.onMeshShaderChanged(s%2Ci))%7DcreateCustomMeshShader(t%2Ce%3D%22Custom%22)%7Bif(!t)throw%20new%20Error(%22Need%20fragment%20shader%22)%3Bconst%20i%3Dthis.meshShaderNameToNumber(e)%3Bi%3E%3D0%26%26(this.gl.deleteProgram(this.meshShaders%5Bi%5D.shader.program)%2Cthis.meshShaders.splice(i%2C1))%3Bconst%20s%3Dnew%20h(this.gl%2CE%2Ct)%3Breturn%20s.use(this.gl)%2C%7BName%3Ae%2CFrag%3At%2Cshader%3As%7D%7DsetCustomMeshShader(t%3D%22%22%2Ce%3D%22Custom%22)%7Bconst%20i%3Dthis.createCustomMeshShader(t%2Ce)%3Breturn%20this.meshShaders.push(i)%2Cthis.onCustomMeshShaderAdded(t%2Ce)%2Cthis.meshShaders.length-1%7DmeshShaderNames(t%3D!0)%7Bconst%20e%3D%5B%5D%3Bfor(let%20t%3D0%3Bt%3Cthis.meshShaders.length%3Bt%2B%2B)e.push(this.meshShaders%5Bt%5D.Name)%3Breturn!0%3D%3D%3Dt%3Fe.sort()%3Ae%7DinitRenderShader(t%2Ce%3D0)%7Bt.use(this.gl)%2Cthis.gl.uniform1i(t.uniforms.volume%2C0)%2Cthis.gl.uniform1i(t.uniforms.colormap%2C1)%2Cthis.gl.uniform1i(t.uniforms.overlay%2C2)%2Cthis.gl.uniform1i(t.uniforms.drawing%2C7)%2Cthis.gl.uniform1fv(t.uniforms.renderDrawAmbientOcclusion%2C%5Bthis.renderDrawAmbientOcclusion%2C1%5D)%2Cthis.gl.uniform1f(t.uniforms.gradientAmount%2Ce)%7Dasync%20init()%7Bconst%20t%3Dthis.gl.getExtension(%22WEBGL_debug_renderer_info%22)%3Bif(t)%7Bconst%20e%3Dthis.gl.getParameter(t.UNMASKED_VENDOR_WEBGL)%2Ci%3Dthis.gl.getParameter(t.UNMASKED_RENDERER_WEBGL)%3Bl.info(%22renderer%20vendor%3A%20%22%2Ce)%2Cl.info(%22renderer%3A%20%22%2Ci)%7Delse%20l.info(%22debug_renderer_info%20unavailable%22)%3Bconst%20e%3Dthis.gl.getParameter(this.gl.RENDERER)%3Bl.info(%22firefox%20renderer%3A%20%22%2Ce)%2Cthis.gl.clearDepth(0)%2Cthis.gl.enable(this.gl.CULL_FACE)%2Cthis.gl.cullFace(this.gl.FRONT)%2Cthis.gl.enable(this.gl.BLEND)%2Cthis.gl.blendFunc(this.gl.SRC_ALPHA%2Cthis.gl.ONE_MINUS_SRC_ALPHA)%2Cthis.volumeTexture%3Dthis.rgbaTex(this.volumeTexture%2CBi%2C%5B2%2C2%2C2%2C2%5D%2C!0)%2Cthis.overlayTexture%3Dthis.rgbaTex(this.overlayTexture%2CRi%2C%5B2%2C2%2C2%2C2%5D%2C!0)%2Cthis.drawTexture%3Dthis.r8Tex(this.drawTexture%2CNi%2C%5B2%2C2%2C2%2C2%5D%2C!0)%3Bconst%20i%3Dthis.gl%3Bthis.cuboidVertexBuffer%3Di.createBuffer()%2Ci.bindBuffer(i.ARRAY_BUFFER%2Cthis.cuboidVertexBuffer)%2Ci.bufferData(i.ARRAY_BUFFER%2Cnew%20Float32Array(%5B1%2C1%2C0%2C1%2C0%2C0%2C0%2C1%2C0%2C0%2C0%2C0%5D)%2Ci.STATIC_DRAW)%2Cthis.genericVAO%3Di.createVertexArray()%2Ci.bindVertexArray(this.genericVAO)%2Ci.bindBuffer(i.ARRAY_BUFFER%2Cthis.cuboidVertexBuffer)%2Ci.enableVertexAttribArray(0)%2Ci.vertexAttribPointer(0%2C3%2Ci.FLOAT%2C!1%2C0%2C0)%2Ci.bindVertexArray(this.unusedVAO)%2Cthis.pickingMeshShader%3Dnew%20h(i%2CE%2C%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20float%20opacity%3B%5Cnout%20vec4%20color%3B%5Cnvec4%20packFloatToVec4i(const%20float%20value)%20%7B%5Cn%5Ctconst%20vec4%20bitSh%20%3D%20vec4(256.0*256.0*256.0%2C%20256.0*256.0%2C%20256.0%2C%201.0)%3B%5Cn%5Ctconst%20vec4%20bitMsk%20%3D%20vec4(0.0%2C%201.0%2F256.0%2C%201.0%2F256.0%2C%201.0%2F256.0)%3B%5Cn%5Ctvec4%20res%20%3D%20fract(value%20*%20bitSh)%3B%5Cn%5Ctres%20-%3D%20res.xxyz%20*%20bitMsk%3B%5Cn%5Ctreturn%20res%3B%5Cn%7D%5Cnvoid%20main()%20%7B%5Cn%5Ctcolor%20%3D%20packFloatToVec4i(gl_FragCoord.z)%3B%5Cn%7D%22)%2Cthis.pickingMeshShader.use(i)%2Cthis.pickingImageShader%3Dnew%20h(i%2Cc%2CU)%2Cthis.pickingImageShader.use(i)%2Ci.uniform1i(this.pickingImageShader.uniforms.volume%2C0)%2Ci.uniform1i(this.pickingImageShader.uniforms.colormap%2C1)%2Ci.uniform1i(this.pickingImageShader.uniforms.overlay%2C2)%2Ci.uniform1i(this.pickingImageShader.uniforms.drawing%2C7)%2Cthis.sliceMMShader%3Dnew%20h(i%2Cv%2CC)%2Cthis.sliceMMShader.use(i)%2Ci.uniform1i(this.sliceMMShader.uniforms.volume%2C0)%2Ci.uniform1i(this.sliceMMShader.uniforms.colormap%2C1)%2Ci.uniform1i(this.sliceMMShader.uniforms.overlay%2C2)%2Ci.uniform1i(this.sliceMMShader.uniforms.drawing%2C7)%2Ci.uniform1f(this.sliceMMShader.uniforms.drawOpacity%2Cthis.drawOpacity)%2Cthis.sliceV1Shader%3Dnew%20h(i%2Cv%2Cb)%2Cthis.sliceV1Shader.use(i)%2Ci.uniform1i(this.sliceV1Shader.uniforms.volume%2C0)%2Ci.uniform1i(this.sliceV1Shader.uniforms.colormap%2C1)%2Ci.uniform1i(this.sliceV1Shader.uniforms.overlay%2C2)%2Ci.uniform1i(this.sliceV1Shader.uniforms.drawing%2C7)%2Ci.uniform1f(this.sliceV1Shader.uniforms.drawOpacity%2Cthis.drawOpacity)%2Cthis.orientCubeShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cn%2F%2F%20an%20attribute%20is%20an%20input%20(in)%20to%20a%20vertex%20shader.%5Cn%2F%2F%20It%20will%20receive%20data%20from%20a%20buffer%5Cnlayout(location%3D0)%20%20in%20vec3%20a_position%3B%5Cnlayout(location%3D1)%20%20in%20vec3%20a_color%3B%5Cn%2F%2F%20A%20matrix%20to%20transform%20the%20positions%20by%5Cnuniform%20mat4%20u_matrix%3B%5Cnout%20vec3%20vColor%3B%5Cn%2F%2F%20all%20shaders%20have%20a%20main%20function%5Cnvoid%20main()%20%7B%5Cn%5Ct%2F%2F%20Multiply%20the%20position%20by%20the%20matrix.%5Cn%5Ctvec4%20pos%20%3D%20vec4(a_position%2C%201.0)%3B%5Cn%5Ctgl_Position%20%3D%20u_matrix%20*%20vec4(pos)%3B%5Cn%5CtvColor%20%3D%20a_color%3B%5Cn%7D%5Cn%22%2C%22%23version%20300%20es%5Cnprecision%20highp%20float%3B%5Cnuniform%20vec4%20u_color%3B%5Cnin%20vec3%20vColor%3B%5Cnout%20vec4%20outColor%3B%5Cnvoid%20main()%20%7B%5Cn%5CtoutColor%20%3D%20vec4(vColor%2C%201.0)%3B%5Cn%7D%22)%2Cthis.orientCubeShaderVAO%3Di.createVertexArray()%2Ci.bindVertexArray(this.orientCubeShaderVAO)%3Bconst%20s%3Di.createBuffer()%3Bi.enableVertexAttribArray(0)%2Ci.enableVertexAttribArray(1)%2Ci.bindBuffer(i.ARRAY_BUFFER%2Cs)%2Ci.bufferData(i.ARRAY_BUFFER%2CN%2Ci.STATIC_DRAW)%2Ci.vertexAttribPointer(0%2C3%2Ci.FLOAT%2C!1%2C24%2C0)%2Ci.enableVertexAttribArray(1)%2Ci.vertexAttribPointer(1%2C3%2Ci.FLOAT%2C!1%2C24%2C12)%2Ci.bindVertexArray(this.unusedVAO)%2Cthis.rectShader%3Dnew%20h(i%2CI%2Cy)%2Cthis.rectShader.use(i)%2Cthis.rectOutlineShader%3Dnew%20h(i%2CI%2C%22%23version%20300%20es%5Cn%23line%20723%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cn%5Cnuniform%20vec4%20lineColor%3B%5Cnuniform%20vec4%20leftTopWidthHeight%3B%5Cnuniform%20float%20thickness%3B%20%2F%2F%20line%20thickness%20in%20pixels%5Cnuniform%20vec2%20canvasWidthHeight%3B%5Cn%5Cnout%20vec4%20color%3B%5Cn%5Cnvoid%20main()%20%7B%5Cn%20%20%20%20%2F%2F%20fragment%20position%20in%20screen%20coordinates%5Cn%20%20%20%20vec2%20fragCoord%20%3D%20gl_FragCoord.xy%3B%5Cn%5Cn%20%20%20%20%2F%2F%20canvas%20height%5Cn%20%20%20%20float%20canvasHeight%20%3D%20canvasWidthHeight.y%3B%5Cn%5Cn%20%20%20%20%2F%2F%20'top'%20and%20'bottom'%20to%20match%20gl_FragCoord.y%20coordinate%20system%5Cn%20%20%20%20float%20top%20%3D%20canvasHeight%20-%20leftTopWidthHeight.y%3B%5Cn%20%20%20%20float%20bottom%20%3D%20top%20-%20leftTopWidthHeight.w%3B%5Cn%5Cn%20%20%20%20%2F%2F%20left%20and%20right%20edges%5Cn%20%20%20%20float%20left%20%3D%20leftTopWidthHeight.x%3B%5Cn%20%20%20%20float%20right%20%3D%20left%20%2B%20leftTopWidthHeight.z%3B%5Cn%5Cn%20%20%20%20bool%20withinLeft%20%3D%20fragCoord.x%20%3E%3D%20left%20%26%26%20fragCoord.x%20%3C%3D%20left%20%2B%20thickness%3B%5Cn%20%20%20%20bool%20withinRight%20%3D%20fragCoord.x%20%3C%3D%20right%20%26%26%20fragCoord.x%20%3E%3D%20right%20-%20thickness%3B%5Cn%20%20%20%20bool%20withinTop%20%3D%20fragCoord.y%20%3C%3D%20top%20%26%26%20fragCoord.y%20%3E%3D%20top%20-%20thickness%3B%5Cn%20%20%20%20bool%20withinBottom%20%3D%20fragCoord.y%20%3E%3D%20bottom%20%26%26%20fragCoord.y%20%3C%3D%20bottom%20%2B%20thickness%3B%5Cn%5Cn%20%20%20%20bool%20isOutline%20%3D%20withinLeft%20%7C%7C%20withinRight%20%7C%7C%20withinTop%20%7C%7C%20withinBottom%3B%5Cn%5Cn%20%20%20%20if%20(isOutline)%20%7B%5Cn%20%20%20%20%20%20%20%20color%20%3D%20lineColor%3B%5Cn%20%20%20%20%7D%20else%20%7B%5Cn%20%20%20%20%20%20%20%20discard%3B%20%5Cn%20%20%20%20%7D%5Cn%7D%22)%2Cthis.rectOutlineShader.use(i)%2Cthis.lineShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cn%23line%20534%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnuniform%20vec2%20canvasWidthHeight%3B%5Cnuniform%20float%20thickness%3B%5Cnuniform%20vec4%20startXYendXY%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ctvec2%20posXY%20%3D%20mix(startXYendXY.xy%2C%20startXYendXY.zw%2C%20pos.x)%3B%5Cn%5Ctvec2%20dir%20%3D%20normalize(startXYendXY.xy%20-%20startXYendXY.zw)%3B%5Cn%5CtposXY%20%2B%3D%20vec2(-dir.y%2C%20dir.x)%20*%20thickness%20*%20(pos.y%20-%200.5)%3B%5Cn%5CtposXY.x%20%3D%20(posXY.x)%20%2F%20canvasWidthHeight.x%3B%20%2F%2F0..1%5Cn%5CtposXY.y%20%3D%201.0%20-%20(posXY.y%20%2F%20canvasWidthHeight.y)%3B%20%2F%2F1..0%5Cn%5Ctgl_Position%20%3D%20vec4((posXY%20*%202.0)%20-%201.0%2C%200.0%2C%201.0)%3B%5Cn%7D%22%2Cy)%2Cthis.lineShader.use(i)%2Cthis.line3DShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cn%23line%20534%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnuniform%20vec2%20canvasWidthHeight%3B%5Cnuniform%20float%20thickness%3B%5Cnuniform%20vec2%20startXY%3B%5Cnuniform%20vec3%20endXYZ%3B%20%2F%2F%20transformed%20XYZ%20point%5Cnvoid%20main(void)%20%7B%5Ct%5Cn%5Ctvec2%20posXY%20%3D%20mix(startXY.xy%2C%20endXYZ.xy%2C%20pos.x)%3B%5Cn%5Ctvec2%20startDiff%20%3D%20endXYZ.xy%20-%20startXY.xy%3B%5Cn%5Ctfloat%20startDistance%20%3D%20length(startDiff)%3B%5Cn%5Ctvec2%20diff%20%3D%20endXYZ.xy%20-%20posXY%3B%5Cn%5Ctfloat%20currentDistance%20%3D%20length(diff)%3B%5Cn%5Ctvec2%20dir%20%3D%20normalize(startXY.xy%20-%20endXYZ.xy)%3B%5Cn%5CtposXY%20%2B%3D%20vec2(-dir.y%2C%20dir.x)%20*%20thickness%20*%20(pos.y%20-%200.5)%3B%5Cn%5CtposXY.x%20%3D%20(posXY.x)%20%2F%20canvasWidthHeight.x%3B%20%2F%2F0..1%5Cn%5CtposXY.y%20%3D%201.0%20-%20(posXY.y%20%2F%20canvasWidthHeight.y)%3B%20%2F%2F1..0%5Ct%5Cn%5Ctfloat%20z%20%3D%20endXYZ.z%20*%20(%201.0%20-%20abs(currentDistance%2FstartDistance))%3B%20%5Cn%5Ctgl_Position%20%3D%20vec4((posXY%20*%202.0)%20-%201.0%2C%20z%2C%201.0)%3B%5Cn%7D%22%2Cy)%2Cthis.line3DShader.use(i)%2Cthis.circleShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnuniform%20vec2%20canvasWidthHeight%3B%5Cnuniform%20vec4%20leftTopWidthHeight%3B%5Cnuniform%20vec4%20uvLeftTopWidthHeight%3B%5Cnout%20vec2%20vUV%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ct%2F%2Fconvert%20pixel%20x%2Cy%20space%201..canvasWidth%2C1..canvasHeight%20to%20WebGL%201..-1%2C-1..1%5Cn%5Ctvec2%20frac%3B%5Cn%5Ctfrac.x%20%3D%20(leftTopWidthHeight.x%20%2B%20(pos.x%20*%20leftTopWidthHeight.z))%20%2F%20canvasWidthHeight.x%3B%20%2F%2F0..1%5Cn%5Ctfrac.y%20%3D%201.0%20-%20((leftTopWidthHeight.y%20%2B%20((1.0%20-%20pos.y)%20*%20leftTopWidthHeight.w))%20%2F%20canvasWidthHeight.y)%3B%20%2F%2F1..0%5Cn%5Ctfrac%20%3D%20(frac%20*%202.0)%20-%201.0%3B%5Cn%5Ctgl_Position%20%3D%20vec4(frac%2C%200.0%2C%201.0)%3B%5Cn%5CtvUV%20%3D%20pos.xy%3B%5Cn%7D%22%2C%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20vec4%20circleColor%3B%5Cnuniform%20float%20fillPercent%3B%5Cnin%20vec2%20vUV%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ct%2F*%20Check%20if%20the%20pixel%20is%20inside%20the%20circle%5Cn%5Ct%5Ct%20and%20color%20it%20with%20a%20gradient.%20Otherwise%2C%20color%20it%20%5Cn%5Ct%5Ct%20transparent%20%20%20*%2F%5Cn%5Ctfloat%20distance%20%3D%20length(vUV-vec2(0.5%2C0.5))%3B%5Cn%5Ctif%20(%20distance%20%3C%200.5%20%26%26%20distance%20%3E%3D%20(1.0%20-%20fillPercent)%20%2F%202.0)%7B%5Cn%5Ct%5Ct%5Ctcolor%20%3D%20vec4(circleColor.r%2CcircleColor.g%2CcircleColor.b%2CcircleColor.a)%20%3B%5Ct%5Ct%5Ct%5Cn%5Ct%7Delse%7B%5Cn%5Ct%5Ct%5Ctcolor%20%3D%20vec4(0.0%2C0.0%2C0.0%2C0.0)%3B%5Cn%5Ct%7D%5Cn%7D%5Cn%22)%2Cthis.circleShader.use(i)%2Cthis.renderVolumeShader%3Dnew%20h(i%2Cc%2Cg)%2Cthis.initRenderShader(this.renderVolumeShader)%2Cthis.renderSliceShader%3Dnew%20h(i%2Cc%2Cf)%2Cthis.initRenderShader(this.renderSliceShader)%2Cthis.renderGradientShader%3Dnew%20h(i%2Cc%2Cp)%2Cthis.initRenderShader(this.renderGradientShader%2C.3)%2Ci.uniform1i(this.renderGradientShader.uniforms.matCap%2C5)%2Ci.uniform1i(this.renderGradientShader.uniforms.gradient%2C6)%2Cthis.renderShader%3Dthis.renderVolumeShader%2Cthis.colorbarShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cn%23line%20490%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnuniform%20vec2%20canvasWidthHeight%3B%5Cnuniform%20vec4%20leftTopWidthHeight%3B%5Cnout%20vec2%20vColor%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ct%2F%2Fconvert%20pixel%20x%2Cy%20space%201..canvasWidth%2C1..canvasHeight%20to%20WebGL%201..-1%2C-1..1%5Cn%5Ctvec2%20frac%3B%5Cn%5Ctfrac.x%20%3D%20(leftTopWidthHeight.x%20%2B%20(pos.x%20*%20leftTopWidthHeight.z))%20%2F%20canvasWidthHeight.x%3B%20%2F%2F0..1%5Cn%5Ctfrac.y%20%3D%201.0%20-%20((leftTopWidthHeight.y%20%2B%20((1.0%20-%20pos.y)%20*%20leftTopWidthHeight.w))%20%2F%20canvasWidthHeight.y)%3B%20%2F%2F1..0%5Cn%5Ctfrac%20%3D%20(frac%20*%202.0)%20-%201.0%3B%5Cn%5Ctgl_Position%20%3D%20vec4(frac%2C%200.0%2C%201.0)%3B%5Cn%5CtvColor%20%3D%20pos.xy%3B%5Cn%7D%22%2C%22%23version%20300%20es%5Cn%23line%20506%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20highp%20sampler2D%20colormap%3B%5Cnuniform%20float%20layer%3B%5Cnin%20vec2%20vColor%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctfloat%20nlayer%20%3D%20float(textureSize(colormap%2C%200).y)%3B%5Cn%5Ctfloat%20fmap%20%3D%20(0.5%20%2B%20layer)%20%2F%20nlayer%3B%5Cn%5Ctcolor%20%3D%20vec4(texture(colormap%2C%20vec2(vColor.x%2C%20fmap)).rgb%2C%201.0)%3B%5Cn%7D%22)%2Cthis.colorbarShader.use(i)%2Ci.uniform1i(this.colorbarShader.uniforms.colormap%2C1)%2Cthis.blurShader%3Dnew%20h(i%2CR%2C%22%23version%20300%20es%5Cn%23line%20298%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec2%20TexCoord%3B%5Cnout%20vec4%20FragColor%3B%5Cnuniform%20float%20coordZ%3B%5Cnuniform%20float%20dX%3B%5Cnuniform%20float%20dY%3B%5Cnuniform%20float%20dZ%3B%5Cnuniform%20highp%20sampler3D%20intensityVol%3B%5Cnvoid%20main(void)%20%7B%5Cn%20vec3%20vx%20%3D%20vec3(TexCoord.xy%2C%20coordZ)%3B%5Cn%20vec4%20samp%20%3D%20texture(intensityVol%2Cvx%2Bvec3(%2BdX%2C%2BdY%2C%2BdZ))%3B%5Cn%20samp%20%2B%3D%20texture(intensityVol%2Cvx%2Bvec3(%2BdX%2C%2BdY%2C-dZ))%3B%5Cn%20samp%20%2B%3D%20texture(intensityVol%2Cvx%2Bvec3(%2BdX%2C-dY%2C%2BdZ))%3B%5Cn%20samp%20%2B%3D%20texture(intensityVol%2Cvx%2Bvec3(%2BdX%2C-dY%2C-dZ))%3B%5Cn%20samp%20%2B%3D%20texture(intensityVol%2Cvx%2Bvec3(-dX%2C%2BdY%2C%2BdZ))%3B%5Cn%20samp%20%2B%3D%20texture(intensityVol%2Cvx%2Bvec3(-dX%2C%2BdY%2C-dZ))%3B%5Cn%20samp%20%2B%3D%20texture(intensityVol%2Cvx%2Bvec3(-dX%2C-dY%2C%2BdZ))%3B%5Cn%20samp%20%2B%3D%20texture(intensityVol%2Cvx%2Bvec3(-dX%2C-dY%2C-dZ))%3B%5Cn%20FragColor%20%3D%20samp*0.125%3B%5Cn%7D%22)%2Cthis.sobelShader%3Dnew%20h(i%2CR%2C%22%23version%20300%20es%5Cn%23line%20323%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec2%20TexCoord%3B%5Cnout%20vec4%20FragColor%3B%5Cnuniform%20float%20coordZ%3B%5Cnuniform%20float%20dX%3B%5Cnuniform%20float%20dY%3B%5Cnuniform%20float%20dZ%3B%5Cnuniform%20highp%20sampler3D%20intensityVol%3B%5Cnvoid%20main(void)%20%7B%5Cn%20%20vec3%20vx%20%3D%20vec3(TexCoord.xy%2C%20coordZ)%3B%5Cn%20%20%2F%2FNeighboring%20voxels%20'T'op%2F'B'ottom%2C%20'A'nterior%2F'P'osterior%2C%20'R'ight%2F'L'eft%5Cn%20%20float%20TAR%20%3D%20texture(intensityVol%2Cvx%2Bvec3(%2BdX%2C%2BdY%2C%2BdZ)).r%3B%5Cn%20%20float%20TAL%20%3D%20texture(intensityVol%2Cvx%2Bvec3(%2BdX%2C%2BdY%2C-dZ)).r%3B%5Cn%20%20float%20TPR%20%3D%20texture(intensityVol%2Cvx%2Bvec3(%2BdX%2C-dY%2C%2BdZ)).r%3B%5Cn%20%20float%20TPL%20%3D%20texture(intensityVol%2Cvx%2Bvec3(%2BdX%2C-dY%2C-dZ)).r%3B%5Cn%20%20float%20BAR%20%3D%20texture(intensityVol%2Cvx%2Bvec3(-dX%2C%2BdY%2C%2BdZ)).r%3B%5Cn%20%20float%20BAL%20%3D%20texture(intensityVol%2Cvx%2Bvec3(-dX%2C%2BdY%2C-dZ)).r%3B%5Cn%20%20float%20BPR%20%3D%20texture(intensityVol%2Cvx%2Bvec3(-dX%2C-dY%2C%2BdZ)).r%3B%5Cn%20%20float%20BPL%20%3D%20texture(intensityVol%2Cvx%2Bvec3(-dX%2C-dY%2C-dZ)).r%3B%5Cn%20%20vec4%20gradientSample%20%3D%20vec4%20(0.0%2C%200.0%2C%200.0%2C%200.0)%3B%5Cn%20%20gradientSample.r%20%3D%20%20%20BAR%2BBAL%2BBPR%2BBPL%20-TAR-TAL-TPR-TPL%3B%5Cn%20%20gradientSample.g%20%3D%20%20TPR%2BTPL%2BBPR%2BBPL%20-TAR-TAL-BAR-BAL%3B%5Cn%20%20gradientSample.b%20%3D%20%20TAL%2BTPL%2BBAL%2BBPL%20-TAR-TPR-BAR-BPR%3B%5Cn%20%20gradientSample.a%20%3D%20(abs(gradientSample.r)%2Babs(gradientSample.g)%2Babs(gradientSample.b))*0.29%3B%5Cn%20%20gradientSample.rgb%20%3D%20normalize(gradientSample.rgb)%3B%5Cn%20%20gradientSample.rgb%20%3D%20%20(gradientSample.rgb%20*%200.5)%2B0.5%3B%5Cn%20%20FragColor%20%3D%20gradientSample%3B%5Cn%7D%22)%2Cthis.growCutShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cn%23line%20808%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec3%20vPos%3B%5Cnout%20vec2%20TexCoord%3B%5Cnvoid%20main()%20%7B%5Cn%5CtTexCoord%20%3D%20vPos.xy%3B%5Cn%5Ctgl_Position%20%3D%20vec4((vPos.x%20-%200.5)%20*%202.0%2C%20(vPos.y%20-%200.5)%20*%202.0%2C%200.0%2C%201.0)%3B%5Cn%7D%22%2C%22%23version%20300%20es%5Cn%23line%20829%5Cn%5Ctprecision%20highp%20float%3B%5Cn%5Ctprecision%20highp%20int%3B%5Cn%5Ctprecision%20highp%20isampler3D%3B%5Cn%5Ctlayout(location%20%3D%200)%20out%20int%20label%3B%5Cn%5Ctlayout(location%20%3D%201)%20out%20int%20strength%3B%5Cn%5Ctin%20vec2%20TexCoord%3B%5Cn%5Ctuniform%20int%20finalPass%3B%5Cn%5Ctuniform%20float%20coordZ%3B%5Cn%5Ctuniform%20lowp%20sampler3D%20in3D%3B%5Cn%5Ctuniform%20highp%20isampler3D%20backTex%3B%20%2F%2F%20background%5Cn%5Ctuniform%20highp%20isampler3D%20labelTex%3B%20%2F%2F%20label%5Cn%5Ctuniform%20highp%20isampler3D%20strengthTex%3B%20%2F%2F%20strength%5Cnvoid%20main(void)%20%7B%5Cn%5Ctvec3%20interpolatedTextureCoordinate%20%3D%20vec3(TexCoord.xy%2C%20coordZ)%3B%5Cn%5Ctivec3%20size%20%3D%20textureSize(backTex%2C%200)%3B%5Cn%5Ctivec3%20texelIndex%20%3D%20ivec3(floor(interpolatedTextureCoordinate%20*%20vec3(size)))%3B%5Cn%5Ctint%20background%20%3D%20texelFetch(backTex%2C%20texelIndex%2C%200).r%3B%5Cn%5Ctlabel%20%3D%20texelFetch(labelTex%2C%20texelIndex%2C%200).r%3B%5Cn%5Ctstrength%20%3D%20texelFetch(strengthTex%2C%20texelIndex%2C%200).r%3B%5Cn%5Ctfor%20(int%20k%20%3D%20-1%3B%20k%20%3C%3D%201%3B%20k%2B%2B)%20%7B%5Cn%5Ct%5Ctfor%20(int%20j%20%3D%20-1%3B%20j%20%3C%3D%201%3B%20j%2B%2B)%20%7B%5Cn%5Ct%5Ct%5Ctfor%20(int%20i%20%3D%20-1%3B%20i%20%3C%3D%201%3B%20i%2B%2B)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ctif%20(i%20!%3D%200%20%26%26%20j%20!%3D%200%20%26%26%20k%20!%3D%200)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctivec3%20neighborIndex%20%3D%20texelIndex%20%2B%20ivec3(i%2Cj%2Ck)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctint%20neighborBackground%20%3D%20texelFetch(backTex%2C%20neighborIndex%2C%200).r%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctint%20neighborStrength%20%3D%20texelFetch(strengthTex%2C%20neighborIndex%2C%200).r%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctint%20strengthCost%20%3D%20abs(neighborBackground%20-%20background)%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctint%20takeoverStrength%20%3D%20neighborStrength%20-%20strengthCost%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctif%20(takeoverStrength%20%3E%20strength)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Ctstrength%20%3D%20takeoverStrength%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Ctlabel%20%3D%20texelFetch(labelTex%2C%20neighborIndex%2C%200).r%3B%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%5Ct%7D%5Cn%5Ct%5Ct%7D%5Cn%5Ct%7D%5Cn%5Ctif%20(finalPass%20%3C%201)%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ctint%20ok%20%3D%201%3B%5Cn%5Ctivec4%20labelCount%20%3D%20ivec4(0%2C0%2C0%2C0)%3B%5Cn%5Ctfor%20(int%20k%20%3D%20-1%3B%20k%20%3C%3D%201%3B%20k%2B%2B)%5Cn%5Ct%5Ctfor%20(int%20j%20%3D%20-1%3B%20j%20%3C%3D%201%3B%20j%2B%2B)%5Cn%5Ct%5Ct%5Ctfor%20(int%20i%20%3D%20-1%3B%20i%20%3C%3D%201%3B%20i%2B%2B)%20%7B%5Cn%5Ct%5Ct%5Ct%5Ctivec3%20neighborIndex%20%3D%20texelIndex%20%2B%20ivec3(i%2Cj%2Ck)%3B%5Cn%5Ct%5Ct%5Ct%5Ctint%20ilabel%20%3D%20texelFetch(labelTex%2C%20neighborIndex%2C%200).r%3B%5Cn%5Ct%5Ct%5Ct%5Ctif%20((ilabel%20%3C%200)%20%7C%7C%20(ilabel%20%3E%203))%5Cn%5Ct%5Ct%5Ct%5Ct%5Ctok%20%3D%200%3B%5Cn%5Ct%5Ct%5Ct%5Ctelse%5Cn%5Ct%5Ct%5Ct%5Ct%5CtlabelCount%5Bilabel%5D%2B%2B%3B%5Cn%5Ct%5Ct%5Ct%7D%5Cn%5Ctif%20(ok%20!%3D%201)%20%7B%5Cn%5Ct%5Ctreturn%3B%5Cn%5Ct%7D%5Cn%5Ctint%20maxIdx%20%3D%200%3B%5Cn%5Ctfor%20(int%20i%20%3D%201%3B%20i%20%3C%204%3B%20i%2B%2B)%20%7B%5Cn%5Ct%5Ctif%20(labelCount%5Bi%5D%20%3E%20labelCount%5BmaxIdx%5D)%5Cn%5Ct%5Ct%5CtmaxIdx%20%3D%20i%3B%5Cn%5Ct%7D%5Cn%5Ctlabel%20%3D%20maxIdx%3B%5Cn%7D%22)%2Cthis.passThroughShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cn%23line%201359%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec3%20vPos%3B%5Cnout%20vec2%20TexCoord%3B%5Cnvoid%20main()%20%7B%5Cn%5CtTexCoord%20%3D%20vPos.xy%3B%5Cn%5Ctvec2%20viewCoord%20%3D%20(vPos.xy%20-%200.5)%20*%202.0%3B%5Cn%5Ctgl_Position%20%3D%20vec4((vPos.xy%20-%200.5)%20*%202.0%2C%200.0%2C%201.0)%3B%5Cn%7D%22%2C%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec2%20TexCoord%3B%5Cnout%20vec4%20FragColor%3B%5Cnuniform%20float%20coordZ%3B%5Cnuniform%20lowp%20sampler3D%20in3D%3B%5Cnvoid%20main(void)%20%7B%5Cn%20FragColor%20%3D%20texture(in3D%2C%20vec3(TexCoord.xy%2C%20coordZ))%3B%5Cn%7D%22)%2Cthis.orientShaderAtlasU%3Dnew%20h(i%2CM%2CD.concat(V))%2Cthis.orientShaderAtlasI%3Dnew%20h(i%2CM%2CF.concat(V))%2Cthis.orientShaderU%3Dnew%20h(i%2CM%2CD.concat(S))%2Cthis.orientShaderI%3Dnew%20h(i%2CM%2CF.concat(S))%2Cthis.orientShaderF%3Dnew%20h(i%2CM%2CT.concat(S))%2Cthis.orientShaderRGBU%3Dnew%20h(i%2CM%2CD.concat(%22%23line%20773%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec2%20TexCoord%3B%5Cnout%20vec4%20FragColor%3B%5Cnuniform%20float%20coordZ%3B%5Cnuniform%20float%20layer%3B%5Cnuniform%20float%20scl_slope%3B%5Cnuniform%20float%20scl_inter%3B%5Cnuniform%20float%20cal_max%3B%5Cnuniform%20float%20cal_min%3B%5Cnuniform%20highp%20sampler2D%20colormap%3B%5Cnuniform%20lowp%20sampler3D%20blend3D%3B%5Cnuniform%20float%20opacity%3B%5Cnuniform%20mat4%20mtx%3B%5Cnuniform%20bool%20hasAlpha%3B%5Cnuniform%20int%20modulation%3B%5Cnuniform%20highp%20sampler3D%20modulationVol%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ctvec4%20vx%20%3D%20vec4(TexCoord.xy%2C%20coordZ%2C%201.0)%20*%20mtx%3B%5Cn%5Ctuvec4%20aColor%20%3D%20texture(intensityVol%2C%20vx.xyz)%3B%5Cn%5CtFragColor%20%3D%20vec4(float(aColor.r)%20%2F%20255.0%2C%20float(aColor.g)%20%2F%20255.0%2C%20float(aColor.b)%20%2F%20255.0%2C%20float(aColor.a)%20%2F%20255.0)%3B%5Cn%5Ctif%20(modulation%20%3D%3D%201)%5Cn%5Ct%5CtFragColor.rgb%20*%3D%20texture(modulationVol%2C%20vx.xyz).r%3B%5Cn%5Ctif%20(!hasAlpha)%20%7B%5Cn%5Ct%5CtFragColor.a%20%3D%20(FragColor.r%20*%200.21%20%2B%20FragColor.g%20*%200.72%20%2B%20FragColor.b%20*%200.07)%3B%5Cn%5Ct%5Ct%2F%2Fnext%20line%3A%20we%20could%20binarize%20alpha%2C%20but%20see%20rendering%20of%20visible%20human%5Cn%5Ct%5Ct%2F%2FFragColor.a%20%3D%20step(0.01%2C%20FragColor.a)%3B%5Cn%5Ct%7D%5Cn%5Ctif%20(modulation%20%3D%3D%202)%5Cn%5Ct%5CtFragColor.a%20%3D%20texture(modulationVol%2C%20vx.xyz).r%3B%5Cn%5CtFragColor.a%20*%3D%20opacity%3B%5Cn%7D%22))%2Cthis.surfaceShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnuniform%20mat4%20mvpMtx%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ctgl_Position%20%3D%20mvpMtx%20*%20vec4(pos%2C%201.0)%3B%5Cn%7D%22%2C%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20vec4%20surfaceColor%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctcolor%20%3D%20surfaceColor%3B%5Cn%7D%22)%2Cthis.surfaceShader.use(i)%2Cthis.fiberShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnlayout(location%3D1)%20in%20vec4%20clr%3B%5Cnout%20vec4%20vClr%3B%5Cnuniform%20mat4%20mvpMtx%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ctgl_Position%20%3D%20mvpMtx%20*%20vec4(pos%2C%201.0)%3B%5Cn%5CtvClr%20%3D%20clr%3B%5Cn%7D%22%2C%22%23version%20300%20es%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnin%20vec4%20vClr%3B%5Cnout%20vec4%20color%3B%5Cnuniform%20float%20opacity%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctcolor%20%3D%20vec4(vClr.rgb%2C%20opacity)%3B%5Cn%7D%22)%2Cthis.pickingImageShader.use(i)%3Bfor(let%20t%3D0%3Bt%3Cthis.meshShaders.length%3Bt%2B%2B)%7Bconst%20e%3Dthis.meshShaders%5Bt%5D%3B%22Flat%22%3D%3D%3De.Name%3Fe.shader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnlayout(location%3D1)%20in%20vec4%20norm%3B%5Cnlayout(location%3D2)%20in%20vec4%20clr%3B%5Cnuniform%20mat4%20mvpMtx%3B%5Cn%2F%2Funiform%20mat4%20modelMtx%3B%5Cnuniform%20mat4%20normMtx%3B%5Cnout%20vec4%20vClr%3B%5Cnflat%20out%20vec3%20vN%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ctgl_Position%20%3D%20mvpMtx%20*%20vec4(pos%2C%201.0)%3B%5Cn%5CtvN%20%3D%20normalize((normMtx%20*%20vec4(norm.xyz%2C1.0)).xyz)%3B%5Cn%5Ct%2F%2FvV%20%3D%20-vec3(modelMtx*vec4(pos%2C1.0))%3B%5Cn%5CtvClr%20%3D%20clr%3B%5Cn%7D%22%2CB)%3Ae.shader%3Dnew%20h(i%2CE%2Ce.Frag)%2Ce.shader.use(i)%2Ce.shader.isMatcap%3D%22Matcap%22%3D%3D%3De.Name%2Ce.shader.isMatcap%26%26i.uniform1i(e.shader.uniforms.matCap%2C5)%7Dreturn%20this.bmpShader%3Dnew%20h(i%2C%22%23version%20300%20es%5Cn%23line%20549%5Cnlayout(location%3D0)%20in%20vec3%20pos%3B%5Cnuniform%20vec2%20canvasWidthHeight%3B%5Cnuniform%20vec4%20leftTopWidthHeight%3B%5Cnout%20vec2%20vUV%3B%5Cnvoid%20main(void)%20%7B%5Cn%5Ct%2F%2Fconvert%20pixel%20x%2Cy%20space%201..canvasWidth%2C1..canvasHeight%20to%20WebGL%201..-1%2C-1..1%5Cn%5Ctvec2%20frac%3B%5Cn%5Ctfrac.x%20%3D%20(leftTopWidthHeight.x%20%2B%20(pos.x%20*%20leftTopWidthHeight.z))%20%2F%20canvasWidthHeight.x%3B%20%2F%2F0..1%5Cn%5Ctfrac.y%20%3D%201.0%20-%20((leftTopWidthHeight.y%20%2B%20((1.0%20-%20pos.y)%20*%20leftTopWidthHeight.w))%20%2F%20canvasWidthHeight.y)%3B%20%2F%2F1..0%5Cn%5Ctfrac%20%3D%20(frac%20*%202.0)%20-%201.0%3B%5Cn%5Ctgl_Position%20%3D%20vec4(frac%2C%200.0%2C%201.0)%3B%5Cn%5CtvUV%20%3D%20vec2(pos.x%2C%201.0%20-%20pos.y)%3B%5Cn%7D%22%2C%22%23version%20300%20es%5Cn%23line%20565%5Cnprecision%20highp%20int%3B%5Cnprecision%20highp%20float%3B%5Cnuniform%20highp%20sampler2D%20bmpTexture%3B%5Cnin%20vec2%20vUV%3B%5Cnout%20vec4%20color%3B%5Cnvoid%20main()%20%7B%5Cn%5Ctcolor%20%3D%20texture(bmpTexture%2C%20vUV)%3B%5Cn%7D%22)%2Cawait%20this.initText()%2Cthis.opts.thumbnail.length%3E0%26%26(await%20this.loadBmpTexture(this.opts.thumbnail)%2Cthis.thumbnailVisible%3D!0)%2Cthis.updateGLVolume()%2Cthis.initialized%3D!0%2Cthis.resizeListener()%2Cthis.drawScene()%2Cthis%7DgradientGL(t)%7Bconst%20e%3Dthis.gl%2Ci%3D%5B0%2C0%2C0%2C0%2C1%2C0%2C1%2C0%2C0%2C1%2C1%2C0%5D%2Cs%3De.createVertexArray()%3Be.bindVertexArray(s)%3Bconst%20n%3De.createBuffer()%3Be.bindBuffer(e.ARRAY_BUFFER%2Cn)%2Ce.bufferData(e.ARRAY_BUFFER%2Cnew%20Float32Array(i)%2Ce.STATIC_DRAW)%2Ce.enableVertexAttribArray(0)%2Ce.vertexAttribPointer(0%2C3%2Ce.FLOAT%2C!1%2C0%2C0)%3Bconst%20r%3De.createFramebuffer()%3Be.bindFramebuffer(e.FRAMEBUFFER%2Cr)%2Ce.disable(e.CULL_FACE)%2Ce.viewport(0%2C0%2Ct.dims%5B1%5D%2Ct.dims%5B2%5D)%2Ce.disable(e.BLEND)%3Bconst%20a%3Dthis.rgbaTex(null%2C33992%2Ct.dims)%2Co%3Dthis.blurShader%3Bo.use(e)%2Ce.activeTexture(Bi)%2Ce.bindTexture(e.TEXTURE_3D%2Cthis.volumeTexture)%3Be.uniform1i(o.uniforms.intensityVol%2C0)%2Ce.uniform1f(o.uniforms.dX%2C.7%2Ft.dims%5B1%5D)%2Ce.uniform1f(o.uniforms.dY%2C.7%2Ft.dims%5B2%5D)%2Ce.uniform1f(o.uniforms.dZ%2C.7%2Ft.dims%5B3%5D)%2Ce.bindVertexArray(s)%3Bfor(let%20s%3D0%3Bs%3Ct.dims%5B3%5D-1%3Bs%2B%2B)%7Bconst%20n%3D1%2Ft.dims%5B3%5D*(s%2B.5)%3Be.uniform1f(o.uniforms.coordZ%2Cn)%2Ce.framebufferTextureLayer(e.FRAMEBUFFER%2Ce.COLOR_ATTACHMENT0%2Ca%2C0%2Cs)%2Ce.clear(e.DEPTH_BUFFER_BIT)%2Ce.drawArrays(e.TRIANGLE_STRIP%2C0%2Ci.length%2F3)%7Dconst%20l%3Dthis.sobelShader%3Bl.use(e)%2Ce.activeTexture(33992)%2Ce.bindTexture(e.TEXTURE_3D%2Ca)%2Ce.uniform1i(l.uniforms.intensityVol%2C8)%3Be.uniform1f(l.uniforms.dX%2C.7%2Ft.dims%5B1%5D)%2Ce.uniform1f(l.uniforms.dY%2C.7%2Ft.dims%5B2%5D)%2Ce.uniform1f(l.uniforms.dZ%2C.7%2Ft.dims%5B3%5D)%2Ce.uniform1f(l.uniforms.coordZ%2C.5)%2Ce.bindVertexArray(s)%2Ce.activeTexture(Bi)%2Cnull!%3D%3Dthis.gradientTexture%26%26e.deleteTexture(this.gradientTexture)%2Cthis.gradientTexture%3Dthis.rgbaTex(this.gradientTexture%2C33990%2Ct.dims)%3Bfor(let%20s%3D0%3Bs%3Ct.dims%5B3%5D-1%3Bs%2B%2B)%7Bconst%20n%3D1%2Ft.dims%5B3%5D*(s%2B.5)%3Be.uniform1f(l.uniforms.coordZ%2Cn)%2Ce.framebufferTextureLayer(e.FRAMEBUFFER%2Ce.COLOR_ATTACHMENT0%2Cthis.gradientTexture%2C0%2Cs)%2Ce.clear(e.DEPTH_BUFFER_BIT)%2Ce.drawArrays(e.TRIANGLE_STRIP%2C0%2Ci.length%2F3)%7De.deleteFramebuffer(r)%2Ce.deleteTexture(a)%2Ce.deleteBuffer(n)%2Ce.bindFramebuffer(e.FRAMEBUFFER%2Cnull)%7DupdateGLVolume()%7Blet%20t%3D0%3Bconst%20e%3Dthis.volumes.length%3Bthis.refreshColormaps()%3Bfor(let%20i%3D0%3Bi%3Ce%3Bi%2B%2B)this.volumes%5Bi%5D.toRAS%26%26(this.refreshLayers(this.volumes%5Bi%5D%2Ct)%2Ct%2B%2B)%3Bif(this.furthestVertexFromOrigin%3D0%2Ce%3E0%26%26(this.furthestVertexFromOrigin%3Dthis.volumeObject3D.furthestVertexFromOrigin)%2Cthis.meshes)for(let%20t%3D0%3Bt%3Cthis.meshes.length%3Bt%2B%2B)this.furthestVertexFromOrigin%3DMath.max(this.furthestVertexFromOrigin%2Cthis.meshes%5Bt%5D.furthestVertexFromOrigin)%3Bthis.onVolumeUpdated%26%26this.onVolumeUpdated()%2Cthis.drawScene()%7DgetDescriptives(t)%7Bconst%7Blayer%3Ae%3D0%2Cmasks%3Ai%3D%5B%5D%2CdrawingIsMask%3As%3D!1%2CroiIsMask%3An%3D!1%2CstartVox%3Ar%3D%5B0%2C0%2C0%5D%2CendVox%3Aa%3D%5B0%2C0%2C0%5D%7D%3Dt%3Blet%20o%3Dnull%3Bconst%20h%3Dthis.volumes%5Be%5D.hdr%2Cc%3Dthis.volumes%5Be%5D.pixDimsRAS%3Blet%20d%3Dh.scl_slope%3BisNaN(d)%26%26(d%3D1)%3Blet%20m%3Dh.scl_inter%3BisNaN(m)%26%26(m%3D1)%3Bconst%20u%3Dthis.volumes%5Be%5D.img%2CA%3Du.length%2Cf%3Dnew%20Float32Array(A)%3Bfor(let%20t%3D0%3Bt%3CA%3Bt%2B%2B)f%5Bt%5D%3Du%5Bt%5D*d%2Bm%3Bconst%20g%3Dnew%20Uint8Array(A)%3Bfor(let%20t%3D0%3Bt%3CA%3Bt%2B%2B)g%5Bt%5D%3D1%3Bif(i.length%3E0)for(let%20t%3D0%3Bt%3Ci.length%3Bt%2B%2B)%7Bconst%20e%3Dthis.volumes%5Bi%5Bt%5D%5D.img%3Bif(e.length%3D%3D%3DA)for(let%20t%3D0%3Bt%3CA%3Bt%2B%2B)(0%3D%3D%3De%5Bt%5D%7C%7CisNaN(e%5Bt%5D))%26%26(g%5Bt%5D%3D0)%3Belse%20l.debug(%22Mask%20resolution%20does%20not%20match%20image.%20Skipping%20masking%20layer%20%22%2Bi%5Bt%5D)%7Delse%20if(i.length%3C1%26%26s)for(let%20t%3D0%3Bt%3CA%3Bt%2B%2B)(0%3D%3D%3Dthis.drawBitmap%5Bt%5D%7C%7CisNaN(this.drawBitmap%5Bt%5D))%26%26(g%5Bt%5D%3D0)%3Belse%20if(i.length%3C1%26%26n)%7Bg.fill(0)%2Cconsole.log(%22startVox%22%2Cr)%2Cconsole.log(%22endVox%22%2Ca)%3Blet%20t%3D-1%3Bif(r%5B0%5D%3D%3D%3Da%5B0%5D)t%3D0%3Belse%20if(r%5B1%5D%3D%3D%3Da%5B1%5D)t%3D1%3Belse%7Bif(r%5B2%5D!%3D%3Da%5B2%5D)return%20void%20console.error(%22Error%3A%20No%20constant%20dimension%20found.%22)%3Bt%3D2%7Dconst%20e%3D%5B0%2C1%2C2%5D.filter((e%3D%3Ee!%3D%3Dt))%2Ci%3D%5B%5D%3Bi%5Bt%5D%3Dr%5Bt%5D%2Ci%5Be%5B0%5D%5D%3D(r%5Be%5B0%5D%5D%2Ba%5Be%5B0%5D%5D)%2F2%2Ci%5Be%5B1%5D%5D%3D(r%5Be%5B1%5D%5D%2Ba%5Be%5B1%5D%5D)%2F2%3Bconst%20s%3DMath.abs(a%5Be%5B0%5D%5D-r%5Be%5B0%5D%5D)%2F2%2Cn%3DMath.abs(a%5Be%5B1%5D%5D-r%5Be%5B1%5D%5D)%2F2%2Cl%3Dh.dims%5B1%5D%2Cd%3Dh.dims%5B2%5D%2Cm%3DMath.max(0%2CMath.floor(i%5Be%5B0%5D%5D-s))%2Cu%3DMath.min(h.dims%5Be%5B0%5D%2B1%5D-1%2CMath.ceil(i%5Be%5B0%5D%5D%2Bs))%2CA%3DMath.max(0%2CMath.floor(i%5Be%5B1%5D%5D-n))%2Cf%3DMath.min(h.dims%5Be%5B1%5D%2B1%5D-1%2CMath.ceil(i%5Be%5B1%5D%5D%2Bn))%2Cp%3Di%5Bt%5D%3Bif(p%3C0%7C%7Cp%3E%3Dh.dims%5Bt%2B1%5D)return%20void%20console.error(%22Error%3A%20Constant%20dimension%20value%20is%20out%20of%20bounds.%22)%3Bfor(let%20r%3Dm%3Br%3C%3Du%3Br%2B%2B)for(let%20a%3DA%3Ba%3C%3Df%3Ba%2B%2B)%7Bconst%20o%3D%5B%5D%3Bo%5Bt%5D%3Dp%2Co%5Be%5B0%5D%5D%3Dr%2Co%5Be%5B1%5D%5D%3Da%3Bconst%20h%3D(o%5Be%5B0%5D%5D-i%5Be%5B0%5D%5D)%2Fs%2Cc%3D(o%5Be%5B1%5D%5D-i%5Be%5B1%5D%5D)%2Fn%3Bif(h*h%2Bc*c%3C%3D1)%7Bconst%20t%3Do%5B0%5D%2Ce%3Do%5B1%5D%3Bg%5Bo%5B2%5D*l*d%2Be*l%2Bt%5D%3D1%7D%7Dconst%20v%3Dc%5Be%5B0%5D%2B1%5D*c%5Be%5B1%5D%2B1%5D%3Bo%3Dg.reduce(((t%2Ce)%3D%3Et%2B(1%3D%3D%3De%3F1%3A0))%2C0)*v%3Bconst%20x%3Ds*c%5Be%5B0%5D%2B1%5D%2Cw%3Dn*c%5Be%5B1%5D%2B1%5D%3Bo%3DMath.PI*x*w%7Dlet%20p%3D0%2Cv%3D0%2Cx%3D0%2Cw%3DNumber.NEGATIVE_INFINITY%2CC%3DNumber.POSITIVE_INFINITY%2Cb%3D0%2Cy%3D0%2CI%3D0%3Bfor(let%20t%3D0%3Bt%3CA%3Bt%2B%2B)%7Bif(g%5Bt%5D%3C1)continue%3Bconst%20e%3Df%5Bt%5D%3Bp%2B%2B%3Blet%20i%3Dv%2B(e-v)%2Fp%3Bx%2B%3D(e-v)*(e-i)%2Cv%3Di%2C0!%3D%3De%26%26(b%2B%2B%2Ci%3Dy%2B(e-y)%2Fb%2CI%2B%3D(e-y)*(e-i)%2Cy%3Di%2CC%3DMath.min(e%2Cw)%2Cw%3DMath.max(e%2Cw))%7Dconst%20M%3DMath.sqrt(x%2F(p-1))%2CD%3DMath.sqrt(I%2F(b-1))%2CF%3DC%2CT%3Dw%3Breturn%20p!%3D%3Db%26%26(C%3DMath.min(0%2Cw)%2Cw%3DMath.max(0%2Cw))%2C%7Bmean%3Av%2Cstdev%3AM%2Cnvox%3Ap%2CvolumeMM3%3Ap*h.pixDims%5B1%5D*h.pixDims%5B2%5D*h.pixDims%5B3%5D%2CvolumeML%3Ap*h.pixDims%5B1%5D*h.pixDims%5B2%5D*h.pixDims%5B3%5D*.001%2Cmin%3AC%2Cmax%3Aw%2CmeanNot0%3Ay%2CstdevNot0%3AD%2CnvoxNot0%3Ab%2CminNot0%3AF%2CmaxNot0%3AT%2Ccal_min%3Athis.volumes%5Be%5D.cal_min%2Ccal_max%3Athis.volumes%5Be%5D.cal_max%2Crobust_min%3Athis.volumes%5Be%5D.robust_min%2Crobust_max%3Athis.volumes%5Be%5D.robust_max%2Carea%3Ao%7D%7DrefreshLayers(t%2Ce)%7Bif(this.refreshColormaps()%2Cthis.volumes.length%3C1)return%3Bconst%20s%3Dt.hdr%3Blet%20r%3Dt.img%3Bt.frame4D%3E0%26%26t.frame4D%3Ct.nFrame4D%26%26(r%3Dt.img.slice(t.frame4D*t.nVox3D%2C(t.frame4D%2B1)*t.nVox3D))%3Bconst%20a%3Dt.opacity%3Bif(e%3E1%26%260%3D%3D%3Da)return%3Blet%20o%3Dnull%3Bif(!this.back)throw%20new%20Error(%22back%20undefined%22)%3Bthis.gl.bindVertexArray(this.unusedVAO)%2Cthis.crosshairs3D%26%26(this.crosshairs3D.mm%5B0%5D%3DNaN)%3Blet%20h%3Di.clone(t.toRAS)%3Bif(0%3D%3D%3De)%7Bthis.volumeObject3D%3Dt.toNiivueObject3D(this.VOLUME_ID%2Cthis.gl)%2Ci.invert(h%2Ch)%2Cthis.back.matRAS%3Dt.matRAS%2Cthis.back.dims%3Dt.dimsRAS%2Cthis.back.pixDims%3Dt.pixDimsRAS%2Co%3Dthis.rgbaTex(this.volumeTexture%2CBi%2Ct.dimsRAS)%3Bconst%7BvolScale%3Ae%2Cvox%3As%7D%3Dthis.sliceScale(!0)%3Bif(this.volScale%3De%2Cthis.vox%3Ds%2Cthis.volumeObject3D.scale%3De%2C!this.renderShader)throw%20new%20Error(%22renderShader%20undefined%22)%3Bthis.renderShader.use(this.gl)%2Cthis.gl.uniform3fv(this.renderShader.uniforms.texVox%2Cs)%2Cthis.gl.uniform3fv(this.renderShader.uniforms.volScale%2Ce)%3Bconst%20n%3Dthis.pickingImageShader%3Bn.use(this.gl)%2Cthis.gl.uniform1i(n.uniforms.volume%2C0)%2Cthis.gl.uniform1i(n.uniforms.colormap%2C1)%2Cthis.gl.uniform1i(n.uniforms.overlay%2C2)%2Cthis.gl.uniform3fv(n.uniforms.volScale%2Ce)%2Cl.debug(this.volumeObject3D)%7Delse%7Bvoid%200%3D%3D%3Dthis.back%3F.dims%26%26l.error(%22Fatal%20error%3A%20Unable%20to%20render%20overlay%3A%20background%20dimensions%20not%20defined!%22)%3Bconst%20s%3Dthis.mm2frac(t.mm000%2C0%2C!0)%3Blet%20r%3Dthis.mm2frac(t.mm100%2C0%2C!0)%2Ca%3Dthis.mm2frac(t.mm010%2C0%2C!0)%2Cc%3Dthis.mm2frac(t.mm001%2C0%2C!0)%3Br%3Dn.subtract(r%2Cr%2Cs)%2Ca%3Dn.subtract(a%2Ca%2Cs)%2Cc%3Dn.subtract(c%2Cc%2Cs)%2Ch%3Di.fromValues(r%5B0%5D%2Ca%5B0%5D%2Cc%5B0%5D%2Cs%5B0%5D%2Cr%5B1%5D%2Ca%5B1%5D%2Cc%5B1%5D%2Cs%5B1%5D%2Cr%5B2%5D%2Ca%5B2%5D%2Cc%5B2%5D%2Cs%5B2%5D%2C0%2C0%2C0%2C1)%2Ci.invert(h%2Ch)%2C1%3D%3D%3De%3F(o%3Dthis.rgbaTex(this.overlayTexture%2CRi%2Cthis.back.dims)%2Cthis.overlayTexture%3Do%2Cthis.overlayTextureID%3Do)%3Ao%3Dthis.overlayTextureID%7Dconst%20c%3Dthis.gl.createFramebuffer()%3Bthis.gl.bindFramebuffer(this.gl.FRAMEBUFFER%2Cc)%2Cthis.gl.disable(this.gl.CULL_FACE)%2Cthis.gl.viewport(0%2C0%2Cthis.back.dims%5B1%5D%2Cthis.back.dims%5B2%5D)%2Cthis.gl.disable(this.gl.BLEND)%3Bconst%20d%3Dthis.gl.createTexture()%3Bthis.gl.activeTexture(33993)%2Cthis.gl.bindTexture(this.gl.TEXTURE_3D%2Cd)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_MIN_FILTER%2Cthis.gl.NEAREST)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_MAG_FILTER%2Cthis.gl.NEAREST)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_R%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_S%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_WRAP_T%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT%2C1)%3Blet%20m%3Dthis.orientShaderU%3Bif(!s)throw%20new%20Error(%22hdr%20undefined%22)%3Bif(!r)throw%20new%20Error(%22img%20undefined%22)%3Bif(2%3D%3D%3Ds.datatypeCode)1002%3D%3D%3Ds.intent_code%26%26(m%3Dthis.orientShaderAtlasU)%2Cthis.gl.texStorage3D(this.gl.TEXTURE_3D%2C1%2Cthis.gl.R8UI%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D)%2Cthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D%2Cthis.gl.RED_INTEGER%2Cthis.gl.UNSIGNED_BYTE%2Cr)%3Belse%20if(4%3D%3D%3Ds.datatypeCode)m%3Dthis.orientShaderI%2C1002%3D%3D%3Ds.intent_code%26%26(m%3Dthis.orientShaderAtlasI)%2Cthis.gl.texStorage3D(this.gl.TEXTURE_3D%2C1%2Cthis.gl.R16I%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D)%2Cthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D%2Cthis.gl.RED_INTEGER%2Cthis.gl.SHORT%2Cr)%3Belse%20if(16%3D%3D%3Ds.datatypeCode)this.gl.texStorage3D(this.gl.TEXTURE_3D%2C1%2Cthis.gl.R32F%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D)%2Cthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D%2Cthis.gl.RED%2Cthis.gl.FLOAT%2Cr)%2Cm%3Dthis.orientShaderF%3Belse%20if(64%3D%3D%3Ds.datatypeCode)%7Blet%20t%3Dnew%20Float32Array%3Bt%3DFloat32Array.from(r)%2Cthis.gl.texStorage3D(this.gl.TEXTURE_3D%2C1%2Cthis.gl.R32F%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D)%2Cthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D%2Cthis.gl.RED%2Cthis.gl.FLOAT%2Ct)%2Cm%3Dthis.orientShaderF%7Delse%20128%3D%3D%3Ds.datatypeCode%3F(m%3Dthis.orientShaderRGBU%2Cm.use(this.gl)%2Cthis.gl.uniform1i(m.uniforms.hasAlpha%2C0)%2Cthis.gl.texStorage3D(this.gl.TEXTURE_3D%2C1%2Cthis.gl.RGB8UI%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D)%2Cthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D%2Cthis.gl.RGB_INTEGER%2Cthis.gl.UNSIGNED_BYTE%2Cr))%3A512%3D%3D%3Ds.datatypeCode%3F(1002%3D%3D%3Ds.intent_code%26%26(m%3Dthis.orientShaderAtlasU)%2Cthis.gl.texStorage3D(this.gl.TEXTURE_3D%2C1%2Cthis.gl.R16UI%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D)%2Cthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D%2Cthis.gl.RED_INTEGER%2Cthis.gl.UNSIGNED_SHORT%2Cr))%3A2304%3D%3D%3Ds.datatypeCode%26%26(m%3Dthis.orientShaderRGBU%2Cm.use(this.gl)%2Cthis.gl.uniform1i(m.uniforms.hasAlpha%2C1)%2Cthis.gl.texStorage3D(this.gl.TEXTURE_3D%2C1%2Cthis.gl.RGBA8UI%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D)%2Cthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D%2Cthis.gl.RGBA_INTEGER%2Cthis.gl.UNSIGNED_BYTE%2Cr))%3Bvoid%200%3D%3D%3Dt.global_min%26%26t.calMinMax()%3Blet%20u%3Dnull%3Bthis.gl.bindVertexArray(this.genericVAO)%3Bif(e%3E1)%7Bif(!this.back.dims)throw%20new%20Error(%22back.dims%20undefined%22)%3Bu%3Dthis.rgbaTex(u%2CPi%2Cthis.back.dims)%2Cthis.gl.bindTexture(this.gl.TEXTURE_3D%2Cu)%3Bconst%20t%3Dthis.passThroughShader%3Bt.use(this.gl)%2Cthis.gl.uniform1i(t.uniforms.in3D%2C2)%3Bfor(let%20e%3D0%3Be%3Cthis.back.dims%5B3%5D%3Be%2B%2B)%7Bconst%20i%3D1%2Fthis.back.dims%5B3%5D*(e%2B.5)%3Bthis.gl.uniform1f(t.uniforms.coordZ%2Ci)%2Cthis.gl.framebufferTextureLayer(this.gl.FRAMEBUFFER%2Cthis.gl.COLOR_ATTACHMENT0%2Cu%2C0%2Ce)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%7D%7Delse%20u%3Dthis.rgbaTex(u%2CPi%2C%5B2%2C2%2C2%2C2%5D)%3Bm.use(this.gl)%2Cthis.gl.activeTexture(Ui)%3Blet%20A%3Dnull%3Bif(null!%3D%3Dt.colormapLabel%26%26t.colormapLabel.lut.length%3E7)%7Bconst%20e%3Dt.colormapLabel.max-t.colormapLabel.min%2B1%3BA%3Dthis.createColormapTexture(A%2C1%2Ce)%2Cthis.gl.texSubImage2D(this.gl.TEXTURE_2D%2C0%2C0%2C0%2Ce%2C1%2Cthis.gl.RGBA%2Cthis.gl.UNSIGNED_BYTE%2Ct.colormapLabel.lut)%2Cthis.gl.uniform1f(m.uniforms.cal_min%2Ct.colormapLabel.min-.5)%2Cthis.gl.uniform1f(m.uniforms.cal_max%2Ct.colormapLabel.max%2B.5)%2Cthis.gl.bindTexture(this.gl.TEXTURE_2D%2CA)%7Delse%20this.gl.bindTexture(this.gl.TEXTURE_2D%2Cthis.colormapTexture)%2Cthis.gl.uniform1f(m.uniforms.cal_min%2Ct.cal_min)%2Cthis.gl.uniform1f(m.uniforms.cal_max%2Ct.cal_max)%3Bthis.gl.uniform1i(m.uniforms.isAlphaThreshold%2Ct.alphaThreshold)%2Cthis.gl.uniform1i(m.uniforms.isAdditiveBlend%2Cthis.opts.isAdditiveBlend%3F1%3A0)%3Blet%20f%3DNumber.POSITIVE_INFINITY%2Cg%3DNumber.NEGATIVE_INFINITY%3Bif(t.colormapNegative.length%3E0%26%26(f%3DMath.min(-t.cal_min%2C-t.cal_max)%2Cg%3DMath.max(-t.cal_min%2C-t.cal_max)%2CisFinite(t.cal_minNeg)%26%26isFinite(t.cal_maxNeg)%26%26(f%3DMath.min(t.cal_minNeg%2Ct.cal_maxNeg)%2Cg%3DMath.max(t.cal_minNeg%2Ct.cal_maxNeg)))%2C!m)throw%20new%20Error(%22orientShader%20undefined%22)%3Bthis.gl.uniform1f(m.uniforms.layer%3F%3Fnull%2Ce)%2Cthis.gl.uniform1f(m.uniforms.cal_minNeg%3F%3Fnull%2Cf)%2Cthis.gl.uniform1f(m.uniforms.cal_maxNeg%3F%3Fnull%2Cg)%2Cthis.gl.bindTexture(this.gl.TEXTURE_3D%2Cd)%2Cthis.gl.uniform1i(m.uniforms.intensityVol%3F%3Fnull%2C9)%2Cthis.gl.uniform1i(m.uniforms.blend3D%3F%3Fnull%2C10)%2Cthis.gl.uniform1i(m.uniforms.colormap%3F%3Fnull%2C1)%2Cthis.gl.uniform1f(m.uniforms.scl_inter%3F%3Fnull%2Cs.scl_inter)%2Cthis.gl.uniform1f(m.uniforms.scl_slope%3F%3Fnull%2Cs.scl_slope)%2Cthis.gl.uniform1f(m.uniforms.opacity%3F%3Fnull%2Ca)%2Cthis.gl.uniform1i(m.uniforms.modulationVol%3F%3Fnull%2C7)%3Blet%20p%3Dnull%3Bif(null!%3D%3Dt.modulationImage%26%26t.modulationImage%3E%3D0%26%26t.modulationImage%3Cthis.volumes.length)%7Bl.debug(%22modulating%22%2Cthis.volumes)%3Bconst%20e%3Dthis.volumes%5Bt.modulationImage%5D.hdr%3Bif(e.dims%5B1%5D%3D%3D%3Ds.dims%5B1%5D%26%26e.dims%5B2%5D%3D%3D%3Ds.dims%5B2%5D%26%26e.dims%5B3%5D%3D%3D%3Ds.dims%5B3%5D)%7Bt.modulateAlpha%3F(this.gl.uniform1i(m.uniforms.modulation%2C2)%2Cthis.gl.uniform1f(m.uniforms.opacity%2C1))%3Athis.gl.uniform1i(m.uniforms.modulation%2C1)%2Cp%3Dthis.r8Tex(p%2Cthis.gl.TEXTURE7%2Cs.dims%2C!0)%2Cthis.gl.activeTexture(this.gl.TEXTURE7)%2Cthis.gl.bindTexture(this.gl.TEXTURE_3D%2Cp)%3Bconst%20i%3Ds.dims%5B1%5D*s.dims%5B2%5D*s.dims%5B3%5D%2Cn%3Dnew%20Uint8Array(i)%2Cr%3Dthis.volumes%5Bt.modulationImage%5D.cal_min%2Ca%3D1%2F(this.volumes%5Bt.modulationImage%5D.cal_max-r)%2Co%3Dthis.volumes%5Bt.modulationImage%5D.img.buffer%3Blet%20h%3Dnew%20Uint8Array(o)%3Bswitch(e.datatypeCode)%7Bcase%204%3Ah%3Dnew%20Int16Array(o)%3Bbreak%3Bcase%2016%3Ah%3Dnew%20Float32Array(o)%3Bbreak%3Bcase%2064%3Ah%3Dnew%20Float64Array(o)%3Bbreak%3Bcase%20128%3Ah%3Dnew%20Uint8Array(o)%3Bbreak%3Bcase%20512%3Ah%3Dnew%20Uint16Array(o)%7Dl.debug(this.volumes%5Bt.modulationImage%5D)%3Bconst%20c%3Dthis.volumes%5Bt.modulationImage%5D.colormapNegative.length%3E0%3Blet%20d%3Dthis.volumes%5Bt.modulationImage%5D.cal_min%2Cu%3Dthis.volumes%5Bt.modulationImage%5D.cal_max%3BisFinite(this.volumes%5Bt.modulationImage%5D.cal_minNeg)%26%26isFinite(this.volumes%5Bt.modulationImage%5D.cal_maxNeg)%26%26(d%3Dthis.volumes%5Bt.modulationImage%5D.cal_minNeg%2Cu%3Dthis.volumes%5Bt.modulationImage%5D.cal_minNeg)%2Cd%3DMath.abs(d)%2Cu%3DMath.abs(u)%2Cd%3Eu%26%26(%5Bd%2Cu%5D%3D%5Bu%2Cd%5D)%3Bconst%20A%3D1%2F(u-d)%3Blet%20f%3DMath.abs(t.modulateAlpha)%3Bf%3DMath.max(f%2C1)%3Bconst%20g%3Dthis.volumes%5Bt.modulationImage%5D.frame4D*i%3Bfor(let%20t%3D0%3Bt%3Ci%3Bt%2B%2B)%7Bconst%20i%3Dh%5Bt%2Bg%5D*e.scl_slope%2Be.scl_inter%3Blet%20s%3D(i-r)*a%3Bc%26%26i%3C0%26%26(s%3D(Math.abs(i)-d)*A)%2Cs%3DMath.min(Math.max(s%2C0)%2C1)%2Cs%3D255*Math.pow(s%2Cf)%2Cn%5Bt%5D%3Ds%7Dthis.gl.texSubImage3D(this.gl.TEXTURE_3D%2C0%2C0%2C0%2C0%2Cs.dims%5B1%5D%2Cs.dims%5B2%5D%2Cs.dims%5B3%5D%2Cthis.gl.RED%2Cthis.gl.UNSIGNED_BYTE%2Cn)%7Delse%20l.debug(%22Modulation%20image%20dimensions%20do%20not%20match%20target%22)%7Delse%20this.gl.uniform1i(m.uniforms.modulation%2C0)%3Bif(this.gl.uniformMatrix4fv(m.uniforms.mtx%2C!1%2Ch)%2C!this.back.dims)throw%20new%20Error(%22back.dims%20undefined%22)%3Blet%20v%3D0%3B1002%3D%3D%3Ds.intent_code%26%26(v%3Dthis.opts.atlasOutline)%2Cthis.gl.uniform4fv(m.uniforms.xyzaFrac%2C%5B1%2Fthis.back.dims%5B1%5D%2C1%2Fthis.back.dims%5B2%5D%2C1%2Fthis.back.dims%5B3%5D%2Cv%5D)%2Cl.debug(%22back%20dims%3A%20%22%2Cthis.back.dims)%3Bfor(let%20t%3D0%3Bt%3Cthis.back.dims%5B3%5D%3Bt%2B%2B)%7Bconst%20e%3D1%2Fthis.back.dims%5B3%5D*(t%2B.5)%3Bthis.gl.uniform1f(m.uniforms.coordZ%2Ce)%2Cthis.gl.framebufferTextureLayer(this.gl.FRAMEBUFFER%2Cthis.gl.COLOR_ATTACHMENT0%2Co%2C0%2Ct)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%7Dif(this.gl.bindVertexArray(this.unusedVAO)%2Cthis.gl.deleteTexture(d)%2Cthis.gl.deleteTexture(p)%2Cthis.gl.deleteTexture(u)%2Cthis.gl.viewport(0%2C0%2Cthis.gl.canvas.width%2Cthis.gl.canvas.height)%2Cthis.gl.bindFramebuffer(this.gl.FRAMEBUFFER%2Cnull)%2Cthis.gl.deleteFramebuffer(c)%2C0%3D%3D%3De%26%26(this.volumeTexture%3Do%2Cthis.gradientTextureAmount%3E0%3Fthis.gradientGL(s)%3A(null!%3D%3Dthis.gradientTexture%26%26this.gl.deleteTexture(this.gradientTexture)%2Cthis.gradientTexture%3Dnull))%2C!this.renderShader)throw%20new%20Error(%22renderShader%20undefined%22)%3Bthis.renderShader.use(this.gl)%3Bconst%20x%3Dthis.sliceScale(!0)%2Cw%3Dx.vox%2CC%3Dx.volScale%3Bif(this.gl.uniform1f(this.renderShader.uniforms.overlays%2Cthis.overlays)%2Cthis.gl.uniform4fv(this.renderShader.uniforms.clipPlaneColor%2Cthis.opts.clipPlaneColor)%2Cthis.gl.uniform1f(this.renderShader.uniforms.clipThick%2Cthis.opts.clipThick)%2Cthis.gl.uniform3fv(this.renderShader.uniforms.clipLo%2Cthis.opts.clipVolumeLow)%2Cthis.gl.uniform3fv(this.renderShader.uniforms.clipHi%2Cthis.opts.clipVolumeHigh)%2Cthis.gl.uniform1f(this.renderShader.uniforms.backOpacity%2Cthis.volumes%5B0%5D.opacity)%2Cthis.gl.uniform1f(this.renderShader.uniforms.renderOverlayBlend%2Cthis.opts.renderOverlayBlend)%2Cthis.gl.uniform4fv(this.renderShader.uniforms.clipPlane%2Cthis.scene.clipPlane)%2Cthis.gl.uniform3fv(this.renderShader.uniforms.texVox%2Cw)%2Cthis.gl.uniform3fv(this.renderShader.uniforms.volScale%2CC)%2C!this.pickingImageShader)throw%20new%20Error(%22pickingImageShader%20undefined%22)%3Bthis.pickingImageShader.use(this.gl)%2Cthis.gl.uniform1f(this.pickingImageShader.uniforms.overlays%2Cthis.overlays.length)%2Cthis.gl.uniform3fv(this.pickingImageShader.uniforms.texVox%2Cw)%2Cthis.gl.uniform3fv(this.pickingImageShader.uniforms.clipLo%2Cthis.opts.clipVolumeLow)%2Cthis.gl.uniform3fv(this.pickingImageShader.uniforms.clipHi%2Cthis.opts.clipVolumeHigh)%3Blet%20b%3Dthis.sliceMMShader%3Bif(this.opts.isV1SliceShader%26%26(b%3Dthis.sliceV1Shader)%2C!b)throw%20new%20Error(%22slice%20shader%20undefined%22)%3Bb.use(this.gl)%2Cthis.gl.uniform1f(b.uniforms.overlays%2Cthis.overlays.length)%2Cthis.gl.uniform1f(b.uniforms.drawOpacity%2Cthis.drawOpacity)%2Cnull!%3D%3DA%26%26(this.gl.deleteTexture(A)%2Cthis.gl.activeTexture(Ui)%2Cthis.gl.bindTexture(this.gl.TEXTURE_2D%2Cthis.colormapTexture))%2Cthis.gl.uniform1i(b.uniforms.drawing%2C7)%2Cthis.gl.activeTexture(Ni)%2Cthis.gl.bindTexture(this.gl.TEXTURE_3D%2Cthis.drawTexture)%2Cthis.updateInterpolation(e)%7Dcolormaps()%7Breturn%20ne.colormaps()%7DaddColormap(t%2Ce)%7Bne.addColormap(t%2Ce)%7DsetColormap(t%2Ce)%7Bconst%20i%3Dthis.getVolumeIndexByID(t)%3Bthis.volumes%5Bi%5D.colormap%3De%2Cthis.updateGLVolume()%7Didx(t%2Ce%2Ci%2Cs)%7Breturn%20i*s%5B0%5D*s%5B1%5D%2Be*s%5B0%5D%2Bt%7Dcheck_previous_slice(t%2Ce%2Ci%2Cs%2Cn%2Cr%2Ca%2Co)%7Bconst%20l%3Dnew%20Uint32Array(27)%3Blet%20h%3D0%3Bif(!n)return%200%3Bconst%20c%3Dt%5Bthis.idx(i%2Cs%2Cn%2Cr)%5D%3Bif(a%3E%3D6)%7Bconst%20a%3Dthis.idx(i%2Cs%2Cn-1%2Cr)%3Bc%3D%3D%3Dt%5Ba%5D%26%26(l%5Bh%2B%2B%5D%3De%5Ba%5D)%7Dif(a%3E%3D18)%7Bif(i)%7Bconst%20a%3Dthis.idx(i-1%2Cs%2Cn-1%2Cr)%3Bc%3D%3D%3Dt%5Ba%5D%26%26(l%5Bh%2B%2B%5D%3De%5Ba%5D)%7Dif(s)%7Bconst%20a%3Dthis.idx(i%2Cs-1%2Cn-1%2Cr)%3Bc%3D%3D%3Dt%5Ba%5D%26%26(l%5Bh%2B%2B%5D%3De%5Ba%5D)%7Dif(i%3Cr%5B0%5D-1)%7Bconst%20a%3Dthis.idx(i%2B1%2Cs%2Cn-1%2Cr)%3Bc%3D%3D%3Dt%5Ba%5D%26%26(l%5Bh%2B%2B%5D%3De%5Ba%5D)%7Dif(s%3Cr%5B1%5D-1)%7Bconst%20a%3Dthis.idx(i%2Cs%2B1%2Cn-1%2Cr)%3Bc%3D%3D%3Dt%5Ba%5D%26%26(l%5Bh%2B%2B%5D%3De%5Ba%5D)%7D%7Dif(26%3D%3D%3Da)%7Bif(i%26%26s)%7Bconst%20a%3Dthis.idx(i-1%2Cs-1%2Cn-1%2Cr)%3Bc%3D%3D%3Dt%5Ba%5D%26%26(l%5Bh%2B%2B%5D%3De%5Ba%5D)%7Dif(i%3Cr%5B0%5D-1%26%26s)%7Bconst%20a%3Dthis.idx(i%2B1%2Cs-1%2Cn-1%2Cr)%3Bc%3D%3D%3Dt%5Ba%5D%26%26(l%5Bh%2B%2B%5D%3De%5Ba%5D)%7Dif(i%26%26s%3Cr%5B1%5D-1)%7Bconst%20a%3Dthis.idx(i-1%2Cs%2B1%2Cn-1%2Cr)%3Bc%3D%3D%3Dt%5Ba%5D%26%26(l%5Bh%2B%2B%5D%3De%5Ba%5D)%7Dif(i%3Cr%5B0%5D-1%26%26s%3Cr%5B1%5D-1)%7Bconst%20a%3Dthis.idx(i%2B1%2Cs%2B1%2Cn-1%2Cr)%3Bc%3D%3D%3Dt%5Ba%5D%26%26(l%5Bh%2B%2B%5D%3De%5Ba%5D)%7D%7Dreturn%20h%3F(this.fill_tratab(o%2Cl%2Ch)%2Cl%5B0%5D)%3A0%7Ddo_initial_labelling(t%2Ce%2Ci)%7Blet%20s%3D1%3Blet%20n%3D8192%2Cr%3Dnew%20Uint32Array(n).fill(0)%3Bconst%20a%3Dnew%20Uint32Array(e%5B0%5D*e%5B1%5D*e%5B2%5D).fill(0)%2Co%3Dnew%20Uint32Array(27)%3Bfor(let%20l%3D0%3Bl%3Ce%5B2%5D%3Bl%2B%2B)for(let%20h%3D0%3Bh%3Ce%5B1%5D%3Bh%2B%2B)for(let%20c%3D0%3Bc%3Ce%5B0%5D%3Bc%2B%2B)%7Blet%20d%3D0%3Bconst%20m%3Dt%5Bthis.idx(c%2Ch%2Cl%2Ce)%5D%3Bif(0!%3D%3Dm)%7Bif(o%5B0%5D%3Dthis.check_previous_slice(t%2Ca%2Cc%2Ch%2Cl%2Ce%2Ci%2Cr)%2Co%5B0%5D%26%26(d%2B%3D1)%2Ci%3E%3D6)%7Bif(c)%7Bconst%20i%3Dthis.idx(c-1%2Ch%2Cl%2Ce)%3Bm%3D%3D%3Dt%5Bi%5D%26%26(o%5Bd%2B%2B%5D%3Da%5Bi%5D)%7Dif(h)%7Bconst%20i%3Dthis.idx(c%2Ch-1%2Cl%2Ce)%3Bm%3D%3D%3Dt%5Bi%5D%26%26(o%5Bd%2B%2B%5D%3Da%5Bi%5D)%7D%7Dif(i%3E%3D18)%7Bif(h%26%26c)%7Bconst%20i%3Dthis.idx(c-1%2Ch-1%2Cl%2Ce)%3Bm%3D%3D%3Dt%5Bi%5D%26%26(o%5Bd%2B%2B%5D%3Da%5Bi%5D)%7Dif(h%26%26c%3Ce%5B0%5D-1)%7Bconst%20i%3Dthis.idx(c%2B1%2Ch-1%2Cl%2Ce)%3Bm%3D%3D%3Dt%5Bi%5D%26%26(o%5Bd%2B%2B%5D%3Da%5Bi%5D)%7D%7Dif(d)a%5Bthis.idx(c%2Ch%2Cl%2Ce)%5D%3Do%5B0%5D%2Cthis.fill_tratab(r%2Co%2Cd)%3Belse%7Bif(a%5Bthis.idx(c%2Ch%2Cl%2Ce)%5D%3Ds%2Cs%3E%3Dn)%7Bn%2B%3D8192%3Bconst%20t%3Dnew%20Uint32Array(n)%3Bt.set(r)%2Cr%3Dt%7Dr%5Bs-1%5D%3Ds%2Cs%2B%2B%7D%7D%7Dfor(let%20t%3D0%3Bt%3Cs-1%3Bt%2B%2B)%7Blet%20e%3Dt%3Bfor(%3Br%5Be%5D!%3D%3De%2B1%3B)e%3Dr%5Be%5D-1%3Br%5Bt%5D%3De%2B1%7Dreturn%5Bs-1%2Cr%2Ca%5D%7Dfill_tratab(t%2Ce%2Ci)%7Blet%20s%3D0%3Bconst%20n%3Dnew%20Uint32Array(i%2B5).fill(0)%3Blet%20r%3D2147483647%3Bfor(let%20a%3D0%3Ba%3Ci%3Ba%2B%2B)%7Blet%20i%3De%5Ba%5D%3Bfor(s%3D0%3Bt%5Bi-1%5D!%3D%3Di%3B)if(i%3Dt%5Bi-1%5D%2Cs%2B%2B%2Cs%3E100)%7Bl.info(%22%5CnOoh%20no!!%22)%3Bbreak%7Dn%5Ba%5D%3Di%2Cr%3DMath.min(r%2Ci)%7Dfor(let%20e%3D0%3Be%3Ci%3Be%2B%2B)t%5Bn%5Be%5D-1%5D%3Dr%7Dtranslate_labels(t%2Ce%2Ci%2Cs)%7Bconst%20n%3De%5B0%5D*e%5B1%5D*e%5B2%5D%3Blet%20r%3D0%3Bconst%20a%3Dnew%20Uint32Array(n).fill(0)%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)r%3DMath.max(r%2Ci%5Bt%5D)%3Bconst%20o%3Dnew%20Uint32Array(r).fill(0)%3Blet%20l%3D0%3Bfor(let%20e%3D0%3Be%3Cn%3Be%2B%2B)t%5Be%5D%26%26(o%5Bi%5Bt%5Be%5D-1%5D-1%5D%7C%7C(l%2B%3D1%2Co%5Bi%5Bt%5Be%5D-1%5D-1%5D%3Dl)%2Ca%5Be%5D%3Do%5Bi%5Bt%5Be%5D-1%5D-1%5D)%3Breturn%5Bl%2Ca%5D%7Dlargest_original_cluster_labels(t%2Ce%2Ci)%7Bconst%20s%3Dt.length%2Cn%3Dnew%20Uint32Array(e%2B1).fill(0)%2Cr%3Dnew%20Uint32Array(e%2B1).fill(0)%3Bfor(let%20e%3D0%3Be%3Cs%3Be%2B%2B)%7Bconst%20s%3Dt%5Be%5D%2Ca%3Di%5Be%5D%3Bn%5Ba%5D%3Ds%2Cr%5Ba%5D%2B%2B%7Dlet%20a%3D0%3Bfor(let%20t%3D0%3Bt%3Ce%2B1%3Bt%2B%2B)%7Bconst%20i%3Dn%5Bt%5D%3Ba%3DMath.max(a%2Ci)%3Bfor(let%20s%3D0%3Bs%3Ce%2B1%3Bs%2B%2B)s!%3D%3Dt%26%26i%3D%3D%3Dn%5Bs%5D%26%26(r%5Bt%5D%3Cr%5Bs%5D%7C%7Cr%5Bt%5D%3D%3D%3Dr%5Bs%5D%26%26t%3Cs)%26%26(n%5Bt%5D%3D0)%7Dconst%20o%3Dnew%20Uint32Array(s).fill(0)%3Bfor(let%20t%3D0%3Bt%3Cs%3Bt%2B%2B)o%5Bt%5D%3Dn%5Bi%5Bt%5D%5D%3Breturn%5Ba%2Co%5D%7Dbwlabel(t%2Ce%2Ci%3D26%2Cs%3D!1%2Cn%3D!1)%7Bconst%20r%3DDate.now()%2Ca%3De%5B0%5D*e%5B1%5D*e%5B2%5D%2Co%3Dnew%20Uint32Array(a).fill(0)%3Bif(!%5B6%2C18%2C26%5D.includes(i))return%20l.info(%22bwlabel%3A%20conn%20must%20be%206%2C%2018%20or%2026.%22)%2C%5B0%2Co%5D%3Bif(e%5B0%5D%3C2%7C%7Ce%5B1%5D%3C2%7C%7Ce%5B2%5D%3C1)return%20l.info(%22bwlabel%3A%20img%20must%20be%202%20or%203-dimensional%22)%2C%5B0%2Co%5D%3Bif(s)for(let%20e%3D0%3Be%3Ca%3Be%2B%2B)0!%3D%3Dt%5Be%5D%26%26(o%5Be%5D%3D1)%3Belse%20o.set(t)%3Blet%5Bh%2Cc%2Cd%5D%3Dthis.do_initial_labelling(o%2Ce%2Ci)%3Bvoid%200%3D%3D%3Dc%26%26(c%3Dnew%20Uint32Array)%3Bconst%5Bm%2Cu%5D%3Dthis.translate_labels(d%2Ce%2Cc%2Ch)%3Bif(l.info(i%2B%22%20neighbor%20clustering%20into%20%22%2Bm%2B%22%20regions%20in%20%22%2B(Date.now()-r)%2B%22ms%22)%2Cn)%7Bconst%5Bt%2Ce%5D%3Dthis.largest_original_cluster_labels(o%2Cm%2Cu)%3Breturn%5Bt%2Ce%5D%7Dreturn%5Bm%2Cu%5D%7Dasync%20createConnectedLabelImage(t%2Ce%3D26%2Ci%3D!1%2Cs%3D!1)%7Bconst%20n%3Dthis.getVolumeIndexByID(t)%2Cr%3DUint32Array.from(this.volumes%5Bn%5D.dims%3F.slice(1%2C4)%3F%3F%5B%5D)%2Ca%3DUint32Array.from(this.volumes%5Bn%5D.img%3F.slice()%3F%3F%5B%5D)%2C%5Bo%2Cl%5D%3Dthis.bwlabel(a%2Cr%2Ce%2Ci%2Cs)%2Ch%3Dthis.volumes%5Bn%5D.clone()%3Bh.opacity%3D.5%2Ch.colormap%3D%22random%22%3Bfor(let%20t%3D0%3Bt%3Ch.img.length%3Bt%2B%2B)h.img%5Bt%5D%3Dl%5Bt%5D%3Breturn%20h.cal_min%3D0%2Ch.cal_max%3Do%2Ch%7Dasync%20scalecropUint8(t%2Ce%3D0%2Ci%3D255%2Cs%2Cn)%7Bconst%20r%3Dt.length%2Ca%3Dnew%20Uint8Array(r)%3Bfor(let%20o%3D0%3Bo%3Cr%3Bo%2B%2B)%7Blet%20r%3Dt%5Bo%5D%3Br%3De%2Bn*(r-s)%2Cr%3DMath.max(r%2Ce)%2Cr%3DMath.min(r%2Ci)%2Ca%5Bo%5D%3Dr%7Dreturn%20a%7Dasync%20scalecropFloat32(t%2Ce%3D0%2Ci%3D1%2Cs%2Cn)%7Bconst%20r%3Dt.length%2Ca%3Dnew%20Float32Array(r)%3Bfor(let%20o%3D0%3Bo%3Cr%3Bo%2B%2B)%7Blet%20r%3Dt%5Bo%5D%3Br%3De%2Bn*(r-s)%2Cr%3DMath.max(r%2Ce)%2Cr%3DMath.min(r%2Ci)%2Ca%5Bo%5D%3Dr%7Dreturn%20a%7DgetScale(t%2Ce%3D0%2Ci%3D255%2Cs%3D0%2Cn%3D.999)%7Blet%20r%3Dt.global_min%2Ca%3Dt.global_max%3Bif(2%3D%3D%3Dt.hdr.datatypeCode)return%5Br%2C1%5D%3Bif((!isFinite(s)%7C%7C!isFinite(n))%26%26isFinite(t.cal_min)%26%26isFinite(t.cal_max)%26%26t.cal_max%3Et.cal_min)%7Br%3Dt.cal_min%2Ca%3Dt.cal_max%3Bconst%20s%3D(i-e)%2F(a-r)%3Breturn%20l.info(%22%20Robust%20Rescale%3A%20%20min%3A%20%22%2Br%2B%22%20%20max%3A%20%22%2Ba%2B%22%20scale%3A%20%22%2Bs)%2Cconsole.log(%22Robust%20Rescale%3A%20%20min%3A%20%22%2Br%2B%22%20%20max%3A%20%22%2Ba%2B%22%20scale%3A%20%22%2Bs)%2C%5Br%2Cs%5D%7Dconst%20o%3Dt.img%2Ch%3Dt.hdr.dims%5B1%5D*t.hdr.dims%5B2%5D*t.hdr.dims%5B3%5D%3Bif(1!%3D%3Dt.hdr.scl_slope%7C%7C0!%3D%3Dt.hdr.scl_inter)%7Bconst%20e%3Dt.img%2Ci%3Dnew%20Float32Array(t.img.length)%3Bfor(let%20s%3D0%3Bs%3Ch%3Bs%2B%2B)i%5Bs%5D%3De%5Bs%5D*t.hdr.scl_slope%2Bt.hdr.scl_inter%7Dif(r%3C0%26%26l.warn(%22WARNING%3A%20Input%20image%20has%20value(s)%20below%200.0%20!%22)%2Cl.info(%22%20Input%3A%20%20%20%20min%3A%20%22%2Br%2B%22%20%20max%3A%20%22%2Ba)%2C0%3D%3D%3Ds%26%261%3D%3D%3Dn)return%5Br%2C1%5D%3Blet%20c%3D0%3Bfor(let%20t%3D0%3Bt%3Ch%3Bt%2B%2B)Math.abs(o%5Bt%5D)%3E%3D1e-15%26%26c%2B%2B%3Bconst%20d%3D1e3%2Cm%3D(a-r)%2Fd%2Cu%3Dnew%20Array(d).fill(0)%3Bfor(let%20t%3D0%3Bt%3Ch%3Bt%2B%2B)%7Bconst%20e%3Do%5Bt%5D%3Blet%20i%3DMath.floor((e-r)%2Fm)%3Bi%3DMath.min(i%2C999)%2Cu%5Bi%5D%2B%2B%7Dconst%20A%3Dnew%20Array(d).fill(0)%3BA%5B0%5D%3Du%5B0%5D%3Bfor(let%20t%3D1%3Bt%3Cd%3Bt%2B%2B)A%5Bt%5D%3DA%5Bt-1%5D%2Bu%5Bt%5D%3Blet%20f%3DMath.floor(s*h)%2Cg%3D0%3Bfor(%3Bg%3Cd%26%26!(A%5Bg%5D%3E%3Df)%3B)g%2B%2B%3Bconst%20p%3Dr%3Bfor(r%3Dg*m%2Bp%2Cf%3Dh-Math.floor((1-n)*c)%2Cg%3D0%3Bg%3C999%26%26!(A%5Bg%2B1%5D%3E%3Df)%3B)g%2B%2B%3Ba%3Dg*m%2Bp%3Blet%20v%3D1%3Breturn%20r!%3D%3Da%26%26(v%3D(i-e)%2F(a-r))%2Cl.info(%22%20Rescale%3A%20%20min%3A%20%22%2Br%2B%22%20%20max%3A%20%22%2Ba%2B%22%20scale%3A%20%22%2Bv)%2C%5Br%2Cv%5D%7DconformVox2Vox(t%2Ce%2Cs%3D256%2Ca%3D1%2Co%3D!1)%7Bconst%20l%3De.flat()%2Ch%3Di.fromValues(l%5B0%5D%2Cl%5B1%5D%2Cl%5B2%5D%2Cl%5B3%5D%2Cl%5B4%5D%2Cl%5B5%5D%2Cl%5B6%5D%2Cl%5B7%5D%2Cl%5B8%5D%2Cl%5B9%5D%2Cl%5B10%5D%2Cl%5B11%5D%2Cl%5B12%5D%2Cl%5B13%5D%2Cl%5B14%5D%2Cl%5B15%5D)%2Cc%3Dr.fromValues(t%5B1%5D%2F2%2Ct%5B2%5D%2F2%2Ct%5B3%5D%2F2%2C1)%2Cd%3Dr.create()%2Cm%3Di.create()%3Bi.transpose(m%2Ch)%2Cr.transformMat4(d%2Cc%2Cm)%3Bconst%20u%3Dn.fromValues(d%5B0%5D%2Cd%5B1%5D%2Cd%5B2%5D)%2CA%3Dn.fromValues(a%2Ca%2Ca)%3Blet%20f%3Di.fromValues(-1%2C0%2C0%2C0%2C0%2C0%2C1%2C0%2C0%2C-1%2C0%2C0%2C0%2C0%2C0%2C1)%3Bo%26%26(f%3Di.fromValues(1%2C0%2C0%2C0%2C0%2C1%2C0%2C0%2C0%2C0%2C1%2C0%2C0%2C0%2C0%2C1))%2Ci.transpose(f%2Cf)%3Bconst%20g%3Dr.fromValues(s%2Cs%2Cs%2C1)%2Cp%3Di.create()%3Bi.scale(p%2Cf%2CA)%3Bconst%20v%3Dr.fromValues(g%5B0%5D%2Cg%5B1%5D%2Cg%5B2%5D%2C1)%3Br.transformMat4(v%2Cv%2Cp)%2Cr.scale(v%2Cv%2C.5)%3Bconst%20x%3Dn.create()%3Bn.subtract(x%2Cu%2Cn.fromValues(v%5B0%5D%2Cv%5B1%5D%2Cv%5B2%5D))%3Bconst%20w%3Di.create()%3Bi.transpose(w%2Cp)%2Cw%5B3%5D%3Dx%5B0%5D%2Cw%5B7%5D%3Dx%5B1%5D%2Cw%5B11%5D%3Dx%5B2%5D%3Bconst%20C%3Di.create()%3Bi.invert(C%2Cw)%3Bconst%20b%3Di.create()%3Bi.mul(b%2Ch%2CC)%3Bconst%20y%3Di.create()%3Breturn%20i.invert(y%2Cb)%2C%5Bw%2Cb%2Cy%5D%7Dasync%20createNiftiArray(t%3D%5B256%2C256%2C256%5D%2Ce%3D%5B1%2C1%2C1%5D%2Ci%3D%5B1%2C0%2C0%2C-128%2C0%2C1%2C0%2C-128%2C0%2C0%2C1%2C-128%2C0%2C0%2C0%2C1%5D%2Cs%3D2%2Cn%3Dnew%20Uint8Array)%7Breturn%20await%20Je.createNiftiArray(t%2Ce%2Ci%2Cs%2Cn)%7Dasync%20niftiArray2NVImage(t%3Dnew%20Uint8Array)%7Breturn%20await%20Je.loadFromUrl(%7Burl%3At%7D)%7Dasync%20loadFromUrl(t)%7Breturn%20await%20Je.loadFromUrl(%7Burl%3At%7D)%7Dasync%20conform(t%2Ce%3D!1%2Ci%3D!0%2Cs%3D!1%2Cn%3D!1)%7Bconst%20r%3D256%2Ca%3Dthis.conformVox2Vox(t.hdr.dims%2Ct.hdr.affine.flat()%2Cr%2C1%2Ce)%2Co%3Da%5B0%5D%2Cl%3Da%5B2%5D%2Ch%3Dnew%20Float32Array(16777216)%2Cc%3Dnew%20Float32Array(t.img)%2Cd%3Dt.hdr.dims%5B1%5D*t.hdr.dims%5B2%5D*t.hdr.dims%5B3%5D%3Bif(1!%3D%3Dt.hdr.scl_slope%7C%7C0!%3D%3Dt.hdr.scl_inter)for(let%20e%3D0%3Be%3Cd%3Be%2B%2B)c%5Be%5D%3Dc%5Be%5D*t.hdr.scl_slope%2Bt.hdr.scl_inter%3Bconst%20m%3Dt.hdr.dims%5B1%5D%2Cu%3Dt.hdr.dims%5B2%5D%2CA%3Dt.hdr.dims%5B3%5D%2Cf%3Dm*u%3Blet%20g%3D-1%3Bfunction%20p(t%2Ce%2Ci)%7Breturn%20t%2Be*m%2Bi*f%7Dconst%20v%3Dl%5B0%5D%2Cx%3Dl%5B4%5D%2Cw%3Dl%5B8%5D%3Bif(i)for(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)for(let%20e%3D0%3Be%3Cr%3Be%2B%2B)%7Bconst%20i%3De*l%5B1%5D%2Bt*l%5B2%5D%2Bl%5B3%5D%2Cs%3De*l%5B5%5D%2Bt*l%5B6%5D%2Bl%5B7%5D%2Cn%3De*l%5B9%5D%2Bt*l%5B10%5D%2Bl%5B11%5D%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)%7Bconst%20e%3Dt*v%2Bi%2Cr%3Dt*x%2Bs%2Ca%3Dt*w%2Bn%2Co%3DMath.floor(e)%2Cl%3DMath.floor(r)%2Cd%3DMath.floor(a)%3Bif(g%2B%2B%2Co%3C0%7C%7Cl%3C0%7C%7Cd%3C0)continue%3Bconst%20C%3DMath.ceil(e)%2Cb%3DMath.ceil(r)%2Cy%3DMath.ceil(a)%3Bif(C%3E%3Dm%7C%7Cb%3E%3Du%7C%7Cy%3E%3DA)continue%3Bconst%20I%3De-o%2CM%3Dr-l%2CD%3Da-d%2CF%3D1-I%2CT%3D1-M%2CV%3D1-D%2CS%3Dp(o%2Cl%2Cd)%3Blet%20E%3D0%3BE%2B%3Dc%5BS%5D*F*T*V%2CE%2B%3Dc%5BS%2Bf%5D*F*T*D%2CE%2B%3Dc%5BS%2Bm%5D*F*M*V%2CE%2B%3Dc%5BS%2Bm%2Bf%5D*F*M*D%2CE%2B%3Dc%5BS%2B1%5D*I*T*V%2CE%2B%3Dc%5BS%2B1%2Bf%5D*I*T*D%2CE%2B%3Dc%5BS%2B1%2Bm%5D*I*M*V%2CE%2B%3Dc%5BS%2B1%2Bm%2Bf%5D*I*M*D%2Ch%5Bg%5D%3DE%7D%7Delse%20for(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)for(let%20e%3D0%3Be%3Cr%3Be%2B%2B)%7Bconst%20i%3De*l%5B1%5D%2Bt*l%5B2%5D%2Bl%5B3%5D%2Cs%3De*l%5B5%5D%2Bt*l%5B6%5D%2Bl%5B7%5D%2Cn%3De*l%5B9%5D%2Bt*l%5B10%5D%2Bl%5B11%5D%3Bfor(let%20t%3D0%3Bt%3Cr%3Bt%2B%2B)%7Bconst%20e%3DMath.round(t*v%2Bi)%2Cr%3DMath.round(t*x%2Bs)%2Ca%3DMath.round(t*w%2Bn)%3Bg%2B%2B%2Ce%3C0%7C%7Cr%3C0%7C%7Ca%3C0%7C%7C(e%3E%3Dm%7C%7Cr%3E%3Du%7C%7Ca%3E%3DA%7C%7C(h%5Bg%5D%3Dc%5Bp(e%2Cr%2Ca)%5D))%7D%7Dlet%20C%3D0%3Bn%26%26(C%3DNaN)%3Blet%20b%3Dnew%20Uint8Array%3Bif(s)%7Bconst%20e%3Dawait%20this.getScale(t%2C0%2C1%2CC)%2Ci%3Dawait%20this.scalecropFloat32(h%2C0%2C1%2Ce%5B0%5D%2Ce%5B1%5D)%3Bb%3Dawait%20this.createNiftiArray(%5Br%2Cr%2Cr%5D%2C%5B1%2C1%2C1%5D%2CArray.from(o)%2C16%2Cnew%20Uint8Array(i.buffer))%7Delse%7Bconst%20e%3Dawait%20this.getScale(t%2C0%2C255%2CC)%2Ci%3Dawait%20this.scalecropUint8(h%2C0%2C255%2Ce%5B0%5D%2Ce%5B1%5D)%3Bb%3Dawait%20this.createNiftiArray(%5Br%2Cr%2Cr%5D%2C%5B1%2C1%2C1%5D%2CArray.from(o)%2C2%2Ci)%7Dreturn%20await%20this.niftiArray2NVImage(b)%7DsetRenderDrawAmbientOcclusion(t)%7Bif(!this.renderShader)throw%20new%20Error(%22renderShader%20undefined%22)%3Bthis.renderDrawAmbientOcclusion%3Dt%2Cthis.renderShader.use(this.gl)%2Cthis.gl.uniform1fv(this.renderShader.uniforms.renderDrawAmbientOcclusion%2C%5Bthis.renderDrawAmbientOcclusion%2C1%5D)%2Cthis.drawScene()%7DsetColorMap(t%2Ce)%7Bthis.setColormap(t%2Ce)%7DsetColormapNegative(t%2Ce)%7Bconst%20i%3Dthis.getVolumeIndexByID(t)%3Bthis.volumes%5Bi%5D.colormapNegative%3De%2Cthis.updateGLVolume()%7DsetModulationImage(t%2Ce%2Ci%3D0)%7Bconst%20s%3Dthis.getVolumeIndexByID(t)%3Blet%20n%3Dnull%3Be.length%3E0%26%26(n%3Dthis.getVolumeIndexByID(e))%2Cthis.volumes%5Bs%5D.modulationImage%3Dn%2Cthis.volumes%5Bs%5D.modulateAlpha%3Di%2Cthis.updateGLVolume()%7DsetGamma(t%3D1)%7Bthis.scene.gamma%3Dt%2Cne.gamma%3Dt%2Cthis.updateGLVolume()%7Dasync%20loadDeferred4DVolumes(t)%7Bconst%20e%3Dthis.getVolumeIndexByID(t)%2Ci%3Dthis.volumes%5Be%5D%3Bif(i.nTotalFrame4D%3C%3Di.nFrame4D)return%3Blet%20s%3Bs%3Di.fileObject%3Fawait%20Je.loadFromFile(%7Bfile%3Ai.fileObject%7D)%3Aawait%20Je.loadFromUrl(%7Burl%3Ai.url%7D)%2Cs%26%26(i.img%3Ds.img.slice()%2Ci.nTotalFrame4D%3Ds.nTotalFrame4D%2Ci.nFrame4D%3Ds.nFrame4D%2Cthis.updateGLVolume())%7DsetFrame4D(t%2Ce)%7Bconst%20i%3Dthis.getVolumeIndexByID(t)%2Cs%3Dthis.volumes%5Bi%5D%3Be%3Es.nFrame4D-1%26%26(e%3Ds.nFrame4D-1)%2Ce%3C0%26%26(e%3D0)%2Ce!%3D%3Ds.frame4D%26%26(s.frame4D%3De%2Cthis.updateGLVolume()%2Cthis.onFrameChange(s%2Ce)%2Cthis.createOnLocationChange())%7DgetFrame4D(t)%7Bconst%20e%3Dthis.getVolumeIndexByID(t)%3Breturn%20this.volumes%5Be%5D.frame4D%7DcolormapFromKey(t)%7Breturn%20ne.colormapFromKey(t)%7Dcolormap(t%3D%22%22%2Ce%3D!1)%7Breturn%20ne.colormap(t%2Ce)%7DcreateColormapTexture(t%3Dnull%2Ce%3D0%2Ci%3D256)%7Breturn%20null!%3D%3Dt%26%26this.gl.deleteTexture(t)%2Ce%3C1%7C%7Ci%3C1%3Fnull%3A(t%3Dthis.gl.createTexture()%2Cthis.gl.activeTexture(Ui)%2Cthis.gl.bindTexture(this.gl.TEXTURE_2D%2Ct)%2Cthis.gl.texStorage2D(this.gl.TEXTURE_2D%2C1%2Cthis.gl.RGBA8%2Ci%2Ce)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_MIN_FILTER%2Cthis.gl.LINEAR)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_MAG_FILTER%2Cthis.gl.LINEAR)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_WRAP_R%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_WRAP_S%2Cthis.gl.CLAMP_TO_EDGE)%2Cthis.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT%2C1)%2Ct)%7DaddColormapList(t%3D%22%22%2Ce%3DNaN%2Ci%3DNaN%2Cs%3D!1%2Cn%3D!1%2Cr%3D!0%2Ca%3D!1)%7Bt.length%3C1%26%26(r%3D!1)%2Cthis.colormapLists.push(%7Bname%3At%2Cmin%3Ae%2Cmax%3Ai%2CalphaThreshold%3As%2Cnegative%3An%2Cvisible%3Ar%2Cinvert%3Aa%7D)%7DrefreshColormaps()%7Bif(this.colormapLists%3D%5B%5D%2Cthis.volumes.length%3C1%26%26this.meshes.length%3C1)return%3Bconst%20t%3Dthis.volumes.length%3Bif(t%3E0)for(let%20e%3D0%3Be%3Ct%3Be%2B%2B)%7Bconst%20t%3Dthis.volumes%5Be%5D%2Ci%3Dwi(t.cal_min%2Ct.cal_max%2Ct.cal_minNeg%2Ct.cal_maxNeg)%3Bthis.addColormapList(t.colormapNegative%2Ci%5B0%5D%2Ci%5B1%5D%2Cvoid%200!%3D%3Dt.alphaThreshold%2C!0%2Ct.colorbarVisible%2Ct.colormapInvert)%2Cthis.addColormapList(t.colormap%2Ct.cal_min%2Ct.cal_max%2Cvoid%200!%3D%3Dt.alphaThreshold%2C!1%2Ct.colorbarVisible%2Ct.colormapInvert)%7Dconst%20e%3Dthis.meshes.length%3Bif(e%3E0)for(let%20t%3D0%3Bt%3Ce%3Bt%2B%2B)%7Bconst%20e%3Dthis.meshes%5Bt%5D%3Bif(!e.colorbarVisible)continue%3Bconst%20i%3De.layers.length%3Bif(%22edgeColormap%22in%20e%26%26%22edges%22in%20e%26%26void%200!%3D%3De.edges)%7Bconst%20t%3Dwi(e.edgeMin%2Ce.edgeMax%2CNaN%2CNaN)%3Bthis.addColormapList(e.edgeColormapNegative%2Ct%5B0%5D%2Ct%5B1%5D%2C!1%2C!0%2C!0%2Ce.colormapInvert)%2Cthis.addColormapList(e.edgeColormap%2Ce.edgeMin%2Ce.edgeMax%2C!1%2C!1%2C!0%2Ce.colormapInvert)%7Dif(!(i%3C1))for(let%20e%3D0%3Be%3Ci%3Be%2B%2B)%7Bconst%20i%3Dthis.meshes%5Bt%5D.layers%5Be%5D%3Bif(!i.colorbarVisible)continue%3Bif(i.colormap.length%3C1)continue%3Bconst%20s%3Dwi(i.cal_min%2Ci.cal_max%2Ci.cal_minNeg%2Ci.cal_maxNeg)%3Bthis.addColormapList(i.colormapNegative%2Cs%5B0%5D%2Cs%5B1%5D%2Ci.alphaThreshold%2C!0%2C!0%2Ci.colormapInvert)%2Cthis.addColormapList(i.colormap%2Ci.cal_min%2Ci.cal_max%2Ci.alphaThreshold%2C!1%2C!0%2Ci.colormapInvert)%7D%7Dconst%20i%3Dthis.colormapLists.length%3Bif(i%3C1)return%3Bthis.colormapTexture%3Dthis.createColormapTexture(this.colormapTexture%2Ci%2B1)%3Blet%20s%3Dnew%20Uint8ClampedArray%3Bfunction%20n(t)%7Bconst%20e%3Dnew%20Uint8ClampedArray(s.length%2Bt.length)%3Be.set(s)%2Ce.set(t%2Cs.length)%2Cs%3De%7Dfor(let%20t%3D0%3Bt%3Ci%3Bt%2B%2B)n(Array.from(this.colormap(this.colormapLists%5Bt%5D.name%2Cthis.colormapLists%5Bt%5D.invert)))%3Breturn%20n(Array.from(this.drawLut.lut))%2Cthis.gl.texSubImage2D(this.gl.TEXTURE_2D%2C0%2C0%2C0%2C256%2Ci%2B1%2Cthis.gl.RGBA%2Cthis.gl.UNSIGNED_BYTE%2Cs)%2Cthis%7DsliceScale(t%3D!1)%7Blet%20e%3Dthis.screenFieldOfViewMM(0)%3Bt%26%26(e%3Dthis.screenFieldOfViewVox(0))%3Bconst%20i%3DMath.max(e%5B0%5D%2CMath.max(e%5B1%5D%2Ce%5B2%5D))%2Cs%3D%5Be%5B0%5D%2Fi%2Ce%5B1%5D%2Fi%2Ce%5B2%5D%2Fi%5D%3Bif(!this.back%3F.dims)throw%20new%20Error(%22back.dims%20undefined%22)%3Breturn%7BvolScale%3As%2Cvox%3A%5Bthis.back.dims%5B1%5D%2Cthis.back.dims%5B2%5D%2Cthis.back.dims%5B3%5D%5D%2ClongestAxis%3Ai%2CdimsMM%3Ae%7D%7DtileIndex(t%2Ce)%7Bfor(let%20i%3D0%3Bi%3Cthis.screenSlices.length%3Bi%2B%2B)%7Bconst%20s%3Dthis.screenSlices%5Bi%5D.leftTopWidthHeight%3Bif(t%3Es%5B0%5D%26%26e%3Es%5B1%5D%26%26t%3Cs%5B0%5D%2Bs%5B2%5D%26%26e%3Cs%5B1%5D%2Bs%5B3%5D)return%20i%7Dreturn-1%7DinRenderTile(t%2Ce)%7Bconst%20i%3Dthis.tileIndex(t%2Ce)%3Breturn%20i%3E%3D0%26%264%3D%3D%3Dthis.screenSlices%5Bi%5D.axCorSag%3Fi%3A-1%7DsliceScroll3D(t%3D0)%7Bif(0!%3D%3Dt)%7Bif(this.volumes.length%3E0%26%26this.scene.clipPlaneDepthAziElev%5B0%5D%3C1.8)%7Bconst%20e%3Dthis.scene.clipPlaneDepthAziElev.slice()%3Breturn%20t%3E0%26%26(e%5B0%5D%3DMath.min(1.5%2Ce%5B0%5D%2B.025))%2Ct%3C0%26%26(e%5B0%5D%3DMath.max(-1.5%2Ce%5B0%5D-.025))%2Ce%5B0%5D!%3D%3Dthis.scene.clipPlaneDepthAziElev%5B0%5D%3F(this.scene.clipPlaneDepthAziElev%3De%2Cthis.setClipPlane(this.scene.clipPlaneDepthAziElev))%3Avoid%200%7Dt%3E0%26%26(this.scene.volScaleMultiplier%3DMath.min(2%2C1.1*this.scene.volScaleMultiplier))%2Ct%3C0%26%26(this.scene.volScaleMultiplier%3DMath.max(.5%2C.9*this.scene.volScaleMultiplier))%2Cthis.drawScene()%7D%7DdeleteThumbnail()%7Bthis.bmpTexture%26%26(this.gl.deleteTexture(this.bmpTexture)%2Cthis.bmpTexture%3Dnull%2Cthis.thumbnailVisible%3D!1)%7DinGraphTile(t%2Ce)%7Bif(this.graph.opacity%3C%3D0%7C%7Cthis.volumes.length%3C1%7C%7Cthis.volumes%5B0%5D.nFrame4D%3C1%7C%7C!this.graph.plotLTWH)return!1%3Bif(this.graph.plotLTWH%5B2%5D%3C1%7C%7Cthis.graph.plotLTWH%5B3%5D%3C1)return!1%3Bconst%20i%3D%5B(t-this.graph.LTWH%5B0%5D)%2Fthis.graph.LTWH%5B2%5D%2C(e-this.graph.LTWH%5B1%5D)%2Fthis.graph.LTWH%5B3%5D%5D%3Breturn%20i%5B0%5D%3E0%26%26i%5B1%5D%3E0%26%26i%5B0%5D%3C%3D1%26%26i%5B1%5D%3C%3D1%7DupdateBitmapFromClickToSegment()%7Bif(null%3D%3D%3Dthis.clickToSegmentGrowingBitmap)return%3Bif(null%3D%3D%3Dthis.drawBitmap)return%3Bif(this.clickToSegmentGrowingBitmap.length!%3D%3Dthis.drawBitmap.length)return%3Bconst%20t%3Dthis.drawBitmap.length%3Bfor(let%20e%3D0%3Be%3Ct%3Be%2B%2B)this.drawBitmap%5Be%5D%3Dthis.clickToSegmentGrowingBitmap%5Be%5D%7DsumBitmap(t)%7Blet%20e%3D0%3Bfor(let%20i%3D0%3Bi%3Ct.length%3Bi%2B%2B)e%2B%3Dt%5Bi%5D%3Breturn%20e%7DmouseClick(t%2Ce%2Ci%3D0%2Cs%3D!0)%7Bif(t*%3Dthis.uiData.dpr%2Ce*%3Dthis.uiData.dpr%2Cthis.canvas.focus()%2Cthis.thumbnailVisible)return%20this.thumbnailVisible%3D!1%2Cvoid%20Promise.all(%5Bthis.loadVolumes(this.deferredVolumes)%2Cthis.loadMeshes(this.deferredMeshes)%5D).catch((t%3D%3E%7Bthrow%20t%7D))%3Bif(this.inGraphTile(t%2Ce))%7Bif(!this.graph.plotLTWH)throw%20new%20Error(%22plotLTWH%20undefined%22)%3Bconst%20i%3D%5B(t-this.graph.plotLTWH%5B0%5D)%2Fthis.graph.plotLTWH%5B2%5D%2C(e-this.graph.plotLTWH%5B1%5D)%2Fthis.graph.plotLTWH%5B3%5D%5D%3Bif(i%5B0%5D%3E0%26%26i%5B1%5D%3E0%26%26i%5B0%5D%3C%3D1%26%26i%5B1%5D%3C%3D1)%7Bconst%20t%3DMath.round(i%5B0%5D*(this.volumes%5B0%5D.nFrame4D-1))%3Breturn%20void%20this.setFrame4D(this.volumes%5B0%5D.id%2Ct)%7Di%5B0%5D%3E.5%26%26i%5B1%5D%3E1%26%26this.loadDeferred4DVolumes(this.volumes%5B0%5D.id).catch((t%3D%3E%7Bthrow%20t%7D))%7Delse%7Bif(this.inRenderTile(t%2Ce)%3E%3D0)return%20this.sliceScroll3D(i)%2Cvoid%20this.drawScene()%3Bif(!(this.screenSlices.length%3C1%7C%7Cthis.gl.canvas.height%3C1%7C%7Cthis.gl.canvas.width%3C1))for(let%20r%3D0%3Br%3Cthis.screenSlices.length%3Br%2B%2B)%7Bconst%20a%3Dthis.screenSlices%5Br%5D.axCorSag%3Bif(this.drawPenAxCorSag%3E%3D0%26%26this.drawPenAxCorSag!%3D%3Da)continue%3Bif(a%3E2)continue%3Blet%20o%3Dthis.screenXY2TextureFrac(t%2Ce%2Cr%2C!1)%3Bif(!(o%5B0%5D%3C0))%7Bif(!s)return%20this.scene.crosshairPos%5B2-a%5D%3Di%2Cvoid%20this.drawScene()%3Bif(0!%3D%3Di)%7Blet%20t%3D1%3Bi%3C0%26%26(t%3D-1)%3Bconst%20e%3D%5B0%2C0%2C0%5D%3Breturn%20e%5B2-a%5D%3Dt%2Cthis.moveCrosshairInVox(e%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D)%2Cthis.drawScene()%2Cvoid%20this.createOnLocationChange(a)%7Dif(this.opts.isForceMouseClickToVoxelCenters%3Fthis.scene.crosshairPos%3Dn.clone(this.vox2frac(this.frac2vox(o)))%3Athis.scene.crosshairPos%3Dn.clone(o)%2Cthis.opts.drawingEnabled)%7Blet%20i%3Dthis.frac2vox(this.scene.crosshairPos)%3Bif(this.opts.clickToSegment)%7Bo%3Dthis.screenXY2TextureFrac(this.clickToSegmentXY%5B0%5D%2Cthis.clickToSegmentXY%5B1%5D%2Cr%2C!1)%2Ci%3Dthis.frac2vox(o)%3Blet%20s%3D0%2Cn%3Dthis.opts.clickToSegmentPercent%2Bs%3Bif(this.uiData.mousedown)%7Bconst%20i%3D(this.clickToSegmentXY%5B0%5D-t)%2Fthis.gl.canvas.width%2Cr%3D(this.clickToSegmentXY%5B1%5D-e)%2Fthis.gl.canvas.height%3Bs%3DMath.max(Math.abs(i)%2CMath.abs(r))%2Cn%3Dthis.opts.clickToSegmentPercent%2Bs%7Dlet%20l%3Dthis.back.getValue(i%5B0%5D%2Ci%5B1%5D%2Ci%5B2%5D)%3Bthis.opts.clickToSegmentAutoIntensity%26%26(0!%3D%3Dn%26%26(0%3D%3D%3Dl%26%26(l%3D.01)%2Cthis.opts.clickToSegmentIntensityMax%3Dl*(1%2Bn)%2Cthis.opts.clickToSegmentIntensityMin%3Dl*(1-n))%2Cl%3E.5*(this.back.cal_min%2Bthis.back.cal_max)%3Fthis.opts.clickToSegmentBright%3D!0%3Athis.opts.clickToSegmentBright%3D!1)%3Bconst%20h%3Dthis.opts.clickToSegmentBright%3FNumber.POSITIVE_INFINITY%3ANumber.NEGATIVE_INFINITY%3Bif(this.drawPenAxCorSag%3Da%2C0%3D%3D%3Dthis.drawPenAxCorSag)%7Bconst%20t%3D%5Bthis.back.pixDimsRAS%5B0%5D%2Cthis.back.pixDimsRAS%5B1%5D%5D%2Ce%3DMath.min(...t)%3Bthis.opts.penSize%3DMath.ceil(this.opts.clickToSegmentRadius%2Fe)%7Delse%20if(1%3D%3D%3Dthis.drawPenAxCorSag)%7Bconst%20t%3D%5Bthis.back.pixDimsRAS%5B0%5D%2Cthis.back.pixDimsRAS%5B2%5D%5D%2Ce%3DMath.min(...t)%3Bthis.opts.penSize%3DMath.ceil(this.opts.clickToSegmentRadius%2Fe)%7Delse%20if(2%3D%3D%3Dthis.drawPenAxCorSag)%7Bconst%20t%3D%5Bthis.back.pixDimsRAS%5B1%5D%2Cthis.back.pixDimsRAS%5B2%5D%5D%2Ce%3DMath.min(...t)%3Bthis.opts.penSize%3DMath.ceil(this.opts.clickToSegmentRadius%2Fe)%7Dif(this.drawPt(i%5B0%5D%2Ci%5B1%5D%2Ci%5B2%5D%2Cthis.opts.penValue)%2C0!%3D%3Ds%3F(this.clickToSegmentIsGrowing%3D!0%2Cthis.clickToSegmentGrowingBitmap%3Dthis.drawBitmap.slice())%3Athis.clickToSegmentIsGrowing%3D!1%2Cthis.drawFloodFill(%5Bi%5B0%5D%2Ci%5B1%5D%2Ci%5B2%5D%5D%2C0%2Ch%2Cthis.opts.clickToSegmentIntensityMin%2Cthis.opts.clickToSegmentIntensityMax%2Cthis.opts.floodFillNeighbors%2Cthis.opts.clickToSegmentMaxDistanceMM%2Cthis.opts.clickToSegmentIs2D)%2Cthis.drawScene()%2Cthis.createOnLocationChange(a)%2Cthis.clickToSegmentIsGrowing)return%3Bconst%20c%3Dthis.getDescriptives(%7Blayer%3A0%2Cmasks%3A%5B%5D%2CdrawingIsMask%3A!0%7D)%3Breturn%20void%20this.onClickToSegment(%7BmL%3Ac.volumeML%2Cmm3%3Ac.volumeMM3%7D)%7Dif(!isFinite(this.opts.penValue)%7C%7Cthis.opts.penValue%3C0%7C%7CObject.is(this.opts.penValue%2C-0))return%20void(isFinite(this.opts.penValue)%3Fthis.drawFloodFill(i%2CMath.abs(this.opts.penValue)%2Cthis.opts.penValue%2CNaN%2CNaN%2Cthis.opts.floodFillNeighbors)%3Athis.drawFloodFill(i%2C0%2Cthis.opts.penValue%2CNaN%2CNaN%2Cthis.opts.floodFillNeighbors))%3Bif(isNaN(this.drawPenLocation%5B0%5D))this.drawPenAxCorSag%3Da%2Cthis.drawPenFillPts%3D%5B%5D%2Cthis.drawPt(...i%2Cthis.opts.penValue)%3Belse%7Bif(i%5B0%5D%3D%3D%3Dthis.drawPenLocation%5B0%5D%26%26i%5B1%5D%3D%3D%3Dthis.drawPenLocation%5B1%5D%26%26i%5B2%5D%3D%3D%3Dthis.drawPenLocation%5B2%5D)return%3Bthis.drawPenLine(i%2Cthis.drawPenLocation%2Cthis.opts.penValue)%7Dthis.drawPenLocation%3Di%2Cthis.opts.isFilledPen%26%26this.drawPenFillPts.push(i)%2Cthis.refreshDrawing(!1)%7Dreturn%20this.drawScene()%2Cvoid%20this.createOnLocationChange(a)%7D%7D%7D%7DdrawRuler()%7Blet%20t%3D%5B%5D%2Ce%3D%5B%5D%3Bfor(let%20i%3D0%3Bi%3Cthis.screenSlices.length%3Bi%2B%2B)if(4!%3D%3Dthis.screenSlices%5Bi%5D.axCorSag%26%26this.screenSlices%5Bi%5D.fovMM.length%3E1)%7Be%3Dthis.screenSlices%5Bi%5D.leftTopWidthHeight%2Ct%3Dthis.screenSlices%5Bi%5D.fovMM%3Bbreak%7Dif(e.length%3C4)return%3Bconst%20i%3D100%2Ft%5B0%5D*e%5B2%5D%2Cs%3De%5B0%5D%2B.5*e%5B2%5D-.5*i%2Cn%3De%5B1%5D%2Be%5B3%5D-2*this.opts.rulerWidth%2Cr%3D%5Bs%2Cn%2Cs%2Bi%2Cn%5D%3Bthis.drawRuler10cm(r)%7DdrawRuler10cm(t)%7Bif(!this.lineShader)throw%20new%20Error(%22lineShader%20undefined%22)%3Bthis.gl.bindVertexArray(this.genericVAO)%2Cthis.lineShader.use(this.gl)%2Cthis.gl.uniform4fv(this.lineShader.uniforms.lineColor%2Cthis.opts.rulerColor)%2Cthis.gl.uniform2fv(this.lineShader.uniforms.canvasWidthHeight%2C%5Bthis.gl.canvas.width%2Cthis.gl.canvas.height%5D)%2Cthis.gl.uniform1f(this.lineShader.uniforms.thickness%2Cthis.opts.rulerWidth)%2Cthis.gl.uniform4fv(this.lineShader.uniforms.startXYendXY%2Ct)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%3Bconst%20e%3D-.1*(t%5B0%5D-t%5B2%5D)%2Ci%3Dt%5B1%5D%2Cs%3Di-2*this.opts.rulerWidth%2Cn%3Di-4*this.opts.rulerWidth%3Bfor(let%20r%3D0%3Br%3C11%3Br%2B%2B)%7Bconst%20a%3Dt%5B0%5D%2Br*e%2Co%3D%5Ba%2Ci%2Ca%2Cs%5D%3Br%255%3D%3D0%26%26(o%5B3%5D%3Dn)%2Cthis.gl.uniform4fv(this.lineShader.uniforms.startXYendXY%2Co)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%7Dthis.gl.bindVertexArray(this.unusedVAO)%7DscreenXY2mm(t%2Ce%2Ci%3D-1)%7Blet%20s%3Bfor(let%20n%3D0%3Bn%3Cthis.screenSlices.length%3Bn%2B%2B)%7Blet%20a%3Dn%3Bi%3E%3D0%26%26(a%3Di)%3Bif(this.screenSlices%5Ba%5D.axCorSag%3E2)continue%3Bconst%20o%3Dthis.screenSlices%5Ba%5D.leftTopWidthHeight%3Bif(t%3Co%5B0%5D%7C%7Ce%3Co%5B1%5D%7C%7Ct%3Eo%5B0%5D%2Bo%5B2%5D%7C%7Ce%3Eo%5B1%5D%2Bo%5B3%5D)continue%3Bif(s%3Dthis.screenXY2TextureFrac(t%2Ce%2Ca%2C!1)%2Cs%5B0%5D%3C0)continue%3Bconst%20l%3Dthis.frac2mm(s)%3Breturn%20r.fromValues(l%5B0%5D%2Cl%5B1%5D%2Cl%5B2%5D%2Ca)%7Dreturn%20r.fromValues(NaN%2CNaN%2CNaN%2CNaN)%7DdragForPanZoom(t)%7Bconst%20e%3Dthis.screenXY2mm(t%5B2%5D%2Ct%5B3%5D)%3Bif(isNaN(e%5B0%5D))return%3Bconst%20i%3Dthis.screenXY2mm(t%5B0%5D%2Ct%5B1%5D%2Ce%5B3%5D)%3Bif(isNaN(i%5B0%5D)%7C%7CisNaN(e%5B0%5D)%7C%7CisNaN(e%5B3%5D))return%3Bconst%20s%3Dr.create()%2Cn%3Dthis.uiData.pan2DxyzmmAtMouseDown%5B3%5D%3Br.sub(s%2Ce%2Ci)%2Cthis.scene.pan2Dxyzmm%5B0%5D%3Dthis.uiData.pan2DxyzmmAtMouseDown%5B0%5D%2Bn*s%5B0%5D%2Cthis.scene.pan2Dxyzmm%5B1%5D%3Dthis.uiData.pan2DxyzmmAtMouseDown%5B1%5D%2Bn*s%5B1%5D%2Cthis.scene.pan2Dxyzmm%5B2%5D%3Dthis.uiData.pan2DxyzmmAtMouseDown%5B2%5D%2Bn*s%5B2%5D%2Cthis.canvas.focus()%7DdragForCenterButton(t)%7Bthis.dragForPanZoom(t)%7DdragForSlicer3D(t)%7Blet%20e%3Dthis.uiData.pan2DxyzmmAtMouseDown%5B3%5D%3Be%2B%3D.01*(t%5B3%5D-t%5B1%5D)%2Ce%3DMath.max(e%2C.1)%2Ce%3DMath.min(e%2C10)%3Bconst%20i%3Dthis.scene.pan2Dxyzmm%5B3%5D-e%3Bthis.opts.yoke3Dto2DZoom%26%26(this.scene.volScaleMultiplier%3De)%2Cthis.scene.pan2Dxyzmm%5B3%5D%3De%3Bconst%20s%3Dthis.frac2mm(this.scene.crosshairPos)%3Bthis.scene.pan2Dxyzmm%5B0%5D%2B%3Di*s%5B0%5D%2Cthis.scene.pan2Dxyzmm%5B1%5D%2B%3Di*s%5B1%5D%2Cthis.scene.pan2Dxyzmm%5B2%5D%2B%3Di*s%5B2%5D%7DdrawMeasurementTool(t)%7Bconst%20e%3Dthis.gl%3Bif(e.bindVertexArray(this.genericVAO)%2Ce.depthFunc(e.ALWAYS)%2Ce.enable(e.BLEND)%2Ce.blendFunc(e.SRC_ALPHA%2Ce.ONE_MINUS_SRC_ALPHA)%2C!this.lineShader)throw%20new%20Error(%22lineShader%20undefined%22)%3Bthis.lineShader.use(this.gl)%2Ce.uniform4fv(this.lineShader.uniforms.lineColor%2Cthis.opts.rulerColor)%2Ce.uniform2fv(this.lineShader.uniforms.canvasWidthHeight%2C%5Be.canvas.width%2Ce.canvas.height%5D)%2Ce.uniform1f(this.lineShader.uniforms.thickness%2Cthis.opts.rulerWidth)%2Ce.uniform4fv(this.lineShader.uniforms.startXYendXY%2Ct)%2Ce.drawArrays(e.TRIANGLE_STRIP%2C0%2C4)%3Bconst%20i%3Dthis.opts.rulerColor%3Bi%5B3%5D%3D1%2Ce.uniform4fv(this.lineShader.uniforms.lineColor%2Ci)%3Bconst%20s%3Dthis.opts.rulerWidth%3Be.uniform1f(this.lineShader.uniforms.thickness%2C2*s)%3Blet%20r%3D%5Bt%5B0%5D%2Ct%5B1%5D-s%2Ct%5B0%5D%2Ct%5B1%5D%2Bs%5D%3Be.uniform4fv(this.lineShader.uniforms.startXYendXY%2Cr)%2Ce.drawArrays(e.TRIANGLE_STRIP%2C0%2C4)%2Cr%3D%5Bt%5B2%5D%2Ct%5B3%5D-s%2Ct%5B2%5D%2Ct%5B3%5D%2Bs%5D%2Ce.uniform4fv(this.lineShader.uniforms.startXYendXY%2Cr)%2Ce.drawArrays(e.TRIANGLE_STRIP%2C0%2C4)%3Blet%20a%3Dthis.canvasPos2frac(%5Bt%5B0%5D%2Ct%5B1%5D%5D)%2Co%3Dthis.canvasPos2frac(%5Bt%5B2%5D%2Ct%5B3%5D%5D)%3Bif(a%5B0%5D%3E%3D0%26%26o%5B0%5D%3E%3D0)%7Bconst%20e%3Dthis.frac2mm(a)%3Ba%3Dn.fromValues(e%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D)%3Bconst%20s%3Dthis.frac2mm(o)%3Bo%3Dn.fromValues(s%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D)%3Bconst%20r%3Dn.create()%3Bn.sub(r%2Ca%2Co)%3Bconst%20l%3Dn.len(r)%3Blet%20h%3D2%3Bl%3E9%26%26(h%3D1)%2Cl%3E99%26%26(h%3D0)%3Bconst%20c%3Dl.toFixed(h)%3Bthis.drawTextBetween(t%2Cc%2C1%2Ci)%7De.bindVertexArray(this.unusedVAO)%7DdrawRect(t%2Ce%3D%5B1%2C0%2C0%2C-1%5D)%7Bif(e%5B3%5D%3C0%26%26(e%3Dthis.opts.crosshairColor)%2C!this.rectShader)throw%20new%20Error(%22rectShader%20undefined%22)%3Bthis.opts.selectionBoxIsOutline%3F(this.drawCircle(t%2Ce%2C.1)%2Cthis.rectOutlineShader.use(this.gl)%2Cthis.gl.enable(this.gl.BLEND)%2Cthis.gl.uniform1f(this.rectOutlineShader.uniforms.thickness%2Cthis.opts.selectionBoxLineThickness)%2Cthis.gl.uniform4fv(this.rectOutlineShader.uniforms.lineColor%2Ce)%2Cthis.gl.uniform2fv(this.rectOutlineShader.uniforms.canvasWidthHeight%2C%5Bthis.gl.canvas.width%2Cthis.gl.canvas.height%5D)%2Cthis.gl.uniform4f(this.rectOutlineShader.uniforms.leftTopWidthHeight%2Ct%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2Ct%5B3%5D)%2Cthis.gl.bindVertexArray(this.genericVAO)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%2Cthis.gl.bindVertexArray(this.unusedVAO))%3A(this.rectShader.use(this.gl)%2Cthis.gl.enable(this.gl.BLEND)%2Cthis.gl.uniform4fv(this.rectShader.uniforms.lineColor%2Ce)%2Cthis.gl.uniform2fv(this.rectShader.uniforms.canvasWidthHeight%2C%5Bthis.gl.canvas.width%2Cthis.gl.canvas.height%5D)%2Cthis.gl.uniform4f(this.rectShader.uniforms.leftTopWidthHeight%2Ct%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2Ct%5B3%5D)%2Cthis.gl.bindVertexArray(this.genericVAO)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%2Cthis.gl.bindVertexArray(this.unusedVAO))%7DdrawCircle(t%2Ce%3Dthis.opts.fontColor%2Ci%3D1)%7Bif(!this.circleShader)throw%20new%20Error(%22circleShader%20undefined%22)%3Bthis.circleShader.use(this.gl)%2Cthis.gl.enable(this.gl.BLEND)%2Cthis.gl.uniform4fv(this.circleShader.uniforms.circleColor%2Ce)%2Cthis.gl.uniform2fv(this.circleShader.uniforms.canvasWidthHeight%2C%5Bthis.gl.canvas.width%2Cthis.gl.canvas.height%5D)%2Cthis.gl.uniform4f(this.circleShader.uniforms.leftTopWidthHeight%2Ct%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2Ct%5B3%5D)%2Cthis.gl.uniform1f(this.circleShader.uniforms.fillPercent%2Ci)%2Cthis.gl.uniform4fv(this.circleShader.uniforms.circleColor%2Ce)%2Cthis.gl.bindVertexArray(this.genericVAO)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%2Cthis.gl.bindVertexArray(this.unusedVAO)%7DdrawSelectionBox(t)%7B6!%3D%3Dthis.opts.dragMode%3Fthis.drawRect(t%2Cthis.opts.selectionBoxColor)%3Athis.drawCircle(t%2Cthis.opts.selectionBoxColor%2C.1)%7DeffectiveCanvasHeight()%7Breturn%20this.gl.canvas.height-this.colorbarHeight%7DeffectiveCanvasWidth()%7Breturn%20this.gl.canvas.width-this.getLegendPanelWidth()%7DgetAllLabels()%7Bconst%20t%3Dthis.meshes.filter((t%3D%3E%22connectome%22%3D%3D%3Dt.type)).flatMap((t%3D%3Et.nodes)).map((t%3D%3Et.label)).filter((t%3D%3Evoid%200!%3D%3Dt))%3Breturn%5B...this.document.labels%2C...t%5D%7DgetConnectomeLabels()%7Bconst%20t%3Dthis.meshes.filter((t%3D%3E%22connectome%22%3D%3D%3Dt.type)).flatMap((t%3D%3Et.nodes)).map((t%3D%3Et.label)).filter((t%3D%3Evoid%200!%3D%3Dt))%2Ce%3Dthis.document.labels.filter((t%3D%3Enull%3D%3Dt.anchor%7C%7C0%3D%3D%3Dt.anchor))%2Ci%3Dnew%20Set(t)%3Bfor(const%20t%20of%20e)i.add(t)%3Breturn%20Array.from(i)%7DgetBulletMarginWidth()%7Blet%20t%3D0%3Bconst%20e%3Dthis.getConnectomeLabels()%3Bif(0%3D%3D%3De.length)return%200%3Bconst%20i%3D1%3D%3D%3De.length%3Fe%5B0%5D.style.bulletScale%3Ae.reduce(((t%2Ce)%3D%3Et.style.bulletScale%3Ee.style.bulletScale%3Ft%3Ae)).style.bulletScale%2Cs%3D1%3D%3D%3De.length%3Fe%5B0%5D%3Ae.reduce(((t%2Ce)%3D%3E%7Bconst%20i%3Dthis.opts.textHeight*this.gl.canvas.height*t.style.textScale%2Cs%3Dthis.opts.textHeight*this.gl.canvas.height*e.style.textScale%3Breturn%20this.textHeight(i%2Ct.text)%3Ethis.textHeight(s%2Ce.text)%3Ft%3Ae%7D))%2Cn%3Dthis.opts.textHeight*this.gl.canvas.height*s.style.textScale%3Breturn%20t%3Dthis.textHeight(n%2Cs.text)*i%2Ct%2B%3Dn%2Ct%7DgetLegendPanelWidth()%7Bconst%20t%3Dthis.getConnectomeLabels()%3Bif(!this.opts.showLegend%7C%7C0%3D%3D%3Dt.length)return%200%3Bconst%20e%3Dthis.opts.textHeight*this.gl.canvas.height*1%3Blet%20i%3D0%3Bconst%20s%3Dt.reduce(((t%2Ce)%3D%3E%7Bconst%20i%3Dthis.opts.textHeight*this.gl.canvas.height*t.style.textScale%2Cs%3Dthis.opts.textHeight*this.gl.canvas.height*e.style.textScale%3Breturn%20this.textWidth(i%2Ct.text)%3Ethis.textWidth(s%2Ce.text)%3Ft%3Ae%7D))%2Cn%3Dthis.opts.textHeight*this.gl.canvas.height*s.style.textScale%2Cr%3Dthis.textWidth(n%2Cs.text)%2Ca%3Dthis.getBulletMarginWidth()%3Breturn%20r%26%26(i%3Da%2Br%2Ci%2B%3D2*e)%2Ci%3E%3Dthis.gl.canvas.width%3F0%3Ai%7DgetLegendPanelHeight()%7Bconst%20t%3Dthis.getConnectomeLabels()%3Blet%20e%3D0%3Bconst%20i%3Dthis.opts.textHeight*this.gl.canvas.height*1%3Bfor(const%20i%20of%20t)%7Bconst%20t%3Dthis.opts.textHeight*this.gl.canvas.height*i.style.textScale%3Be%2B%3Dthis.textHeight(t%2Ci.text)%7Dreturn%20e%26%26(e%2B%3Di%2F2*(t.length%2B1))%2Ce%7DreserveColorbarPanel()%7Blet%20t%3DMath.max(this.opts.textHeight%2C.01)%3Bt*%3DMath.min(this.gl.canvas.height%2Cthis.gl.canvas.width)%3Bconst%20e%3D3*t%2Ci%3D%5B0%2Cthis.gl.canvas.height-e%2Cthis.gl.canvas.width%2Ce%5D%3Breturn%20this.colorbarHeight%3Di%5B3%5D%2B1%2Ci%7DdrawColorbarCore(t%3D0%2Ce%3D%5B0%2C0%2C0%2C0%5D%2Ci%3D!1%2Cs%3D0%2Cn%3D1%2Cr)%7Bif(e%5B2%5D%3C%3D0%7C%7Ce%5B3%5D%3C%3D0)return%3Blet%20a%3DMath.max(this.opts.textHeight%2C.01)%3Ba*%3DMath.min(this.gl.canvas.height%2Cthis.gl.canvas.width)%3Blet%20o%3Da%3Bconst%20l%3D3*a%3Blet%20h%3Da%3Bif(e%5B3%5D%3Cl)%7Bif(e%5B3%5D%3C3)return%3Bo%3D1%2Ch%3De%5B3%5D-2%7Dthis.gl.disable(this.gl.DEPTH_TEST)%2Cthis.colorbarHeight%3De%5B3%5D%2B1%3Bconst%20c%3D%5Be%5B0%5D%2Bo%2Ce%5B1%5D%2Ce%5B2%5D-2*o%2Ch%5D%2Cd%3D%5Bc%5B0%5D-1%2Cc%5B1%5D-1%2Cc%5B2%5D%2B2%2Cc%5B3%5D%2B2%5D%3Bif(this.drawRect(d%2Cthis.opts.crosshairColor)%2C!this.colorbarShader)throw%20new%20Error(%22colorbarShader%20undefined%22)%3Bthis.colorbarShader.use(this.gl)%2Cthis.gl.activeTexture(Ui)%2Cthis.gl.bindTexture(this.gl.TEXTURE_2D%2Cthis.colormapTexture)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_MIN_FILTER%2Cthis.gl.NEAREST)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_MAG_FILTER%2Cthis.gl.NEAREST)%3Bconst%20m%3Dt%3Bif(this.gl.uniform1f(this.colorbarShader.uniforms.layer%2Cm)%2Cthis.gl.uniform2fv(this.colorbarShader.uniforms.canvasWidthHeight%2C%5Bthis.gl.canvas.width%2Cthis.gl.canvas.height%5D)%2Cthis.gl.disable(this.gl.CULL_FACE)%2Ci)%7Bconst%20t%3D%5Bc%5B0%5D%2Bc%5B2%5D%2Cc%5B1%5D%2C-c%5B2%5D%2Cc%5B3%5D%5D%3Bthis.gl.uniform4fv(this.colorbarShader.uniforms.leftTopWidthHeight%2Ct)%7Delse%20this.gl.uniform4fv(this.colorbarShader.uniforms.leftTopWidthHeight%2Cc)%3Bthis.gl.bindVertexArray(this.genericVAO)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%2Cthis.gl.bindVertexArray(this.unusedVAO)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_MIN_FILTER%2Cthis.gl.LINEAR)%2Cthis.gl.texParameteri(this.gl.TEXTURE_2D%2Cthis.gl.TEXTURE_MAG_FILTER%2Cthis.gl.LINEAR)%3Blet%20u%3D0%3Bif(r%26%26n%3C0%26%26i%3F(u%3Dn%2Cn%3D0)%3Ar%26%26s%3E0%26%26(u%3Ds%2Cs%3D0)%2Cs%3D%3D%3Dn%7C%7Ca%3C1)return%3Bconst%20A%3DMath.abs(n-s)%3Blet%5Bf%2Cg%5D%3Dvi(s%2Cn)%3Bg%3Cs%26%26(g%2B%3Df)%3Blet%20p%3Dg%3Bconst%20v%3D%5B0%2Cc%5B1%5D%2Bc%5B3%5D-.5*a%2C2%2C.75*a%5D%2Cx%3Dv%5B1%5D%2Bv%5B3%5D%3Bfor(%3Bp%3C%3Dn%3B)%7Bv%5B0%5D%3Dc%5B0%5D%2B(p-s)%2FA*c%5B2%5D%2Cthis.drawRect(v)%3Bconst%20t%3D(1*p).toFixed(6).replace(%2F%5C.%3F0*%24%2F%2C%22%22)%3Bthis.drawTextBelow(%5Bv%5B0%5D%2Cx%5D%2Ct)%2Cp%2B%3Df%7Dif(0!%3D%3Du)%7Bconst%20t%3D%5Bc%5B0%5D%2B(u-s)%2FA*c%5B2%5D%2Cc%5B1%5D-.25*c%5B3%5D%2C2%2C1.5*c%5B3%5D%5D%3Bthis.drawRect(t)%7D%7DdrawColorbar()%7Bconst%20t%3Dthis.colormapLists%2Ce%3Dt.length%3Bif(e%3C1)return%3Blet%20i%3D0%3Bfor(let%20s%3D0%3Bs%3Ce%3Bs%2B%2B)t%5Bs%5D.visible%26%26i%2B%2B%3Bif(i%3C1)return%3Blet%20s%3Dthis.reserveColorbarPanel()%2Cn%3DMath.max(this.opts.textHeight%2C.01)%3Bn*%3DMath.min(this.gl.canvas.height%2Cthis.gl.canvas.width)%3Bconst%20r%3D3*n%3Blet%20a%3Ds%5B2%5D%2Fi%3B(s%5B2%5D%3C%3D0%7C%7Cs%5B3%5D%3C%3D0)%26%26(a%3Dthis.gl.canvas.width%2Fi%2Cs%3D%5B0%2Cthis.gl.canvas.height-r%2Ca%2Cr%5D)%2Cs%5B2%5D%3Da%3Bfor(let%20i%3D0%3Bi%3Ce%3Bi%2B%2B)t%5Bi%5D.visible%26%26(this.drawColorbarCore(i%2Cs%2Ct%5Bi%5D.negative%2Ct%5Bi%5D.min%2Ct%5Bi%5D.max%2Ct%5Bi%5D.alphaThreshold)%2Cs%5B0%5D%2B%3Da)%7DtextWidth(t%2Ce)%7Bif(!e)return%200%3Blet%20i%3D0%3Bconst%20s%3D(new%20TextEncoder).encode(e)%3Bfor(let%20n%3D0%3Bn%3Ce.length%3Bn%2B%2B)i%2B%3Dt*this.fontMets.mets%5Bs%5Bn%5D%5D.xadv%3Breturn%20i%7DtextHeight(t%2Ce)%7Bif(!e)return%200%3Bconst%20i%3Dnew%20Set(Array.from(e))%2Cs%3D(new%20TextEncoder).encode(Array.from(i).join(%22%22))%3Breturn%20t*Object.values(this.fontMets.mets).filter(((t%2Ce)%3D%3Es.includes(e))).reduce(((t%2Ce)%3D%3Et.lbwh%5B3%5D%3Ee.lbwh%5B3%5D%3Ft%3Ae)).lbwh%5B3%5D%7DdrawChar(t%2Ce%2Ci)%7Bif(!this.fontShader)throw%20new%20Error(%22fontShader%20undefined%22)%3Bconst%20s%3Dthis.fontMets.mets%5Bi%5D%2Cn%3Dt%5B0%5D%2Be*s.lbwh%5B0%5D%2Cr%3D-e*s.lbwh%5B1%5D%2Ca%3De*s.lbwh%5B2%5D%2Co%3De*s.lbwh%5B3%5D%2Cl%3Dt%5B1%5D%2B(r-o)%2Be%3Breturn%20this.gl.uniform4f(this.fontShader.uniforms.leftTopWidthHeight%2Cn%2Cl%2Ca%2Co)%2Cthis.gl.uniform4fv(this.fontShader.uniforms.uvLeftTopWidthHeight%2Cs.uv_lbwh)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%2Ce*s.xadv%7DdrawLoadingText(t)%7Bif(!this.canvas)throw%20new%20Error(%22canvas%20undefined%22)%3Bthis.gl.viewport(0%2C0%2Cthis.gl.canvas.width%2Cthis.gl.canvas.height)%2Cthis.gl.enable(this.gl.CULL_FACE)%2Cthis.gl.enable(this.gl.BLEND)%2Cthis.drawTextBelow(%5Bthis.canvas.width%2F2%2Cthis.canvas.height%2F2%5D%2Ct%2C3)%7DdrawText(t%2Ce%2Ci%3D1%2Cs%3Dnull)%7Bif(this.opts.textHeight%3C%3D0)return%3Bif(!this.fontShader)throw%20new%20Error(%22fontShader%20undefined%22)%3Bthis.fontShader.use(this.gl)%3Bconst%20n%3Dthis.opts.textHeight*Math.min(this.gl.canvas.height%2Cthis.gl.canvas.width)*i%3Bthis.gl.enable(this.gl.BLEND)%2Cthis.gl.uniform2f(this.fontShader.uniforms.canvasWidthHeight%2Cthis.gl.canvas.width%2Cthis.gl.canvas.height)%2Cnull%3D%3D%3Ds%26%26(s%3Dthis.opts.fontColor)%2Cthis.gl.uniform4fv(this.fontShader.uniforms.fontColor%2Cs)%3Blet%20r%3Dn%2Fthis.fontMets.size*this.fontMets.distanceRange%3Br%3DMath.max(r%2C1)%2Cthis.gl.uniform1f(this.fontShader.uniforms.screenPxRange%2Cr)%3Bconst%20a%3D(new%20TextEncoder).encode(e)%3Bthis.gl.bindVertexArray(this.genericVAO)%3Bfor(let%20i%3D0%3Bi%3Ce.length%3Bi%2B%2B)t%5B0%5D%2B%3Dthis.drawChar(t%2Cn%2Ca%5Bi%5D)%3Bthis.gl.bindVertexArray(this.unusedVAO)%7DdrawTextRight(t%2Ce%2Ci%3D1%2Cs%3Dnull)%7Bthis.opts.textHeight%3C%3D0%7C%7C(t%5B1%5D-%3D.5*this.opts.textHeight*this.gl.canvas.height%2Cthis.drawText(t%2Ce%2Ci%2Cs))%7DdrawTextLeft(t%2Ce%2Ci%3D1%2Cs%3Dnull)%7Bif(this.opts.textHeight%3C%3D0)return%3Bconst%20n%3Dthis.opts.textHeight*this.gl.canvas.height*i%3Bt%5B0%5D-%3Dthis.textWidth(n%2Ce)%2Ct%5B1%5D-%3D.5*n%2Cthis.drawText(t%2Ce%2Ci%2Cs)%7DdrawTextRightBelow(t%2Ce%2Ci%3D1%2Cs%3Dnull)%7Bthis.opts.textHeight%3C%3D0%7C%7Cthis.drawText(t%2Ce%2Ci%2Cs)%7DdrawTextBetween(t%2Ce%2Ci%3D1%2Cs%3Dnull)%7Bif(this.opts.textHeight%3C%3D0)return%3Bconst%20n%3D%5B.5*(t%5B0%5D%2Bt%5B2%5D)%2C.5*(t%5B1%5D%2Bt%5B3%5D)%5D%2Cr%3Dthis.opts.textHeight*this.gl.canvas.height*i%2Ca%3Dthis.textWidth(r%2Ce)%3Bn%5B0%5D-%3D.5*a%2Cn%5B1%5D-%3D.5*r%3Bconst%20o%3D%5Bn%5B0%5D-1%2Cn%5B1%5D-1%2Ca%2B2%2Cr%2B2%5D%3Blet%20l%3Ds%3Bnull%3D%3D%3Dl%26%26(l%3Dthis.opts.crosshairColor)%2Cl%3Dl%26%26l%5B0%5D%2Bl%5B1%5D%2Bl%5B2%5D%3E.8%3F%5B0%2C0%2C0%2C.5%5D%3A%5B1%2C1%2C1%2C.5%5D%2Cthis.drawRect(o%2Cl)%2Cthis.drawText(n%2Ce%2Ci%2Cs)%7DdrawTextBelow(t%2Ce%2Ci%3D1%2Cs%3Dnull)%7Bif(this.opts.textHeight%3C%3D0)return%3Bif(!this.canvas)throw%20new%20Error(%22canvas%20undefined%22)%3Blet%20n%3Dthis.opts.textHeight*this.gl.canvas.height*i%2Cr%3Dthis.textWidth(n%2Ce)%3Br%3Ethis.canvas.width%26%26(i*%3D(this.canvas.width-2)%2Fr%2Cn%3Dthis.opts.textHeight*this.gl.canvas.height*i%2Cr%3Dthis.textWidth(n%2Ce))%2Ct%5B0%5D-%3D.5*this.textWidth(n%2Ce)%2Ct%5B0%5D%3DMath.max(t%5B0%5D%2C1)%2Ct%5B0%5D%3DMath.min(t%5B0%5D%2Cthis.canvas.width-r-1)%2Cthis.drawText(t%2Ce%2Ci%2Cs)%7DupdateInterpolation(t%2Ce%3D!1)%7Blet%20i%3Dthis.gl.LINEAR%3B!e%26%26this.opts.isNearestInterpolation%26%26(i%3Dthis.gl.NEAREST)%2C0%3D%3D%3Dt%3Fthis.gl.activeTexture(Bi)%3Athis.gl.activeTexture(Ri)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_MIN_FILTER%2Ci)%2Cthis.gl.texParameteri(this.gl.TEXTURE_3D%2Cthis.gl.TEXTURE_MAG_FILTER%2Ci)%7DsetAtlasOutline(t)%7Bthis.opts.atlasOutline%3Dt%2Cthis.updateGLVolume()%2Cthis.drawScene()%7DsetInterpolation(t)%7Bthis.opts.isNearestInterpolation%3Dt%3Bconst%20e%3Dthis.volumes.length%3Bif(!(e%3C1))%7Bfor(let%20t%3D0%3Bt%3Ce%3Bt%2B%2B)this.updateInterpolation(t)%3Bthis.drawScene()%7D%7DcalculateMvpMatrix2D(t%2Ce%2Cs%2Cr%3D1%2F0%2Ca%3D0%2Co%3D0%2Cl%3D0%2Ch)%7Bthis.gl.viewport(t%5B0%5D%2Cthis.gl.canvas.height-(t%5B1%5D%2Bt%5B3%5D)%2Ct%5B2%5D%2Ct%5B3%5D)%3Blet%20c%3De%5B0%5D%2Cd%3Ds%5B0%5D%2Cm%3D%5Bc%2Ce%5B1%5D%5D%2Cu%3D%5Bd-c%2Cs%5B1%5D-e%5B1%5D%5D%3Bh%26%26(m%3D%5Bs%5B0%5D%2Ce%5B1%5D%5D%2Cu%3D%5Be%5B0%5D-s%5B0%5D%2Cs%5B1%5D-e%5B1%5D%5D%2Cc%3D-s%5B0%5D%2Cd%3D-e%5B0%5D)%3Bconst%20A%3D2*Math.max(Math.abs(e%5B2%5D)%2CMath.abs(s%5B2%5D))%2Cf%3Di.create()%3Blet%20g%3D.01%2Cp%3D8*A%3Bif(r!%3D%3D1%2F0)%7Blet%20t%3Dh%3B0!%3D%3Dl%7C%7C0!%3D%3Do%26%26180!%3D%3Do%7C%7C(t%3D!t)%3Blet%20e%3D1.8*A-a%3Bt%7C%7C(e%3D1.8*A%2Ba)%2Cg%3De-r%2Cp%3De%2Br%7Di.ortho(f%2Cc%2Cd%2Ce%5B1%5D%2Cs%5B1%5D%2Cg%2Cp)%3Bconst%20v%3Di.create()%3Bv%5B0%5D%3D-1%3Bconst%20x%3Dn.fromValues(0%2C0%2C1.8*-A)%3Bi.translate(v%2Cv%2Cx)%2Ci.rotateX(v%2Cv%2Cxi(270-l))%2Ci.rotateZ(v%2Cv%2Cxi(o-180))%3Bconst%20w%3Di.create()%3Bi.invert(w%2Cv)%3Bconst%20C%3Di.create()%3Bi.transpose(C%2Cw)%3Bconst%20b%3Di.create()%3Breturn%20i.multiply(b%2Cf%2Cv)%2C%7BmodelViewProjectionMatrix%3Ab%2CmodelMatrix%3Av%2CnormalMatrix%3AC%2CleftTopMM%3Am%2CfovMM%3Au%7D%7DswizzleVec3MM(t%2Ce)%7Breturn%201%3D%3D%3De%3Ft%3DCi(t%2C%5B0%2C2%2C1%5D)%3A2%3D%3D%3De%26%26(t%3DCi(t%2C%5B1%2C2%2C0%5D))%2Ct%7DscreenFieldOfViewVox(t%3D0)%7Bconst%20e%3Dn.clone(this.volumeObject3D.fieldOfViewDeObliqueMM)%3Breturn%20this.swizzleVec3MM(e%2Ct)%7DscreenFieldOfViewMM(t%3D0%2Ce%3D!1)%7Bif(!e%26%26!this.opts.isSliceMM)return%20this.screenFieldOfViewVox(t)%3Bconst%20i%3Dthis.volumeObject3D.extentsMin%2Cs%3Dthis.volumeObject3D.extentsMax%3Blet%20r%3Dn.fromValues(i%5B0%5D%2Ci%5B1%5D%2Ci%5B2%5D)%2Ca%3Dn.fromValues(s%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D)%3Br%3Dthis.swizzleVec3MM(r%2Ct)%2Ca%3Dthis.swizzleVec3MM(a%2Ct)%3Bconst%20o%3Dn.create()%3Breturn%20n.subtract(o%2Ca%2Cr)%2Co%7DscreenFieldOfViewExtendedVox(t%3D0)%7Bconst%20e%3Dthis.volumes%5B0%5D.extentsMinOrtho%2Cs%3Dthis.volumes%5B0%5D.extentsMaxOrtho%3Blet%20r%3Dn.fromValues(e%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D)%2Ca%3Dn.fromValues(s%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D)%3Bconst%20o%3Di.create()%3Br%3Dthis.swizzleVec3MM(r%2Ct)%2Ca%3Dthis.swizzleVec3MM(a%2Ct)%3Bconst%20l%3Dn.create()%3Breturn%20n.subtract(l%2Ca%2Cr)%2C%7BmnMM%3Ar%2CmxMM%3Aa%2Crotation%3Ao%2CfovMM%3Al%7D%7DscreenFieldOfViewExtendedMM(t%3D0)%7Bif(!this.volumeObject3D)throw%20new%20Error(%22volumeObject3D%20undefined%22)%3Bconst%20e%3Dthis.volumeObject3D.extentsMin%2Cs%3Dthis.volumeObject3D.extentsMax%3Blet%20r%3Dn.fromValues(e%5B0%5D%2Ce%5B1%5D%2Ce%5B2%5D)%2Ca%3Dn.fromValues(s%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D)%3Bconst%20o%3Di.create()%3Br%3Dthis.swizzleVec3MM(r%2Ct)%2Ca%3Dthis.swizzleVec3MM(a%2Ct)%3Bconst%20l%3Dn.create()%3Breturn%20n.subtract(l%2Ca%2Cr)%2C%7BmnMM%3Ar%2CmxMM%3Aa%2Crotation%3Ao%2CfovMM%3Al%7D%7DdrawSliceOrientationText(t%2Ce%2Ci%3D%5BNaN%2CNaN%5D)%7Bthis.gl.viewport(0%2C0%2Cthis.gl.canvas.width%2Cthis.gl.canvas.height)%3Blet%20s%3D%22S%22%3B0%3D%3D%3De%26%26(s%3D%22A%22)%3Blet%20n%3Dthis.opts.isRadiologicalConvention%3F%22R%22%3A%22L%22%3Bif(2%3D%3D%3De%26%26(n%3Dthis.opts.sagittalNoseLeft%3F%22A%22%3A%22P%22)%2Cthis.opts.isCornerOrientationText)return%20void%20this.drawTextRightBelow(%5Bt%5B0%5D%2Ct%5B1%5D%5D%2Cn%2Bs)%3Blet%20r%3D!0%2Ca%3D!0%3Bif(!isNaN(i%5B0%5D))%7Bconst%20e%3Dthis.opts.textHeight*this.gl.canvas.height%2B2%3Bi%5B1%5D%3Ee%26%26(this.drawTextBelow(%5Bt%5B0%5D%2B.5*t%5B2%5D%2Ct%5B1%5D%2Bi%5B1%5D-e%5D%2Cs)%2Cr%3D!1)%3Bconst%20o%3Dthis.textWidth(e%2Cn)%2B2%3Bi%5B0%5D%3Eo%26%26(this.drawTextRight(%5Bt%5B0%5D%2Bi%5B0%5D-o%2Ct%5B1%5D%2B.5*t%5B3%5D%5D%2Cn)%2Ca%3D!1)%7Dr%26%26this.drawTextBelow(%5Bt%5B0%5D%2B.5*t%5B2%5D%2Ct%5B1%5D%5D%2Cs)%2Ca%26%26this.drawTextRight(%5Bt%5B0%5D%2Ct%5B1%5D%2B.5*t%5B3%5D%5D%2Cn)%7DxyMM2xyzMM(t%2Ce)%7Blet%20i%3D2%3B1%3D%3D%3Dt%26%26(i%3D1)%2C2%3D%3D%3Dt%26%26(i%3D0)%3Blet%20s%3D%5B0%2C0%2C0%5D%2Cr%3D%5B1%2C1%2C0%5D%2Ca%3D%5B1%2C0%2C1%5D%3Bs%5Bi%5D%3De%2Cr%5Bi%5D%3De%2Ca%5Bi%5D%3De%2Cs%3Dthis.frac2mm(s)%2Cr%3Dthis.frac2mm(r)%2Ca%3Dthis.frac2mm(a)%2Cs%3Dthis.swizzleVec3MM(n.fromValues(s%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D)%2Ct)%2Cr%3Dthis.swizzleVec3MM(n.fromValues(r%5B0%5D%2Cr%5B1%5D%2Cr%5B2%5D)%2Ct)%2Ca%3Dthis.swizzleVec3MM(n.fromValues(a%5B0%5D%2Ca%5B1%5D%2Ca%5B2%5D)%2Ct)%3Bconst%20o%3D(r%5B0%5D-s%5B0%5D)*(a%5B1%5D-s%5B1%5D)-(a%5B0%5D-s%5B0%5D)*(r%5B1%5D-s%5B1%5D)%3Blet%20l%3D(r%5B0%5D-s%5B0%5D)*(a%5B2%5D-s%5B2%5D)-(a%5B0%5D-s%5B0%5D)*(r%5B2%5D-s%5B2%5D)%3Bl%2F%3Do%3Blet%20h%3D(r%5B1%5D-s%5B1%5D)*(a%5B2%5D-s%5B2%5D)-(a%5B1%5D-s%5B1%5D)*(r%5B2%5D-s%5B2%5D)%3Bh%2F%3Do%3Bconst%20c%3D%5B0%2C0%2C0%2C0%2C0%5D%3Breturn%20c%5B0%5D%3Ds%5B0%5D%2Cc%5B1%5D%3Ds%5B1%5D%2Cc%5B2%5D%3Ds%5B2%5D%2Cc%5B3%5D%3Dh%2Cc%5B4%5D%3Dl%2Cc%7Ddraw2DMain(t%2Ce%2Cs%3DNaN)%7Blet%20r%3Dthis.volumes%5B0%5D.frac2mm.slice()%2Ca%3Dthis.screenFieldOfViewExtendedMM(e)%2Co%3Di.create()%3Bthis.opts.isSliceMM%7C%7C(r%3Dthis.volumes%5B0%5D.frac2mmOrtho.slice()%2Co%3Di.clone(this.volumes%5B0%5D.mm2ortho)%2Ca%3Dthis.screenFieldOfViewExtendedVox(e))%3Blet%20l%3Dthis.opts.isRadiologicalConvention%26%26e%3C2%3Bs%3D%3D%3D1%2F0%7C%7Cs%3D%3D%3D-1%2F0%3F(l%3Ds!%3D%3D1%2F0%2C1%3D%3D%3De%26%26(l%3D!l))%3Athis.opts.sagittalNoseLeft%26%262%3D%3D%3De%26%26(l%3D!l)%3Blet%20h%3D0%2Cc%3D0%3B2%3D%3D%3De%3Fc%3Dl%3F90%3A-90%3A1%3D%3D%3De%3Fc%3Dl%3F180%3A0%3A(c%3Dl%3F180%3A0%2Ch%3Dl%3F-90%3A90)%3Bconst%20d%3Dthis.gl%3Blet%20m%3D!1%3Bif(0%3D%3D%3Dt%5B2%5D%7C%7C0%3D%3D%3Dt%5B3%5D)%7Bm%3D!0%3Bconst%20e%3Dd.canvas.width%2Fa.fovMM%5B0%5D%2Ci%3Dd.canvas.height%2Fa.fovMM%5B1%5D%2Cs%3DMath.min(e%2Ci)%2Cn%3De%2Fs%2Cr%3Di%2Fs%3Ba.fovMM%5B0%5D*%3Dn%2Ca.fovMM%5B1%5D*%3Dr%3Blet%20o%3D.5*(a.mnMM%5B0%5D%2Ba.mxMM%5B0%5D)%3Ba.mnMM%5B0%5D%3Do-.5*a.fovMM%5B0%5D%2Ca.mxMM%5B0%5D%3Do%2B.5*a.fovMM%5B0%5D%2Co%3D.5*(a.mnMM%5B1%5D%2Ba.mxMM%5B1%5D)%2Ca.mnMM%5B1%5D%3Do-.5*a.fovMM%5B1%5D%2Ca.mxMM%5B1%5D%3Do%2B.5*a.fovMM%5B1%5D%2Ct%3D%5B0%2C0%2Cd.canvas.width%2Cd.canvas.height%5D%7Dif(isNaN(s))%7Bconst%20t%3Dthis.scene.pan2Dxyzmm%2Ci%3Dthis.swizzleVec3MM(n.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D)%2Ce)%2Cs%3Dthis.scene.pan2Dxyzmm%5B3%5D%3Ba.mnMM%5B0%5D-%3Di%5B0%5D%2Ca.mxMM%5B0%5D-%3Di%5B0%5D%2Ca.mnMM%5B1%5D-%3Di%5B1%5D%2Ca.mxMM%5B1%5D-%3Di%5B1%5D%2Ca.mnMM%5B0%5D%2F%3Ds%2Ca.mxMM%5B0%5D%2F%3Ds%2Ca.mnMM%5B1%5D%2F%3Ds%2Ca.mxMM%5B1%5D%2F%3Ds%7Dlet%20u%3D2%3B1%3D%3D%3De%26%26(u%3D1)%2C2%3D%3D%3De%26%26(u%3D0)%3Blet%20A%3Dthis.scene.crosshairPos%5Bu%5D%2Cf%3Dthis.frac2mm(this.scene.crosshairPos)%3Bif(!isNaN(s)%26%26s!%3D%3D1%2F0%26%26s!%3D%3D-1%2F0)%7Bf%3Dthis.frac2mm(%5B.5%2C.5%2C.5%5D)%2Cf%5Bu%5D%3Ds%3BA%3Dthis.mm2frac(f)%5Bu%5D%7Dconst%20g%3Df%5Bu%5D%3Bd.clear(d.DEPTH_BUFFER_BIT)%3Blet%20p%3Dthis.calculateMvpMatrix2D(t%2Ca.mnMM%2Ca.mxMM%2C1%2F0%2C0%2Cc%2Ch%2Cl)%3Bif(s%3D%3D%3D1%2F0%7C%7Cs%3D%3D%3D-1%2F0)%7Bconst%20i%3Dt.slice()%3Bthis.draw3D(t%2Cp.modelViewProjectionMatrix%2Cp.modelMatrix%2Cp.normalMatrix%2Cc%2Ch)%3Bconst%20s%3Dthis.screenSlices%5Bthis.screenSlices.length-1%5D%3Breturn%20s.leftTopWidthHeight%3Di%2Cs.axCorSag%3De%2Cs.sliceFrac%3D1%2F0%2Cs.AxyzMxy%3Dthis.xyMM2xyzMM(e%2CA)%2Cs.leftTopMM%3Dp.leftTopMM%2Cvoid(s.fovMM%3Dp.fovMM)%7Dd.enable(d.DEPTH_TEST)%2Cd.blendFunc(d.SRC_ALPHA%2Cd.ONE_MINUS_SRC_ALPHA)%2Cd.disable(d.BLEND)%2Cd.depthFunc(d.GREATER)%2Cd.disable(d.CULL_FACE)%3Blet%20v%3Dthis.sliceMMShader%3Bif(this.opts.isV1SliceShader%26%26(v%3Dthis.sliceV1Shader)%2C!v)throw%20new%20Error(%22slice%20Shader%20undefined%22)%3Bif(v.use(this.gl)%2Cd.uniform1f(v.uniforms.overlayOutlineWidth%2Cthis.overlayOutlineWidth)%2Cd.uniform1f(v.uniforms.overlayAlphaShader%2Cthis.overlayAlphaShader)%2Cd.uniform1i(v.uniforms.isAlphaClipDark%2Cthis.isAlphaClipDark%3F1%3A0)%2Cd.uniform1i(v.uniforms.backgroundMasksOverlays%2Cthis.backgroundMasksOverlays)%2Cd.uniform1f(v.uniforms.drawOpacity%2Cthis.drawOpacity)%2Cd.enable(d.BLEND)%2Cd.blendFunc(d.SRC_ALPHA%2Cd.ONE_MINUS_SRC_ALPHA)%2Cd.uniform1f(v.uniforms.opacity%2Cthis.volumes%5B0%5D.opacity)%2Cd.uniform1i(v.uniforms.axCorSag%2Ce)%2Cd.uniform1f(v.uniforms.slice%2CA)%2Cd.uniformMatrix4fv(v.uniforms.frac2mm%2C!1%2Cr)%2Cd.uniformMatrix4fv(v.uniforms.mvpMtx%2C!1%2Cp.modelViewProjectionMatrix.slice())%2Cd.bindVertexArray(this.genericVAO)%2Cd.drawArrays(d.TRIANGLE_STRIP%2C0%2C4)%2Cd.bindVertexArray(this.unusedVAO)%2Cthis.screenSlices.push(%7BleftTopWidthHeight%3At%2CaxCorSag%3Ae%2CsliceFrac%3AA%2CAxyzMxy%3Athis.xyMM2xyzMM(e%2CA)%2CleftTopMM%3Ap.leftTopMM%2Cscreen2frac%3A%5B%5D%2CfovMM%3Ap.fovMM%7D)%2CisNaN(s)%26%26this.drawCrosshairs3D(!0%2C1%2Cp.modelViewProjectionMatrix%2C!0%2Cthis.opts.isSliceMM)%2Cthis.opts.meshThicknessOn2D%3E0)%7Bthis.opts.meshThicknessOn2D!%3D%3D1%2F0%26%26(p%3Dthis.calculateMvpMatrix2D(t%2Ca.mnMM%2Ca.mxMM%2Cthis.opts.meshThicknessOn2D%2Cg%2Cc%2Ch%2Cl))%3Bconst%20e%3Di.clone(p.modelViewProjectionMatrix)%3Bi.multiply(e%2Ce%2Co)%2Cthis.drawMesh3D(!0%2C1%2Ce%2Cp.modelMatrix%2Cp.normalMatrix)%7DisNaN(s)%26%26this.drawCrosshairs3D(!1%2C.15%2Cp.modelViewProjectionMatrix%2C!0%2Cthis.opts.isSliceMM)%2Cm%26%26this.drawSliceOrientationText(t%2Ce)%2Cthis.readyForSync%3D!0%7Ddraw2D(t%2Ce%2Ci%3DNaN%2Cs%3D%5BNaN%2CNaN%5D)%7Bconst%20n%3D%5BNaN%2CNaN%5D%3Bif(isNaN(s%5B0%5D))this.draw2DMain(t%2Ce%2Ci)%3Belse%7Bconst%20r%3Dt.slice()%3Bn%5B0%5D%3DMath.floor(.5*(r%5B2%5D-s%5B0%5D))%2Cn%5B1%5D%3DMath.floor(.5*(r%5B3%5D-s%5B1%5D))%2Cr%5B0%5D%2B%3Dn%5B0%5D%2Cr%5B1%5D%2B%3Dn%5B1%5D%2Cr%5B2%5D%3Ds%5B0%5D%2Cr%5B3%5D%3Ds%5B1%5D%2Cthis.draw2DMain(r%2Ce%2Ci)%7Di!%3D%3D1%2F0%26%26i!%3D%3D-1%2F0%26%264!%3D%3De%26%260!%3D%3Dt%5B2%5D%26%260!%3D%3Dt%5B3%5D%26%26this.drawSliceOrientationText(t%2Ce%2Cn)%7DcalculateMvpMatrix(t%2Ce%3D%5B0%2C0%2C0%2C0%5D%2Cs%2Cr)%7B0!%3D%3De%5B2%5D%26%260!%3D%3De%5B3%5D%7C%7C(e%3D%5B0%2C0%2Cthis.gl.canvas.width%2Cthis.gl.canvas.height%5D)%3Bconst%20a%3De%5B2%5D%2Fe%5B3%5D%3Blet%20o%3Dthis.furthestFromPivot%3Bconst%20l%3Dthis.pivot3D%2Ch%3Di.create()%3Bo%3D.8*o%2Fthis.scene.volScaleMultiplier%2Ca%3C1%3Fi.ortho(h%2C-o%2Co%2C-o%2Fa%2Co%2Fa%2C.01*o%2C8*o)%3Ai.ortho(h%2C-o*a%2Co*a%2C-o%2Co%2C.01*o%2C8*o)%3Bconst%20c%3Di.create()%3Bc%5B0%5D%3D-1%3Bconst%20d%3Dn.fromValues(0%2C0%2C1.8*-o)%3Bi.translate(c%2Cc%2Cd)%2Cthis.position%26%26i.translate(c%2Cc%2Cthis.position)%2Ci.rotateX(c%2Cc%2Cxi(270-r))%2Ci.rotateZ(c%2Cc%2Cxi(s-180))%2Ci.translate(c%2Cc%2C%5B-l%5B0%5D%2C-l%5B1%5D%2C-l%5B2%5D%5D)%3Bconst%20m%3Di.create()%3Bi.invert(m%2Cc)%3Bconst%20u%3Di.create()%3Bi.transpose(u%2Cm)%3Bconst%20A%3Di.create()%3Breturn%20i.multiply(A%2Ch%2Cc)%2C%5BA%2Cc%2Cu%5D%7DcalculateModelMatrix(t%2Ce)%7Bif(!this.back)throw%20new%20Error(%22back%20undefined%22)%3Bconst%20s%3Di.create()%3Bif(s%5B0%5D%3D-1%2Ci.rotateX(s%2Cs%2Cxi(270-e))%2Ci.rotateZ(s%2Cs%2Cxi(t-180))%2Cthis.back.obliqueRAS)%7Bconst%20t%3Di.clone(this.back.obliqueRAS)%3Bi.multiply(s%2Cs%2Ct)%7Dreturn%20s%7DcalculateRayDirection(t%2Ce)%7Bconst%20s%3Dthis.calculateModelMatrix(t%2Ce)%2Ca%3Di.fromValues(1%2C0%2C0%2C0%2C0%2C-1%2C0%2C0%2C0%2C0%2C-1%2C0%2C0%2C0%2C0%2C1)%2Co%3Di.create()%3Bi.multiply(o%2Ca%2Cs)%3Bconst%20l%3Di.create()%3Bi.invert(l%2Co)%3Bconst%20h%3Dr.fromValues(0%2C0%2C-1%2C1)%3Br.transformMat4(h%2Ch%2Cl)%3Bconst%20c%3Dn.fromValues(h%5B0%5D%2Ch%5B1%5D%2Ch%5B2%5D)%3Bn.normalize(c%2Cc)%3Bconst%20d%3D5e-5%3Breturn%20Math.abs(c%5B0%5D)%3Cd%26%26(c%5B0%5D%3Dd)%2CMath.abs(c%5B1%5D)%3Cd%26%26(c%5B1%5D%3Dd)%2CMath.abs(c%5B2%5D)%3Cd%26%26(c%5B2%5D%3Dd)%2Cc%7DsceneExtentsMinMax(t%3D!0)%7Blet%20e%3Dn.fromValues(0%2C0%2C0)%2Ci%3Dn.fromValues(0%2C0%2C0)%3Bif(this.volumes.length%3E0)%7Bif(!this.volumeObject3D)throw%20new%20Error(%22volumeObject3D%20undefined%22)%3Be%3Dn.fromValues(this.volumeObject3D.extentsMin%5B0%5D%2Cthis.volumeObject3D.extentsMin%5B1%5D%2Cthis.volumeObject3D.extentsMin%5B2%5D)%2Ci%3Dn.fromValues(this.volumeObject3D.extentsMax%5B0%5D%2Cthis.volumeObject3D.extentsMax%5B1%5D%2Cthis.volumeObject3D.extentsMax%5B2%5D)%2Ct%7C%7C(e%3Dn.fromValues(this.volumes%5B0%5D.extentsMinOrtho%5B0%5D%2Cthis.volumes%5B0%5D.extentsMinOrtho%5B1%5D%2Cthis.volumes%5B0%5D.extentsMinOrtho%5B2%5D)%2Ci%3Dn.fromValues(this.volumes%5B0%5D.extentsMaxOrtho%5B0%5D%2Cthis.volumes%5B0%5D.extentsMaxOrtho%5B1%5D%2Cthis.volumes%5B0%5D.extentsMaxOrtho%5B2%5D))%7Dif(this.meshes.length%3E0)%7Bif(this.volumes.length%3C1)%7Bconst%20t%3Dthis.meshes%5B0%5D.extentsMin%2Cs%3Dthis.meshes%5B0%5D.extentsMax%3Be%3Dn.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D)%2Ci%3Dn.fromValues(s%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D)%7Dfor(let%20t%3D0%3Bt%3Cthis.meshes.length%3Bt%2B%2B)%7Bconst%20s%3Dthis.meshes%5Bt%5D.extentsMin%2Cr%3Dthis.meshes%5Bt%5D.extentsMax%2Ca%3Dn.fromValues(s%5B0%5D%2Cs%5B1%5D%2Cs%5B2%5D)%3Bn.min(e%2Ce%2Ca)%3Bconst%20o%3Dn.fromValues(r%5B0%5D%2Cr%5B1%5D%2Cr%5B2%5D)%3Bn.max(i%2Ci%2Co)%7D%7Dconst%20s%3Dn.create()%3Breturn%20n.subtract(s%2Ci%2Ce)%2C%5Be%2Ci%2Cs%5D%7DsetPivot3D()%7Bconst%5Bt%2Ce%5D%3Dthis.sceneExtentsMinMax()%2Ci%3Dn.create()%3Bn.add(i%2Ct%2Ce)%2Cn.scale(i%2Ci%2C.5)%2Cthis.pivot3D%3D%5Bi%5B0%5D%2Ci%5B1%5D%2Ci%5B2%5D%5D%2Cn.subtract(i%2Ce%2Ct)%2Cthis.extentsMin%3Dt%2Cthis.extentsMax%3De%2Cthis.furthestFromPivot%3D.5*n.length(i)%7DgetMaxVols()%7Bif(this.volumes.length%3C1)return%200%3Blet%20t%3D0%3Bfor(let%20e%3D0%3Be%3Cthis.volumes.length%3Be%2B%2B)t%3DMath.max(t%2Cthis.volumes%5Be%5D.nFrame4D)%3Breturn%20t%7DdetectPartialllyLoaded4D()%7Bif(this.volumes.length%3C1)return!1%3Bfor(let%20t%3D0%3Bt%3Cthis.volumes.length%3Bt%2B%2B)if(this.volumes%5Bt%5D.nFrame4D%3Cthis.volumes%5Bt%5D.hdr.dims%5B4%5D)return!0%3Breturn!1%7DdrawGraph()%7Bif(this.getMaxVols()%3C2)return%3Bconst%20t%3Dthis.graph%3Blet%20e%3D0%3Bif(this.graph.autoSizeMultiplanar%26%263%3D%3D%3Dthis.opts.sliceType)for(let%20i%3D0%3Bi%3Cthis.screenSlices.length%3Bi%2B%2B)%7Bconst%20s%3Dthis.screenSlices%5Bi%5D.axCorSag%3Bif(0%3D%3D%3Ds%26%26(e%3Dthis.screenSlices%5Bi%5D.leftTopWidthHeight%5B1%5D)%2C2!%3D%3Ds)continue%3Bconst%20n%3Dthis.screenSlices%5Bi%5D.leftTopWidthHeight.slice()%3Bn%5B1%5D%3D%3D%3De%3F(t.LTWH%5B0%5D%3Dn%5B0%5D%2Bn%5B2%5D%2Ct.LTWH%5B1%5D%3Dn%5B1%5D)%3A(t.LTWH%5B0%5D%3Dn%5B0%5D%2Ct.LTWH%5B1%5D%3Dn%5B1%5D%2Bn%5B3%5D)%2Ct.LTWH%5B2%5D%3Dn%5B2%5D%2Ct.LTWH%5B3%5D%3Dn%5B2%5D%7Dif(t.opacity%3C%3D0%7C%7Ct.LTWH%5B2%5D%3C%3D5%7C%7Ct.LTWH%5B3%5D%3C%3D5)return%3Bif(t.LTWH%5B0%5D%2Bt.LTWH%5B2%5D%3Ethis.gl.canvas.width)return%3Bif(t.LTWH%5B1%5D%2Bt.LTWH%5B3%5D%3Ethis.gl.canvas.height)return%3Bt.backColor%3D%5B.15%2C.15%2C.15%2Ct.opacity%5D%2Ct.lineColor%3D%5B1%2C1%2C1%2C1%5D%2Cthis.opts.backColor%5B0%5D%2Bthis.opts.backColor%5B1%5D%2Bthis.opts.backColor%5B2%5D%3E1.5%26%26(t.backColor%3D%5B.95%2C.95%2C.95%2Ct.opacity%5D%2Ct.lineColor%3D%5B0%2C0%2C0%2C1%5D)%2Ct.textColor%3Dt.lineColor.slice()%2Ct.lineThickness%3D4%2Ct.lineAlpha%3D1%2Ct.lines%3D%5B%5D%3Bconst%20i%3D%5B%5D%3Bif(t.vols.length%3C1)null!%3Dthis.volumes%5B0%5D%26%26i.push(0)%3Belse%20for(let%20e%3D0%3Be%3Ct.vols.length%3Be%2B%2B)%7Bconst%20s%3Dt.vols%5Be%5D%3Bif(null%3D%3Dthis.volumes%5Bs%5D)continue%3Bthis.volumes%5Bs%5D.nFrame4D%3C2%7C%7Ci.push(s)%7Dif(i.length%3C1)return%3Bconst%20s%3Dthis.volumes%5Bi%5B0%5D%5D.nFrame4D%3Bif(this.graph.selectedColumn%3Dthis.volumes%5Bi%5B0%5D%5D.frame4D%2Cs%3C2)return%20void%20l.debug(%22Unable%20to%20generate%20a%20graph%3A%20Selected%20volume%20is%203D%20not%204D%22)%3Bfor(let%20e%3D0%3Be%3Ci.length%3Be%2B%2B)%7Bt.lines%5Be%5D%3D%5B%5D%3Bconst%20n%3Dthis.frac2vox(this.scene.crosshairPos)%2Cr%3Dthis.volumes%5Bi%5Be%5D%5D%3Blet%20a%3Dr.nFrame4D%3Ba%3DMath.min(a%2Cs)%3Bfor(let%20i%3D0%3Bi%3Ca%3Bi%2B%2B)%7Bconst%20s%3Dr.getValue(n%5B0%5D%2Cn%5B1%5D%2Cn%5B2%5D%2Ci)%3Bt.lines%5Be%5D.push(s)%7D%7Dt.lineRGB%3D%5B%5B1%2C0%2C0%5D%2C%5B0%2C.7%2C0%5D%2C%5B0%2C0%2C1%5D%2C%5B1%2C1%2C0%5D%2C%5B1%2C0%2C1%5D%2C%5B0%2C1%2C1%5D%2C%5B1%2C1%2C1%5D%2C%5B0%2C0%2C0%5D%5D%3Blet%20n%3Dt.lines%5B0%5D%5B0%5D%2Cr%3Dt.lines%5B0%5D%5B0%5D%3Bfor(let%20e%3D0%3Be%3Ct.lines.length%3Be%2B%2B)for(let%20i%3D0%3Bi%3Ct.lines%5Be%5D.length%3Bi%2B%2B)%7Bconst%20s%3Dt.lines%5Be%5D%5Bi%5D%3Bn%3DMath.min(s%2Cn)%2Cr%3DMath.max(s%2Cr)%7Dif(t.normalizeValues%26%26r%3En)%7Bconst%20e%3Dr-n%3Bfor(let%20i%3D0%3Bi%3Ct.lines.length%3Bi%2B%2B)for(let%20s%3D0%3Bs%3Ct.lines%5Bi%5D.length%3Bs%2B%2B)%7Bconst%20r%3Dt.lines%5Bi%5D%5Bs%5D%3Bt.lines%5Bi%5D%5Bs%5D%3D(r-n)%2Fe%7Dn%3D0%2Cr%3D1%7Dn%3E%3Dr%26%26(r%3Dn%2B1)%2Cthis.drawRect(t.LTWH%2Ct.backColor)%3Bconst%5Ba%2Co%2Ch%5D%3Dvi(n%2Cr)%2Cc%3DMath.max(0%2C-1*Math.floor(Math.log(a)%2FMath.log(10)))%3Bfunction%20d(t)%7Breturn%20t.toFixed(6).replace(%2F%5C.%3F0*%24%2F%2C%22%22)%7Dn%3DMath.min(o%2Cn)%2Cr%3DMath.max(h%2Cr)%3Bconst%20m%3DMath.min(t.LTWH%5B2%5D%2Ct.LTWH%5B3%5D)%2F(this.fontMets.size*this.uiData.dpr)*.07%3Blet%20u%3Dthis.opts.textHeight*this.gl.canvas.height*m%3Bu%3C16%26%26(u%3D0)%3Blet%20A%3D0%2Cf%3Do%3Bif(u%3E0)for(%3Bf%3C%3Dr%3B)%7Bconst%20t%3Df.toFixed(c)%2Ce%3Dthis.textWidth(u%2Ct)%3BA%3DMath.max(e%2CA)%2Cf%2B%3Da%7Dconst%20g%3D.05%2Cp%3DMath.abs(t.LTWH%5B2%5D)%2Cv%3DMath.abs(t.LTWH%5B3%5D)%2Cx%3D%5Bt.LTWH%5B0%5D%2Bg*p%2BA%2Ct.LTWH%5B1%5D%2Bg*v%2Ct.LTWH%5B2%5D-A-.1*p%2Ct.LTWH%5B3%5D-u-.1*v%5D%3Bthis.graph.LTWH%3Dt.LTWH%2Cthis.graph.plotLTWH%3Dx%2Cthis.drawRect(x%2Cthis.opts.backColor)%3Bconst%20w%3Dx%5B3%5D%2F(r-n)%2CC%3Dx%5B2%5D%2F(t.lines%5B0%5D.length-1)%2Cb%3Dx%5B1%5D%2Bx%5B3%5D%3Bf%3Do%2B.5*a%3Bconst%20y%3Dt.lineColor.slice()%3Bfor(y%5B3%5D%3D.25*t.lineColor%5B3%5D%3Bf%3C%3Dr%3B)%7Bconst%20e%3Db-(f-n)*w%3Bthis.drawLine(%5Bx%5B0%5D%2Ce%2Cx%5B0%5D%2Bx%5B2%5D%2Ce%5D%2C.5*t.lineThickness%2Cy)%2Cf%2B%3Da%7Df%3Do%3Bconst%20I%3D.5*t.lineThickness%3Bfor(%3Bf%3C%3Dr%3B)%7Bconst%20e%3Db-(f-n)*w%3Bthis.drawLine(%5Bx%5B0%5D-I%2Ce%2Cx%5B0%5D%2Bx%5B2%5D%2Bt.lineThickness%2Ce%5D%2Ct.lineThickness%2Ct.lineColor)%3Bconst%20i%3Df.toFixed(c)%3Bu%3E0%26%26this.drawTextLeft(%5Bx%5B0%5D-6%2Ce%5D%2Ci%2Cm%2Ct.textColor)%2Cf%2B%3Da%7Dlet%20M%3D1%3Bfor(%3Bt.lines%5B0%5D.length%2FM%3E20%3B)M*%3D5%3Bfor(let%20e%3D0%3Be%3Ct.lines%5B0%5D.length%3Be%2B%3DM)%7Bconst%20i%3De*C%2Bx%5B0%5D%3Blet%20s%3Dt.lineThickness%3Bif(e%252%3D%3D1)s*%3D.5%2Cthis.drawLine(%5Bi%2Cx%5B1%5D%2Ci%2Cx%5B1%5D%2Bx%5B3%5D%5D%2Cs%2Cy)%3Belse%7Bconst%20n%3Dd(e)%3Bu%3E0%26%26this.drawTextBelow(%5Bi%2C2%2Bx%5B1%5D%2Bx%5B3%5D%5D%2Cn%2Cm%2Ct.textColor)%2Cthis.drawLine(%5Bi%2Cx%5B1%5D%2Ci%2Cx%5B1%5D%2Bx%5B3%5D%5D%2Cs%2Ct.lineColor)%7D%7Dfor(let%20e%3D0%3Be%3Ct.lines.length%3Be%2B%2B)%7Blet%20i%3D%5B1%2C0%2C0%2Ct.lineAlpha%5D%3Be%3Ct.lineRGB.length%26%26(i%3D%5Bt.lineRGB%5Be%5D%5B0%5D%2Ct.lineRGB%5Be%5D%5B1%5D%2Ct.lineRGB%5Be%5D%5B2%5D%2Ct.lineAlpha%5D)%3Bfor(let%20s%3D1%3Bs%3Ct.lines%5Be%5D.length%3Bs%2B%2B)%7Bconst%20r%3D(s-1)*C%2Ca%3Ds*C%2Co%3D(t.lines%5Be%5D%5Bs-1%5D-n)*w%2Cl%3D(t.lines%5Be%5D%5Bs%5D-n)*w%2Ch%3D%5Bx%5B0%5D%2Br%2Cx%5B1%5D%2Bx%5B3%5D-o%2Cx%5B0%5D%2Ba%2Cx%5B1%5D%2Bx%5B3%5D-l%5D%3Bthis.drawLine(h%2Ct.lineThickness%2Ci)%7D%7Dif(t.selectedColumn%3E%3D0%26%26t.selectedColumn%3Ct.lines%5B0%5D.length)%7Bconst%20e%3Dt.selectedColumn*C%2Bx%5B0%5D%3Bthis.drawLine(%5Be%2Cx%5B1%5D%2Ce%2Cx%5B1%5D%2Bx%5B3%5D%5D%2Ct.lineThickness%2C%5Bt.lineRGB%5B3%5D%5B0%5D%2Ct.lineRGB%5B3%5D%5B1%5D%2Ct.lineRGB%5B3%5D%5B2%5D%2C1%5D)%7Dthis.detectPartialllyLoaded4D()%26%26this.drawTextBelow(%5Bx%5B0%5D%2Bx%5B2%5D%2Cx%5B1%5D%2Bx%5B3%5D%2B.5*u%5D%2C%22...%22%2Cm%2Ct.textColor)%7DdepthPicker(t%2Ce)%7Bif(!this.uiData.mouseDepthPicker)return%3Bthis.uiData.mouseDepthPicker%3D!1%3Bconst%20i%3Dthis.gl%2Cs%3Dthis.mousePos%5B0%5D*t%5B2%5D%2Ft%5B2%5D%2Cn%3Di.canvas.height-this.mousePos%5B1%5D*t%5B3%5D%2Ft%5B3%5D-1%2Cr%3Dnew%20Uint8Array(4)%3Bif(i.readPixels(s%2Cn%2C1%2C1%2Ci.RGBA%2Ci.UNSIGNED_BYTE%2Cr)%2Cthis.selectedObjectId%3Dr%5B3%5D%2Cthis.selectedObjectId%3D%3D%3Dthis.VOLUME_ID)return%20void(this.scene.crosshairPos%3Dnew%20Float32Array(r.slice(0%2C3)).map((t%3D%3Et%2F255)))%3Bconst%20a%3Dfunction(t)%7Bconst%20e%3D%5B1%2F16777216%2C1%2F65536%2C1%2F256%2C1%5D%3Breturn(t%5B0%5D*e%5B0%5D%2Bt%5B1%5D*e%5B1%5D%2Bt%5B2%5D*e%5B2%5D%2Bt%5B3%5D*e%5B3%5D)%2F255%7D(r)%3Bif(a%3E1)return%3Bconst%20o%3Dfunction(t%2Ce%2Ci%2Cs)%7Bconst%20n%3Dfi.fromValues(t%2Ce%2Ci%2C1)%2Cr%3Dui.clone(s)%3Bui.invert(r%2Cr)%2Cn%5B0%5D%3D2*n%5B0%5D-1%2Cn%5B1%5D%3D2*n%5B1%5D-1%2Cn%5B2%5D%3D2*n%5B2%5D-1%3Bconst%20a%3Dfi.create()%3Breturn%20fi.transformMat4(a%2Cn%2Cr)%2C0%3D%3D%3Da%5B3%5D%7C%7C(a%5B0%5D%2F%3Da%5B3%5D%2Ca%5B1%5D%2F%3Da%5B3%5D%2Ca%5B2%5D%2F%3Da%5B3%5D)%2Ca%7D((this.mousePos%5B0%5D-t%5B0%5D)%2Ft%5B2%5D%2C(i.canvas.height-this.mousePos%5B1%5D-t%5B1%5D)%2Ft%5B3%5D%2Ca%2Ce)%2Cl%3Dthis.mm2frac(o%2C0%2C!0)%3Bl%5B0%5D%3C0%7C%7Cl%5B0%5D%3E1%7C%7Cl%5B1%5D%3C0%7C%7Cl%5B1%5D%3E1%7C%7Cl%5B2%5D%3C0%7C%7Cl%5B2%5D%3E1%7C%7C(this.scene.crosshairPos%3Dthis.mm2frac(o%2C0%2C!0))%7DdrawImage3D(t%2Ce%2Cs)%7Bif(0%3D%3D%3Dthis.volumes.length)return%3Bconst%20n%3Dthis.gl%2Cr%3Dthis.calculateRayDirection(e%2Cs)%2Ca%3Dthis.volumeObject3D%3Bif(a)%7Bn.enable(n.BLEND)%2Cn.blendFunc(n.SRC_ALPHA%2Cn.ONE_MINUS_SRC_ALPHA)%2Cn.enable(n.CULL_FACE)%2Cn.cullFace(n.FRONT)%3Blet%20o%3Dthis.renderShader%3Bif(this.uiData.mouseDepthPicker%26%26(o%3Dthis.pickingImageShader)%2Co.use(this.gl)%2Cn.uniform1i(o.uniforms.backgroundMasksOverlays%2Cthis.backgroundMasksOverlays)%2Cthis.gradientTextureAmount%3E0)%7Bn.activeTexture(33990)%2Cn.bindTexture(n.TEXTURE_3D%2Cthis.gradientTexture)%3Bconst%20t%3Dthis.calculateModelMatrix(e%2Cs)%2Cr%3Di.create()%3Bi.invert(r%2Ct)%3Bconst%20a%3Di.create()%3Bi.transpose(a%2Cr)%2Cn.uniformMatrix4fv(o.uniforms.normMtx%2C!1%2Ca)%7Dthis.drawBitmap%26%26this.drawBitmap.length%3E8%3Fn.uniform2f(o.uniforms.renderDrawAmbientOcclusionXY%2Cthis.renderDrawAmbientOcclusion%2Cthis.drawOpacity)%3An.uniform2f(o.uniforms.renderDrawAmbientOcclusionXY%2Cthis.renderDrawAmbientOcclusion%2C0)%2Cn.uniformMatrix4fv(o.uniforms.mvpMtx%2C!1%2Ct)%2Cn.uniformMatrix4fv(o.uniforms.matRAS%2C!1%2Cthis.back.matRAS)%2Cn.uniform3fv(o.uniforms.rayDir%2Cr)%2Cthis.gradientTextureAmount%3C0%3Fn.uniform4fv(o.uniforms.clipPlane%2C%5Bthis.scene.crosshairPos%5B0%5D%2Cthis.scene.crosshairPos%5B1%5D%2Cthis.scene.crosshairPos%5B2%5D%2C30%5D)%3An.uniform4fv(o.uniforms.clipPlane%2Cthis.scene.clipPlane)%2Cn.uniform1f(o.uniforms.drawOpacity%2C1)%2Cn.bindVertexArray(a.vao)%2Cn.drawElements(a.mode%2Ca.indexCount%2Cn.UNSIGNED_SHORT%2C0)%2Cn.bindVertexArray(this.unusedVAO)%7D%7DdrawOrientationCube(t%2Ce%3D0%2Cs%3D0)%7Bif(!this.opts.isOrientCube)return%3Bconst%20n%3D.05*Math.min(t%5B2%5D%2Ct%5B3%5D)%3Bif(n%3C5)return%3Bconst%20r%3Dthis.gl%3Br.enable(r.CULL_FACE)%2Cr.cullFace(r.BACK)%2Cthis.orientCubeShader.use(this.gl)%2Cr.bindVertexArray(this.orientCubeShaderVAO)%3Bconst%20a%3Di.create()%2Co%3Di.create()%3Bi.ortho(o%2C0%2Cr.canvas.width%2C0%2Cr.canvas.height%2C-10*n%2C10*n)%3Blet%20l%3D0%3B0%3D%3D%3Dt%5B1%5D%26%26(l%3Dr.canvas.height-this.effectiveCanvasHeight())%2Ci.translate(a%2Ca%2C%5B1.8*n%2Bt%5B0%5D%2Cl%2B1.8*n%2Bt%5B1%5D%2C0%5D)%2Ci.scale(a%2Ca%2C%5Bn%2Cn%2Cn%5D)%2Ci.rotateX(a%2Ca%2Cxi(270-s))%2Ci.rotateZ(a%2Ca%2Cxi(-e))%3Bconst%20h%3Di.create()%3Bi.multiply(h%2Co%2Ca)%2Cr.uniformMatrix4fv(this.orientCubeShader.uniforms.u_matrix%2C!1%2Ch)%2Cr.drawArrays(r.TRIANGLE_STRIP%2C0%2C168)%2Cr.bindVertexArray(this.unusedVAO)%2Cthis.gl.disable(this.gl.CULL_FACE)%7DcreateOnLocationChange(t%3DNaN)%7Bconst%5Be%2Ci%2Cs%5D%3Dthis.sceneExtentsMinMax(!0)%2Cn%3DMath.max(Math.max(s%5B0%5D%2Cs%5B1%5D)%2Cs%5B2%5D)%3Blet%20r%3D(a%3D.001*n%2CMath.max(0%2C-Math.ceil(Math.log10(Math.abs(a)))))%3Bvar%20a%3Bconst%20o%3Dthis.frac2mm(this.scene.crosshairPos%2C0%2C!0)%3Bfunction%20l(t%2Ce%3D0)%7Breturn%20parseFloat(t.toFixed(e))%7Dlet%20h%3Dl(o%5B0%5D%2Cr)%2B%22%C3%97%22%2Bl(o%5B1%5D%2Cr)%2B%22%C3%97%22%2Bl(o%5B2%5D%2Cr)%3Bif(this.volumes.length%3E0%26%26this.volumes%5B0%5D.nFrame4D%3E0%26%26(h%2B%3D%22%C3%97%22%2Bl(this.volumes%5B0%5D.frame4D))%2Cthis.volumes.length%3E0)%7Blet%20t%3D%22%20%3D%20%22%3Bfor(let%20e%3D0%3Be%3Cthis.volumes.length%3Be%2B%2B)%7Bconst%20i%3Dthis.volumes%5Be%5D.mm2vox(o)%3Blet%20s%3Dthis.volumes%5Be%5D.getValue(i%5B0%5D%2Ci%5B1%5D%2Ci%5B2%5D%2Cthis.volumes%5Be%5D.frame4D)%3Bif(r%3D3%2Cnull!%3D%3Dthis.volumes%5Be%5D.colormapLabel)%7Bconst%20i%3DMath.round(s)%3Bi%3E%3D0%26%26i%3Cthis.volumes%5Be%5D.colormapLabel.labels.length%3Ft%2B%3Dthis.volumes%5Be%5D.colormapLabel.labels%5Bi%5D%3At%2B%3D%22undefined(%22%2Bl(s%2Cr)%2B%22)%22%7Delse%20t%2B%3Dl(s%2Cr)%3Bthis.volumes%5Be%5D.imaginary%26%26(s%3Dthis.volumes%5Be%5D.getValue(i%5B0%5D%2Ci%5B1%5D%2Ci%5B2%5D%2Cthis.volumes%5Be%5D.frame4D%2C!0)%2Cs%3E%3D0%26%26(t%2B%3D%22%2B%22)%2Ct%2B%3Dl(s%2Cr))%2Ct%2B%3D%22%20%20%20%22%7Dh%2B%3Dt%3Bconst%20e%3Dthis.back.dimsRAS%2Ci%3De%5B1%5D*e%5B2%5D*e%5B3%5D%3Bif(this.drawBitmap%26%26this.drawBitmap.length%3D%3D%3Di)%7Bconst%20t%3Dthis.frac2vox(this.scene.crosshairPos)%2Ci%3Dt%5B0%5D%2Bt%5B1%5D*e%5B1%5D%2Bt%5B2%5D*e%5B1%5D*e%5B2%5D%3Bh%2B%3D%22%20%22%2Bthis.drawLut.labels%5Bthis.drawBitmap%5Bi%5D%5D%7D%7Dconst%20c%3D%7Bmm%3Athis.frac2mm(this.scene.crosshairPos%2C0%2C!0)%2CaxCorSag%3At%2Cvox%3Athis.frac2vox(this.scene.crosshairPos)%2Cfrac%3Athis.scene.crosshairPos%2Cxy%3A%5Bthis.mousePos%5B0%5D%2Cthis.mousePos%5B1%5D%5D%2Cvalues%3Athis.volumes.map((t%3D%3E%7Bconst%20e%3Dthis.frac2mm(this.scene.crosshairPos%2C0%2C!0)%2Ci%3Dt.mm2vox(e)%2Cs%3Dt.getValue(i%5B0%5D%2Ci%5B1%5D%2Ci%5B2%5D%2Ct.frame4D)%3Breturn%7Bname%3At.name%2Cvalue%3As%2Cid%3At.id%2Cmm%3Ae%2Cvox%3Ai%7D%7D))%2Cstring%3Ah%7D%3Bthis.onLocationChange(c)%7DaddLabel(t%2Ce%2Ci%2Cs%2Cn)%7Bconst%20r%3D%7BtextColor%3Athis.opts.legendTextColor%2CtextScale%3A1%2CtextAlignment%3A%22left%22%2ClineWidth%3A0%2ClineColor%3Athis.opts.legendTextColor%2ClineTerminator%3A%22none%22%2CbulletScale%3A0%2CbulletColor%3Athis.opts.legendTextColor%7D%2Ca%3De%3F%7B...r%2C...e%7D%3A%7B...r%7D%2Co%3Dnew%20hi(t%2C%7B...a%7D%2Ci%2Cs%2Cn)%3Breturn%20this.document.labels.push(o)%2Co%7DcalculateScreenPoint(t%2Ce%2Ci)%7Bconst%20s%3Dr.create()%3Breturn%20r.transformMat4(s%2C%5B...t%2C1%5D%2Ce)%2C0!%3D%3Ds%5B3%5D%26%26(s%5B0%5D%3D.5*(s%5B0%5D%2Fs%5B3%5D%2B1)*i%5B2%5D%2Cs%5B1%5D%3D.5*(1-s%5B1%5D%2Fs%5B3%5D)*i%5B3%5D%2Cs%5B2%5D%2F%3Ds%5B3%5D%2Cs%5B0%5D%2B%3Di%5B0%5D%2Cs%5B1%5D%2B%3Di%5B1%5D)%2Cs%7DgetLabelAtPoint(t)%7Bconst%20e%3Dthis.opts.textHeight*Math.min(this.gl.canvas.height%2Cthis.gl.canvas.width)*1%2Ci%3Dthis.opts.textHeight*this.gl.canvas.height*1%3Bfor(const%20e%20of%20this.document.labels)%7Bif(null%3D%3De.anchor%7C%7C0%3D%3D%3De.anchor)continue%3Bconst%20s%3Dthis.opts.textHeight*this.gl.canvas.height*e.style.textScale%2Cn%3Dthis.textHeight(s%2Ce.text)%2Cr%3Dthis.textWidth(s%2Ce.text)%3Bif(!(1%26e.anchor%26%26t%5B0%5D%3Er))%7Bif(2%26e.anchor)%7Bif(t%5B0%5D%3C(this.gl.canvas.width-r)%2F2)continue%3Bif(t%5B0%5D%3E(this.gl.canvas.width%2Br)%2F2)continue%7Dif(!(4%26e.anchor%26%26t%5B0%5D%3Cthis.gl.canvas.width-r))%7Bif(8%26e.anchor)%7Bif(t%5B1%5D%3Ci%2F2)continue%3Bif(t%5B1%5D%3En%2Bi%2F2)continue%7Dif(16%26e.anchor)%7Bif(t%5B1%5D%3C(this.gl.canvas.height-n-i)%2F2)continue%3Bif(t%5B1%5D%3E(this.gl.canvas.height%2Bn-i%2F2)%2F2)continue%7Dif(32%26e.anchor)%7Bif(t%5B1%5D%3Cthis.gl.canvas.height-n-i)continue%3Bif(t%5B1%5D%3Ethis.gl.canvas.height-i%2F2)continue%7Dreturn%20e%7D%7D%7Dl.debug(%22screenPoint%22%2Ct)%3Bconst%20s%3Dthis.getLegendPanelHeight()%2Cn%3Dthis.getLegendPanelWidth()%2Cr%3Dthis.gl.canvas.width-n%3Blet%20a%3D(this.canvas.height-s)%2F2%3Bif(l.debug(%22panelrect%22%2Cr%2Ca%2Cr%2Bn%2Ca%2Bs)%2Ct%5B0%5D%3Cr%7C%7Ct%5B1%5D%3Ca%7C%7Ct%5B0%5D%3Er%2Bn%7C%7Ct%5B1%5D%3Ea%2Bs)return%20null%3Bconst%20o%3Dthis.getConnectomeLabels()%3Bfor(const%20i%20of%20o)%7Bconst%20s%3Dthis.opts.textHeight*this.gl.canvas.height*i.style.textScale%2Cn%3Dthis.textHeight(s%2Ci.text)%3Bif(t%5B1%5D%3E%3Da%26%26t%5B1%5D%3C%3Da%2Bn%2Be%2F2)return%20i%3Ba%2B%3Dn%2Ca%2B%3De%2F2%7Dreturn%20null%7DdrawLabelLine(t%2Ce%2Ci%2Cs%2Cn%3D!1)%7Bconst%20r%3DArray.isArray(t.points)%26%26Array.isArray(t.points%5B0%5D)%3Ft.points%3A%5Bt.points%5D%3Bfor(const%20a%20of%20r)%7Bconst%20r%3Dthis.calculateScreenPoint(a%2Ci%2Cs)%3Bn%3Fthis.drawDottedLine(%5B...e%2Cr%5B0%5D%2Cr%5B1%5D%5D%2Ct.style.lineWidth%2Ct.style.lineColor)%3Athis.draw3DLine(e%2C%5Br%5B0%5D%2Cr%5B1%5D%2Cr%5B2%5D%5D%2Ct.style.lineWidth%2Ct.style.lineColor)%7D%7Ddraw3DLabel(t%2Ce%2Ci%2Cs%2Cn%2Cr%2Ca)%7Bconst%20o%3Dt.text%2Cl%3De%5B0%5D%2Ch%3De%5B1%5D%2Cc%3Dthis.opts.textHeight*Math.min(this.gl.canvas.height%2Cthis.gl.canvas.width)*1%2Cd%3Dthis.textHeight(t.style.textScale%2Co)*c%3Bif(t.style.lineWidth%3E0%26%26Array.isArray(t.points)%26%26this.drawLabelLine(t%2C%5Bl%2Ch%2Bd%5D%2Ci%2Cs%2Ca)%2Ct.style.bulletScale)%7Bconst%20e%3Dt.style.bulletScale*d%2Ci%3Dh%2B(d-e)%2F2%2Be%2F2%2Cs%3Dl%2B(n-e)%2F2%3Bthis.drawCircle(%5Bs%2Ci%2Ce%2Ce%5D%2Ct.style.bulletColor)%7Dlet%20m%3Dl%3Bif(r)if(%22left%22!%3D%3Dt.style.textAlignment)%7Bconst%20e%3Dthis.textWidth(t.style.textScale%2Ct.text)*c%3Bif(%22right%22%3D%3D%3Dt.style.textAlignment)m%3Dl%2Br-1.5*c-e%3Belse%7Bm%2B%3D(r-(n%7C%7Cc)-e)%2F2%7D%7Delse%20m%2B%3Dn%3Bthis.drawText(%5Bm%2Ch%5D%2Co%2Ct.style.textScale%2Ct.style.textColor)%7Ddraw3DLabels(t%2Ce%2Ci%3D!1)%7Bconst%20s%3Dthis.getConnectomeLabels()%3Bif(!this.opts.showLegend%7C%7C0%3D%3D%3Ds.length)return%3Bif(!this.canvas)throw%20new%20Error(%22canvas%20undefined%22)%3Bconst%20n%3Dthis.gl%3Bn.disable(n.CULL_FACE)%2Cn.viewport(0%2C0%2Cthis.canvas.width%2Cthis.canvas.height)%3Bconst%20r%3Dthis.opts.textHeight*Math.min(this.gl.canvas.height%2Cthis.gl.canvas.width)*1%2Ca%3Dthis.getBulletMarginWidth()%2Co%3Dthis.getLegendPanelHeight()%2Cl%3Dthis.getLegendPanelWidth()%2Ch%3Dn.canvas.width-l%3Blet%20c%3D(this.canvas.height-o)%2F2%3Bthis.drawRect(%5Bn.canvas.width-l%2Cc%2Cl-r%2Co%5D%2Cthis.opts.legendBackgroundColor)%3Bconst%20d%3Dn.getParameter(n.BLEND)%2Cm%3Dn.getParameter(n.DEPTH_FUNC)%3Bi%7C%7C(n.disable(n.BLEND)%2Cn.depthFunc(n.GREATER))%3Bfor(const%20n%20of%20s)%7Bthis.draw3DLabel(n%2C%5Bh%2Cc%5D%2Ct%2Ce%2Ca%2Cl%2Ci)%3Bconst%20s%3Dthis.opts.textHeight*this.gl.canvas.height*n.style.textScale%3Bc%2B%3Dthis.textHeight(s%2Cn.text)%2Cc%2B%3Dr%2F2%7Di%7C%7C(n.depthFunc(m)%2Cd%26%26n.enable(n.BLEND))%7DdrawAnchoredLabels()%7Bconst%20t%3Dthis.opts.textHeight*Math.min(this.gl.canvas.height%2Cthis.gl.canvas.width)*1%2Ce%3Dthis.document.labels.filter((t%3D%3Enull!%3Dt.anchor%26%260!%3D%3Dt.anchor))%3Bfor(const%20i%20of%20e)%7Bconst%20e%3Di.text%2Cs%3Dthis.textHeight(i.style.textScale%2Ce)*t%2Cn%3Dthis.textWidth(i.style.textScale%2Ce)*t%3Blet%20r%2Ca%3Bconst%20o%3D1%2Cl%3Dthis.opts.textHeight*this.gl.canvas.height*o%2Ch%3Dl%3Blet%20c%3Dl%2F4%2Cd%3D0%2Cm%3D0%3B1%26i.anchor%26%26(r%3D0)%2C4%26i.anchor%26%26(r%3Dthis.canvas.width-n%2Cd-%3Dl%2F4)%2C2%26i.anchor%26%26(r%3D(this.canvas.width-n)%2F2%2Cd-%3Dl%2F4%2Cc%2B%3Dl%2F4)%2C8%26i.anchor%26%26(a%3D0)%2C16%26i.anchor%26%26(a%3D(this.canvas.height-s-l)%2F2%2Cm-%3Dl%2F4)%2C32%26i.anchor%26%26(a%3Dthis.canvas.height-s-l%2Cm-%3Dl%2F4)%2Cthis.drawRect(%5Br%2Bd%2Ca%2Bm%2Cn%2Bc%2Cs%2Bh%5D%2Ci.style.backgroundColor)%2Cthis.draw3DLabel(i%2C%5Br%2Ca%5D)%7D%7Ddraw3D(t%3D%5B0%2C0%2C0%2C0%5D%2Ce%3Dnull%2Ci%3Dnull%2Cs%3Dnull%2Cn%3Dnull%2Cr%3D0)%7Bconst%20a%3Dnull!%3D%3Dn%3Bthis.setPivot3D()%2Ca%7C%7C(n%3Dthis.scene.renderAzimuth%2Cr%3Dthis.scene.renderElevation)%3Bconst%20o%3Dthis.gl%3Bnull%3D%3D%3De%26%26(%5Be%2Ci%2Cs%5D%3Dthis.calculateMvpMatrix(null%2Ct%2Cn%2Cr))%3Blet%20l%3D%5B...t%5D%3Bif(0%3D%3D%3Dt%5B2%5D%7C%7C0%3D%3D%3Dt%5B3%5D%3F(t%3D%5B0%2C0%2Co.canvas.width%2Co.canvas.height%5D%2Cl%3D%5B...t%5D%2Cthis.screenSlices.push(%7BleftTopWidthHeight%3At%2CaxCorSag%3A4%2CsliceFrac%3A0%2CAxyzMxy%3A%5B%5D%2CleftTopMM%3A%5B%5D%2CfovMM%3A%5Bbi(i)%2C0%5D%7D))%3A(this.screenSlices.push(%7BleftTopWidthHeight%3At.slice()%2CaxCorSag%3A4%2CsliceFrac%3A0%2CAxyzMxy%3A%5B%5D%2CleftTopMM%3A%5B%5D%2CfovMM%3A%5Bbi(i)%2C0%5D%7D)%2Ct%5B1%5D%3Do.canvas.height-t%5B3%5D-t%5B1%5D)%2Co.enable(o.DEPTH_TEST)%2Co.depthFunc(o.ALWAYS)%2Co.depthMask(!0)%2Co.clearDepth(0)%2Cthis.draw3DLabels(e%2Cl%2C!1)%2Co.viewport(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2Ct%5B3%5D)%2Cthis.volumes.length%3E0%26%26(this.updateInterpolation(0%2C!0)%2Cthis.updateInterpolation(1%2C!0)%2Cthis.drawImage3D(e%2Cn%2Cr))%2Cthis.updateInterpolation(0)%2Cthis.updateInterpolation(1)%2Ca%7C%7Cthis.drawCrosshairs3D(!0%2C1%2Ce)%2Cthis.drawMesh3D(!0%2C1%2Ce%2Ci%2Cs)%2Cthis.uiData.mouseDepthPicker)return%20this.depthPicker(t%2Ce)%2Cthis.createOnLocationChange()%2Cvoid%20this.draw3D(t%2Ce%2Ci%2Cs%2Cn%2Cr)%3Bthis.opts.meshXRay%3E0%26%26this.drawMesh3D(!1%2Cthis.opts.meshXRay%2Ce%2Ci%2Cs)%2Cthis.draw3DLabels(e%2Cl%2C!1)%2Co.viewport(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2Ct%5B3%5D)%2Ca%7C%7Cthis.drawCrosshairs3D(!1%2C.15%2Ce)%2Co.viewport(0%2C0%2Co.canvas.width%2Co.canvas.height)%2Cthis.drawOrientationCube(t%2Cn%2Cr)%3Bconst%20h%3D%22azimuth%3A%20%22%2Bthis.scene.renderAzimuth.toFixed(0)%2B%22%20elevation%3A%20%22%2Bthis.scene.renderElevation.toFixed(0)%3Breturn%20this.readyForSync%3D!0%2Cthis.sync()%2Cthis.draw3DLabels(e%2Cl%2C!0)%2Ch%7DdrawMesh3D(t%3D!0%2Ce%3D1%2Ci%2Cs%2Cn)%7Bif(this.meshes.length%3C1)return%3Bconst%20r%3Dthis.gl%3Bi%7C%7C(%5Bi%2Cs%2Cn%5D%3Dthis.calculateMvpMatrix(this.volumeObject3D%2Cvoid%200%2Cthis.scene.renderAzimuth%2Cthis.scene.renderElevation))%2Cr.enable(r.DEPTH_TEST)%2Cr.blendFunc(r.SRC_ALPHA%2Cr.ONE_MINUS_SRC_ALPHA)%2Cr.disable(r.BLEND)%2Cr.depthFunc(r.GREATER)%2Cr.disable(r.CULL_FACE)%2Ct%3F(r.disable(r.BLEND)%2Cr.depthFunc(r.GREATER))%3A(r.enable(r.BLEND)%2Cr.depthFunc(r.ALWAYS)%2Cr.enable(r.CULL_FACE))%2Cr.cullFace(r.BACK)%3Blet%20a%3Dthis.meshShaders%5B0%5D.shader%2Co%3D!1%3Bfor(let%20t%3D0%3Bt%3Cthis.meshes.length%3Bt%2B%2B)!1!%3D%3Dthis.meshes%5Bt%5D.visible%26%26(a%3Dthis.meshShaders%5Bthis.meshes%5Bt%5D.meshShaderIndex%5D.shader%2Cthis.uiData.mouseDepthPicker%26%26(a%3Dthis.pickingMeshShader)%2Ca.use(this.gl)%2Cr.uniformMatrix4fv(a.uniforms.mvpMtx%2C!1%2Ci)%2Cr.uniformMatrix4fv(a.uniforms.normMtx%2C!1%2Cn)%2Cr.uniform1f(a.uniforms.opacity%2Ce)%2Cthis.meshes%5Bt%5D.indexCount%3C3%7C%7C(this.meshes%5Bt%5D.offsetPt0%26%26(this.meshes%5Bt%5D.fiberSides%3C3%7C%7Cthis.meshes%5Bt%5D.fiberRadius%3C%3D0)%3Fo%3D!0%3A(a.isMatcap%26%26(r.activeTexture(33989)%2Cr.bindTexture(r.TEXTURE_2D%2Cthis.matCapTexture))%2Cr.bindVertexArray(this.meshes%5Bt%5D.vao)%2Cr.drawElements(r.TRIANGLES%2Cthis.meshes%5Bt%5D.indexCount%2Cr.UNSIGNED_INT%2C0)%2Cr.bindVertexArray(this.unusedVAO))))%3Bif(!o)return%20r.enable(r.BLEND)%2Cvoid%20r.depthFunc(r.ALWAYS)%3Ba%3Dthis.fiberShader%2Ca.use(this.gl)%2Cr.uniformMatrix4fv(a.uniforms.mvpMtx%2C!1%2Ci)%2Cr.uniform1f(a.uniforms.opacity%2Ce)%3Bfor(let%20t%3D0%3Bt%3Cthis.meshes.length%3Bt%2B%2B)this.meshes%5Bt%5D.indexCount%3C3%7C%7Cthis.meshes%5Bt%5D.offsetPt0%26%26(this.meshes%5Bt%5D.fiberSides%3E%3D3%26%26this.meshes%5Bt%5D.fiberRadius%3E0%7C%7C(r.bindVertexArray(this.meshes%5Bt%5D.vaoFiber)%2Cr.drawElements(r.LINE_STRIP%2Cthis.meshes%5Bt%5D.indexCount%2Cr.UNSIGNED_INT%2C0)%2Cr.bindVertexArray(this.unusedVAO)))%3Br.enable(r.BLEND)%2Cr.depthFunc(r.ALWAYS)%2Cthis.readyForSync%3D!0%7DdrawCrosshairs3D(t%3D!0%2Ce%3D1%2Ci%3Dnull%2Cs%3D!1%2Cn%3D!0)%7Bif(!this.opts.show3Dcrosshair%26%26!s)return%3Bif(this.opts.crosshairWidth%3C%3D0%26%26s)return%3Bconst%20r%3Dthis.gl%2Ca%3Dthis.frac2mm(this.scene.crosshairPos%2C0%2Cn)%3Bif(null%3D%3D%3Dthis.crosshairs3D%7C%7Cthis.crosshairs3D.mm%5B0%5D!%3D%3Da%5B0%5D%7C%7Cthis.crosshairs3D.mm%5B1%5D!%3D%3Da%5B1%5D%7C%7Cthis.crosshairs3D.mm%5B2%5D!%3D%3Da%5B2%5D)%7Bnull!%3D%3Dthis.crosshairs3D%26%26(r.deleteBuffer(this.crosshairs3D.indexBuffer)%2Cr.deleteBuffer(this.crosshairs3D.vertexBuffer))%3Bconst%5Bt%2Ce%2Ci%5D%3Dthis.sceneExtentsMinMax(n)%3Blet%20s%3D1%3Bif(this.volumes.length%3E0)%7Bif(!this.back)throw%20new%20Error(%22back%20undefined%22)%3Bs%3D.5*Math.min(Math.min(this.back.pixDims%5B1%5D%2Cthis.back.pixDims%5B2%5D)%2Cthis.back.pixDims%5B3%5D)%7Delse(i%5B0%5D%3C50%7C%7Ci%5B0%5D%3E1e3)%26%26(s%3D.02*i%5B0%5D)%3Bs*%3Dthis.opts.crosshairWidth%2Cthis.crosshairs3D%3DO.generateCrosshairs(this.gl%2C1%2Ca%2Ct%2Ce%2Cs%2C20%2Cthis.opts.crosshairGap)%2Cthis.crosshairs3D.mm%3Da%7Dif(!this.surfaceShader)throw%20new%20Error(%22surfaceShader%20undefined%22)%3Bconst%20o%3Dthis.surfaceShader%3Bo.use(this.gl)%2Cnull%3D%3Di%26%26(%5Bi%5D%3Dthis.calculateMvpMatrix(this.crosshairs3D%2Cvoid%200%2Cthis.scene.renderAzimuth%2Cthis.scene.renderElevation))%2Cr.uniformMatrix4fv(o.uniforms.mvpMtx%2C!1%2Ci)%2Cr.bindBuffer(r.ELEMENT_ARRAY_BUFFER%2Cthis.crosshairs3D.indexBuffer)%2Cr.enable(r.DEPTH_TEST)%3Bconst%20l%3D%5B...this.opts.crosshairColor%5D%3Bt%3F(r.disable(r.BLEND)%2Cr.depthFunc(r.GREATER))%3A(r.enable(r.BLEND)%2Cr.blendFunc(r.SRC_ALPHA%2Cr.ONE_MINUS_SRC_ALPHA)%2Cr.depthFunc(r.ALWAYS))%2Cl%5B3%5D%3De%2Cr.uniform4fv(o.uniforms.surfaceColor%2Cl)%2Cr.bindVertexArray(this.crosshairs3D.vao)%2Cr.drawElements(r.TRIANGLES%2Cthis.crosshairs3D.indexCount%2Cr.UNSIGNED_INT%2C0)%2Cr.bindVertexArray(this.unusedVAO)%7Dmm2frac(t%2Ce%3D0%2Ci%3D!1)%7Bif(this.volumes.length%3C1)%7Bconst%20e%3Dn.fromValues(.1%2C.5%2C.5)%2C%5Bi%2Cs%2Cr%5D%3Dthis.sceneExtentsMinMax()%3Breturn%20e%5B0%5D%3D(t%5B0%5D-i%5B0%5D)%2Fr%5B0%5D%2Ce%5B1%5D%3D(t%5B1%5D-i%5B1%5D)%2Fr%5B1%5D%2Ce%5B2%5D%3D(t%5B2%5D-i%5B2%5D)%2Fr%5B2%5D%2CisFinite(e)%7C%7C(isFinite(e%5B0%5D)%7C%7C(e%5B0%5D%3D.5)%2CisFinite(e%5B1%5D)%7C%7C(e%5B1%5D%3D.5)%2CisFinite(e%5B2%5D)%7C%7C(e%5B2%5D%3D.5)%2Cthis.meshes.length%3C1%26%26l.error(%22mm2frac()%20not%20finite%3A%20objects%20not%20(yet)%20loaded.%22))%2Ce%7Dreturn%20this.volumes%5Be%5D.convertMM2Frac(t%2Ci%7C%7Cthis.opts.isSliceMM)%7Dvox2frac(t%2Ce%3D0)%7Breturn%20this.volumes%5Be%5D.convertVox2Frac(t)%7Dfrac2vox(t%2Ce%3D0)%7Breturn%20this.volumes.length%3C%3De%3F%5B0%2C0%2C0%5D%3Athis.volumes%5Be%5D.convertFrac2Vox(t)%7DmoveCrosshairInVox(t%2Ce%2Ci)%7Bconst%20s%3Dthis.frac2vox(this.scene.crosshairPos)%3Bs%5B0%5D%2B%3Dt%2Cs%5B1%5D%2B%3De%2Cs%5B2%5D%2B%3Di%2Cs%5B0%5D%3Dyi(s%5B0%5D%2C0%2Cthis.volumes%5B0%5D.dimsRAS%5B1%5D-1)%2Cs%5B1%5D%3Dyi(s%5B1%5D%2C0%2Cthis.volumes%5B0%5D.dimsRAS%5B2%5D-1)%2Cs%5B2%5D%3Dyi(s%5B2%5D%2C0%2Cthis.volumes%5B0%5D.dimsRAS%5B3%5D-1)%2Cthis.scene.crosshairPos%3Dthis.vox2frac(s)%2Cthis.createOnLocationChange()%2Cthis.drawScene()%7Dfrac2mm(t%2Ce%3D0%2Ci%3D!1)%7Bconst%20s%3Dr.fromValues(t%5B0%5D%2Ct%5B1%5D%2Ct%5B2%5D%2C1)%3Bif(this.volumes.length%3E0)return%20this.volumes%5Be%5D.convertFrac2MM(t%2Ci%7C%7Cthis.opts.isSliceMM)%3B%7Bconst%5Be%2Ci%5D%3Dthis.sceneExtentsMinMax()%2Cn%3D(t%2Ce%2Ci)%3D%3Et*(1-i)%2Be*i%3Bs%5B0%5D%3Dn(e%5B0%5D%2Ci%5B0%5D%2Ct%5B0%5D)%2Cs%5B1%5D%3Dn(e%5B1%5D%2Ci%5B1%5D%2Ct%5B1%5D)%2Cs%5B2%5D%3Dn(e%5B2%5D%2Ci%5B2%5D%2Ct%5B2%5D)%7Dreturn%20s%7DscreenXY2TextureFrac(t%2Ce%2Ci%2Cs%3D!0)%7Bconst%20r%3Dn.fromValues(-1%2C-1%2C-1)%2Ca%3Dthis.screenSlices%5Bi%5D.axCorSag%3Bif(a%3E2)return%20r%3Bconst%20o%3Dthis.screenSlices%5Bi%5D.leftTopWidthHeight.slice()%3Blet%20l%3D!1%3Bo%5B2%5D%3C0%26%26(l%3D!0%2Co%5B0%5D%2B%3Do%5B2%5D%2Co%5B2%5D%3D-o%5B2%5D)%3Blet%20h%3D(t-o%5B0%5D)%2Fo%5B2%5D%3Bl%26%26(h%3D1-h)%3Bconst%20c%3D1-(e-o%5B1%5D)%2Fo%5B3%5D%3Bif(h%3C0%7C%7Ch%3E1%7C%7Cc%3C0%7C%7Cc%3E1)return%20r%3Bif(this.screenSlices%5Bi%5D.AxyzMxy.length%3C4)return%20r%3Blet%20d%3Dn.fromValues(0%2C0%2C0)%3Bd%5B0%5D%3Dthis.screenSlices%5Bi%5D.leftTopMM%5B0%5D%2Bh*this.screenSlices%5Bi%5D.fovMM%5B0%5D%2Cd%5B1%5D%3Dthis.screenSlices%5Bi%5D.leftTopMM%5B1%5D%2Bc*this.screenSlices%5Bi%5D.fovMM%5B1%5D%3Bconst%20m%3Dthis.screenSlices%5Bi%5D.AxyzMxy%3Bd%5B2%5D%3Dm%5B2%5D%2Bm%5B4%5D*(d%5B1%5D-m%5B1%5D)-m%5B3%5D*(d%5B0%5D-m%5B0%5D)%2C1%3D%3D%3Da%26%26(d%3DCi(d%2C%5B0%2C2%2C1%5D))%2C2%3D%3D%3Da%26%26(d%3DCi(d%2C%5B2%2C0%2C1%5D))%3Bconst%20u%3Dthis.mm2frac(d)%3Breturn%20s%26%26(u%5B0%5D%3C0%7C%7Cu%5B0%5D%3E1%7C%7Cu%5B1%5D%3C0%7C%7Cu%5B1%5D%3E1%7C%7Cu%5B2%5D%3C0%7C%7Cu%5B2%5D%3E1)%3Fr%3Au%7DcanvasPos2frac(t)%7Bfor(let%20e%3D0%3Be%3Cthis.screenSlices.length%3Be%2B%2B)%7Bconst%20i%3Dthis.screenXY2TextureFrac(t%5B0%5D%2Ct%5B1%5D%2Ce)%3Bif(i%5B0%5D%3E%3D0)return%20i%7Dreturn%5B-1%2C-1%2C-1%5D%7DscaleSlice(t%2Ce%2Ci%3D0%2Cs%3D0)%7Bconst%20n%3Dthis.effectiveCanvasWidth()-i%2Cr%3Dthis.effectiveCanvasHeight()-s%3Blet%20a%3Dn%2Ft%3Be*a%3Er%26%26(a%3Dr%2Fe)%3Bconst%20o%3Dt*a%2Cl%3De*a%3Breturn%5B.5*(n-o)%2C.5*(r-l)%2Co%2Cl%2Ca%5D%7DdrawThumbnail()%7Bif(!this.bmpShader)throw%20new%20Error(%22bmpShader%20undefined%22)%3Bthis.bmpShader.use(this.gl)%2Cthis.gl.uniform2f(this.bmpShader.uniforms.canvasWidthHeight%2Cthis.gl.canvas.width%2Cthis.gl.canvas.height)%3Blet%20t%3Dthis.gl.canvas.height%2Ce%3Dthis.gl.canvas.height*this.bmpTextureWH%3Be%3Ethis.gl.canvas.width%26%26(t%3Dthis.gl.canvas.width%2Fthis.bmpTextureWH%2Ce%3Dthis.gl.canvas.width)%2Cthis.gl.uniform4f(this.bmpShader.uniforms.leftTopWidthHeight%2C0%2C0%2Ce%2Ct)%2Cthis.gl.bindVertexArray(this.genericVAO)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%2Cthis.gl.bindVertexArray(this.unusedVAO)%7DdrawLine(t%2Ce%3D1%2Ci%3D%5B1%2C0%2C0%2C-1%5D)%7Bif(this.gl.bindVertexArray(this.genericVAO)%2C!this.lineShader)throw%20new%20Error(%22lineShader%20undefined%22)%3Bthis.lineShader.use(this.gl)%2Ci%5B3%5D%3C0%26%26(i%3Dthis.opts.crosshairColor)%2Cthis.gl.uniform4fv(this.lineShader.uniforms.lineColor%2Ci)%2Cthis.gl.uniform2fv(this.lineShader.uniforms.canvasWidthHeight%2C%5Bthis.gl.canvas.width%2Cthis.gl.canvas.height%5D)%2Cthis.gl.uniform1f(this.lineShader.uniforms.thickness%2Ce)%2Cthis.gl.uniform4fv(this.lineShader.uniforms.startXYendXY%2Ct)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%2Cthis.gl.bindVertexArray(this.unusedVAO)%7Ddraw3DLine(t%2Ce%2Ci%3D1%2Cs%3D%5B1%2C0%2C0%2C-1%5D)%7Bif(this.gl.bindVertexArray(this.genericVAO)%2C!this.line3DShader)throw%20new%20Error(%22line3DShader%20undefined%22)%3Bthis.line3DShader.use(this.gl)%2Cs%5B3%5D%3C0%26%26(s%3Dthis.opts.crosshairColor)%2Cthis.gl.uniform4fv(this.line3DShader.uniforms.lineColor%2Cs)%2Cthis.gl.uniform2fv(this.line3DShader.uniforms.canvasWidthHeight%2C%5Bthis.gl.canvas.width%2Cthis.gl.canvas.height%5D)%2Cthis.gl.uniform1f(this.line3DShader.uniforms.thickness%2Ci)%2Cthis.gl.uniform2fv(this.line3DShader.uniforms.startXY%2Ct)%2Cthis.gl.uniform3fv(this.line3DShader.uniforms.endXYZ%2Ce)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%2Cthis.gl.bindVertexArray(this.unusedVAO)%7DdrawDottedLine(t%2Ce%3D1%2Ci%3D%5B1%2C0%2C0%2C-1%5D)%7Bif(this.gl.bindVertexArray(this.genericVAO)%2C!this.lineShader)throw%20new%20Error(%22lineShader%20undefined%22)%3Bthis.lineShader.use(this.gl)%3Bconst%20n%3Di%5B3%5D%3C0%3F%5B...this.opts.crosshairColor%5D%3A%5B...i%5D%3Bn%5B3%5D%3D.3%3Bconst%20r%3Ds.fromValues(t%5B2%5D-t%5B0%5D%2Ct%5B3%5D-t%5B1%5D)%2Ca%3Ds.length(r)%3Bs.normalize(r%2Cr)%3Bconst%20o%3Dthis.opts.textHeight*Math.min(this.gl.canvas.height%2Cthis.gl.canvas.width)*1%3Bs.scale(r%2Cr%2Co%2F2)%3Bconst%20l%3Ds.length(r)%3Blet%20h%3DMath.floor(a%2Fl)%3Ba%25l%26%26h%2B%2B%3Bconst%20c%3D%5Bt%5B0%5D%2Ct%5B1%5D%5D%3Bthis.gl.uniform4fv(this.lineShader.uniforms.lineColor%2Cn)%2Cthis.gl.uniform2fv(this.lineShader.uniforms.canvasWidthHeight%2C%5Bthis.gl.canvas.width%2Cthis.gl.canvas.height%5D)%2Cthis.gl.uniform1f(this.lineShader.uniforms.thickness%2Ce)%3Bfor(let%20t%3D0%3Bt%3Ch-1%3Bt%2B%2B)%7Bif(t%252)%7Bc%5B0%5D%2B%3Dr%5B0%5D%2Cc%5B1%5D%2B%3Dr%5B1%5D%3Bcontinue%7Dconst%20e%3D%5Bc%5B0%5D%2Cc%5B1%5D%2Cc%5B0%5D%2Br%5B0%5D%2Cc%5B1%5D%2Br%5B1%5D%5D%3Bthis.gl.uniform4fv(this.lineShader.uniforms.startXYendXY%2Ce)%2Cthis.gl.drawArrays(this.gl.TRIANGLE_STRIP%2C0%2C4)%2Cc%5B0%5D%2B%3Dr%5B0%5D%2Cc%5B1%5D%2B%3Dr%5B1%5D%7Dthis.gl.bindVertexArray(this.unusedVAO)%7DdrawGraphLine(t%2Ce%3D%5B1%2C0%2C0%2C.5%5D%2Ci%3D2)%7Bthis.drawLine(t%2Ci%2Ce)%7DdrawCrossLinesMM(t%2Ce%2Ci%2Cn%2Cr)%7Bif(t%3C0%7C%7Cthis.screenSlices.length%3C%3Dt)return%3Bconst%20a%3Dthis.screenSlices%5Bt%5D%3Blet%20o%3Da.sliceFrac%3Bo%3D%3D%3D1%2F0%26%26l.warn(%22Rendering%20approximate%20cross%20lines%20in%20world%20view%20mode%22)%2Co%3D%3D%3D1%2F0%26%26(o%3D.5)%3Blet%20h%3Dn.slice()%2Cc%3Dr.slice()%3Bconst%20d%3DMath.max(1%2Cthis.opts.crosshairWidth)%3Bfunction%20m(t)%7Bconst%20e%3Ds.fromValues(0%2C0)%3Breturn%20e%5B0%5D%3Da.leftTopWidthHeight%5B0%5D%2B(t%5B0%5D-a.leftTopMM%5B0%5D)%2Fa.fovMM%5B0%5D*a.leftTopWidthHeight%5B2%5D%2Ce%5B1%5D%3Da.leftTopWidthHeight%5B1%5D%2Ba.leftTopWidthHeight%5B3%5D-(t%5B1%5D-a.leftTopMM%5B1%5D)%2Fa.fovMM%5B1%5D*a.leftTopWidthHeight%5B3%5D%2Ce%7Dif(1%3D%3D%3De%26%26(h%3Di.slice())%2C2%3D%3D%3De%26%26(h%3Di.slice()%2Cc%3Dn.slice())%2Ch.length%3E0%26%260%3D%3D%3De)%7Bconst%20t%3Do%2Ce%3D1%3Bfor(let%20i%3D0%3Bi%3Ch.length%3Bi%2B%2B)%7Bconst%20s%3Dthis.frac2mm(%5B.5%2C.5%2C.5%5D)%3Bs%5Be%5D%3Dh%5Bi%5D%3Blet%20n%3Dthis.mm2frac(s)%3Bn%3Dn%5Be%5D%3Blet%20r%3Dthis.frac2mm(%5B0%2Cn%2Ct%5D)%3Br%3DCi(r%2C%5B0%2C1%2C2%5D)%3Blet%20a%3Dthis.frac2mm(%5B1%2Cn%2Ct%5D)%3Ba%3DCi(a%2C%5B0%2C1%2C2%5D)%2Cr%3Dm(r)%2Ca%3Dm(a)%2Cthis.drawLine(%5Br%5B0%5D%2Cr%5B1%5D%2Ca%5B0%5D%2Ca%5B1%5D%5D%2Cd)%7D%7Dif(h.length%3E0%26%261%3D%3D%3De)%7Bconst%20t%3Do%2Ce%3D2%3Bfor(let%20i%3D0%3Bi%3Ch.length%3Bi%2B%2B)%7Bconst%20s%3Dthis.frac2mm(%5B.5%2C.5%2C.5%5D)%3Bs%5Be%5D%3Dh%5Bi%5D%3Blet%20n%3Dthis.mm2frac(s)%3Bn%3Dn%5Be%5D%3Blet%20r%3Dthis.frac2mm(%5B0%2Ct%2Cn%5D)%3Br%3DCi(r%2C%5B0%2C2%2C1%5D)%3Blet%20a%3Dthis.frac2mm(%5B1%2Ct%2Cn%5D)%3Ba%3DCi(a%2C%5B0%2C2%2C1%5D)%2Cr%3Dm(r)%2Ca%3Dm(a)%2Cthis.drawLine(%5Br%5B0%5D%2Cr%5B1%5D%2Ca%5B0%5D%2Ca%5B1%5D%5D%2Cd)%7D%7Dif(h.length%3E0%26%262%3D%3D%3De)%7Bconst%20t%3Do%2Ce%3D2%3Bfor(let%20i%3D0%3Bi%3Ch.length%3Bi%2B%2B)%7Bconst%20s%3Dthis.frac2mm(%5B.5%2C.5%2C.5%5D)%3Bs%5Be%5D%3Dh%5Bi%5D%3Blet%20n%3Dthis.mm2frac(s)%3Bn%3Dn%5Be%5D%3Blet%20r%3Dthis.frac2mm(%5Bt%2C0%2Cn%5D)%3Br%3DCi(r%2C%5B1%2C2%2C0%5D)%3Blet%20a%3Dthis.frac2mm(%5Bt%2C1%2Cn%5D)%3Ba%3DCi(a%2C%5B1%2C2%2C0%5D)%2Cr%3Dm(r)%2Ca%3Dm(a)%2Cthis.drawLine(%5Br%5B0%5D%2Cr%5B1%5D%2Ca%5B0%5D%2Ca%5B1%5D%5D%2Cd)%7D%7Dif(c.length%3E0%26%260%3D%3D%3De)%7Bconst%20t%3Do%2Ce%3D0%3Bfor(let%20i%3D0%3Bi%3Cc.length%3Bi%2B%2B)%7Bconst%20s%3Dthis.frac2mm(%5B.5%2C.5%2C.5%5D)%3Bs%5Be%5D%3Dc%5Bi%5D%3Blet%20n%3Dthis.mm2frac(s)%3Bn%3Dn%5Be%5D%3Blet%20r%3Dthis.frac2mm(%5Bn%2C0%2Ct%5D)%3Br%3DCi(r%2C%5B0%2C1%2C2%5D)%3Blet%20a%3Dthis.frac2mm(%5Bn%2C1%2Ct%5D)%3Ba%3DCi(a%2C%5B0%2C1%2C2%5D)%2Cr%3Dm(r)%2Ca%3Dm(a)%2Cthis.drawLine(%5Br%5B0%5D%2Cr%5B1%5D%2Ca%5B0%5D%2Ca%5B1%5D%5D%2Cd)%7D%7Dif(c.length%3E0%26%261%3D%3D%3De)%7Bconst%20t%3Do%2Ce%3D0%3Bfor(let%20i%3D0%3Bi%3Cc.length%3Bi%2B%2B)%7Bconst%20s%3Dthis.frac2mm(%5B.5%2C.5%2C.5%5D)%3Bs%5Be%5D%3Dc%5Bi%5D%3Blet%20n%3Dthis.mm2frac(s)%3Bn%3Dn%5Be%5D%3Blet%20r%3Dthis.frac2mm(%5Bn%2Ct%2C0%5D)%3Br%3DCi(r%2C%5B0%2C2%2C1%5D)%3Blet%20a%3Dthis.frac2mm(%5Bn%2Ct%2C1%5D)%3Ba%3DCi(a%2C%5B0%2C2%2C1%5D)%2Cr%3Dm(r)%2Ca%3Dm(a)%2Cthis.drawLine(%5Br%5B0%5D%2Cr%5B1%5D%2Ca%5B0%5D%2Ca%5B1%5D%5D%2Cd)%7D%7Dif(c.length%3E0%26%262%3D%3D%3De)%7Bconst%20t%3Do%2Ce%3D1%3Bfor(let%20i%3D0%3Bi%3Cc.length%3Bi%2B%2B)%7Bconst%20s%3Dthis.frac2mm(%5B.5%2C.5%2C.5%5D)%3Bs%5Be%5D%3Dc%5Bi%5D%3Blet%20n%3Dthis.mm2frac(s)%3Bn%3Dn%5Be%5D%3Blet%20r%3Dthis.frac2mm(%5Bt%2Cn%2C0%5D)%3Br%3DCi(r%2C%5B1%2C2%2C0%5D)%3Blet%20a%3Dthis.frac2mm(%5Bt%2Cn%2C1%5D)%3Ba%3DCi(a%2C%5B1%2C2%2C0%5D)%2Cr%3Dm(r)%2Ca%3Dm(a)%2Cthis.drawLine(%5Br%5B0%5D%2Cr%5B1%5D%2Ca%5B0%5D%2Ca%5B1%5D%5D%2Cd)%7D%7D%7DdrawCrossLines(t%2Ce%2Ci%2Cs%2Cn)%7Bif(t%3C0%7C%7Cthis.screenSlices.length%3C%3Dt)return%3Bif(this.opts.isSliceMM)return%20this.drawCrossLinesMM(t%2Ce%2Ci%2Cs%2Cn)%3Bif(this.screenSlices%5Bt%5D.sliceFrac%3D%3D%3D1%2F0)return%20this.drawCrossLinesMM(t%2Ce%2Ci%2Cs%2Cn)%3Bconst%20r%3Dthis.screenSlices%5Bt%5D%3Blet%20a%3Ds.slice()%2Co%3Dn.slice()%3Bif(1%3D%3D%3De%26%26(a%3Di.slice())%2C2%3D%3D%3De%26%26(a%3Di.slice()%2Co%3Ds.slice())%2Ca.length%3E0)%7Bconst%20t%3Dr.leftTopWidthHeight.slice()%3Blet%20i%3D2%3B0%3D%3D%3De%26%26(i%3D1)%3Bconst%20s%3Dthis.frac2mm(%5B.5%2C.5%2C.5%5D)%3Bfor(let%20e%3D0%3Be%3Ca.length%3Be%2B%2B)%7Bs%5Bi%5D%3Da%5Be%5D%3Bconst%20n%3Dthis.mm2frac(s)%3Bthis.drawRect(%5Bt%5B0%5D%2Ct%5B1%5D%2Bt%5B3%5D-n%5Bi%5D*t%5B3%5D%2Ct%5B2%5D%2C1%5D)%7D%7Dif(o.length%3E0)%7Bconst%20t%3Dr.leftTopWidthHeight.slice()%2Ci%3Dr.fovMM%5B0%5D%3C0%3Blet%20s%3D0%3B2%3D%3D%3De%26%26(s%3D1)%3Bconst%20n%3Dthis.frac2mm(%5B.5%2C.5%2C.5%5D)%3Bfor(let%20e%3D0%3Be%3Co.length%3Be%2B%2B)%7Bn%5Bs%5D%3Do%5Be%5D%3Bconst%20r%3Dthis.mm2frac(n)%3Bi%3Fthis.drawRect(%5Bt%5B0%5D%2B(t%5B2%5D-r%5Bs%5D*t%5B2%5D)%2Ct%5B1%5D%2C1%2Ct%5B3%5D%5D)%3Athis.drawRect(%5Bt%5B0%5D%2Br%5Bs%5D*t%5B2%5D%2Ct%5B1%5D%2C1%2Ct%5B3%5D%5D)%7D%7D%7DdrawMosaic(t)%7Bif(0%3D%3D%3Dthis.volumes.length)return%20void%20l.debug(%22Unable%20to%20draw%20mosaic%20until%20voxel-based%20image%20is%20loaded%22)%3Bthis.screenSlices%3D%5B%5D%3Bconst%20e%3Dthis.screenFieldOfViewMM(0%2C!0)%2Ci%3Dthis.screenFieldOfViewMM(0)%2Cs%3D%5B%5D%2Cn%3D%5B%5D%2Cr%3D%5B%5D%2Ca%3D(t%3Dt.replaceAll(%22%3B%22%2C%22%20%3B%22).trim()).split(%2F%5Cs%2B%2F)%3Blet%20o%3D1%3Bconst%20h%3Dthis.opts.textHeight%3Blet%20c%3D0%2Cd%3D0%3Bfor(let%20t%3D0%3Bt%3C2%3Bt%2B%2B)%7Blet%20l%3D!1%2Cm%3D!1%3Bl%3D!1%3Blet%20u%3D0%2CA%3D0%2Cf%3D0%2Cg%3D0%2Cp%3D!1%2Cv%3D0%3Bfor(let%20x%3D0%3Bx%3Ca.length%3Bx%2B%2B)%7Bconst%20w%3Da%5Bx%5D%3Bif(w.includes(%22X%22))%7Bm%3D!0%3Bcontinue%7Dif(w.includes(%22L%22))%7Bp%3D!w.includes(%22-%22)%3Bcontinue%7Dif(w.includes(%22V%22)%7C%7Cw.includes(%22H%22))%7Bx%2B%2B%3Bcontinue%7Dw.includes(%22A%22)%26%26(v%3D0)%2Cw.includes(%22C%22)%26%26(v%3D1)%2Cw.includes(%22S%22)%26%26(v%3D2)%2Cw.includes(%22R%22)%26%26(l%3D!0)%2Cw.includes(%22%3B%22)%26%26(f%2B%3Du%2Cg%3DMath.max(g%2CA)%2Cu%3D0%2CA%3D0)%3Bconst%20C%3DparseFloat(w)%3Bif(isNaN(C))continue%3Blet%20b%3D0%2Cy%3D0%2CI%3Di%3Bif(l%26%26(I%3De)%2Cb%3D2%3D%3D%3Dv%3FI%5B1%5D%3AI%5B0%5D%2Cy%3D0%3D%3D%3Dv%3FI%5B1%5D%3AI%5B2%5D%2C0%3D%3D%3Dt)l%7C%7C(0%3D%3D%3Dv%26%26s.push(C)%2C1%3D%3D%3Dv%26%26n.push(C)%2C2%3D%3D%3Dv%26%26r.push(C))%3Belse%7Bconst%20t%3D%5Bc%2Bo*A%2Cd%2Bo*f%2Co*b%2Co*y%5D%3Bif(this.opts.textHeight%3Dp%3Fh%3A0%2Cl)%7Blet%20e%3DC%3C0%3F-1%2F0%3A1%2F0%3BObject.is(C%2C-0)%26%26(e%3D-1%2F0)%2Cthis.draw2D(t%2Cv%2Ce)%7Delse%20this.draw2D(t%2Cv%2CC)%3Bm%26%26this.drawCrossLines(this.screenSlices.length-1%2Cv%2Cs%2Cn%2Cr)%2Cl%3D!1%2Cm%3D!1%7DA%2B%3Db%2Cu%3DMath.max(u%2Cy)%7Dif(f%2B%3Du%2Cg%3DMath.max(g%2CA)%2Cg%3C%3D0%7C%7Cf%3C%3D0)break%3Bconst%20x%3Dthis.gl.canvas.width%2Fg%2Cw%3Dthis.effectiveCanvasHeight()%2Ff%3Bo%3DMath.min(x%2Cw)%2Cthis.opts.centerMosaic%26%26(c%3DMath.floor(.5*(this.gl.canvas.width-g*o))%2Cd%3DMath.floor(.5*(this.effectiveCanvasHeight()-f*o)))%7Dthis.opts.textHeight%3Dh%7DdrawSceneCore()%7Bif(!this.initialized)return%3Bif(this.colorbarHeight%3D0%2Cthis.gl.clearColor(this.opts.backColor%5B0%5D%2Cthis.opts.backColor%5B1%5D%2Cthis.opts.backColor%5B2%5D%2Cthis.opts.backColor%5B3%5D)%2Cthis.gl.clear(this.gl.COLOR_BUFFER_BIT%7Cthis.gl.DEPTH_BUFFER_BIT)%2Cthis.bmpTexture%26%26this.thumbnailVisible)return%20void%20this.drawThumbnail()%3Blet%20t%3D%22%22%3Bif(0%3D%3D%3Dthis.volumes.length%7C%7Cvoid%200%3D%3D%3Dthis.volumes%5B0%5D.dims)return%20this.meshes.length%3E0%3F(this.screenSlices%3D%5B%5D%2Cthis.opts.sliceType%3D4%2Cthis.draw3D()%2Cvoid(this.opts.isColorbar%26%26this.drawColorbar()))%3Avoid%20this.drawLoadingText(this.loadingText)%3Bif(null%3D%3D%3Dthis.back)return%3Bif(this.uiData.isDragging%26%26this.scene.clipPlaneDepthAziElev%5B0%5D%3C1.8%26%26this.inRenderTile(this.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D)%3E%3D0)%7Bconst%20t%3Dthis.uiData.dragStart%5B0%5D-this.uiData.dragEnd%5B0%5D%2Ce%3Dthis.uiData.dragStart%5B1%5D-this.uiData.dragEnd%5B1%5D%2Ci%3Dthis.uiData.dragClipPlaneStartDepthAziElev.slice()%3Bif(i%5B1%5D-%3Dt%2Ci%5B1%5D%3Di%5B1%5D%25360%2Ci%5B2%5D%2B%3De%2Ci%5B1%5D!%3D%3Dthis.scene.clipPlaneDepthAziElev%5B1%5D%7C%7Ci%5B2%5D!%3D%3Dthis.scene.clipPlaneDepthAziElev%5B2%5D)return%20this.scene.clipPlaneDepthAziElev%3Di%2Cthis.setClipPlane(this.scene.clipPlaneDepthAziElev)%7Dif(this.sliceMosaicString.length%3C1%26%264%3D%3D%3Dthis.opts.sliceType)return%20this.opts.isColorbar%26%26this.reserveColorbarPanel()%2Cthis.screenSlices%3D%5B%5D%2Cthis.draw3D()%2Cvoid(this.opts.isColorbar%26%26this.drawColorbar())%3Bthis.opts.isColorbar%26%26this.reserveColorbarPanel()%3Bconst%20e%3Dthis.getMaxVols()%2Ci%3D3%3D%3D%3Dthis.opts.sliceType%26%26e%3E1%26%26this.graph.autoSizeMultiplanar%26%26this.graph.opacity%3E0%3Bif(this.sliceMosaicString.length%3E0)this.drawMosaic(this.sliceMosaicString)%3Belse%20if(this.gl.viewport(0%2C0%2Cthis.gl.canvas.width%2Cthis.gl.canvas.height)%2Cthis.screenSlices%3D%5B%5D%2C0%3D%3D%3Dthis.opts.sliceType)this.draw2D(%5B0%2C0%2C0%2C0%5D%2C0)%3Belse%20if(1%3D%3D%3Dthis.opts.sliceType)this.draw2D(%5B0%2C0%2C0%2C0%5D%2C1)%3Belse%20if(2%3D%3D%3Dthis.opts.sliceType)this.draw2D(%5B0%2C0%2C0%2C0%5D%2C2)%3Belse%7Blet%20t%3D!1%3Bthis.opts.multiplanarForceRender%3F(t%3D!0%2Cthis.opts.multiplanarForceRender%3Fthis.opts.multiplanarShowRender%3D1%3Athis.opts.multiplanarShowRender%3D2%2Cdelete%20this.opts.multiplanarForceRender)%3A1%3D%3D%3Dthis.opts.multiplanarShowRender%26%26(t%3D!0)%3Bconst%20s%3DisFinite(this.drawPenLocation%5B0%5D)%26%26this.opts.drawingEnabled%2C%7BvolScale%3An%7D%3Dthis.sliceScale()%2Cr%3Dn.slice()%3Bthis.opts.multiplanarEqualSize%26%26(n%5B0%5D%3D1%2Cn%5B1%5D%3D1%2Cn%5B2%5D%3D1)%2C%22number%22!%3Dtypeof%20this.opts.multiplanarPadPixels%26%26l.debug(%22multiplanarPadPixels%20must%20be%20numeric%22)%3Bconst%20a%3DparseFloat(%60%24%7Bthis.opts.multiplanarPadPixels%7D%60)%2Co%3Dthis.scaleSlice(n%5B0%5D%2Bn%5B1%5D%2Cn%5B1%5D%2Bn%5B2%5D%2C1*a%2C1*a)%2Ch%3DMath.max(Math.max(n%5B1%5D%2Cn%5B2%5D)%2Cn%5B0%5D)%2Cc%3Dthis.scaleSlice(n%5B0%5D%2Bn%5B0%5D%2Bn%5B1%5D%2CMath.max(n%5B1%5D%2Cn%5B2%5D)%2C2*a)%2Cd%3Dthis.scaleSlice(n%5B0%5D%2Bn%5B0%5D%2Bn%5B1%5D%2Bh%2CMath.max(n%5B1%5D%2Cn%5B2%5D)%2C3*a)%2Cm%3Dthis.scaleSlice(h%2Cn%5B1%5D%2Bn%5B2%5D%2Bn%5B2%5D%2C0%2C2*a)%2Cu%3Dthis.scaleSlice(h%2Cn%5B1%5D%2Bn%5B2%5D%2Bn%5B2%5D%2Bh%2C0%2C3*a)%3Blet%20A%3D!s%26%26(e%3C2%7C%7C!i)%2Cf%3D!1%2Cg%3D!1%2Cp%3D!1%3B1%3D%3D%3Dthis.opts.multiplanarLayout%3Ff%3D!0%3A2%3D%3D%3Dthis.opts.multiplanarLayout%3Fg%3D!0%3A3%3D%3D%3Dthis.opts.multiplanarLayout%3Fp%3D!0%3Am%5B4%5D%3Ec%5B4%5D%26%26m%5B4%5D%3Eo%5B4%5D%3Ff%3D!0%3Ac%5B4%5D%3Eo%5B4%5D%3Fp%3D!0%3Ag%3D!0%3Blet%20v%3Do%3Bf%3F(v%3Dm%2Ct%7C%7C2%3D%3D%3Dthis.opts.multiplanarShowRender%26%26u%5B4%5D%3E%3Dm%5B4%5D%3Fv%3Du%3AA%3D!1)%3Ap%26%26(v%3Dc%2Ct%7C%7C2%3D%3D%3Dthis.opts.multiplanarShowRender%26%26d%5B4%5D%3E%3Dc%5B4%5D%3Fv%3Dd%3AA%3D!1)%3Bconst%20x%3Dn%5B0%5D*v%5B4%5D%2Cw%3Dn%5B1%5D*v%5B4%5D%2CC%3Dn%5B2%5D*v%5B4%5D%2Cb%3Dr%5B0%5D*v%5B4%5D%2Cy%3Dr%5B1%5D*v%5B4%5D%2CI%3Dr%5B2%5D*v%5B4%5D%3Bif(f)%7Bif(this.draw2D(%5Bv%5B0%5D%2Cv%5B1%5D%2Cx%2Cw%5D%2C0%2CNaN%2C%5Bb%2Cy%5D)%2Cthis.draw2D(%5Bv%5B0%5D%2Cv%5B1%5D%2Bw%2Ba%2Cx%2CC%5D%2C1%2CNaN%2C%5Bb%2CI%5D)%2Cthis.draw2D(%5Bv%5B0%5D%2Cv%5B1%5D%2Bw%2Ba%2BC%2Ba%2Cw%2CC%5D%2C2%2CNaN%2C%5By%2CI%5D)%2CA)%7Bconst%20t%3Dh*v%5B4%5D%3Bthis.draw3D(%5Bv%5B0%5D%2Cv%5B1%5D%2Bw%2BC%2BC%2B3*a%2Ct%2Ct%5D)%7D%7Delse%20if(p)%7Bif(this.draw2D(%5Bv%5B0%5D%2Cv%5B1%5D%2Cx%2Cw%5D%2C0%2CNaN%2C%5Bb%2Cy%5D)%2Cthis.draw2D(%5Bv%5B0%5D%2Bx%2Ba%2Cv%5B1%5D%2Cx%2CC%5D%2C1%2CNaN%2C%5Bb%2CI%5D)%2Cthis.draw2D(%5Bv%5B0%5D%2Bx%2Bx%2B2*a%2Cv%5B1%5D%2Cw%2CC%5D%2C2%2CNaN%2C%5By%2CI%5D)%2CA)%7Bconst%20t%3Dh*v%5B4%5D%3Bthis.draw3D(%5Bv%5B0%5D%2Bx%2Bx%2Bw%2B3*a%2Cv%5B1%5D%2Ct%2Ct%5D)%7D%7Delse%20g%26%26(t%7C%7C(A%3D!1)%2C2%3D%3D%3Dthis.opts.multiplanarShowRender%26%26(A%3D!0)%2Cthis.draw2D(%5Bv%5B0%5D%2Cv%5B1%5D%2BC%2Ba%2Cx%2Cw%5D%2C0%2CNaN%2C%5Bb%2Cy%5D)%2Cthis.draw2D(%5Bv%5B0%5D%2Cv%5B1%5D%2Cx%2CC%5D%2C1%2CNaN%2C%5Bb%2CI%5D)%2Cthis.draw2D(%5Bv%5B0%5D%2Bx%2Ba%2Cv%5B1%5D%2Cw%2CC%5D%2C2%2CNaN%2C%5By%2CI%5D)%2CA%26%26this.draw3D(%5Bv%5B0%5D%2Bx%2Ba%2Cv%5B1%5D%2BC%2Ba%2Cw%2Cw%5D))%7Dif(this.opts.isRuler%26%26this.drawRuler()%2Cthis.opts.isColorbar%26%26this.drawColorbar()%2Ci%26%26this.drawGraph()%2Cthis.uiData.isDragging)%7Bif(this.uiData.mouseButtonCenterDown)return%20void%20this.dragForCenterButton(%5Bthis.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D%2Cthis.uiData.dragEnd%5B0%5D%2Cthis.uiData.dragEnd%5B1%5D%5D)%3Bif(4%3D%3D%3Dthis.opts.dragMode)return%20void%20this.dragForSlicer3D(%5Bthis.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D%2Cthis.uiData.dragEnd%5B0%5D%2Cthis.uiData.dragEnd%5B1%5D%5D)%3Bif(3%3D%3D%3Dthis.opts.dragMode)return%20void%20this.dragForPanZoom(%5Bthis.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D%2Cthis.uiData.dragEnd%5B0%5D%2Cthis.uiData.dragEnd%5B1%5D%5D)%3Bif(this.inRenderTile(this.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D)%3E%3D0)return%3Bif(2%3D%3D%3Dthis.opts.dragMode)return%20void%20this.drawMeasurementTool(%5Bthis.uiData.dragStart%5B0%5D%2Cthis.uiData.dragStart%5B1%5D%2Cthis.uiData.dragEnd%5B0%5D%2Cthis.uiData.dragEnd%5B1%5D%5D)%3Bconst%20t%3DMath.abs(this.uiData.dragStart%5B0%5D-this.uiData.dragEnd%5B0%5D)%2Ce%3DMath.abs(this.uiData.dragStart%5B1%5D-this.uiData.dragEnd%5B1%5D)%3Breturn%20void%20this.drawSelectionBox(%5BMath.min(this.uiData.dragStart%5B0%5D%2Cthis.uiData.dragEnd%5B0%5D)%2CMath.min(this.uiData.dragStart%5B1%5D%2Cthis.uiData.dragEnd%5B1%5D)%2Ct%2Ce%5D)%7Dif(this.opts.clickToSegment)%7Bconst%20t%3Dthis.mousePos%5B0%5D%2Ce%3Dthis.mousePos%5B1%5D%3Bif(this.inRenderTile(t%2Ce)%3E%3D0)return%3Bconst%20i%3Dthis.tileIndex(t%2Ce)%3Bif(i%3E-1)%7Bconst%20s%3Dthis.screenSlices%5Bi%5D.fovMM%2Cn%3Dthis.screenSlices%5Bi%5D.leftTopWidthHeight%5B2%5D%2Fs%5B0%5D%2Cr%3Dthis.opts.crosshairColor%2Ca%3D%5Br%5B0%5D%2Cr%5B1%5D%2Cr%5B2%5D%2C.4%5D%2Co%3Dthis.opts.clickToSegmentRadius*n%3Bthis.drawCircle(%5Bt-o%2Ce-o%2C2*o%2C2*o%5D%2Ca%2C1)%7D%7Dconst%20s%3Dthis.frac2mm(%5Bthis.scene.crosshairPos%5B0%5D%2Cthis.scene.crosshairPos%5B1%5D%2Cthis.scene.crosshairPos%5B2%5D%5D)%3Breturn%20t%3Ds%5B0%5D.toFixed(2)%2B%22%C3%97%22%2Bs%5B1%5D.toFixed(2)%2B%22%C3%97%22%2Bs%5B2%5D.toFixed(2)%2Cthis.readyForSync%3D!0%2Cthis.sync()%2Cthis.drawAnchoredLabels()%2Ct%7DdrawScene()%7Bif(this.isBusy)return%20void(this.needsRefresh%3D!0)%3Bthis.isBusy%3D!1%2Cthis.needsRefresh%3D!1%3Blet%20t%3Dthis.drawSceneCore()%3Breturn%20null!%3D%3Dthis._gl%26%26this.gl.finish()%2Cthis.needsRefresh%26%26(t%3Dthis.drawScene())%2Ct%7Dget%20gl()%7Bif(!this._gl)throw%20new%20Error(%22unable%20to%20get%20WebGL%20context.%20Maybe%20the%20browser%20doesn't%20support%20WebGL2.%22)%3Breturn%20this._gl%7Dset%20gl(t)%7Bthis._gl%3Dt%7D%7D%3Bexport%7Bii%20as%20DEFAULT_OPTIONS%2Cei%20as%20DRAG_MODE%2Csi%20as%20INITIAL_SCENE_DATA%2Coi%20as%20LabelAnchorPoint%2Cai%20as%20LabelLineTerminator%2Cri%20as%20LabelTextAlignment%2Cti%20as%20MULTIPLANAR_TYPE%2CSi%20as%20NVController%2Cni%20as%20NVDocument%2CJe%20as%20NVImage%2Cqe%20as%20NVImageFromUrlOptions%2Chi%20as%20NVLabel3D%2Cli%20as%20NVLabel3DStyle%2CFe%20as%20NVMesh%2CDe%20as%20NVMeshFromUrlOptions%2CMe%20as%20NVMeshLayerDefaults%2CIe%20as%20NVMeshLoaders%2Coe%20as%20NVMeshUtilities%2Cbe%20as%20NVUtilities%2Cki%20as%20Niivue%2C%24e%20as%20SHOW_RENDER%2C_e%20as%20SLICE_TYPE%2Cne%20as%20cmapper%2Cse%20as%20colortables%7D%3B"