This repository was archived by the owner on Aug 29, 2025. It is now read-only.
forked from wwwtyro/speck
-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathbundle.js
More file actions
1 lines (1 loc) · 77.2 KB
/
Copy pathbundle.js
File metadata and controls
1 lines (1 loc) · 77.2 KB
1
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/build/",n(n.s=5)}([function(e,t){e.exports={},e.exports[0]=e.exports.Xx={symbol:"Xx",name:"unknown",mass:1,radius:1,color:[1,.078,.576],number:0},e.exports[1]=e.exports.H={symbol:"H",name:"hydrogen",mass:1.00794,radius:.31,color:[1,1,1],number:1},e.exports[2]=e.exports.He={symbol:"He",name:"helium",mass:4.002602,radius:.28,color:[.851,1,1],number:2},e.exports[3]=e.exports.Li={symbol:"Li",name:"lithium",mass:6.941,radius:1.28,color:[.8,.502,1],number:3},e.exports[4]=e.exports.Be={symbol:"Be",name:"beryllium",mass:9.012182,radius:.96,color:[.761,1,0],number:4},e.exports[5]=e.exports.B={symbol:"B",name:"boron",mass:10.811,radius:.84,color:[1,.71,.71],number:5},e.exports[6]=e.exports.C={symbol:"C",name:"carbon",mass:12.0107,radius:.73,color:[.565,.565,.565],number:6},e.exports[7]=e.exports.N={symbol:"N",name:"nitrogen",mass:14.0067,radius:.71,color:[.188,.314,.973],number:7},e.exports[8]=e.exports.O={symbol:"O",name:"oxygen",mass:15.9994,radius:.66,color:[1,.051,.051],number:8},e.exports[9]=e.exports.F={symbol:"F",name:"fluorine",mass:18.9984032,radius:.57,color:[.565,.878,.314],number:9},e.exports[10]=e.exports.Ne={symbol:"Ne",name:"neon",mass:20.1797,radius:.58,color:[.702,.89,.961],number:10},e.exports[11]=e.exports.Na={symbol:"Na",name:"sodium",mass:22.98976928,radius:1.66,color:[.671,.361,.949],number:11},e.exports[12]=e.exports.Mg={symbol:"Mg",name:"magnesium",mass:24.305,radius:1.41,color:[.541,1,0],number:12},e.exports[13]=e.exports.Al={symbol:"Al",name:"aluminum",mass:26.9815386,radius:1.21,color:[.749,.651,.651],number:13},e.exports[14]=e.exports.Si={symbol:"Si",name:"silicon",mass:28.0855,radius:1.11,color:[.941,.784,.627],number:14},e.exports[15]=e.exports.P={symbol:"P",name:"phosphorus",mass:30.973762,radius:1.07,color:[1,.502,0],number:15},e.exports[16]=e.exports.S={symbol:"S",name:"sulfur",mass:32.065,radius:1.05,color:[1,1,.188],number:16},e.exports[17]=e.exports.Cl={symbol:"Cl",name:"chlorine",mass:35.453,radius:1.02,color:[.122,.941,.122],number:17},e.exports[18]=e.exports.Ar={symbol:"Ar",name:"argon",mass:39.948,radius:1.06,color:[.502,.82,.89],number:18},e.exports[19]=e.exports.K={symbol:"K",name:"potassium",mass:39.0983,radius:2.03,color:[.561,.251,.831],number:19},e.exports[20]=e.exports.Ca={symbol:"Ca",name:"calcium",mass:40.078,radius:1.76,color:[.239,1,0],number:20},e.exports[21]=e.exports.Sc={symbol:"Sc",name:"scandium",mass:44.955912,radius:1.7,color:[.902,.902,.902],number:21},e.exports[22]=e.exports.Ti={symbol:"Ti",name:"titanium",mass:47.867,radius:1.6,color:[.749,.761,.78],number:22},e.exports[23]=e.exports.V={symbol:"V",name:"vanadium",mass:50.9415,radius:1.53,color:[.651,.651,.671],number:23},e.exports[24]=e.exports.Cr={symbol:"Cr",name:"chromium",mass:51.9961,radius:1.39,color:[.541,.6,.78],number:24},e.exports[25]=e.exports.Mn={symbol:"Mn",name:"manganese",mass:54.938045,radius:1.39,color:[.611,.478,.78],number:25},e.exports[26]=e.exports.Fe={symbol:"Fe",name:"iron",mass:55.845,radius:1.32,color:[.878,.4,.2],number:26},e.exports[27]=e.exports.Co={symbol:"Co",name:"cobalt",mass:58.6934,radius:1.26,color:[.941,.565,.627],number:27},e.exports[28]=e.exports.Ni={symbol:"Ni",name:"nickel",mass:58.933195,radius:1.24,color:[.314,.816,.314],number:28},e.exports[29]=e.exports.Cu={symbol:"Cu",name:"copper",mass:63.546,radius:1.32,color:[.784,.502,.2],number:29},e.exports[30]=e.exports.Zn={symbol:"Zn",name:"zinc",mass:65.38,radius:1.22,color:[.49,.502,.69],number:30},e.exports[31]=e.exports.Ga={symbol:"Ga",name:"gallium",mass:69.723,radius:1.22,color:[.761,.561,.561],number:31},e.exports[32]=e.exports.Ge={symbol:"Ge",name:"germanium",mass:72.64,radius:1.2,color:[.4,.561,.561],number:32},e.exports[33]=e.exports.As={symbol:"As",name:"arsenic",mass:74.9216,radius:1.19,color:[.741,.502,.89],number:33},e.exports[34]=e.exports.Se={symbol:"Se",name:"selenium",mass:78.96,radius:1.2,color:[1,.631,0],number:34},e.exports[35]=e.exports.Br={symbol:"Br",name:"bromine",mass:79.904,radius:1.2,color:[.651,.161,.161],number:35},e.exports[36]=e.exports.Kr={symbol:"Kr",name:"krypton",mass:83.798,radius:1.16,color:[.361,.722,.82],number:36},e.exports[37]=e.exports.Rb={symbol:"Rb",name:"rubidium",mass:85.4678,radius:2.2,color:[.439,.18,.69],number:37},e.exports[38]=e.exports.Sr={symbol:"Sr",name:"strontium",mass:87.62,radius:1.95,color:[0,1,0],number:38},e.exports[39]=e.exports.Y={symbol:"Y",name:"yttrium",mass:88.90585,radius:1.9,color:[.58,1,1],number:39},e.exports[40]=e.exports.Zr={symbol:"Zr",name:"zirconium",mass:91.224,radius:1.75,color:[.58,.878,.878],number:40},e.exports[41]=e.exports.Nb={symbol:"Nb",name:"niobium",mass:92.90638,radius:1.64,color:[.451,.761,.788],number:41},e.exports[42]=e.exports.Mo={symbol:"Mo",name:"molybdenum",mass:95.96,radius:1.54,color:[.329,.71,.71],number:42},e.exports[43]=e.exports.Tc={symbol:"Tc",name:"technetium",mass:98,radius:1.47,color:[.231,.62,.62],number:43},e.exports[44]=e.exports.Ru={symbol:"Ru",name:"ruthenium",mass:101.07,radius:1.46,color:[.141,.561,.561],number:44},e.exports[45]=e.exports.Rh={symbol:"Rh",name:"rhodium",mass:102.9055,radius:1.42,color:[.039,.49,.549],number:45},e.exports[46]=e.exports.Pd={symbol:"Pd",name:"palladium",mass:106.42,radius:1.39,color:[0,.412,.522],number:46},e.exports[47]=e.exports.Ag={symbol:"Ag",name:"silver",mass:107.8682,radius:1.45,color:[.753,.753,.753],number:47},e.exports[48]=e.exports.Cd={symbol:"Cd",name:"cadmium",mass:112.411,radius:1.44,color:[1,.851,.561],number:48},e.exports[49]=e.exports.In={symbol:"In",name:"indium",mass:114.818,radius:1.42,color:[.651,.459,.451],number:49},e.exports[50]=e.exports.Sn={symbol:"Sn",name:"tin",mass:118.71,radius:1.39,color:[.4,.502,.502],number:50},e.exports[51]=e.exports.Sb={symbol:"Sb",name:"antimony",mass:121.76,radius:1.39,color:[.62,.388,.71],number:51},e.exports[52]=e.exports.Te={symbol:"Te",name:"tellurium",mass:127.6,radius:1.38,color:[.831,.478,0],number:52},e.exports[53]=e.exports.I={symbol:"I",name:"iodine",mass:126.9047,radius:1.39,color:[.58,0,.58],number:53},e.exports[54]=e.exports.Xe={symbol:"Xe",name:"xenon",mass:131.293,radius:1.4,color:[.259,.62,.69],number:54},e.exports[55]=e.exports.Cs={symbol:"Cs",name:"cesium",mass:132.9054519,radius:2.44,color:[.341,.09,.561],number:55},e.exports[56]=e.exports.Ba={symbol:"Ba",name:"barium",mass:137.327,radius:2.15,color:[0,.788,0],number:56},e.exports[57]=e.exports.La={symbol:"La",name:"lanthanum",mass:138.90547,radius:2.07,color:[.439,.831,1],number:57},e.exports[58]=e.exports.Ce={symbol:"Ce",name:"cerium",mass:140.116,radius:2.04,color:[1,1,.78],number:58},e.exports[59]=e.exports.Pr={symbol:"Pr",name:"praseodymium",mass:140.90765,radius:2.03,color:[.851,1,.78],number:59},e.exports[60]=e.exports.Nd={symbol:"Nd",name:"neodymium",mass:144.242,radius:2.01,color:[.78,1,.78],number:60},e.exports[61]=e.exports.Pm={symbol:"Pm",name:"promethium",mass:145,radius:1.99,color:[.639,1,.78],number:61},e.exports[62]=e.exports.Sm={symbol:"Sm",name:"samarium",mass:150.36,radius:1.98,color:[.561,1,.78],number:62},e.exports[63]=e.exports.Eu={symbol:"Eu",name:"europium",mass:151.964,radius:1.98,color:[.38,1,.78],number:63},e.exports[64]=e.exports.Gd={symbol:"Gd",name:"gadolinium",mass:157.25,radius:1.96,color:[.271,1,.78],number:64},e.exports[65]=e.exports.Tb={symbol:"Tb",name:"terbium",mass:158.92535,radius:1.94,color:[.189,1,.78],number:65},e.exports[66]=e.exports.Dy={symbol:"Dy",name:"dysprosium",mass:162.5,radius:1.92,color:[.122,1,.78],number:66},e.exports[67]=e.exports.Ho={symbol:"Ho",name:"holmium",mass:164.93032,radius:1.92,color:[0,1,.612],number:67},e.exports[68]=e.exports.Er={symbol:"Er",name:"erbium",mass:167.259,radius:1.89,color:[0,.902,.459],number:68},e.exports[69]=e.exports.Tm={symbol:"Tm",name:"thulium",mass:168.93421,radius:1.9,color:[0,.831,.322],number:69},e.exports[70]=e.exports.Yb={symbol:"Yb",name:"ytterbium",mass:173.054,radius:1.87,color:[0,.749,.22],number:70},e.exports[71]=e.exports.Lu={symbol:"Lu",name:"lutetium",mass:174.9668,radius:1.87,color:[0,.671,.141],number:71},e.exports[72]=e.exports.Hf={symbol:"Hf",name:"hafnium",mass:178.49,radius:1.75,color:[.302,.761,1],number:72},e.exports[73]=e.exports.Ta={symbol:"Ta",name:"tantalum",mass:180.94788,radius:1.7,color:[.302,.651,1],number:73},e.exports[74]=e.exports.W={symbol:"W",name:"tungsten",mass:183.84,radius:1.62,color:[.129,.58,.839],number:74},e.exports[75]=e.exports.Re={symbol:"Re",name:"rhenium",mass:186.207,radius:1.51,color:[.149,.49,.671],number:75},e.exports[76]=e.exports.Os={symbol:"Os",name:"osmium",mass:190.23,radius:1.44,color:[.149,.4,.588],number:76},e.exports[77]=e.exports.Ir={symbol:"Ir",name:"iridium",mass:192.217,radius:1.41,color:[.09,.329,.529],number:77},e.exports[78]=e.exports.Pt={symbol:"Pt",name:"platinum",mass:195.084,radius:1.36,color:[.816,.816,.878],number:78},e.exports[79]=e.exports.Au={symbol:"Au",name:"gold",mass:196.966569,radius:1.36,color:[1,.82,.137],number:79},e.exports[80]=e.exports.Hg={symbol:"Hg",name:"mercury",mass:200.59,radius:1.32,color:[.722,.722,.816],number:80},e.exports[81]=e.exports.Tl={symbol:"Tl",name:"thallium",mass:204.3833,radius:1.45,color:[.651,.329,.302],number:81},e.exports[82]=e.exports.Pb={symbol:"Pb",name:"lead",mass:207.2,radius:1.46,color:[.341,.349,.38],number:82},e.exports[83]=e.exports.Bi={symbol:"Bi",name:"bismuth",mass:208.9804,radius:1.48,color:[.62,.31,.71],number:83},e.exports[84]=e.exports.Po={symbol:"Po",name:"polonium",mass:210,radius:1.4,color:[.671,.361,0],number:84},e.exports[85]=e.exports.At={symbol:"At",name:"astatine",mass:210,radius:1.5,color:[.459,.31,.271],number:85},e.exports[86]=e.exports.Rn={symbol:"Rn",name:"radon",mass:220,radius:1.5,color:[.259,.51,.588],number:86},e.exports[87]=e.exports.Fr={symbol:"Fr",name:"francium",mass:223,radius:2.6,color:[.259,0,.4],number:87},e.exports[88]=e.exports.Ra={symbol:"Ra",name:"radium",mass:226,radius:2.21,color:[0,.49,0],number:88},e.exports[89]=e.exports.Ac={symbol:"Ac",name:"actinium",mass:227,radius:2.15,color:[.439,.671,.98],number:89},e.exports[90]=e.exports.Th={symbol:"Th",name:"thorium",mass:231.03588,radius:2.06,color:[0,.729,1],number:90},e.exports[91]=e.exports.Pa={symbol:"Pa",name:"protactinium",mass:232.03806,radius:2,color:[0,.631,1],number:91},e.exports[92]=e.exports.U={symbol:"U",name:"uranium",mass:237,radius:1.96,color:[0,.561,1],number:92},e.exports[93]=e.exports.Np={symbol:"Np",name:"neptunium",mass:238.02891,radius:1.9,color:[0,.502,1],number:93},e.exports[94]=e.exports.Pu={symbol:"Pu",name:"plutonium",mass:243,radius:1.87,color:[0,.42,1],number:94},e.exports[95]=e.exports.Am={symbol:"Am",name:"americium",mass:244,radius:1.8,color:[.329,.361,.949],number:95},e.exports[96]=e.exports.Cm={symbol:"Cm",name:"curium",mass:247,radius:1.69,color:[.471,.361,.89],number:96},e.exports[97]=e.exports.Bk={symbol:"Bk",name:"berkelium",mass:247,radius:1.66,color:[.541,.31,.89],number:97},e.exports[98]=e.exports.Cf={symbol:"Cf",name:"californium",mass:251,radius:1.68,color:[.631,.212,.831],number:98},e.exports[99]=e.exports.Es={symbol:"Es",name:"einsteinium",mass:252,radius:1.65,color:[.702,.122,.831],number:99},e.exports[100]=e.exports.Fm={symbol:"Fm",name:"fermium",mass:257,radius:1.67,color:[.702,.122,.729],number:100},e.exports[101]=e.exports.Md={symbol:"Md",name:"mendelevium",mass:258,radius:1.73,color:[.702,.051,.651],number:101},e.exports[102]=e.exports.No={symbol:"No",name:"nobelium",mass:259,radius:1.76,color:[.741,.051,.529],number:102},e.exports[103]=e.exports.Lr={symbol:"Lr",name:"lawrencium",mass:262,radius:1.61,color:[.78,0,.4],number:103},e.exports[104]=e.exports.Rf={symbol:"Rf",name:"rutherfordium",mass:261,radius:1.57,color:[.8,0,.349],number:104},e.exports[105]=e.exports.Db={symbol:"Db",name:"dubnium",mass:262,radius:1.49,color:[.82,0,.31],number:105},e.exports[106]=e.exports.Sg={symbol:"Sg",name:"seaborgium",mass:266,radius:1.43,color:[.851,0,.271],number:106},e.exports[107]=e.exports.Bh={symbol:"Bh",name:"bohrium",mass:264,radius:1.41,color:[.878,0,.22],number:107},e.exports[108]=e.exports.Hs={symbol:"Hs",name:"hassium",mass:277,radius:1.34,color:[.902,0,.18],number:108},e.exports[109]=e.exports.Mt={symbol:"Mt",name:"meitnerium",mass:268,radius:1.29,color:[.922,0,.149],number:109},e.exports[110]=e.exports.Ds={symbol:"Ds",name:"Ds",mass:271,radius:1.28,color:[.922,0,.149],number:110},e.exports[111]=e.exports.Uuu={symbol:"Uuu",name:"Uuu",mass:272,radius:1.21,color:[.922,0,.149],number:111},e.exports[112]=e.exports.Uub={symbol:"Uub",name:"Uub",mass:285,radius:1.22,color:[.922,0,.149],number:112},e.exports[113]=e.exports.Uut={symbol:"Uut",name:"Uut",mass:284,radius:1.36,color:[.922,0,.149],number:113},e.exports[114]=e.exports.Uuq={symbol:"Uuq",name:"Uuq",mass:289,radius:1.43,color:[.922,0,.149],number:114},e.exports[115]=e.exports.Uup={symbol:"Uup",name:"Uup",mass:288,radius:1.62,color:[.922,0,.149],number:115},e.exports[116]=e.exports.Uuh={symbol:"Uuh",name:"Uuh",mass:292,radius:1.75,color:[.922,0,.149],number:116},e.exports[117]=e.exports.Uus={symbol:"Uus",name:"Uus",mass:294,radius:1.65,color:[.922,0,.149],number:117},e.exports[118]=e.exports.Uuo={symbol:"Uuo",name:"Uuo",mass:296,radius:1.57,color:[.922,0,.149],number:118}},function(e,t,n){!function(e){"use strict";var n={};n.exports=t,function(e){if(!t)var t=1e-6;if(!n)var n="undefined"!=typeof Float32Array?Float32Array:Array;if(!r)var r=Math.random;var o={setMatrixArrayType:function(e){n=e}};void 0!==e&&(e.glMatrix=o);var a=Math.PI/180;o.toRadian=function(e){return e*a};var s,i={};i.create=function(){var e=new n(2);return e[0]=0,e[1]=0,e},i.clone=function(e){var t=new n(2);return t[0]=e[0],t[1]=e[1],t},i.fromValues=function(e,t){var r=new n(2);return r[0]=e,r[1]=t,r},i.copy=function(e,t){return e[0]=t[0],e[1]=t[1],e},i.set=function(e,t,n){return e[0]=t,e[1]=n,e},i.add=function(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e},i.subtract=function(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e},i.sub=i.subtract,i.multiply=function(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e},i.mul=i.multiply,i.divide=function(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e},i.div=i.divide,i.min=function(e,t,n){return e[0]=Math.min(t[0],n[0]),e[1]=Math.min(t[1],n[1]),e},i.max=function(e,t,n){return e[0]=Math.max(t[0],n[0]),e[1]=Math.max(t[1],n[1]),e},i.scale=function(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e},i.scaleAndAdd=function(e,t,n,r){return e[0]=t[0]+n[0]*r,e[1]=t[1]+n[1]*r,e},i.distance=function(e,t){var n=t[0]-e[0],r=t[1]-e[1];return Math.sqrt(n*n+r*r)},i.dist=i.distance,i.squaredDistance=function(e,t){var n=t[0]-e[0],r=t[1]-e[1];return n*n+r*r},i.sqrDist=i.squaredDistance,i.length=function(e){var t=e[0],n=e[1];return Math.sqrt(t*t+n*n)},i.len=i.length,i.squaredLength=function(e){var t=e[0],n=e[1];return t*t+n*n},i.sqrLen=i.squaredLength,i.negate=function(e,t){return e[0]=-t[0],e[1]=-t[1],e},i.inverse=function(e,t){return e[0]=1/t[0],e[1]=1/t[1],e},i.normalize=function(e,t){var n=t[0],r=t[1],o=n*n+r*r;return o>0&&(o=1/Math.sqrt(o),e[0]=t[0]*o,e[1]=t[1]*o),e},i.dot=function(e,t){return e[0]*t[0]+e[1]*t[1]},i.cross=function(e,t,n){var r=t[0]*n[1]-t[1]*n[0];return e[0]=e[1]=0,e[2]=r,e},i.lerp=function(e,t,n,r){var o=t[0],a=t[1];return e[0]=o+r*(n[0]-o),e[1]=a+r*(n[1]-a),e},i.random=function(e,t){t=t||1;var n=2*r()*Math.PI;return e[0]=Math.cos(n)*t,e[1]=Math.sin(n)*t,e},i.transformMat2=function(e,t,n){var r=t[0],o=t[1];return e[0]=n[0]*r+n[2]*o,e[1]=n[1]*r+n[3]*o,e},i.transformMat2d=function(e,t,n){var r=t[0],o=t[1];return e[0]=n[0]*r+n[2]*o+n[4],e[1]=n[1]*r+n[3]*o+n[5],e},i.transformMat3=function(e,t,n){var r=t[0],o=t[1];return e[0]=n[0]*r+n[3]*o+n[6],e[1]=n[1]*r+n[4]*o+n[7],e},i.transformMat4=function(e,t,n){var r=t[0],o=t[1];return e[0]=n[0]*r+n[4]*o+n[12],e[1]=n[1]*r+n[5]*o+n[13],e},i.forEach=(s=i.create(),function(e,t,n,r,o,a){var i,u;for(t||(t=2),n||(n=0),u=r?Math.min(r*t+n,e.length):e.length,i=n;i<u;i+=t)s[0]=e[i],s[1]=e[i+1],o(s,s,a),e[i]=s[0],e[i+1]=s[1];return e}),i.str=function(e){return"vec2("+e[0]+", "+e[1]+")"},void 0!==e&&(e.vec2=i);var u={create:function(){var e=new n(3);return e[0]=0,e[1]=0,e[2]=0,e},clone:function(e){var t=new n(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t},fromValues:function(e,t,r){var o=new n(3);return o[0]=e,o[1]=t,o[2]=r,o},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e},set:function(e,t,n,r){return e[0]=t,e[1]=n,e[2]=r,e},add:function(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e},subtract:function(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e}};u.sub=u.subtract,u.multiply=function(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e[2]=t[2]*n[2],e},u.mul=u.multiply,u.divide=function(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e[2]=t[2]/n[2],e},u.div=u.divide,u.min=function(e,t,n){return e[0]=Math.min(t[0],n[0]),e[1]=Math.min(t[1],n[1]),e[2]=Math.min(t[2],n[2]),e},u.max=function(e,t,n){return e[0]=Math.max(t[0],n[0]),e[1]=Math.max(t[1],n[1]),e[2]=Math.max(t[2],n[2]),e},u.scale=function(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e},u.scaleAndAdd=function(e,t,n,r){return e[0]=t[0]+n[0]*r,e[1]=t[1]+n[1]*r,e[2]=t[2]+n[2]*r,e},u.distance=function(e,t){var n=t[0]-e[0],r=t[1]-e[1],o=t[2]-e[2];return Math.sqrt(n*n+r*r+o*o)},u.dist=u.distance,u.squaredDistance=function(e,t){var n=t[0]-e[0],r=t[1]-e[1],o=t[2]-e[2];return n*n+r*r+o*o},u.sqrDist=u.squaredDistance,u.length=function(e){var t=e[0],n=e[1],r=e[2];return Math.sqrt(t*t+n*n+r*r)},u.len=u.length,u.squaredLength=function(e){var t=e[0],n=e[1],r=e[2];return t*t+n*n+r*r},u.sqrLen=u.squaredLength,u.negate=function(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e},u.inverse=function(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e},u.normalize=function(e,t){var n=t[0],r=t[1],o=t[2],a=n*n+r*r+o*o;return a>0&&(a=1/Math.sqrt(a),e[0]=t[0]*a,e[1]=t[1]*a,e[2]=t[2]*a),e},u.dot=function(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]},u.cross=function(e,t,n){var r=t[0],o=t[1],a=t[2],s=n[0],i=n[1],u=n[2];return e[0]=o*u-a*i,e[1]=a*s-r*u,e[2]=r*i-o*s,e},u.lerp=function(e,t,n,r){var o=t[0],a=t[1],s=t[2];return e[0]=o+r*(n[0]-o),e[1]=a+r*(n[1]-a),e[2]=s+r*(n[2]-s),e},u.random=function(e,t){t=t||1;var n=2*r()*Math.PI,o=2*r()-1,a=Math.sqrt(1-o*o)*t;return e[0]=Math.cos(n)*a,e[1]=Math.sin(n)*a,e[2]=o*t,e},u.transformMat4=function(e,t,n){var r=t[0],o=t[1],a=t[2],s=n[3]*r+n[7]*o+n[11]*a+n[15];return s=s||1,e[0]=(n[0]*r+n[4]*o+n[8]*a+n[12])/s,e[1]=(n[1]*r+n[5]*o+n[9]*a+n[13])/s,e[2]=(n[2]*r+n[6]*o+n[10]*a+n[14])/s,e},u.transformMat3=function(e,t,n){var r=t[0],o=t[1],a=t[2];return e[0]=r*n[0]+o*n[3]+a*n[6],e[1]=r*n[1]+o*n[4]+a*n[7],e[2]=r*n[2]+o*n[5]+a*n[8],e},u.transformQuat=function(e,t,n){var r=t[0],o=t[1],a=t[2],s=n[0],i=n[1],u=n[2],m=n[3],l=m*r+i*a-u*o,c=m*o+u*r-s*a,f=m*a+s*o-i*r,p=-s*r-i*o-u*a;return e[0]=l*m+p*-s+c*-u-f*-i,e[1]=c*m+p*-i+f*-s-l*-u,e[2]=f*m+p*-u+l*-i-c*-s,e},u.rotateX=function(e,t,n,r){var o=[],a=[];return o[0]=t[0]-n[0],o[1]=t[1]-n[1],o[2]=t[2]-n[2],a[0]=o[0],a[1]=o[1]*Math.cos(r)-o[2]*Math.sin(r),a[2]=o[1]*Math.sin(r)+o[2]*Math.cos(r),e[0]=a[0]+n[0],e[1]=a[1]+n[1],e[2]=a[2]+n[2],e},u.rotateY=function(e,t,n,r){var o=[],a=[];return o[0]=t[0]-n[0],o[1]=t[1]-n[1],o[2]=t[2]-n[2],a[0]=o[2]*Math.sin(r)+o[0]*Math.cos(r),a[1]=o[1],a[2]=o[2]*Math.cos(r)-o[0]*Math.sin(r),e[0]=a[0]+n[0],e[1]=a[1]+n[1],e[2]=a[2]+n[2],e},u.rotateZ=function(e,t,n,r){var o=[],a=[];return o[0]=t[0]-n[0],o[1]=t[1]-n[1],o[2]=t[2]-n[2],a[0]=o[0]*Math.cos(r)-o[1]*Math.sin(r),a[1]=o[0]*Math.sin(r)+o[1]*Math.cos(r),a[2]=o[2],e[0]=a[0]+n[0],e[1]=a[1]+n[1],e[2]=a[2]+n[2],e},u.forEach=function(){var e=u.create();return function(t,n,r,o,a,s){var i,u;for(n||(n=3),r||(r=0),u=o?Math.min(o*n+r,t.length):t.length,i=r;i<u;i+=n)e[0]=t[i],e[1]=t[i+1],e[2]=t[i+2],a(e,e,s),t[i]=e[0],t[i+1]=e[1],t[i+2]=e[2];return t}}(),u.angle=function(e,t){var n=u.fromValues(e[0],e[1],e[2]),r=u.fromValues(t[0],t[1],t[2]);u.normalize(n,n),u.normalize(r,r);var o=u.dot(n,r);return o>1?0:Math.acos(o)},u.str=function(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"},void 0!==e&&(e.vec3=u);var m={create:function(){var e=new n(4);return e[0]=0,e[1]=0,e[2]=0,e[3]=0,e},clone:function(e){var t=new n(4);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t},fromValues:function(e,t,r,o){var a=new n(4);return a[0]=e,a[1]=t,a[2]=r,a[3]=o,a},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e},set:function(e,t,n,r,o){return e[0]=t,e[1]=n,e[2]=r,e[3]=o,e},add:function(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e},subtract:function(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e[3]=t[3]-n[3],e}};m.sub=m.subtract,m.multiply=function(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e[2]=t[2]*n[2],e[3]=t[3]*n[3],e},m.mul=m.multiply,m.divide=function(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e[2]=t[2]/n[2],e[3]=t[3]/n[3],e},m.div=m.divide,m.min=function(e,t,n){return e[0]=Math.min(t[0],n[0]),e[1]=Math.min(t[1],n[1]),e[2]=Math.min(t[2],n[2]),e[3]=Math.min(t[3],n[3]),e},m.max=function(e,t,n){return e[0]=Math.max(t[0],n[0]),e[1]=Math.max(t[1],n[1]),e[2]=Math.max(t[2],n[2]),e[3]=Math.max(t[3],n[3]),e},m.scale=function(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e},m.scaleAndAdd=function(e,t,n,r){return e[0]=t[0]+n[0]*r,e[1]=t[1]+n[1]*r,e[2]=t[2]+n[2]*r,e[3]=t[3]+n[3]*r,e},m.distance=function(e,t){var n=t[0]-e[0],r=t[1]-e[1],o=t[2]-e[2],a=t[3]-e[3];return Math.sqrt(n*n+r*r+o*o+a*a)},m.dist=m.distance,m.squaredDistance=function(e,t){var n=t[0]-e[0],r=t[1]-e[1],o=t[2]-e[2],a=t[3]-e[3];return n*n+r*r+o*o+a*a},m.sqrDist=m.squaredDistance,m.length=function(e){var t=e[0],n=e[1],r=e[2],o=e[3];return Math.sqrt(t*t+n*n+r*r+o*o)},m.len=m.length,m.squaredLength=function(e){var t=e[0],n=e[1],r=e[2],o=e[3];return t*t+n*n+r*r+o*o},m.sqrLen=m.squaredLength,m.negate=function(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=-t[3],e},m.inverse=function(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e[3]=1/t[3],e},m.normalize=function(e,t){var n=t[0],r=t[1],o=t[2],a=t[3],s=n*n+r*r+o*o+a*a;return s>0&&(s=1/Math.sqrt(s),e[0]=t[0]*s,e[1]=t[1]*s,e[2]=t[2]*s,e[3]=t[3]*s),e},m.dot=function(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3]},m.lerp=function(e,t,n,r){var o=t[0],a=t[1],s=t[2],i=t[3];return e[0]=o+r*(n[0]-o),e[1]=a+r*(n[1]-a),e[2]=s+r*(n[2]-s),e[3]=i+r*(n[3]-i),e},m.random=function(e,t){return t=t||1,e[0]=r(),e[1]=r(),e[2]=r(),e[3]=r(),m.normalize(e,e),m.scale(e,e,t),e},m.transformMat4=function(e,t,n){var r=t[0],o=t[1],a=t[2],s=t[3];return e[0]=n[0]*r+n[4]*o+n[8]*a+n[12]*s,e[1]=n[1]*r+n[5]*o+n[9]*a+n[13]*s,e[2]=n[2]*r+n[6]*o+n[10]*a+n[14]*s,e[3]=n[3]*r+n[7]*o+n[11]*a+n[15]*s,e},m.transformQuat=function(e,t,n){var r=t[0],o=t[1],a=t[2],s=n[0],i=n[1],u=n[2],m=n[3],l=m*r+i*a-u*o,c=m*o+u*r-s*a,f=m*a+s*o-i*r,p=-s*r-i*o-u*a;return e[0]=l*m+p*-s+c*-u-f*-i,e[1]=c*m+p*-i+f*-s-l*-u,e[2]=f*m+p*-u+l*-i-c*-s,e},m.forEach=function(){var e=m.create();return function(t,n,r,o,a,s){var i,u;for(n||(n=4),r||(r=0),u=o?Math.min(o*n+r,t.length):t.length,i=r;i<u;i+=n)e[0]=t[i],e[1]=t[i+1],e[2]=t[i+2],e[3]=t[i+3],a(e,e,s),t[i]=e[0],t[i+1]=e[1],t[i+2]=e[2],t[i+3]=e[3];return t}}(),m.str=function(e){return"vec4("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+")"},void 0!==e&&(e.vec4=m);var l={create:function(){var e=new n(4);return e[0]=1,e[1]=0,e[2]=0,e[3]=1,e},clone:function(e){var t=new n(4);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e},identity:function(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=1,e},transpose:function(e,t){if(e===t){var n=t[1];e[1]=t[2],e[2]=n}else e[0]=t[0],e[1]=t[2],e[2]=t[1],e[3]=t[3];return e},invert:function(e,t){var n=t[0],r=t[1],o=t[2],a=t[3],s=n*a-o*r;return s?(s=1/s,e[0]=a*s,e[1]=-r*s,e[2]=-o*s,e[3]=n*s,e):null},adjoint:function(e,t){var n=t[0];return e[0]=t[3],e[1]=-t[1],e[2]=-t[2],e[3]=n,e},determinant:function(e){return e[0]*e[3]-e[2]*e[1]},multiply:function(e,t,n){var r=t[0],o=t[1],a=t[2],s=t[3],i=n[0],u=n[1],m=n[2],l=n[3];return e[0]=r*i+a*u,e[1]=o*i+s*u,e[2]=r*m+a*l,e[3]=o*m+s*l,e}};l.mul=l.multiply,l.rotate=function(e,t,n){var r=t[0],o=t[1],a=t[2],s=t[3],i=Math.sin(n),u=Math.cos(n);return e[0]=r*u+a*i,e[1]=o*u+s*i,e[2]=r*-i+a*u,e[3]=o*-i+s*u,e},l.scale=function(e,t,n){var r=t[0],o=t[1],a=t[2],s=t[3],i=n[0],u=n[1];return e[0]=r*i,e[1]=o*i,e[2]=a*u,e[3]=s*u,e},l.str=function(e){return"mat2("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+")"},l.frob=function(e){return Math.sqrt(Math.pow(e[0],2)+Math.pow(e[1],2)+Math.pow(e[2],2)+Math.pow(e[3],2))},l.LDU=function(e,t,n,r){return e[2]=r[2]/r[0],n[0]=r[0],n[1]=r[1],n[3]=r[3]-e[2]*n[1],[e,t,n]},void 0!==e&&(e.mat2=l);var c={create:function(){var e=new n(6);return e[0]=1,e[1]=0,e[2]=0,e[3]=1,e[4]=0,e[5]=0,e},clone:function(e){var t=new n(6);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e},identity:function(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=1,e[4]=0,e[5]=0,e},invert:function(e,t){var n=t[0],r=t[1],o=t[2],a=t[3],s=t[4],i=t[5],u=n*a-r*o;return u?(u=1/u,e[0]=a*u,e[1]=-r*u,e[2]=-o*u,e[3]=n*u,e[4]=(o*i-a*s)*u,e[5]=(r*s-n*i)*u,e):null},determinant:function(e){return e[0]*e[3]-e[1]*e[2]},multiply:function(e,t,n){var r=t[0],o=t[1],a=t[2],s=t[3],i=t[4],u=t[5],m=n[0],l=n[1],c=n[2],f=n[3],p=n[4],d=n[5];return e[0]=r*m+a*l,e[1]=o*m+s*l,e[2]=r*c+a*f,e[3]=o*c+s*f,e[4]=r*p+a*d+i,e[5]=o*p+s*d+u,e}};c.mul=c.multiply,c.rotate=function(e,t,n){var r=t[0],o=t[1],a=t[2],s=t[3],i=t[4],u=t[5],m=Math.sin(n),l=Math.cos(n);return e[0]=r*l+a*m,e[1]=o*l+s*m,e[2]=r*-m+a*l,e[3]=o*-m+s*l,e[4]=i,e[5]=u,e},c.scale=function(e,t,n){var r=t[0],o=t[1],a=t[2],s=t[3],i=t[4],u=t[5],m=n[0],l=n[1];return e[0]=r*m,e[1]=o*m,e[2]=a*l,e[3]=s*l,e[4]=i,e[5]=u,e},c.translate=function(e,t,n){var r=t[0],o=t[1],a=t[2],s=t[3],i=t[4],u=t[5],m=n[0],l=n[1];return e[0]=r,e[1]=o,e[2]=a,e[3]=s,e[4]=r*m+a*l+i,e[5]=o*m+s*l+u,e},c.str=function(e){return"mat2d("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+")"},c.frob=function(e){return Math.sqrt(Math.pow(e[0],2)+Math.pow(e[1],2)+Math.pow(e[2],2)+Math.pow(e[3],2)+Math.pow(e[4],2)+Math.pow(e[5],2)+1)},void 0!==e&&(e.mat2d=c);var f={create:function(){var e=new n(9);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e},fromMat4:function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[4],e[4]=t[5],e[5]=t[6],e[6]=t[8],e[7]=t[9],e[8]=t[10],e},clone:function(e){var t=new n(9);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e},identity:function(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e},transpose:function(e,t){if(e===t){var n=t[1],r=t[2],o=t[5];e[1]=t[3],e[2]=t[6],e[3]=n,e[5]=t[7],e[6]=r,e[7]=o}else e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8];return e},invert:function(e,t){var n=t[0],r=t[1],o=t[2],a=t[3],s=t[4],i=t[5],u=t[6],m=t[7],l=t[8],c=l*s-i*m,f=-l*a+i*u,p=m*a-s*u,d=n*c+r*f+o*p;return d?(d=1/d,e[0]=c*d,e[1]=(-l*r+o*m)*d,e[2]=(i*r-o*s)*d,e[3]=f*d,e[4]=(l*n-o*u)*d,e[5]=(-i*n+o*a)*d,e[6]=p*d,e[7]=(-m*n+r*u)*d,e[8]=(s*n-r*a)*d,e):null},adjoint:function(e,t){var n=t[0],r=t[1],o=t[2],a=t[3],s=t[4],i=t[5],u=t[6],m=t[7],l=t[8];return e[0]=s*l-i*m,e[1]=o*m-r*l,e[2]=r*i-o*s,e[3]=i*u-a*l,e[4]=n*l-o*u,e[5]=o*a-n*i,e[6]=a*m-s*u,e[7]=r*u-n*m,e[8]=n*s-r*a,e},determinant:function(e){var t=e[0],n=e[1],r=e[2],o=e[3],a=e[4],s=e[5],i=e[6],u=e[7],m=e[8];return t*(m*a-s*u)+n*(-m*o+s*i)+r*(u*o-a*i)},multiply:function(e,t,n){var r=t[0],o=t[1],a=t[2],s=t[3],i=t[4],u=t[5],m=t[6],l=t[7],c=t[8],f=n[0],p=n[1],d=n[2],v=n[3],b=n[4],x=n[5],h=n[6],g=n[7],y=n[8];return e[0]=f*r+p*s+d*m,e[1]=f*o+p*i+d*l,e[2]=f*a+p*u+d*c,e[3]=v*r+b*s+x*m,e[4]=v*o+b*i+x*l,e[5]=v*a+b*u+x*c,e[6]=h*r+g*s+y*m,e[7]=h*o+g*i+y*l,e[8]=h*a+g*u+y*c,e}};f.mul=f.multiply,f.translate=function(e,t,n){var r=t[0],o=t[1],a=t[2],s=t[3],i=t[4],u=t[5],m=t[6],l=t[7],c=t[8],f=n[0],p=n[1];return e[0]=r,e[1]=o,e[2]=a,e[3]=s,e[4]=i,e[5]=u,e[6]=f*r+p*s+m,e[7]=f*o+p*i+l,e[8]=f*a+p*u+c,e},f.rotate=function(e,t,n){var r=t[0],o=t[1],a=t[2],s=t[3],i=t[4],u=t[5],m=t[6],l=t[7],c=t[8],f=Math.sin(n),p=Math.cos(n);return e[0]=p*r+f*s,e[1]=p*o+f*i,e[2]=p*a+f*u,e[3]=p*s-f*r,e[4]=p*i-f*o,e[5]=p*u-f*a,e[6]=m,e[7]=l,e[8]=c,e},f.scale=function(e,t,n){var r=n[0],o=n[1];return e[0]=r*t[0],e[1]=r*t[1],e[2]=r*t[2],e[3]=o*t[3],e[4]=o*t[4],e[5]=o*t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e},f.fromMat2d=function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=0,e[3]=t[2],e[4]=t[3],e[5]=0,e[6]=t[4],e[7]=t[5],e[8]=1,e},f.fromQuat=function(e,t){var n=t[0],r=t[1],o=t[2],a=t[3],s=n+n,i=r+r,u=o+o,m=n*s,l=r*s,c=r*i,f=o*s,p=o*i,d=o*u,v=a*s,b=a*i,x=a*u;return e[0]=1-c-d,e[3]=l-x,e[6]=f+b,e[1]=l+x,e[4]=1-m-d,e[7]=p-v,e[2]=f-b,e[5]=p+v,e[8]=1-m-c,e},f.normalFromMat4=function(e,t){var n=t[0],r=t[1],o=t[2],a=t[3],s=t[4],i=t[5],u=t[6],m=t[7],l=t[8],c=t[9],f=t[10],p=t[11],d=t[12],v=t[13],b=t[14],x=t[15],h=n*i-r*s,g=n*u-o*s,y=n*m-a*s,R=r*u-o*i,A=r*m-a*i,M=o*m-a*u,S=l*v-c*d,T=l*b-f*d,_=l*x-p*d,U=c*b-f*v,w=c*x-p*v,E=f*x-p*b,D=h*E-g*w+y*U+R*_-A*T+M*S;return D?(D=1/D,e[0]=(i*E-u*w+m*U)*D,e[1]=(u*_-s*E-m*T)*D,e[2]=(s*w-i*_+m*S)*D,e[3]=(o*w-r*E-a*U)*D,e[4]=(n*E-o*_+a*T)*D,e[5]=(r*_-n*w-a*S)*D,e[6]=(v*M-b*A+x*R)*D,e[7]=(b*y-d*M-x*g)*D,e[8]=(d*A-v*y+x*h)*D,e):null},f.str=function(e){return"mat3("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+", "+e[6]+", "+e[7]+", "+e[8]+")"},f.frob=function(e){return Math.sqrt(Math.pow(e[0],2)+Math.pow(e[1],2)+Math.pow(e[2],2)+Math.pow(e[3],2)+Math.pow(e[4],2)+Math.pow(e[5],2)+Math.pow(e[6],2)+Math.pow(e[7],2)+Math.pow(e[8],2))},void 0!==e&&(e.mat3=f);var p={create:function(){var e=new n(16);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e},clone:function(e){var t=new n(16);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e},identity:function(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e},transpose:function(e,t){if(e===t){var n=t[1],r=t[2],o=t[3],a=t[6],s=t[7],i=t[11];e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=n,e[6]=t[9],e[7]=t[13],e[8]=r,e[9]=a,e[11]=t[14],e[12]=o,e[13]=s,e[14]=i}else e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15];return e},invert:function(e,t){var n=t[0],r=t[1],o=t[2],a=t[3],s=t[4],i=t[5],u=t[6],m=t[7],l=t[8],c=t[9],f=t[10],p=t[11],d=t[12],v=t[13],b=t[14],x=t[15],h=n*i-r*s,g=n*u-o*s,y=n*m-a*s,R=r*u-o*i,A=r*m-a*i,M=o*m-a*u,S=l*v-c*d,T=l*b-f*d,_=l*x-p*d,U=c*b-f*v,w=c*x-p*v,E=f*x-p*b,D=h*E-g*w+y*U+R*_-A*T+M*S;return D?(D=1/D,e[0]=(i*E-u*w+m*U)*D,e[1]=(o*w-r*E-a*U)*D,e[2]=(v*M-b*A+x*R)*D,e[3]=(f*A-c*M-p*R)*D,e[4]=(u*_-s*E-m*T)*D,e[5]=(n*E-o*_+a*T)*D,e[6]=(b*y-d*M-x*g)*D,e[7]=(l*M-f*y+p*g)*D,e[8]=(s*w-i*_+m*S)*D,e[9]=(r*_-n*w-a*S)*D,e[10]=(d*A-v*y+x*h)*D,e[11]=(c*y-l*A-p*h)*D,e[12]=(i*T-s*U-u*S)*D,e[13]=(n*U-r*T+o*S)*D,e[14]=(v*g-d*R-b*h)*D,e[15]=(l*R-c*g+f*h)*D,e):null},adjoint:function(e,t){var n=t[0],r=t[1],o=t[2],a=t[3],s=t[4],i=t[5],u=t[6],m=t[7],l=t[8],c=t[9],f=t[10],p=t[11],d=t[12],v=t[13],b=t[14],x=t[15];return e[0]=i*(f*x-p*b)-c*(u*x-m*b)+v*(u*p-m*f),e[1]=-(r*(f*x-p*b)-c*(o*x-a*b)+v*(o*p-a*f)),e[2]=r*(u*x-m*b)-i*(o*x-a*b)+v*(o*m-a*u),e[3]=-(r*(u*p-m*f)-i*(o*p-a*f)+c*(o*m-a*u)),e[4]=-(s*(f*x-p*b)-l*(u*x-m*b)+d*(u*p-m*f)),e[5]=n*(f*x-p*b)-l*(o*x-a*b)+d*(o*p-a*f),e[6]=-(n*(u*x-m*b)-s*(o*x-a*b)+d*(o*m-a*u)),e[7]=n*(u*p-m*f)-s*(o*p-a*f)+l*(o*m-a*u),e[8]=s*(c*x-p*v)-l*(i*x-m*v)+d*(i*p-m*c),e[9]=-(n*(c*x-p*v)-l*(r*x-a*v)+d*(r*p-a*c)),e[10]=n*(i*x-m*v)-s*(r*x-a*v)+d*(r*m-a*i),e[11]=-(n*(i*p-m*c)-s*(r*p-a*c)+l*(r*m-a*i)),e[12]=-(s*(c*b-f*v)-l*(i*b-u*v)+d*(i*f-u*c)),e[13]=n*(c*b-f*v)-l*(r*b-o*v)+d*(r*f-o*c),e[14]=-(n*(i*b-u*v)-s*(r*b-o*v)+d*(r*u-o*i)),e[15]=n*(i*f-u*c)-s*(r*f-o*c)+l*(r*u-o*i),e},determinant:function(e){var t=e[0],n=e[1],r=e[2],o=e[3],a=e[4],s=e[5],i=e[6],u=e[7],m=e[8],l=e[9],c=e[10],f=e[11],p=e[12],d=e[13],v=e[14],b=e[15];return(t*s-n*a)*(c*b-f*v)-(t*i-r*a)*(l*b-f*d)+(t*u-o*a)*(l*v-c*d)+(n*i-r*s)*(m*b-f*p)-(n*u-o*s)*(m*v-c*p)+(r*u-o*i)*(m*d-l*p)},multiply:function(e,t,n){var r=t[0],o=t[1],a=t[2],s=t[3],i=t[4],u=t[5],m=t[6],l=t[7],c=t[8],f=t[9],p=t[10],d=t[11],v=t[12],b=t[13],x=t[14],h=t[15],g=n[0],y=n[1],R=n[2],A=n[3];return e[0]=g*r+y*i+R*c+A*v,e[1]=g*o+y*u+R*f+A*b,e[2]=g*a+y*m+R*p+A*x,e[3]=g*s+y*l+R*d+A*h,g=n[4],y=n[5],R=n[6],A=n[7],e[4]=g*r+y*i+R*c+A*v,e[5]=g*o+y*u+R*f+A*b,e[6]=g*a+y*m+R*p+A*x,e[7]=g*s+y*l+R*d+A*h,g=n[8],y=n[9],R=n[10],A=n[11],e[8]=g*r+y*i+R*c+A*v,e[9]=g*o+y*u+R*f+A*b,e[10]=g*a+y*m+R*p+A*x,e[11]=g*s+y*l+R*d+A*h,g=n[12],y=n[13],R=n[14],A=n[15],e[12]=g*r+y*i+R*c+A*v,e[13]=g*o+y*u+R*f+A*b,e[14]=g*a+y*m+R*p+A*x,e[15]=g*s+y*l+R*d+A*h,e}};p.mul=p.multiply,p.translate=function(e,t,n){var r,o,a,s,i,u,m,l,c,f,p,d,v=n[0],b=n[1],x=n[2];return t===e?(e[12]=t[0]*v+t[4]*b+t[8]*x+t[12],e[13]=t[1]*v+t[5]*b+t[9]*x+t[13],e[14]=t[2]*v+t[6]*b+t[10]*x+t[14],e[15]=t[3]*v+t[7]*b+t[11]*x+t[15]):(r=t[0],o=t[1],a=t[2],s=t[3],i=t[4],u=t[5],m=t[6],l=t[7],c=t[8],f=t[9],p=t[10],d=t[11],e[0]=r,e[1]=o,e[2]=a,e[3]=s,e[4]=i,e[5]=u,e[6]=m,e[7]=l,e[8]=c,e[9]=f,e[10]=p,e[11]=d,e[12]=r*v+i*b+c*x+t[12],e[13]=o*v+u*b+f*x+t[13],e[14]=a*v+m*b+p*x+t[14],e[15]=s*v+l*b+d*x+t[15]),e},p.scale=function(e,t,n){var r=n[0],o=n[1],a=n[2];return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*o,e[5]=t[5]*o,e[6]=t[6]*o,e[7]=t[7]*o,e[8]=t[8]*a,e[9]=t[9]*a,e[10]=t[10]*a,e[11]=t[11]*a,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e},p.rotate=function(e,n,r,o){var a,s,i,u,m,l,c,f,p,d,v,b,x,h,g,y,R,A,M,S,T,_,U,w,E=o[0],D=o[1],P=o[2],B=Math.sqrt(E*E+D*D+P*P);return Math.abs(B)<t?null:(E*=B=1/B,D*=B,P*=B,a=Math.sin(r),i=1-(s=Math.cos(r)),u=n[0],m=n[1],l=n[2],c=n[3],f=n[4],p=n[5],d=n[6],v=n[7],b=n[8],x=n[9],h=n[10],g=n[11],y=E*E*i+s,R=D*E*i+P*a,A=P*E*i-D*a,M=E*D*i-P*a,S=D*D*i+s,T=P*D*i+E*a,_=E*P*i+D*a,U=D*P*i-E*a,w=P*P*i+s,e[0]=u*y+f*R+b*A,e[1]=m*y+p*R+x*A,e[2]=l*y+d*R+h*A,e[3]=c*y+v*R+g*A,e[4]=u*M+f*S+b*T,e[5]=m*M+p*S+x*T,e[6]=l*M+d*S+h*T,e[7]=c*M+v*S+g*T,e[8]=u*_+f*U+b*w,e[9]=m*_+p*U+x*w,e[10]=l*_+d*U+h*w,e[11]=c*_+v*U+g*w,n!==e&&(e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15]),e)},p.rotateX=function(e,t,n){var r=Math.sin(n),o=Math.cos(n),a=t[4],s=t[5],i=t[6],u=t[7],m=t[8],l=t[9],c=t[10],f=t[11];return t!==e&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[4]=a*o+m*r,e[5]=s*o+l*r,e[6]=i*o+c*r,e[7]=u*o+f*r,e[8]=m*o-a*r,e[9]=l*o-s*r,e[10]=c*o-i*r,e[11]=f*o-u*r,e},p.rotateY=function(e,t,n){var r=Math.sin(n),o=Math.cos(n),a=t[0],s=t[1],i=t[2],u=t[3],m=t[8],l=t[9],c=t[10],f=t[11];return t!==e&&(e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=a*o-m*r,e[1]=s*o-l*r,e[2]=i*o-c*r,e[3]=u*o-f*r,e[8]=a*r+m*o,e[9]=s*r+l*o,e[10]=i*r+c*o,e[11]=u*r+f*o,e},p.rotateZ=function(e,t,n){var r=Math.sin(n),o=Math.cos(n),a=t[0],s=t[1],i=t[2],u=t[3],m=t[4],l=t[5],c=t[6],f=t[7];return t!==e&&(e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=a*o+m*r,e[1]=s*o+l*r,e[2]=i*o+c*r,e[3]=u*o+f*r,e[4]=m*o-a*r,e[5]=l*o-s*r,e[6]=c*o-i*r,e[7]=f*o-u*r,e},p.fromRotationTranslation=function(e,t,n){var r=t[0],o=t[1],a=t[2],s=t[3],i=r+r,u=o+o,m=a+a,l=r*i,c=r*u,f=r*m,p=o*u,d=o*m,v=a*m,b=s*i,x=s*u,h=s*m;return e[0]=1-(p+v),e[1]=c+h,e[2]=f-x,e[3]=0,e[4]=c-h,e[5]=1-(l+v),e[6]=d+b,e[7]=0,e[8]=f+x,e[9]=d-b,e[10]=1-(l+p),e[11]=0,e[12]=n[0],e[13]=n[1],e[14]=n[2],e[15]=1,e},p.fromQuat=function(e,t){var n=t[0],r=t[1],o=t[2],a=t[3],s=n+n,i=r+r,u=o+o,m=n*s,l=r*s,c=r*i,f=o*s,p=o*i,d=o*u,v=a*s,b=a*i,x=a*u;return e[0]=1-c-d,e[1]=l+x,e[2]=f-b,e[3]=0,e[4]=l-x,e[5]=1-m-d,e[6]=p+v,e[7]=0,e[8]=f+b,e[9]=p-v,e[10]=1-m-c,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e},p.frustum=function(e,t,n,r,o,a,s){var i=1/(n-t),u=1/(o-r),m=1/(a-s);return e[0]=2*a*i,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=2*a*u,e[6]=0,e[7]=0,e[8]=(n+t)*i,e[9]=(o+r)*u,e[10]=(s+a)*m,e[11]=-1,e[12]=0,e[13]=0,e[14]=s*a*2*m,e[15]=0,e},p.perspective=function(e,t,n,r,o){var a=1/Math.tan(t/2),s=1/(r-o);return e[0]=a/n,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=a,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=(o+r)*s,e[11]=-1,e[12]=0,e[13]=0,e[14]=2*o*r*s,e[15]=0,e},p.ortho=function(e,t,n,r,o,a,s){var i=1/(t-n),u=1/(r-o),m=1/(a-s);return e[0]=-2*i,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*u,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*m,e[11]=0,e[12]=(t+n)*i,e[13]=(o+r)*u,e[14]=(s+a)*m,e[15]=1,e},p.lookAt=function(e,n,r,o){var a,s,i,u,m,l,c,f,d,v,b=n[0],x=n[1],h=n[2],g=o[0],y=o[1],R=o[2],A=r[0],M=r[1],S=r[2];return Math.abs(b-A)<t&&Math.abs(x-M)<t&&Math.abs(h-S)<t?p.identity(e):(c=b-A,f=x-M,d=h-S,a=y*(d*=v=1/Math.sqrt(c*c+f*f+d*d))-R*(f*=v),s=R*(c*=v)-g*d,i=g*f-y*c,(v=Math.sqrt(a*a+s*s+i*i))?(a*=v=1/v,s*=v,i*=v):(a=0,s=0,i=0),u=f*i-d*s,m=d*a-c*i,l=c*s-f*a,(v=Math.sqrt(u*u+m*m+l*l))?(u*=v=1/v,m*=v,l*=v):(u=0,m=0,l=0),e[0]=a,e[1]=u,e[2]=c,e[3]=0,e[4]=s,e[5]=m,e[6]=f,e[7]=0,e[8]=i,e[9]=l,e[10]=d,e[11]=0,e[12]=-(a*b+s*x+i*h),e[13]=-(u*b+m*x+l*h),e[14]=-(c*b+f*x+d*h),e[15]=1,e)},p.str=function(e){return"mat4("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+", "+e[6]+", "+e[7]+", "+e[8]+", "+e[9]+", "+e[10]+", "+e[11]+", "+e[12]+", "+e[13]+", "+e[14]+", "+e[15]+")"},p.frob=function(e){return Math.sqrt(Math.pow(e[0],2)+Math.pow(e[1],2)+Math.pow(e[2],2)+Math.pow(e[3],2)+Math.pow(e[4],2)+Math.pow(e[5],2)+Math.pow(e[6],2)+Math.pow(e[7],2)+Math.pow(e[8],2)+Math.pow(e[9],2)+Math.pow(e[10],2)+Math.pow(e[11],2)+Math.pow(e[12],2)+Math.pow(e[13],2)+Math.pow(e[14],2)+Math.pow(e[15],2))},void 0!==e&&(e.mat4=p);var d,v,b,x,h={};h.create=function(){var e=new n(4);return e[0]=0,e[1]=0,e[2]=0,e[3]=1,e},h.rotationTo=(d=u.create(),v=u.fromValues(1,0,0),b=u.fromValues(0,1,0),function(e,t,n){var r=u.dot(t,n);return r<-.999999?(u.cross(d,v,t),u.length(d)<1e-6&&u.cross(d,b,t),u.normalize(d,d),h.setAxisAngle(e,d,Math.PI),e):r>.999999?(e[0]=0,e[1]=0,e[2]=0,e[3]=1,e):(u.cross(d,t,n),e[0]=d[0],e[1]=d[1],e[2]=d[2],e[3]=1+r,h.normalize(e,e))}),h.setAxes=(x=f.create(),function(e,t,n,r){return x[0]=n[0],x[3]=n[1],x[6]=n[2],x[1]=r[0],x[4]=r[1],x[7]=r[2],x[2]=-t[0],x[5]=-t[1],x[8]=-t[2],h.normalize(e,h.fromMat3(e,x))}),h.clone=m.clone,h.fromValues=m.fromValues,h.copy=m.copy,h.set=m.set,h.identity=function(e){return e[0]=0,e[1]=0,e[2]=0,e[3]=1,e},h.setAxisAngle=function(e,t,n){n*=.5;var r=Math.sin(n);return e[0]=r*t[0],e[1]=r*t[1],e[2]=r*t[2],e[3]=Math.cos(n),e},h.add=m.add,h.multiply=function(e,t,n){var r=t[0],o=t[1],a=t[2],s=t[3],i=n[0],u=n[1],m=n[2],l=n[3];return e[0]=r*l+s*i+o*m-a*u,e[1]=o*l+s*u+a*i-r*m,e[2]=a*l+s*m+r*u-o*i,e[3]=s*l-r*i-o*u-a*m,e},h.mul=h.multiply,h.scale=m.scale,h.rotateX=function(e,t,n){n*=.5;var r=t[0],o=t[1],a=t[2],s=t[3],i=Math.sin(n),u=Math.cos(n);return e[0]=r*u+s*i,e[1]=o*u+a*i,e[2]=a*u-o*i,e[3]=s*u-r*i,e},h.rotateY=function(e,t,n){n*=.5;var r=t[0],o=t[1],a=t[2],s=t[3],i=Math.sin(n),u=Math.cos(n);return e[0]=r*u-a*i,e[1]=o*u+s*i,e[2]=a*u+r*i,e[3]=s*u-o*i,e},h.rotateZ=function(e,t,n){n*=.5;var r=t[0],o=t[1],a=t[2],s=t[3],i=Math.sin(n),u=Math.cos(n);return e[0]=r*u+o*i,e[1]=o*u-r*i,e[2]=a*u+s*i,e[3]=s*u-a*i,e},h.calculateW=function(e,t){var n=t[0],r=t[1],o=t[2];return e[0]=n,e[1]=r,e[2]=o,e[3]=Math.sqrt(Math.abs(1-n*n-r*r-o*o)),e},h.dot=m.dot,h.lerp=m.lerp,h.slerp=function(e,t,n,r){var o,a,s,i,u,m=t[0],l=t[1],c=t[2],f=t[3],p=n[0],d=n[1],v=n[2],b=n[3];return(a=m*p+l*d+c*v+f*b)<0&&(a=-a,p=-p,d=-d,v=-v,b=-b),1-a>1e-6?(o=Math.acos(a),s=Math.sin(o),i=Math.sin((1-r)*o)/s,u=Math.sin(r*o)/s):(i=1-r,u=r),e[0]=i*m+u*p,e[1]=i*l+u*d,e[2]=i*c+u*v,e[3]=i*f+u*b,e},h.invert=function(e,t){var n=t[0],r=t[1],o=t[2],a=t[3],s=n*n+r*r+o*o+a*a,i=s?1/s:0;return e[0]=-n*i,e[1]=-r*i,e[2]=-o*i,e[3]=a*i,e},h.conjugate=function(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=t[3],e},h.length=m.length,h.len=h.length,h.squaredLength=m.squaredLength,h.sqrLen=h.squaredLength,h.normalize=m.normalize,h.fromMat3=function(e,t){var n,r=t[0]+t[4]+t[8];if(r>0)n=Math.sqrt(r+1),e[3]=.5*n,n=.5/n,e[0]=(t[5]-t[7])*n,e[1]=(t[6]-t[2])*n,e[2]=(t[1]-t[3])*n;else{var o=0;t[4]>t[0]&&(o=1),t[8]>t[3*o+o]&&(o=2);var a=(o+1)%3,s=(o+2)%3;n=Math.sqrt(t[3*o+o]-t[3*a+a]-t[3*s+s]+1),e[o]=.5*n,n=.5/n,e[3]=(t[3*a+s]-t[3*s+a])*n,e[a]=(t[3*a+o]+t[3*o+a])*n,e[s]=(t[3*s+o]+t[3*o+s])*n}return e},h.str=function(e){return"quat("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+")"},void 0!==e&&(e.quat=h)}(n.exports)}()},function(e,t,n){"use strict";var r=n(1),o=n(0),a=n(3);function s(e,t,n){return Math.min(t,Math.max(e,n))}e.exports.new=function(){return{aspect:1,zoom:.125,translation:{x:0,y:0},atomScale:.6,relativeAtomScale:1,bondScale:.5,rotation:r.mat4.create(),ao:.75,aoRes:256,brightness:.5,outline:0,spf:32,bonds:!1,bondThreshold:1.2,bondShade:.5,atomShade:.5,resolution:768,dofStrength:0,dofPosition:.5,fxaa:1}},e.exports.center=function(e,t){for(var n=-1/0,a=1/0,s=-1/0,i=1/0,u=0;u<t.atoms.length;u++){var m=t.atoms[u],l=o[m.symbol].radius;l=2.5*e.atomScale*(1+(l-1)*e.relativeAtomScale);var c=r.vec4.fromValues(m.x,m.y,m.z,0);r.vec4.transformMat4(c,c,e.rotation),n=Math.max(n,c[0]+l),a=Math.min(a,c[0]-l),s=Math.max(s,c[1]+l),i=Math.min(i,c[1]-l)}var f=a+(n-a)/2,p=i+(s-i)/2;e.translation.x=f,e.translation.y=p;var d=Math.max(n-a,s-i);e.zoom=1/(1.01*d)},e.exports.override=function(e,t){for(var n in t)e[n]=t[n];m(e)},e.exports.clone=function(e){return u(i(e))};var i=e.exports.serialize=function(e){return JSON.stringify(e)},u=e.exports.deserialize=function(e){return(e=JSON.parse(e)).rotation=r.mat4.clone(e.rotation),e},m=e.exports.resolve=function(e){e.dofStrength=s(0,1,e.dofStrength),e.dofPosition=s(0,1,e.dofPosition),e.zoom=s(.001,2,e.zoom),e.atomScale=s(0,1,e.atomScale),e.relativeAtomScale=s(0,1,e.relativeAtomScale),e.bondScale=s(0,1,e.bondScale),e.bondShade=s(0,1,e.bondShade),e.atomShade=s(0,1,e.atomShade),e.ao=s(0,1,e.ao),e.brightness=s(0,1,e.brightness),e.outline=s(0,1,e.outline)};e.exports.translate=function(e,t,n){e.translation.x-=t/(e.resolution*e.zoom),e.translation.y+=n/(e.resolution*e.zoom),m(e)},e.exports.rotate=function(e,t,n){var o=r.mat4.create();r.mat4.rotateY(o,o,.005*t),r.mat4.rotateX(o,o,.005*n),r.mat4.multiply(e.rotation,o,e.rotation);const a=e.ao;e.ao=0,m(e),e.ao=a},e.exports.getRect=function(e){var t=1/e.zoom,n=t/e.aspect;return{bottom:-n/2+e.translation.y,top:n/2+e.translation.y,left:-t/2+e.translation.x,right:t/2+e.translation.x}},e.exports.getBondRadius=function(e){return e.bondScale*e.atomScale*(1+(a.MIN_ATOM_RADIUS-1)*e.relativeAtomScale)}},function(e,t,n){"use strict";for(var r=n(0),o=1/0,a=-1/0,s=0;s<=118;s++)o=Math.min(o,r[s].radius),a=Math.max(a,r[s].radius);e.exports.MIN_ATOM_RADIUS=o,e.exports.MAX_ATOM_RADIUS=a},function(e,t,n){"use strict";var r=n(1),o=n(0),a=n(3),s=(e.exports.new=function(){return{atoms:[],farAtom:void 0,bonds:[]}},e.exports.calculateBonds=function(e){var t=[],n=e.atoms.slice();n.sort(function(e,t){return e.z-t.z});for(var s=0;s<n.length;s++)for(var i=n[s],u=s+1;u<n.length&&n[u].z<n[s].z+5*a.MAX_ATOM_RADIUS;){var m=n[u],l=r.vec3.fromValues(i.x,i.y,i.z),c=r.vec3.fromValues(m.x,m.y,m.z),f=r.vec3.distance(l,c),p=o[i.symbol],d=o[m.symbol];f<2.5*(p.radius+d.radius)&&t.push({posA:{x:i.x,y:i.y,z:i.z},posB:{x:m.x,y:m.y,z:m.z},radA:p.radius,radB:d.radius,colA:{r:p.color[0],g:p.color[1],b:p.color[2]},colB:{r:d.color[0],g:d.color[1],b:d.color[2]},cutoff:f/(p.radius+d.radius)}),u++}t.sort(function(e,t){return e.cutoff-t.cutoff}),e.bonds=t},e.exports.addAtom=function(e,t,n,r,o){e.atoms.push({symbol:t,x:n,y:r,z:o})},e.exports.getCentroid=function(e){for(var t=0,n=0,r=0,o=0;o<e.atoms.length;o++)t+=e.atoms[o].x,n+=e.atoms[o].y,r+=e.atoms[o].z;return{x:t/e.atoms.length,y:n/e.atoms.length,z:r/e.atoms.length}}),i=(e.exports.center=function(e){for(var t=s(e),n=0;n<e.atoms.length;n++){var r=e.atoms[n];r.x-=t.x,r.y-=t.y,r.z-=t.z}},e.exports.getFarAtom=function(e){if(void 0!==e.farAtom)return e.farAtom;e.farAtom=e.atoms[0];for(var t=0,n=0;n<e.atoms.length;n++){var r=e.atoms[n],a=o[r.symbol].radius,s=2.5*Math.sqrt(a*a+a*a+a*a),i=Math.sqrt(r.x*r.x+r.y*r.y+r.z*r.z)+s;i>t&&(t=i,e.farAtom=r)}return e.farAtom});e.exports.getRadius=function(e){var t=i(e),n=a.MAX_ATOM_RADIUS,r=2.5*Math.sqrt(n*n+n*n+n*n);return Math.sqrt(t.x*t.x+t.y*t.y+t.z*t.z)+r}},function(e,t,n){const r=n(6),o=n(4),a=n(2),s=n(10),i=n(11),u=n(0);e.exports={speckRenderer:r,speckSystem:o,speckView:a,speckInteractions:s,speckPresetViews:i,speckElements:u}},function(e,t,n){"use strict";var r=n(1),o=n(7),a=n(8),s=n(0),i=n(2),u=n(4),m=n(9);function l(e,t){return t=t.split("// __split__"),new o.Program(e,t[0],t[1])}e.exports=function(e,t,n){var c,f,p,d,v,b,x,h,g,y,R,A,M,S,T,_,U,w,E,D,P,B,F,C,L,z,I,N=this,O=null,q=null,X=null,V=null,H=null,j=null,G=0,W=!1,k=!1;function Y(e){p.viewport(0,0,n,n);var o=i.clone(e);o.zoom=1/c,o.translation.x=0,o.translation.y=0;for(var a=r.mat4.create(),s=0;s<3;s++){var u=r.vec3.random(r.vec3.create(),1);r.mat4.rotate(a,a,10*Math.random(),u)}o.rotation=r.mat4.multiply(r.mat4.create(),a,o.rotation),U.bind(),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT);var m=i.getRect(o),l=r.mat4.create();r.mat4.ortho(l,m.left,m.right,m.bottom,m.top,0,c);var f=r.mat4.create();r.mat4.lookAt(f,[0,0,0],[0,0,-1],[0,1,0]);var d=r.mat4.create();r.mat4.translate(d,d,[0,0,-c/2]),r.mat4.multiply(d,d,o.rotation),P.setUniform("uProjection","Matrix4fv",!1,l),P.setUniform("uView","Matrix4fv",!1,f),P.setUniform("uModel","Matrix4fv",!1,d),P.setUniform("uBottomLeft","2fv",[m.left,m.bottom]),P.setUniform("uTopRight","2fv",[m.right,m.top]),P.setUniform("uAtomScale","1f",2.5*o.atomScale),P.setUniform("uRelativeAtomScale","1f",e.relativeAtomScale),P.setUniform("uRes","1f",n),P.setUniform("uDepth","1f",c),P.setUniform("uMode","1i",0),P.setUniform("uAtomShade","1f",e.atomShade),O.render(),e.bonds&&null!=q&&(B.setUniform("uProjection","Matrix4fv",!1,l),B.setUniform("uView","Matrix4fv",!1,f),B.setUniform("uModel","Matrix4fv",!1,d),B.setUniform("uRotation","Matrix4fv",!1,o.rotation),B.setUniform("uDepth","1f",c),B.setUniform("uBottomLeft","2fv",[m.left,m.bottom]),B.setUniform("uTopRight","2fv",[m.right,m.top]),B.setUniform("uRes","1f",n),B.setUniform("uBondRadius","1f",2.5*i.getBondRadius(e)),B.setUniform("uBondShade","1f",e.bondShade),B.setUniform("uAtomScale","1f",2.5*e.atomScale),B.setUniform("uRelativeAtomScale","1f",e.relativeAtomScale),B.setUniform("uMode","1i",0),q.render()),p.viewport(0,0,t,t);var h=i.getRect(e),y=i.getRect(o),R=r.mat4.invert(r.mat4.create(),a);w.bind(),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT),F.setUniform("uSceneDepth","1i",b.index),F.setUniform("uSceneNormal","1i",v.index),F.setUniform("uRandRotDepth","1i",x.index),F.setUniform("uAccumulator","1i",g.index),F.setUniform("uSceneBottomLeft","2fv",[h.left,h.bottom]),F.setUniform("uSceneTopRight","2fv",[h.right,h.top]),F.setUniform("uRotBottomLeft","2fv",[y.left,y.bottom]),F.setUniform("uRotTopRight","2fv",[y.right,y.top]),F.setUniform("uRes","1f",t),F.setUniform("uDepth","1f",c),F.setUniform("uRot","Matrix4fv",!1,a),F.setUniform("uInvRot","Matrix4fv",!1,R),F.setUniform("uSampleCount","1i",G),X.render(),g.activate(),g.bind(),p.copyTexImage2D(p.TEXTURE_2D,0,p.RGBA,0,0,t,t,0)}N.getAOProgress=function(){return G/1024},N.initialize=function(){e.width=e.height=t,(p=e.getContext("webgl")).enable(p.DEPTH_TEST),p.enable(p.CULL_FACE),p.clearColor(0,0,0,0),p.clearDepth(1),p.viewport(0,0,t,t),window.gl=p,o.getExtensions(p,["EXT_frag_depth","WEBGL_depth_texture"]),N.createTextures(),P=l(p,m.shaders.atom),B=l(p,m.shaders.bond),I=l(p,m.shaders["textured-quad"]),F=l(p,m.shaders.accumulator),C=l(p,m.shaders.ao),L=l(p,m.shaders.fxaa),z=l(p,m.shaders.dof);var n=[-1,-1,0,1,-1,0,1,1,0,-1,-1,0,1,1,0,-1,1,0],r=o.buildAttribs(p,{aPosition:3});r.aPosition.buffer.set(new Float32Array(n));var a=n.length/9;new o.Renderable(p,I,r,a),X=new o.Renderable(p,F,r,a),V=new o.Renderable(p,C,r,a),j=new o.Renderable(p,L,r,a),H=new o.Renderable(p,z,r,a),0},N.createTextures=function(){h=new o.Texture(p,0,null,n,n),x=new o.Texture(p,1,null,n,n,{internalFormat:p.DEPTH_COMPONENT,format:p.DEPTH_COMPONENT,type:p.UNSIGNED_SHORT}),U=new o.Framebuffer(p,[h],x),d=new o.Texture(p,2,null,t,t),v=new o.Texture(p,3,null,t,t),b=new o.Texture(p,4,null,t,t,{internalFormat:p.DEPTH_COMPONENT,format:p.DEPTH_COMPONENT,type:p.UNSIGNED_SHORT}),T=new o.Framebuffer(p,[d],b),_=new o.Framebuffer(p,[v],b),g=new o.Texture(p,5,null,t,t),y=new o.Texture(p,6,null,t,t),w=new o.Framebuffer(p,[y]),S=new o.Texture(p,7,null,t,t),D=new o.Framebuffer(p,[S]),R=new o.Texture(p,8,null,t,t),A=new o.Texture(p,9,null,t,t),E=new o.Framebuffer(p,[A]),M=new o.Texture(p,10,null,t,t),new o.Framebuffer(p,[M])},N.setResolution=function(r,o){n=o,t=r,e.width=e.height=t,p.viewport(0,0,t,t),N.createTextures()},N.setSystem=function(e,t){function n(e){for(var t=[],n=0;n<36;n++)t.push.apply(t,e);return t}f=e;for(var r=o.buildAttribs(p,{aImposter:3,aPosition:3,aRadius:1,aColor:3}),i=[],u=[],m=[],l=[],c=0;c<f.atoms.length;c++){i.push.apply(i,a.position);var d=f.atoms[c];u.push.apply(u,n([d.x,d.y,d.z])),m.push.apply(m,n([s[d.symbol].radius]));var v=s[d.symbol].color;l.push.apply(l,n([v[0],v[1],v[2]]))}r.aImposter.buffer.set(new Float32Array(i)),r.aPosition.buffer.set(new Float32Array(u)),r.aRadius.buffer.set(new Float32Array(m)),r.aColor.buffer.set(new Float32Array(l));var b=i.length/9;if(O=new o.Renderable(p,P,r,b),t.bonds&&(q=null,f.bonds.length>0)){r=o.buildAttribs(p,{aImposter:3,aPosA:3,aPosB:3,aRadA:1,aRadB:1,aColA:3,aColB:3}),i=[];var x=[],h=[],g=[],y=[],R=[],A=[];for(c=0;c<f.bonds.length;c++){var M=f.bonds[c];if(M.cutoff>t.bondThreshold)break;i.push.apply(i,a.position),x.push.apply(x,n([M.posA.x,M.posA.y,M.posA.z])),h.push.apply(h,n([M.posB.x,M.posB.y,M.posB.z])),g.push.apply(g,n([M.radA])),y.push.apply(y,n([M.radB])),R.push.apply(R,n([M.colA.r,M.colA.g,M.colA.b])),A.push.apply(A,n([M.colB.r,M.colB.g,M.colB.b]))}r.aImposter.buffer.set(new Float32Array(i)),r.aPosA.buffer.set(new Float32Array(x)),r.aPosB.buffer.set(new Float32Array(h)),r.aRadA.buffer.set(new Float32Array(g)),r.aRadB.buffer.set(new Float32Array(y)),r.aColA.buffer.set(new Float32Array(R)),r.aColB.buffer.set(new Float32Array(A));b=i.length/9;q=new o.Renderable(p,B,r,b)}},N.reset=function(){G=0,W=!1,k=!1,g.reset(),y.reset()},N.render=function(e){if(void 0!==f&&null!=O){if(c=2*u.getRadius(f),W)if(k)for(var n=0;n<e.spf&&!(G>1024);n++)Y(e),G++;else!function(e){k=!0,p.viewport(0,0,t,t),_.bind(),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT);var n=i.getRect(e),o=r.mat4.create();r.mat4.ortho(o,n.left,n.right,n.bottom,n.top,0,c);var a=r.mat4.create();r.mat4.lookAt(a,[0,0,0],[0,0,-1],[0,1,0]);var s=r.mat4.create();r.mat4.translate(s,s,[0,0,-c/2]),r.mat4.multiply(s,s,e.rotation),P.setUniform("uProjection","Matrix4fv",!1,o),P.setUniform("uView","Matrix4fv",!1,a),P.setUniform("uModel","Matrix4fv",!1,s),P.setUniform("uBottomLeft","2fv",[n.left,n.bottom]),P.setUniform("uTopRight","2fv",[n.right,n.top]),P.setUniform("uAtomScale","1f",2.5*e.atomScale),P.setUniform("uRelativeAtomScale","1f",e.relativeAtomScale),P.setUniform("uRes","1f",t),P.setUniform("uDepth","1f",c),P.setUniform("uMode","1i",1),P.setUniform("uAtomShade","1f",e.atomShade),O.render(),e.bonds&&null!=q&&(_.bind(),B.setUniform("uProjection","Matrix4fv",!1,o),B.setUniform("uView","Matrix4fv",!1,a),B.setUniform("uModel","Matrix4fv",!1,s),B.setUniform("uRotation","Matrix4fv",!1,e.rotation),B.setUniform("uDepth","1f",c),B.setUniform("uBottomLeft","2fv",[n.left,n.bottom]),B.setUniform("uTopRight","2fv",[n.right,n.top]),B.setUniform("uRes","1f",t),B.setUniform("uBondRadius","1f",2.5*i.getBondRadius(e)),B.setUniform("uBondShade","1f",e.bondShade),B.setUniform("uAtomScale","1f",2.5*e.atomScale),B.setUniform("uRelativeAtomScale","1f",e.relativeAtomScale),B.setUniform("uMode","1i",1),q.render())}(e);else!function(e){W=!0,p.viewport(0,0,t,t),T.bind(),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT);var n=i.getRect(e),o=r.mat4.create();r.mat4.ortho(o,n.left,n.right,n.bottom,n.top,0,c);var a=r.mat4.create();r.mat4.lookAt(a,[0,0,0],[0,0,-1],[0,1,0]);var s=r.mat4.create();r.mat4.translate(s,s,[0,0,-c/2]),r.mat4.multiply(s,s,e.rotation),P.setUniform("uProjection","Matrix4fv",!1,o),P.setUniform("uView","Matrix4fv",!1,a),P.setUniform("uModel","Matrix4fv",!1,s),P.setUniform("uBottomLeft","2fv",[n.left,n.bottom]),P.setUniform("uTopRight","2fv",[n.right,n.top]),P.setUniform("uAtomScale","1f",2.5*e.atomScale),P.setUniform("uRelativeAtomScale","1f",e.relativeAtomScale),P.setUniform("uRes","1f",t),P.setUniform("uDepth","1f",c),P.setUniform("uMode","1i",0),P.setUniform("uAtomShade","1f",e.atomShade),O.render(),e.bonds&&null!=q&&(T.bind(),B.setUniform("uProjection","Matrix4fv",!1,o),B.setUniform("uView","Matrix4fv",!1,a),B.setUniform("uModel","Matrix4fv",!1,s),B.setUniform("uRotation","Matrix4fv",!1,e.rotation),B.setUniform("uDepth","1f",c),B.setUniform("uBottomLeft","2fv",[n.left,n.bottom]),B.setUniform("uTopRight","2fv",[n.right,n.top]),B.setUniform("uRes","1f",t),B.setUniform("uBondRadius","1f",2.5*i.getBondRadius(e)),B.setUniform("uBondShade","1f",e.bondShade),B.setUniform("uAtomScale","1f",2.5*e.atomScale),B.setUniform("uRelativeAtomScale","1f",e.relativeAtomScale),B.setUniform("uMode","1i",0),q.render())}(e);!function(e){p.viewport(0,0,t,t),e.fxaa>0||e.dofStrength>0?D.bind():p.bindFramebuffer(p.FRAMEBUFFER,null);if(p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT),C.setUniform("uSceneColor","1i",d.index),C.setUniform("uSceneDepth","1i",b.index),C.setUniform("uAccumulatorOut","1i",y.index),C.setUniform("uRes","1f",t),C.setUniform("uAO","1f",2*e.ao),C.setUniform("uBrightness","1f",2*e.brightness),C.setUniform("uOutlineStrength","1f",e.outline),V.render(),e.fxaa>0){e.dofStrength>0?E.bind():p.bindFramebuffer(p.FRAMEBUFFER,null);for(var n=0;n<e.fxaa;n++)p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT),0==n?L.setUniform("uTexture","1i",S.index):L.setUniform("uTexture","1i",R.index),L.setUniform("uRes","1f",t),j.render(),R.activate(),R.bind(),p.copyTexImage2D(p.TEXTURE_2D,0,p.RGBA,0,0,t,t,0)}e.dofStrength>0&&(p.bindFramebuffer(p.FRAMEBUFFER,null),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT),e.fxaa>0?z.setUniform("uColor","1i",R.index):z.setUniform("uColor","1i",S.index),z.setUniform("uDepth","1i",b.index),z.setUniform("uDOFPosition","1f",e.dofPosition),z.setUniform("uDOFStrength","1f",e.dofStrength),z.setUniform("uRes","1f",t),H.render())}(e)}},N.initialize()}},function(e,t){function n(e){var t=this;t.initialize=function(){t.buffer=e.createBuffer()},t.bind=function(){e.bindBuffer(e.ARRAY_BUFFER,t.buffer)},t.set=function(n){t.bind(),e.bufferData(e.ARRAY_BUFFER,n,e.STATIC_DRAW)},t.initialize()}e.exports.buildAttribs=function(e,t){var r={};for(var o in t)r[o]={buffer:new n(e),size:t[o]};return r},e.exports.getExtensions=function(e,t){for(var n={},r=0;r<t.length;r++){var o=e.getExtension(t[r]);if(null===o)throw"Extension "+t[r]+" not available.";n[t[r]]=o}return n},e.exports.Framebuffer=function(e,t,n,r){var o=this;o.initialize=function(){if(o.fb=e.createFramebuffer(),o.bind(),t.length>1){for(var a=[],s=0;s<t.length;s++)a.push(r["COLOR_ATTACHMENT"+s+"_WEBGL"]);for(r.drawBuffersWEBGL(a),s=0;s<t.length;s++)e.framebufferTexture2D(e.FRAMEBUFFER,r["COLOR_ATTACHMENT"+s+"_WEBGL"],e.TEXTURE_2D,t[s].texture,0)}else e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t[0].texture,0);void 0!==n&&e.framebufferTexture2D(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.TEXTURE_2D,n.texture,0)},o.bind=function(){e.bindFramebuffer(e.FRAMEBUFFER,o.fb)},o.initialize()},e.exports.Texture=function(e,t,n,r,o,a){(a=a||{}).target=a.target||e.TEXTURE_2D,a.mag=a.mag||e.NEAREST,a.min=a.min||e.NEAREST,a.wraps=a.wraps||e.CLAMP_TO_EDGE,a.wrapt=a.wrapt||e.CLAMP_TO_EDGE,a.internalFormat=a.internalFormat||e.RGBA,a.format=a.format||e.RGBA,a.type=a.type||e.UNSIGNED_BYTE;var s=this;s.initialize=function(){s.index=t,s.activate(),s.texture=e.createTexture(),s.bind(),e.texParameteri(a.target,e.TEXTURE_MAG_FILTER,a.mag),e.texParameteri(a.target,e.TEXTURE_MIN_FILTER,a.min),e.texParameteri(a.target,e.TEXTURE_WRAP_S,a.wraps),e.texParameteri(a.target,e.TEXTURE_WRAP_T,a.wrapt),e.texImage2D(a.target,0,a.internalFormat,r,o,0,a.format,a.type,n)},s.bind=function(){e.bindTexture(a.target,s.texture)},s.activate=function(){e.activeTexture(e.TEXTURE0+s.index)},s.reset=function(){s.activate(),s.bind(),e.texImage2D(a.target,0,a.internalFormat,r,o,0,a.format,a.type,n)},s.initialize()},e.exports.GLBuffer=n,e.exports.Renderable=function(e,t,n,r){var o=this;o.primitiveCount=r,o.initialize=function(){},o.render=function(){for(name in t.use(),n){var a=n[name].buffer,s=n[name].size;try{var i=t.attribs[name].location}catch(e){throw console.log("Could not find location for",name),e}a.bind(),e.enableVertexAttribArray(i),e.vertexAttribPointer(i,s,e.FLOAT,!1,0,0)}for(name in e.drawArrays(e.TRIANGLES,0,3*r),o.buffers)e.disableVertexAttribArray(t.attributes[name].location)},o.initialize()},e.exports.InstancedRenderable=function(e,t,n,r,o){var a=this;a.initialize=function(){},a.render=function(){for(name in t.use(),n){var s=n[name].buffer,i=n[name].size;try{var u=t.attribs[name].location}catch(e){throw console.log("Could not find location for",name),e}s.bind(),e.enableVertexAttribArray(u),e.vertexAttribPointer(u,i,e.FLOAT,!1,0,0),o.vertexAttribDivisorANGLE(u,n[name].divisor)}for(name in o.drawArraysInstancedANGLE(e.TRIANGLES,0,36,r),a.buffers)e.disableVertexAttribArray(t.attributes[name].location)},a.initialize()},e.exports.Program=function(e,t,n){var r=this;r.initialize=function(){r.program=r.compileProgram(t,n),r.attribs=r.gatherAttribs(),r.uniforms=r.gatherUniforms()},r.use=function(){e.useProgram(r.program)},r.compileProgram=function(t,n){var o=r.compileShader(t,e.VERTEX_SHADER),a=r.compileShader(n,e.FRAGMENT_SHADER),s=e.createProgram();if(e.attachShader(s,o),e.attachShader(s,a),e.linkProgram(s),!e.getProgramParameter(s,e.LINK_STATUS))throw console.log(e.getProgramInfoLog(s)),"Failed to compile program.";return s},r.compileShader=function(t,n){var r=e.createShader(n);if(e.shaderSource(r,t),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS)){var o=e.getShaderInfoLog(r),a=parseInt(o.split(":")[2]),s=t.split("\n");for(var i in s){var u=parseInt(i);console.log(u+" "+s[i]),i==a-1&&console.warn(o)}throw typeString=n==e.VERTEX_SHADER?"vertex":"fragment","Failed to compile "+typeString+" shader."}return r},r.setUniform=function(t,n,o){var a=Array.prototype.slice.call(arguments,2);r.use();try{var s=r.uniforms[t].location}catch(e){throw console.log(t),e}e["uniform"+n].apply(e,[s].concat(a))},r.gatherUniforms=function(){for(var t={},n=e.getProgramParameter(r.program,e.ACTIVE_UNIFORMS),o=0;o<n;o++){var a=e.getActiveUniform(r.program,o);t[a.name]={name:a.name,location:e.getUniformLocation(r.program,a.name),type:a.type,size:a.size}}return t},r.gatherAttribs=function(){for(var t={},n=e.getProgramParameter(r.program,e.ACTIVE_ATTRIBUTES),o=0;o<n;o++){var a=e.getActiveAttrib(r.program,o);t[a.name]={name:a.name,location:e.getAttribLocation(r.program,a.name),type:a.type,size:a.size}}return t},r.initialize()}},function(e,t){var n=-1;e.exports={position:[n,n,n,n,n,1,n,1,1,n,n,n,n,1,1,n,1,n,1,n,1,1,n,n,1,1,n,1,n,1,1,1,n,1,1,1,n,n,n,1,n,n,1,n,1,n,n,n,1,n,1,n,n,1,n,1,1,1,1,1,1,1,n,n,1,1,1,1,n,n,1,n,1,n,n,n,n,n,n,1,n,1,n,n,n,1,n,1,1,n,n,n,1,1,n,1,1,1,1,n,n,1,1,1,1,n,1,1],normal:[n,0,0,n,0,0,n,0,0,n,0,0,n,0,0,n,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,n,0,0,n,0,0,n,0,0,n,0,0,n,0,0,n,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,n,0,0,n,0,0,n,0,0,n,0,0,n,0,0,n,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1]}},function(e,t,n){"use strict";var r={accumulator:"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uSceneDepth;\nuniform sampler2D uSceneNormal;\nuniform sampler2D uRandRotDepth;\nuniform sampler2D uAccumulator;\nuniform mat4 uRot;\nuniform mat4 uInvRot;\nuniform vec2 uSceneBottomLeft;\nuniform vec2 uSceneTopRight;\nuniform vec2 uRotBottomLeft;\nuniform vec2 uRotTopRight;\nuniform float uDepth;\nuniform float uRes;\nuniform int uSampleCount;\n\nvoid main() {\n\n float dScene = texture2D(uSceneDepth, gl_FragCoord.xy/uRes).r;\n\n vec3 r = vec3(uSceneBottomLeft + (gl_FragCoord.xy/uRes) * (uSceneTopRight - uSceneBottomLeft), 0.0);\n\n r.z = -(dScene - 0.5) * uDepth;\n r = vec3(uRot * vec4(r, 1));\n float depth = -r.z/uDepth + 0.5;\n\n vec2 p = (r.xy - uRotBottomLeft)/(uRotTopRight - uRotBottomLeft);\n\n float dRandRot = texture2D(uRandRotDepth, p).r;\n\n float ao = step(dRandRot, depth * 0.99);\n\n vec3 normal = texture2D(uSceneNormal, gl_FragCoord.xy/uRes).rgb * 2.0 - 1.0;\n vec3 dir = vec3(uInvRot * vec4(0, 0, 1, 0));\n float mag = dot(dir, normal);\n float sampled = step(0.0, mag);\n\n ao *= sampled;\n\n vec4 acc = texture2D(uAccumulator, gl_FragCoord.xy/uRes);\n\n if (uSampleCount < 256) {\n acc.r += ao/255.0;\n } else if (uSampleCount < 512) {\n acc.g += ao/255.0;\n } else if (uSampleCount < 768) {\n acc.b += ao/255.0;\n } else {\n acc.a += ao/255.0;\n }\n \n gl_FragColor = acc;\n\n}\n",ao:"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uSceneColor;\nuniform sampler2D uSceneDepth;\nuniform sampler2D uAccumulatorOut;\nuniform float uRes;\nuniform float uAO;\nuniform float uBrightness;\nuniform float uOutlineStrength;\n\nvoid main() {\n vec2 p = gl_FragCoord.xy/uRes;\n vec4 sceneColor = texture2D(uSceneColor, p);\n if (uOutlineStrength > 0.0) {\n float depth = texture2D(uSceneDepth, p).r;\n float r = 1.0/511.0;\n float d0 = abs(texture2D(uSceneDepth, p + vec2(-r, 0)).r - depth);\n float d1 = abs(texture2D(uSceneDepth, p + vec2( r, 0)).r - depth);\n float d2 = abs(texture2D(uSceneDepth, p + vec2( 0, -r)).r - depth);\n float d3 = abs(texture2D(uSceneDepth, p + vec2( 0, r)).r - depth);\n float d = max(d0, d1);\n d = max(d, d2);\n d = max(d, d3);\n sceneColor.rgb *= pow(1.0 - d, uOutlineStrength * 32.0);\n sceneColor.a = max(step(0.003, d), sceneColor.a);\n }\n vec4 dAccum = texture2D(uAccumulatorOut, p);\n float shade = max(0.0, 1.0 - (dAccum.r + dAccum.g + dAccum.b + dAccum.a) * 0.25 * uAO);\n shade = pow(shade, 2.0);\n gl_FragColor = vec4(uBrightness * sceneColor.rgb * shade, sceneColor.a);\n}\n",atom:"#version 100\nprecision highp float;\n\nattribute vec3 aImposter;\nattribute vec3 aPosition;\nattribute float aRadius;\nattribute vec3 aColor;\n\nuniform mat4 uView;\nuniform mat4 uProjection;\nuniform mat4 uModel;\nuniform float uAtomScale;\nuniform float uRelativeAtomScale;\nuniform float uAtomShade;\n\nvarying vec3 vColor;\nvarying vec3 vPosition;\nvarying float vRadius;\n\nvoid main() {\n vRadius = uAtomScale * (1.0 + (aRadius - 1.0) * uRelativeAtomScale);\n gl_Position = uProjection * uView * uModel * vec4(vRadius * aImposter + aPosition, 1.0);\n vColor = mix(aColor, vec3(1,1,1), uAtomShade);\n vPosition = vec3(uModel * vec4(aPosition, 1));\n}\n\n\n// __split__\n\n\n#version 100\n#extension GL_EXT_frag_depth: enable\nprecision highp float;\n\nuniform vec2 uBottomLeft;\nuniform vec2 uTopRight;\nuniform float uRes;\nuniform float uDepth;\nuniform int uMode;\n\nvarying vec3 vPosition;\nvarying float vRadius;\nvarying vec3 vColor;\n\nvec2 res = vec2(uRes, uRes);\n\nfloat raySphereIntersect(vec3 r0, vec3 rd) {\n float a = dot(rd, rd);\n vec3 s0_r0 = r0 - vPosition;\n float b = 2.0 * dot(rd, s0_r0);\n float c = dot(s0_r0, s0_r0) - (vRadius * vRadius);\n float disc = b*b - 4.0*a*c;\n if (disc <= 0.0) {\n return -1.0;\n }\n return (-b - sqrt(disc))/(2.0*a);\n}\n\nvoid main() {\n vec3 r0 = vec3(uBottomLeft + (gl_FragCoord.xy/res) * (uTopRight - uBottomLeft), 0.0);\n vec3 rd = vec3(0, 0, -1);\n float t = raySphereIntersect(r0, rd);\n if (t < 0.0) {\n discard;\n }\n vec3 coord = r0 + rd * t;\n vec3 normal = normalize(coord - vPosition);\n if (uMode == 0) {\n gl_FragColor = vec4(vColor, 1);\n } else if (uMode == 1) {\n gl_FragColor = vec4(normal * 0.5 + 0.5, 1.0);\n }\n gl_FragDepthEXT = -coord.z/uDepth;\n}\n",blur:"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uTexture;\nuniform float uRes;\nuniform int leftRight;\n\nvoid main() {\n vec2 dir;\n if (leftRight == 1) {\n dir = vec2(1,0)/uRes;\n } else {\n dir = vec2(0,1)/uRes;\n }\n const int range = 16;\n vec4 sample = vec4(0,0,0,0);\n for (int i = -range; i <= range; i++) {\n vec2 p = gl_FragCoord.xy/uRes + dir * float(i);\n sample += texture2D(uTexture, p);\n }\n sample /= float(range) * 2.0 + 1.0;\n gl_FragColor = sample;\n}\n",bond:"#version 100\nprecision highp float;\n\nattribute vec3 aImposter;\nattribute vec3 aPosA;\nattribute vec3 aPosB;\nattribute float aRadA;\nattribute float aRadB;\nattribute vec3 aColA;\nattribute vec3 aColB;\n\nuniform mat4 uView;\nuniform mat4 uProjection;\nuniform mat4 uModel;\nuniform mat4 uRotation;\nuniform float uBondRadius;\nuniform float uAtomScale;\nuniform float uRelativeAtomScale;\n\nvarying vec3 vNormal;\nvarying vec3 vPosA, vPosB;\nvarying float vRadA, vRadB;\nvarying vec3 vColA, vColB;\nvarying float vRadius;\n\nmat3 alignVector(vec3 a, vec3 b) {\n vec3 v = cross(a, b);\n float s = length(v);\n float c = dot(a, b);\n mat3 I = mat3(\n 1, 0, 0,\n 0, 1, 0,\n 0, 0, 1\n );\n mat3 vx = mat3(\n 0, v.z, -v.y,\n -v.z, 0, v.x,\n v.y, -v.x, 0\n );\n return I + vx + vx * vx * ((1.0 - c) / (s * s));\n}\n\nvoid main() {\n vRadius = uBondRadius;\n vec3 pos = vec3(aImposter);\n // Scale the box in x and z to be bond-radius.\n pos = pos * vec3(vRadius, 1, vRadius);\n // Shift the origin-centered cube so that the bottom is at the origin.\n pos = pos + vec3(0, 1, 0);\n // Stretch the box in y so that it is the length of the bond.\n pos = pos * vec3(1, length(aPosA - aPosB) * 0.5, 1);\n // Find the rotation that aligns vec3(0, 1, 0) with vec3(uPosB - uPosA) and apply it.\n vec3 a = normalize(vec3(-0.000001, 1.000001, 0.000001));\n vec3 b = normalize(aPosB - aPosA);\n mat3 R = alignVector(a, b);\n pos = R * pos;\n // Shift the cube so that the bottom is centered at the middle of atom A.\n pos = pos + aPosA;\n\n vec4 position = uModel * vec4(pos, 1);\n gl_Position = uProjection * uView * position;\n vPosA = aPosA;\n vPosB = aPosB;\n vRadA = uAtomScale * (1.0 + (aRadA - 1.0) * uRelativeAtomScale);\n vRadB = uAtomScale * (1.0 + (aRadB - 1.0) * uRelativeAtomScale);\n vColA = aColA;\n vColB = aColB;\n}\n\n\n// __split__\n\n\n#version 100\n#extension GL_EXT_frag_depth: enable\nprecision highp float;\n\nuniform mat4 uRotation;\nuniform vec2 uBottomLeft;\nuniform vec2 uTopRight;\nuniform float uDepth;\nuniform float uRes;\nuniform float uBondShade;\nuniform int uMode;\n\nvarying vec3 vPosA, vPosB;\nvarying float vRadA, vRadB;\nvarying vec3 vColA, vColB;\nvarying float vRadius;\n\nmat3 alignVector(vec3 a, vec3 b) {\n vec3 v = cross(a, b);\n float s = length(v);\n float c = dot(a, b);\n mat3 I = mat3(\n 1, 0, 0,\n 0, 1, 0,\n 0, 0, 1\n );\n mat3 vx = mat3(\n 0, v.z, -v.y,\n -v.z, 0, v.x,\n v.y, -v.x, 0\n );\n return I + vx + vx * vx * ((1.0 - c) / (s * s));\n}\n\nvoid main() {\n\n vec2 res = vec2(uRes, uRes);\n vec3 r0 = vec3(uBottomLeft + (gl_FragCoord.xy/res) * (uTopRight - uBottomLeft), uDepth/2.0);\n vec3 rd = vec3(0, 0, -1);\n\n vec3 i = normalize(vPosB - vPosA);\n i = vec3(uRotation * vec4(i, 0));\n vec3 j = normalize(vec3(-0.000001, 1.000001, 0.000001));\n mat3 R = alignVector(i, j);\n\n vec3 r0p = r0 - vec3(uRotation * vec4(vPosA, 0));\n r0p = R * r0p;\n vec3 rdp = R * rd;\n\n float a = dot(rdp.xz, rdp.xz);\n float b = 2.0 * dot(rdp.xz, r0p.xz);\n float c = dot(r0p.xz, r0p.xz) - vRadius*vRadius;\n float disc = b*b - 4.0*a*c;\n if (disc <= 0.0) {\n discard;\n }\n float t = (-b - sqrt(disc))/(2.0*a);\n if (t < 0.0) {\n discard;\n }\n\n vec3 coord = r0p + rdp * t;\n if (coord.y < 0.0 || coord.y > length(vPosA - vPosB)) {\n discard;\n }\n\n vec3 color;\n if (coord.y < vRadA + 0.5 * (length(vPosA - vPosB) - (vRadA + vRadB))) {\n color = vColA;\n } else {\n color = vColB;\n }\n\n color = mix(color, vec3(1,1,1), uBondShade);\n\n R = alignVector(j, i);\n vec3 normal = normalize(R * vec3(coord.x, 0, coord.z));\n\n coord = r0 + rd * t;\n if (uMode == 0) {\n gl_FragColor = vec4(color, 1);\n } else if (uMode == 1) {\n gl_FragColor = vec4(normal * 0.5 + 0.5, 1.0);\n }\n gl_FragDepthEXT = -(coord.z - uDepth/2.0)/uDepth;\n}\n",dof:"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uColor;\nuniform sampler2D uDepth;\nuniform float uRes;\nuniform float uDOFPosition;\nuniform float uDOFStrength;\nuniform int leftRight;\n\nvoid main() {\n\n vec2 samples[64];\n samples[0] = vec2(0.857612, 0.019885);\n samples[1] = vec2(0.563809, -0.028071);\n samples[2] = vec2(0.825599, -0.346856);\n samples[3] = vec2(0.126584, -0.380959);\n samples[4] = vec2(0.782948, 0.594322);\n samples[5] = vec2(0.292148, -0.543265);\n samples[6] = vec2(0.130700, 0.330220);\n samples[7] = vec2(0.236088, 0.159604);\n samples[8] = vec2(-0.305259, 0.810505);\n samples[9] = vec2(0.269616, 0.923026);\n samples[10] = vec2(0.484486, 0.371845);\n samples[11] = vec2(-0.638057, 0.080447);\n samples[12] = vec2(0.199629, 0.667280);\n samples[13] = vec2(-0.861043, -0.370583);\n samples[14] = vec2(-0.040652, -0.996174);\n samples[15] = vec2(0.330458, -0.282111);\n samples[16] = vec2(0.647795, -0.214354);\n samples[17] = vec2(0.030422, -0.189908);\n samples[18] = vec2(0.177430, -0.721124);\n samples[19] = vec2(-0.461163, -0.327434);\n samples[20] = vec2(-0.410012, -0.734504);\n samples[21] = vec2(-0.616334, -0.626069);\n samples[22] = vec2(0.590759, -0.726479);\n samples[23] = vec2(-0.590794, 0.805365);\n samples[24] = vec2(-0.924561, -0.163739);\n samples[25] = vec2(-0.323028, 0.526960);\n samples[26] = vec2(0.642128, 0.752577);\n samples[27] = vec2(0.173625, -0.952386);\n samples[28] = vec2(0.759014, 0.330311);\n samples[29] = vec2(-0.360526, -0.032013);\n samples[30] = vec2(-0.035320, 0.968156);\n samples[31] = vec2(0.585478, -0.431068);\n samples[32] = vec2(-0.244766, -0.906947);\n samples[33] = vec2(-0.853096, 0.184615);\n samples[34] = vec2(-0.089061, 0.104648);\n samples[35] = vec2(-0.437613, 0.285308);\n samples[36] = vec2(-0.654098, 0.379841);\n samples[37] = vec2(-0.128663, 0.456572);\n samples[38] = vec2(0.015980, -0.568170);\n samples[39] = vec2(-0.043966, -0.771940);\n samples[40] = vec2(0.346512, -0.071238);\n samples[41] = vec2(-0.207921, -0.209121);\n samples[42] = vec2(-0.624075, -0.189224);\n samples[43] = vec2(-0.120618, 0.689339);\n samples[44] = vec2(-0.664679, -0.410200);\n samples[45] = vec2(0.371945, -0.880573);\n samples[46] = vec2(-0.743251, 0.629998);\n samples[47] = vec2(-0.191926, -0.413946);\n samples[48] = vec2(0.449574, 0.833373);\n samples[49] = vec2(0.299587, 0.449113);\n samples[50] = vec2(-0.900432, 0.399319);\n samples[51] = vec2(0.762613, -0.544796);\n samples[52] = vec2(0.606462, 0.174233);\n samples[53] = vec2(0.962185, -0.167019);\n samples[54] = vec2(0.960990, 0.249552);\n samples[55] = vec2(0.570397, 0.559146);\n samples[56] = vec2(-0.537514, 0.555019);\n samples[57] = vec2(0.108491, -0.003232);\n samples[58] = vec2(-0.237693, -0.615428);\n samples[59] = vec2(-0.217313, 0.261084);\n samples[60] = vec2(-0.998966, 0.025692);\n samples[61] = vec2(-0.418554, -0.527508);\n samples[62] = vec2(-0.822629, -0.567797);\n samples[63] = vec2(0.061945, 0.522105);\n\n float invRes = 1.0/uRes;\n vec2 coord = gl_FragCoord.xy * invRes;\n\n float strength = uDOFStrength * uRes/768.0;\n\n float depth = texture2D(uDepth, coord).r;\n float range = uDOFPosition - depth;\n float scale = abs(range);\n\n vec4 sample = texture2D(uColor, coord);\n float count = 1.0;\n for(int i = 0; i < 64; i++) {\n vec2 p = samples[i];\n p = coord + scale * 64.0 * strength * p * invRes;\n float d = texture2D(uDepth, p).r;\n float r = uDOFPosition - d;\n float s = abs(r);\n sample += texture2D(uColor, p) * s;\n count += s;\n }\n\n gl_FragColor = sample/count;\n}",fxaa:"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uTexture;\nuniform float uRes;\n\nvoid main() {\n float FXAA_SPAN_MAX = 8.0;\n float FXAA_REDUCE_MUL = 1.0/8.0;\n float FXAA_REDUCE_MIN = 1.0/128.0;\n\n vec2 texCoords = gl_FragCoord.xy/uRes;\n\n vec4 rgbNW = texture2D(uTexture, texCoords + (vec2(-1.0, -1.0) / uRes));\n vec4 rgbNE = texture2D(uTexture, texCoords + (vec2(1.0, -1.0) / uRes));\n vec4 rgbSW = texture2D(uTexture, texCoords + (vec2(-1.0, 1.0) / uRes));\n vec4 rgbSE = texture2D(uTexture, texCoords + (vec2(1.0, 1.0) / uRes));\n vec4 rgbM = texture2D(uTexture, texCoords);\n\n vec4 luma = vec4(0.299, 0.587, 0.114, 1.0);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0/(min(abs(dir.x), abs(dir.y)) + dirReduce);\n\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX), max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), dir * rcpDirMin)) / uRes;\n\n vec4 rgbA = (1.0/2.0) * \n (texture2D(uTexture, texCoords.xy + dir * (1.0/3.0 - 0.5)) + \n texture2D(uTexture, texCoords.xy + dir * (2.0/3.0 - 0.5)));\n vec4 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * \n (texture2D(uTexture, texCoords.xy + dir * (0.0/3.0 - 0.5)) +\n texture2D(uTexture, texCoords.xy + dir * (3.0/3.0 - 0.5)));\n float lumaB = dot(rgbB, luma);\n\n if((lumaB < lumaMin) || (lumaB > lumaMax)){\n gl_FragColor = rgbA;\n } else {\n gl_FragColor = rgbB;\n }\n\n}","textured-quad":"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uTexture;\nuniform float uRes;\n\nvoid main() {\n gl_FragColor = texture2D(uTexture, gl_FragCoord.xy/uRes);\n}\n"};e.exports={shaders:r}},function(e,t,n){"use strict";var r=n(2);e.exports=function(e){if(arguments.length>1)throw"Error: The Speck Interactions module has changed!";if(0===arguments.length||"object"!=typeof e)throw"Error: Arguments not provided to interactions";var t=void 0===e.scrollZoom||e.scrollZoom,n=e.container,o=e.getRotation,a=e.setRotation,s=e.getTranslation,i=e.setTranslation,u=e.getZoom,m=e.setZoom,l=e.refreshView,c={buttonDown:!1,shiftDown:!1,lastX:0,lastY:0};function f(e){0===e.button&&(c={buttonDown:!0,shiftDown:c.shiftDown,lastX:e.clientX,lastY:e.clientY})}function p(e){if(0===e.button){if(!c.buttonDown)return;c.buttonDown=!1}}function d(e){c.shiftDown=e.shiftKey}function v(e){if(c.buttonDown&&0!==e.buttons){e.preventDefault();var t=e.clientX-c.lastX,n=e.clientY-c.lastY;if(0!==t||0!==n){if(c.lastX=e.clientX,c.lastY=e.clientY,c.shiftDown){var m=s(),f=.001/u();i({x:m.x-t*f,y:m.y+n*f})}else{var p={rotation:new Float32Array(o())};r.rotate(p,t,n),a(p.rotation)}l()}}}function b(e){e.preventDefault(),m(u()*(e.deltaY<0?1/.9:.9)),l()}return n.addEventListener("mousedown",f),window.addEventListener("mouseup",p),window.addEventListener("keydown",d),window.addEventListener("keyup",d),window.addEventListener("mousemove",v),t&&n.addEventListener("wheel",b),function(){n.removeEventListener("mousedown",f),window.removeEventListener("mouseup",p),window.removeEventListener("keydown",d),window.removeEventListener("keyup",d),window.removeEventListener("mousemove",v),n.removeEventListener("wheel",b)}}},function(e,t){e.exports={default:{atomScale:.6,relativeAtomScale:1,bondScale:.5,ao:.75,aoRes:256,brightness:.5,outline:0,spf:32,bonds:!1,bondThreshold:1.2,bondShade:.5,atomShade:.5,dofStrength:0,dofPosition:.5,fxaa:1},stickball:{atomScale:.24,relativeAtomScale:.64,bondScale:.5,bonds:!0,bondThreshold:1.2},toon:{ao:0,spf:0,brightness:.5,outline:1},licorice:{atomScale:.1,relativeAtomScale:0,bondScale:1,bonds:!0,bondThreshold:1.2}}}])});