t |
>>=q,b-=q;15>b&&(s+=e[h++]<>>24;s>>>=q;b-=q;q=v>>>16& 255;if(q&16){v&=65535;q&=15;bu){c.msg="invalid distance too far back";f.mode=30;break a}s>>>=q;b-=q;q=m-y;if(v>q){q=v-q;if(q>M&&f.sane){c.msg="invalid distance too far back";f.mode=30;break a}n=0;d=C;if(0===t){if(n+=E-q,q>3;h-=k;b-=k<<3;c.next_in=h;c.next_out=m;c.avail_in=h >>24&255)+(b>>>8&65280)+((b&65280)<<8)+((b&255)<<24)}function x(){this.mode=0;this.last=!1;this.wrap=0;this.havedict=!1;this.total=this.check=this.dmax=this.flags=0;this.head=null;this.wnext=this.whave=this.wsize=this.wbits=0;this.window=null;this.extra=this.offset=this.length=this.bits=this.hold=0;this.distcode= this.lencode=null;this.have=this.ndist=this.nlen=this.ncode=this.distbits=this.lenbits=0;this.next=null;this.lens=new y.Buf16(320);this.work=new y.Buf16(288);this.distdyn=this.lendyn=null;this.was=this.back=this.sane=0}function f(b){var c;if(!b||!b.state)return-2;c=b.state;b.total_in=b.total_out=c.total=0;b.msg="";c.wrap&&(b.adler=c.wrap&1);c.mode=1;c.last=0;c.havedict=0;c.dmax=32768;c.head=null;c.hold=0;c.bits=0;c.lencode=c.lendyn=new y.Buf32(852);c.distcode=c.distdyn=new y.Buf32(592);c.sane=1;c.back= -1;return 0}function h(b){var c;if(!b||!b.state)return-2;c=b.state;c.wsize=0;c.whave=0;c.wnext=0;return f(b)}function g(b,c){var a,f;if(!b||!b.state)return-2;f=b.state;0>c?(a=0,c=-c):(a=(c>>4)+1,48>c&&(c&=15));if(c&&(8>c||15 e;){if(0===k)break a;k--;d+=f[g++]< >>8&255;a.check=I(a.check,H,2,0);e=d=0;a.mode=2;break}a.flags=0;a.head&&(a.head.done=!1);if(!(a.wrap&1)||(((d&255)<<8)+(d>>8))%31){b.msg="incorrect header check";a.mode=30;break}if(8!==(d&15)){b.msg="unknown compression method";a.mode=30;break}d>>>=4;e-=4;r=(d&15)+8;if(0===a.wbits)a.wbits=r;else if(r>a.wbits){b.msg="invalid window size";a.mode=30;break}a.dmax=1< e;){if(0===k)break a;k--;d+=f[g++]< >8&1);a.flags&512&&(H[0]=d&255,H[1]=d>>>8&255,a.check=I(a.check,H,2,0));e=d=0;a.mode=3;case 3:for(;32>e;){if(0===k)break a;k--;d+=f[g++]< >>8&255,H[2]=d>>>16&255,H[3]= d>>>24&255,a.check=I(a.check,H,4,0));e=d=0;a.mode=4;case 4:for(;16>e;){if(0===k)break a;k--;d+=f[g++]< >8);a.flags&512&&(H[0]=d&255,H[1]=d>>>8&255,a.check=I(a.check,H,2,0));e=d=0;a.mode=5;case 5:if(a.flags&1024){for(;16>e;){if(0===k)break a;k--;d+=f[g++]< >>8&255,a.check=I(a.check,H,2,0));e=d=0}else a.head&&(a.head.extra=null);a.mode=6;case 6:if(a.flags&1024&&(l=a.length, l>k&&(l=k),l&&(a.head&&(r=a.head.extra_len-a.length,a.head.extra||(a.head.extra=Array(a.head.extra_len)),y.arraySet(a.head.extra,f,g,l,r)),a.flags&512&&(a.check=I(a.check,f,l,g)),k-=l,g+=l,a.length-=l),a.length))break a;a.length=0;a.mode=7;case 7:if(a.flags&2048){if(0===k)break a;l=0;do r=f[g+l++],a.head&&r&&65536>a.length&&(a.head.name+=String.fromCharCode(r));while(r&&l a.length&&(a.head.comment+=String.fromCharCode(r));while(r&&l e;){if(0===k)break a;k--;d+=f[g++]< >9&1,a.head.done=!0);b.adler=a.check=0;a.mode=12;break;case 10:for(;32>e;){if(0===k)break a;k--; d+=f[g++]< >>=e&7;e-=e&7;a.mode=27;break}for(;3>e;){if(0===k)break a;k--;d+=f[g++]< >>=1;e-=1;switch(d&3){case 0:a.mode=14;break;case 1:l=a;if(t){r=void 0;C=new y.Buf32(512);s=new y.Buf32(32);for(r=0;144>r;)l.lens[r++]=8;for(;256>r;)l.lens[r++]=9;for(;280> r;)l.lens[r++]=7;for(;288>r;)l.lens[r++]=8;M(1,l.lens,0,288,C,0,l.work,{bits:9});for(r=0;32>r;)l.lens[r++]=5;M(2,l.lens,0,32,s,0,l.work,{bits:5});t=!1}l.lencode=C;l.lenbits=9;l.distcode=s;l.distbits=5;a.mode=20;if(6===c){d>>>=2;e-=2;break a}break;case 2:a.mode=17;break;case 3:b.msg="invalid block type",a.mode=30}d>>>=2;e-=2;break;case 14:d>>>=e&7;for(e-=e&7;32>e;){if(0===k)break a;k--;d+=f[g++]< >>16^65535)){b.msg="invalid stored block lengths";a.mode=30;break}a.length=d& 65535;e=d=0;a.mode=15;if(6===c)break a;case 15:a.mode=16;case 16:if(l=a.length){l>k&&(l=k);l>n&&(l=n);if(0===l)break a;y.arraySet(h,f,g,l,m);k-=l;g+=l;n-=l;m+=l;a.length-=l;break}a.mode=12;break;case 17:for(;14>e;){if(0===k)break a;k--;d+=f[g++]< >>=5;e-=5;a.ndist=(d&31)+1;d>>>=5;e-=5;a.ncode=(d&15)+4;d>>>=4;e-=4;if(286 e;){if(0===k)break a; k--;d+=f[g++]< >>=3;e-=3}for(;19>a.have;)a.lens[R[a.have++]]=0;a.lencode=a.lendyn;a.lenbits=7;l={bits:a.lenbits};J=M(0,a.lens,0,19,a.lencode,0,a.work,l);a.lenbits=l.bits;if(J){b.msg="invalid code lengths set";a.mode=30;break}a.have=0;a.mode=19;case 19:for(;a.have >>24;G=l>>>16&255;x=l&65535;if(w<=e)break;if(0===k)break a;k--;d+=f[g++]< x)d>>>=w,e-=w,a.lens[a.have++]=x;else{if(16===x){for(l=w+ 2;e >>=w;e-=w;if(0===a.have){b.msg="invalid bit length repeat";a.mode=30;break}r=a.lens[a.have-1];l=3+(d&3);d>>>=2;e-=2}else if(17===x){for(l=w+3;e >>=w;e-=w;r=0;l=3+(d&7);d>>>=3;e-=3}else{for(l=w+7;e >>=w;e-=w;r=0;l=11+(d&127);d>>>=7;e-=7}if(a.have+l>a.nlen+a.ndist){b.msg="invalid bit length repeat";a.mode=30;break}for(;l--;)a.lens[a.have++]=r}}if(30===a.mode)break; if(0===a.lens[256]){b.msg="invalid code -- missing end-of-block";a.mode=30;break}a.lenbits=9;l={bits:a.lenbits};J=M(1,a.lens,0,a.nlen,a.lencode,0,a.work,l);a.lenbits=l.bits;if(J){b.msg="invalid literal/lengths set";a.mode=30;break}a.distbits=6;a.distcode=a.distdyn;l={bits:a.distbits};J=M(2,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,l);a.distbits=l.bits;if(J){b.msg="invalid distances set";a.mode=30;break}a.mode=20;if(6===c)break a;case 20:a.mode=21;case 21:if(6<=k&&258<=n){b.next_out=m;b.avail_out= n;b.next_in=g;b.avail_in=k;a.hold=d;a.bits=e;E(b,z);m=b.next_out;h=b.output;n=b.avail_out;g=b.next_in;f=b.input;k=b.avail_in;d=a.hold;e=a.bits;12===a.mode&&(a.back=-1);break}for(a.back=0;;){l=a.lencode[d&(1< >>24;G=l>>>16&255;x=l&65535;if(w<=e)break;if(0===k)break a;k--;d+=f[g++]< >r)];w=l>>>24;G=l>>>16&255;x=l&65535;if(r+w<=e)break;if(0===k)break a;k--;d+=f[g++]< >>=r;e-=r;a.back+=r}d>>>=w;e-=w; a.back+=w;a.length=x;if(0===G){a.mode=26;break}if(G&32){a.back=-1;a.mode=12;break}if(G&64){b.msg="invalid literal/length code";a.mode=30;break}a.extra=G&15;a.mode=22;case 22:if(a.extra){for(l=a.extra;e >>=a.extra;e-=a.extra;a.back+=a.extra}a.was=a.length;a.mode=23;case 23:for(;;){l=a.distcode[d&(1< >>24;G=l>>>16&255;x=l&65535;if(w<=e)break;if(0===k)break a;k--;d+=f[g++]< >r)];w=l>>>24;G=l>>>16&255;x=l&65535;if(r+w<=e)break;if(0===k)break a;k--;d+=f[g++]< >>=r;e-=r;a.back+=r}d>>>=w;e-=w;a.back+=w;if(G&64){b.msg="invalid distance code";a.mode=30;break}a.offset=x;a.extra=G&15;a.mode=24;case 24:if(a.extra){for(l=a.extra;e >>=a.extra;e-=a.extra;a.back+=a.extra}if(a.offset>a.dmax){b.msg="invalid distance too far back";a.mode=30;break}a.mode=25;case 25:if(0=== n)break a;l=z-n;if(a.offset>l){l=a.offset-l;if(l>a.whave&&a.sane){b.msg="invalid distance too far back";a.mode=30;break}l>a.wnext?(l-=a.wnext,r=a.wsize-l):r=a.wnext-l;l>a.length&&(l=a.length);u=a.window}else u=h,r=m-a.offset,l=a.length;l>n&&(l=n);n-=l;a.length-=l;do h[m++]=u[r++];while(--l);0===a.length&&(a.mode=21);break;case 26:if(0===n)break a;h[m++]=a.length;n--;a.mode=21;break;case 27:if(a.wrap){for(;32>e;){if(0===k)break a;k--;d|=f[g++]< e;){if(0===k)break a;k--;d+=f[g++]< a.mode&&(27> a.mode||4!==c))f=b.output,g=b.next_out,m=z-b.avail_out,n=b.state,null===n.window&&(n.wsize=1< =n.wsize?(y.arraySet(n.window,f,g-n.wsize,n.wsize,0),n.wnext=0,n.whave=n.wsize):(k=n.wsize-n.wnext,k>m&&(k=m),y.arraySet(n.window,f,g-m,k,n.wnext),(m-=k)?(y.arraySet(n.window,f,g-m,m,0),n.wnext=m,n.whave=n.wsize):(n.wnext+=k,n.wnext===n.wsize&&(n.wnext=0),n.whave =b;b++)O[b]=0;for(D=0;DK&&(L=K);if(0===K)return E[M++]=20971520,E[M++]=20971520,C.bits=1,0;for(a=1;a =b;b++)if(k<<=1,k-=O[b],0>k)return-1;if(0 b;b++)v[b+1]=v[b]+ O[b];for(D=0;Dr?(N=w[G+t[D]],J=z[l+t[D]]):(N=96,J=0);k=1< >q)+e]=Q<<24|N<<16|J|0;while(0!==e);for(k=1< >=1;0!==k?(d&=k-1,d+=k):d=0;D++;if(0===--O[b]){if(b===K)break;b=p[u+t[D]]}if(b>L&&(d&I)!==A){0===q&&(q=L);s+=a;v=b-q;for(k= 1< =k)break;v++;k<<=1}n+=1< h.windowBits&&(h.windowBits=-h.windowBits,0===h.windowBits&&(h.windowBits=-15));!(0<=h.windowBits&&16>h.windowBits)||c&&c.windowBits||(h.windowBits+=32);15 h.windowBits&&0===(h.windowBits&15)&&(h.windowBits|=15);this.err=0;this.msg="";this.ended=!1;this.chunks=[];this.strm=new y;this.strm.avail_out=0;c=x.inflateInit2(this.strm,h.windowBits);if(c!==g.Z_OK)throw Error(m[c]);this.header=new B;x.inflateGetHeader(this.strm,this.header)};E.prototype.push= function(c,m){var p=this.strm,s=this.options.chunkSize,b,u,a,y,B;if(this.ended)return!1;u=m===~~m?m:!0===m?g.Z_FINISH:g.Z_NO_FLUSH;"string"===typeof c?p.input=h.binstring2buf(c):"[object ArrayBuffer]"===I.call(c)?p.input=new Uint8Array(c):p.input=c;p.next_in=0;p.avail_in=p.input.length;do{0===p.avail_out&&(p.output=new f.Buf8(s),p.next_out=0,p.avail_out=s);b=x.inflate(p,g.Z_NO_FLUSH);if(b!==g.Z_STREAM_END&&b!==g.Z_OK)return this.onEnd(b),this.ended=!0,!1;if(p.next_out&&(0===p.avail_out||b===g.Z_STREAM_END|| 0===p.avail_in&&(u===g.Z_FINISH||u===g.Z_SYNC_FLUSH)))if("string"===this.options.to)a=h.utf8border(p.output,p.next_out),y=p.next_out-a,B=h.buf2string(p.output,a),p.next_out=y,p.avail_out=s-y,y&&f.arraySet(p.output,p.output,a,y,0),this.onData(B);else this.onData(f.shrinkBuf(p.output,p.next_out))}while(0 F.x?A:F.x,q=q>F.y?q:F.y,B=B>F.z?B:F.z,F.symmetries&&m))for(var g=0;g F.symmetries[g].x?A:F.symmetries[g].x,q=q>F.symmetries[g].y?q:F.symmetries[g].y,B=B>F.symmetries[g].z?B:F.symmetries[g].z}return[[d,p,y],[A,q,B],[f/t,w/t,h/t]]};$3Dmol.getAtomProperty=function(b,c){var d=null;b.properties&&"undefined"!=typeof b.properties[c]?d=b.properties[c]:"undefined"!=typeof b[c]&&(d=b[c]);return d}; $3Dmol.getPropertyRange=function(b,c){for(var d=Number.POSITIVE_INFINITY,p=Number.NEGATIVE_INFINITY,y=0,A=b.length;yp&&(p=q))}isFinite(d)||isFinite(p)?isFinite(d)?isFinite(p)||(p=d):d=p:d=p=0;return[d,p]};var $3Dmol=$3Dmol||{};$3Dmol.Math={clamp:function(b,c,d){return Math.min(Math.max(b,c),d)},degToRad:function(){var b=Math.PI/180;return function(c){return c*b}}()}; $3Dmol.Quaternion=function(b,c,d,p){this.x=b||0;this.y=c||0;this.z=d||0;this.w=void 0!==p?p:1}; $3Dmol.Quaternion.prototype={constructor:$3Dmol.Quaternion,set:function(b,c,d,p){this.x=b;this.y=c;this.z=d;this.w=p;return this},copy:function(b){this.x=b.x;this.y=b.y;this.z=b.z;this.w=b.w;return this},conjugate:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},inverse:function(){return this.conjugate().normalize()},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var b=this.length();0===b?(this.z=this.y=this.x=0,this.w=1): (b=1/b,this.x*=b,this.y*=b,this.z*=b,this.w*=b);return this},multiply:function(b){return this.multiplyQuaternions(this,b)},multiplyQuaternions:function(b,c){var d=b.x,p=b.y,y=b.z,A=b.w,q=c.x,B=c.y,f=c.z,w=c.w;this.x=d*w+A*q+p*f-y*B;this.y=p*w+A*B+y*q-d*f;this.z=y*w+A*f+d*B-p*q;this.w=A*w-d*q-p*B-y*f}};$3Dmol.Vector2=function(b,c){this.x=b||0;this.y=c||0}; $3Dmol.Vector2.prototype={constructor:$3Dmol.Vector2,set:function(b,c){this.x=b;this.y=c;return this},subVectors:function(b,c){this.x=b.x-c.x;this.y=b.y-c.y;return this},copy:function(b){this.x=b.x;this.y=b.y;return this},clone:function(){return new $3Dmol.Vector2(this.x,this.y)}};$3Dmol.Vector3=function(b,c,d){this.x=b||0;this.y=c||0;this.z=d||0}; $3Dmol.Vector3.prototype={constructor:$3Dmol.Vector3,set:function(b,c,d){this.x=b;this.y=c;this.z=d;return this},copy:function(b){this.x=b.x;this.y=b.y;this.z=b.z;return this},add:function(b){this.x+=b.x;this.y+=b.y;this.z+=b.z;return this},addVectors:function(b,c){this.x=b.x+c.x;this.y=b.y+c.y;this.z=b.z+c.z;return this},sub:function(b){this.x-=b.x;this.y-=b.y;this.z-=b.z;return this},subVectors:function(b,c){this.x=b.x-c.x;this.y=b.y-c.y;this.z=b.z-c.z;return this},multiplyScalar:function(b){this.x*= b;this.y*=b;this.z*=b;return this},divideScalar:function(b){0!==b?(this.x/=b,this.y/=b,this.z/=b):this.z=this.y=this.x=0;return this},max:function(b){this.x=Math.max(this.x,b.x);this.y=Math.max(this.y,b.y);this.z=Math.max(this.z,b.z);return this},min:function(b){this.x=Math.min(this.x,b.x);this.y=Math.min(this.y,b.y);this.z=Math.min(this.z,b.z);return this},distanceTo:function(b){return Math.sqrt(this.distanceToSquared(b))},distanceToSquared:function(b){var c=this.x-b.x,d=this.y-b.y;b=this.z-b.z; return c*c+d*d+b*b},applyMatrix4:function(b){var c=this.x,d=this.y,p=this.z;b=b.elements;this.x=b[0]*c+b[4]*d+b[8]*p+b[12];this.y=b[1]*c+b[5]*d+b[9]*p+b[13];this.z=b[2]*c+b[6]*d+b[10]*p+b[14];return this},applyProjection:function(b){var c=this.x,d=this.y,p=this.z;b=b.elements;var y=b[3]*c+b[7]*d+b[11]*p+b[15];this.x=(b[0]*c+b[4]*d+b[8]*p+b[12])/y;this.y=(b[1]*c+b[5]*d+b[9]*p+b[13])/y;this.z=(b[2]*c+b[6]*d+b[10]*p+b[14])/y;return this},applyQuaternion:function(b){var c=this.x,d=this.y,p=this.z,y=b.x, A=b.y,q=b.z,B,f,w;B=2*(d*q-p*A);f=2*(p*y-c*q);w=2*(c*A-d*y);this.x=c+b.w*B+(f*q-w*A);this.y=d+b.w*f+(w*y-B*q);this.z=p+b.w*w+(B*A-f*y);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(b){return this.x*b.x+this.y*b.y+this.z*b.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},normalize:function(){return this.divideScalar(this.length())},cross:function(b){var c=this.x,d=this.y, p=this.z;this.x=d*b.z-p*b.y;this.y=p*b.x-c*b.z;this.z=c*b.y-d*b.x;return this},crossVectors:function(b,c){this.x=b.y*c.z-b.z*c.y;this.y=b.z*c.x-b.x*c.z;this.z=b.x*c.y-b.y*c.x;return this},getPositionFromMatrix:function(b){this.x=b.elements[12];this.y=b.elements[13];this.z=b.elements[14];return this},setEulerFromRotationMatrix:function(b,c){var d=b.elements,p=d[0],y=d[4],A=d[8],q=d[5],B=d[9],f=d[6],d=d[10];void 0===c||"XYZ"===c?(this.y=Math.asin($3Dmol.Math.clamp(A,-1,1)),.99999>Math.abs(A)?(this.x= Math.atan2(-B,d),this.z=Math.atan2(-y,p)):(this.x=Math.atan2(f,q),this.z=0)):console.error("Error with vector's setEulerFromRotationMatrix: Unknown order: "+c);return this},rotateAboutVector:function(b,c){b.normalize();var d=Math.cos(c),p=Math.sin(c),y=this.clone().multiplyScalar(d),p=b.clone().cross(this).multiplyScalar(p),d=b.clone().multiplyScalar(b.clone().dot(this)).multiplyScalar(1-d),y=y.add(p).add(d);this.x=y.x;this.y=y.y;this.z=y.z;return this},clone:function(){return new $3Dmol.Vector3(this.x, this.y,this.z)}};$3Dmol.Matrix3=function(b,c,d,p,y,A,q,B,f){this.elements=new Float32Array(9);this.set(void 0!==b?b:1,c||0,d||0,p||0,void 0!==y?y:1,A||0,q||0,B||0,void 0!==f?f:1)}; $3Dmol.Matrix3.prototype={constructor:$3Dmol.Matrix3,set:function(b,c,d,p,y,A,q,B,f){var w=this.elements;w[0]=b;w[3]=c;w[6]=d;w[1]=p;w[4]=y;w[7]=A;w[2]=q;w[5]=B;w[8]=f;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},copy:function(b){b=b.elements;this.set(b[0],b[3],b[6],b[1],b[4],b[7],b[2],b[5],b[8])},multiplyScalar:function(b){var c=this.elements;c[0]*=b;c[3]*=b;c[6]*=b;c[1]*=b;c[4]*=b;c[7]*=b;c[2]*=b;c[5]*=b;c[8]*=b;return this},getInverse:function(b,c){var d=b.elements, p=this.elements;p[0]=d[10]*d[5]-d[6]*d[9];p[1]=-d[10]*d[1]+d[2]*d[9];p[2]=d[6]*d[1]-d[2]*d[5];p[3]=-d[10]*d[4]+d[6]*d[8];p[4]=d[10]*d[0]-d[2]*d[8];p[5]=-d[6]*d[0]+d[2]*d[4];p[6]=d[9]*d[4]-d[5]*d[8];p[7]=-d[9]*d[0]+d[1]*d[8];p[8]=d[5]*d[0]-d[1]*d[4];d=d[0]*p[0]+d[1]*p[3]+d[2]*p[6];if(0===d){if(c)throw Error("Matrix3.getInverse(): can't invert matrix, determinant is 0");console.warn("Matrix3.getInverse(): can't invert matrix, determinant is 0");this.identity();return this}this.multiplyScalar(1/d);return this}, getDeterminant:function(){var b=this.elements;return b[0]*b[4]*b[8]+b[1]*b[5]*b[6]+b[2]*b[3]*b[7]-b[2]*b[4]*b[6]-b[1]*b[3]*b[8]-b[0]*b[5]*b[7]},transpose:function(){var b,c=this.elements;b=c[1];c[1]=c[3];c[3]=b;b=c[2];c[2]=c[6];c[6]=b;b=c[5];c[5]=c[7];c[7]=b;return this},clone:function(){var b=this.elements;return new $3Dmol.Matrix3(b[0],b[3],b[6],b[1],b[4],b[7],b[2],b[5],b[8])}}; $3Dmol.Matrix4=function(b,c,d,p,y,A,q,B,f,w,h,t,m,e,F,g){var x=this.elements=new Float32Array(16);x[0]=void 0!==b?b:1;x[4]=c||0;x[8]=d||0;x[12]=p||0;x[1]=y||0;x[5]=void 0!==A?A:1;x[9]=q||0;x[13]=B||0;x[2]=f||0;x[6]=w||0;x[10]=void 0!==h?h:1;x[14]=t||0;x[3]=m||0;x[7]=e||0;x[11]=F||0;x[15]=void 0!==g?g:1}; $3Dmol.Matrix4.prototype={constructor:$3Dmol.Matrix4,set:function(b,c,d,p,y,A,q,B,f,w,h,t,m,e,F,g){var x=this.elements;x[0]=b;x[4]=c;x[8]=d;x[12]=p;x[1]=y;x[5]=A;x[9]=q;x[13]=B;x[2]=f;x[6]=w;x[10]=h;x[14]=t;x[3]=m;x[7]=e;x[11]=F;x[15]=g;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(b){b=b.elements;this.set(b[0],b[4],b[8],b[12],b[1],b[5],b[9],b[13],b[2],b[6],b[10],b[14],b[3],b[7],b[11],b[15]);return this},matrix3FromTopLeft:function(){var b=this.elements; return new $3Dmol.Matrix3(b[0],b[4],b[8],b[1],b[5],b[9],b[2],b[6],b[10])},setRotationFromEuler:function(b,c){var d=this.elements,p=b.x,y=b.y,A=b.z,q=Math.cos(p),p=Math.sin(p),B=Math.cos(y),y=Math.sin(y),f=Math.cos(A),A=Math.sin(A);if(void 0===c||"XYZ"===c){var w=q*f,h=q*A,t=p*f,m=p*A;d[0]=B*f;d[4]=-B*A;d[8]=y;d[1]=h+t*y;d[5]=w-m*y;d[9]=-p*B;d[2]=m-w*y;d[6]=t+h*y;d[10]=q*B}else console.error("Error with matrix4 setRotationFromEuler. Order: "+c);return this},setRotationFromQuaternion:function(b){var c= this.elements,d=b.x,p=b.y,y=b.z,A=b.w,q=d+d,B=p+p,f=y+y;b=d*q;var w=d*B,d=d*f,h=p*B,p=p*f,y=y*f,q=A*q,B=A*B,A=A*f;c[0]=1-(h+y);c[4]=w-A;c[8]=d+B;c[1]=w+A;c[5]=1-(b+y);c[9]=p-q;c[2]=d-B;c[6]=p+q;c[10]=1-(b+h);return this},lookAt:function(){var b=new $3Dmol.Vector3,c=new $3Dmol.Vector3,d=new $3Dmol.Vector3;return function(p,y,A){var q=this.elements;d.subVectors(p,y).normalize();0===d.length()&&(d.z=1);b.crossVectors(A,d).normalize();0===b.length()&&(d.x+=1E-4,b.crossVectors(A,d).normalize());c.crossVectors(d, b);q[0]=b.x;q[4]=c.x;q[8]=d.x;q[1]=b.y;q[5]=c.y;q[9]=d.y;q[2]=b.z;q[6]=c.z;q[10]=d.z;return this}}(),multiplyMatrices:function(b,c){var d=b.elements,p=c.elements,y=this.elements,A=d[0],q=d[4],B=d[8],f=d[12],w=d[1],h=d[5],t=d[9],m=d[13],e=d[2],F=d[6],g=d[10],x=d[14],u=d[3],s=d[7],l=d[11],d=d[15],E=p[0],M=p[4],C=p[8],G=p[12],z=p[1],H=p[5],L=p[9],N=p[13],J=p[2],I=p[6],K=p[10],O=p[14],Q=p[3],W=p[7],P=p[11],p=p[15];y[0]=A*E+q*z+B*J+f*Q;y[4]=A*M+q*H+B*I+f*W;y[8]=A*C+q*L+B*K+f*P;y[12]=A*G+q*N+B*O+f*p;y[1]= w*E+h*z+t*J+m*Q;y[5]=w*M+h*H+t*I+m*W;y[9]=w*C+h*L+t*K+m*P;y[13]=w*G+h*N+t*O+m*p;y[2]=e*E+F*z+g*J+x*Q;y[6]=e*M+F*H+g*I+x*W;y[10]=e*C+F*L+g*K+x*P;y[14]=e*G+F*N+g*O+x*p;y[3]=u*E+s*z+l*J+d*Q;y[7]=u*M+s*H+l*I+d*W;y[11]=u*C+s*L+l*K+d*P;y[15]=u*G+s*N+l*O+d*p;return this},multiplyScalar:function(b){var c=this.elements;c[0]*=b;c[4]*=b;c[8]*=b;c[12]*=b;c[1]*=b;c[5]*=b;c[9]*=b;c[13]*=b;c[2]*=b;c[6]*=b;c[10]*=b;c[14]*=b;c[3]*=b;c[7]*=b;c[11]*=b;c[15]*=b;return this},transpose:function(){var b=this.elements,c; c=b[1];b[1]=b[4];b[4]=c;c=b[2];b[2]=b[8];b[8]=c;c=b[6];b[6]=b[9];b[9]=c;c=b[3];b[3]=b[12];b[12]=c;c=b[7];b[7]=b[13];b[13]=c;c=b[11];b[11]=b[14];b[14]=c;return this},getPosition:function(){var b=new $3Dmol.Vector3;return function(){console.warn("DEPRECATED: Matrix4's .getPosition() has been removed. Use Vector3.getPositionFromMatrix( matrix ) instead.");var c=this.elements;return b.set(c[12],c[13],c[14])}}(),setPosition:function(b){var c=this.elements;c[12]=b.x;c[13]=b.y;c[14]=b.z;return this},getInverse:function(b, c){var d=this.elements,p=b.elements,y=p[0],A=p[4],q=p[8],B=p[12],f=p[1],w=p[5],h=p[9],t=p[13],m=p[2],e=p[6],F=p[10],g=p[14],x=p[3],u=p[7],s=p[11],l=p[15];d[0]=h*g*u-t*F*u+t*e*s-w*g*s-h*e*l+w*F*l;d[4]=B*F*u-q*g*u-B*e*s+A*g*s+q*e*l-A*F*l;d[8]=q*t*u-B*h*u+B*w*s-A*t*s-q*w*l+A*h*l;d[12]=B*h*e-q*t*e-B*w*F+A*t*F+q*w*g-A*h*g;d[1]=t*F*x-h*g*x-t*m*s+f*g*s+h*m*l-f*F*l;d[5]=q*g*x-B*F*x+B*m*s-y*g*s-q*m*l+y*F*l;d[9]=B*h*x-q*t*x-B*f*s+y*t*s+q*f*l-y*h*l;d[13]=q*t*m-B*h*m+B*f*F-y*t*F-q*f*g+y*h*g;d[2]=w*g*x-t*e*x+ t*m*u-f*g*u-w*m*l+f*e*l;d[6]=B*e*x-A*g*x-B*m*u+y*g*u+A*m*l-y*e*l;d[10]=A*t*x-B*w*x+B*f*u-y*t*u-A*f*l+y*w*l;d[14]=B*w*m-A*t*m-B*f*e+y*t*e+A*f*g-y*w*g;d[3]=h*e*x-w*F*x-h*m*u+f*F*u+w*m*s-f*e*s;d[7]=A*F*x-q*e*x+q*m*u-y*F*u-A*m*s+y*e*s;d[11]=q*w*x-A*h*x-q*f*u+y*h*u+A*f*s-y*w*s;d[15]=A*h*m-q*w*m+q*f*e-y*h*e-A*f*F+y*w*F;d=p[0]*d[0]+p[1]*d[4]+p[2]*d[8]+p[3]*d[12];if(0===d){if(c)throw Error("Matrix4.getInverse(): can't invert matrix, determinant is 0");console.warn("Matrix4.getInverse(): can't invert matrix, determinant is 0"); this.identity();return this}this.multiplyScalar(1/d);return this},isReflected:function(){return 0>this.matrix3FromTopLeft().getDeterminant()},compose:function(){var b=new $3Dmol.Matrix4,c=new $3Dmol.Matrix4;return function(d,p,y){var A=this.elements;b.identity();b.setRotationFromQuaternion(p);c.makeScale(y.x,y.y,y.z);this.multiplyMatrices(b,c);A[12]=d.x;A[13]=d.y;A[14]=d.z;return this}}(),decompose:function(){var b=new $3Dmol.Vector3,c=new $3Dmol.Vector3,d=new $3Dmol.Vector3,p=new $3Dmol.Matrix4; return function(y,A,q){var B=this.elements;b.set(B[0],B[1],B[2]);c.set(B[4],B[5],B[6]);d.set(B[8],B[9],B[10]);y=y instanceof $3Dmol.Vector3?y:new $3Dmol.Vector3;A=A instanceof $3Dmol.Quaternion?A:new $3Dmol.Quaternion;q=q instanceof $3Dmol.Vector3?q:new $3Dmol.Vector3;q.x=b.length();q.y=c.length();q.z=d.length();y.x=B[12];y.y=B[13];y.z=B[14];p.copy(this);p.elements[0]/=q.x;p.elements[1]/=q.x;p.elements[2]/=q.x;p.elements[4]/=q.y;p.elements[5]/=q.y;p.elements[6]/=q.y;p.elements[8]/=q.z;p.elements[9]/= q.z;p.elements[10]/=q.z;A.setFromRotationMatrix(p);return[y,A,q]}}(),scale:function(b){var c=this.elements,d=b.x,p=b.y;b=b.z;c[0]*=d;c[4]*=p;c[8]*=b;c[1]*=d;c[5]*=p;c[9]*=b;c[2]*=d;c[6]*=p;c[10]*=b;c[3]*=d;c[7]*=p;c[11]*=b;return this},getMaxScaleOnAxis:function(){var b=this.elements;return Math.sqrt(Math.max(b[0]*b[0]+b[1]*b[1]+b[2]*b[2],Math.max(b[4]*b[4]+b[5]*b[5]+b[6]*b[6],b[8]*b[8]+b[9]*b[9]+b[10]*b[10])))},makeFrustum:function(b,c,d,p,y,A){var q=this.elements;q[0]=2*y/(c-b);q[4]=0;q[8]=(c+b)/ (c-b);q[12]=0;q[1]=0;q[5]=2*y/(p-d);q[9]=(p+d)/(p-d);q[13]=0;q[2]=0;q[6]=0;q[10]=-(A+y)/(A-y);q[14]=-2*A*y/(A-y);q[3]=0;q[7]=0;q[11]=-1;q[15]=0;return this},makePerspective:function(b,c,d,p){b=d*Math.tan($3Dmol.Math.degToRad(.5*b));var y=-b;return this.makeFrustum(y*c,b*c,y,b,d,p)},isEqual:function(b){b=b.elements;var c=this.elements;return c[0]==b[0]&&c[4]==b[4]&&c[8]==b[8]&&c[12]==b[12]&&c[1]==b[1]&&c[5]==b[5]&&c[9]==b[9]&&c[13]==b[13]&&c[2]==b[2]&&c[6]==b[6]&&c[10]==b[10]&&c[14]==b[14]&&c[3]== b[3]&&c[7]==b[7]&&c[11]==b[11]&&c[15]==b[15]?!0:!1},clone:function(){var b=this.elements;return new $3Dmol.Matrix4(b[0],b[4],b[8],b[12],b[1],b[5],b[9],b[13],b[2],b[6],b[10],b[14],b[3],b[7],b[11],b[15])},isIdentity:function(){var b=this.elements;return 1==b[0]&&0==b[4]&&0==b[8]&&0==b[12]&&0==b[1]&&1==b[5]&&0==b[9]&&0==b[13]&&0==b[2]&&0==b[6]&&1==b[10]&&0==b[14]&&0==b[3]&&0==b[7]&&0==b[11]&&1==b[15]?!0:!1}}; $3Dmol.Ray=function(b,c){this.origin=void 0!==b?b:new $3Dmol.Vector3;this.direction=void 0!==c?c:new $3Dmol.Vector3}; $3Dmol.Ray.prototype={constructor:$3Dmol.Ray,set:function(b,c){this.origin.copy(b);this.direction.copy(c);return this},copy:function(b){this.origin.copy(b.origin);this.direction.copy(b.direction);return this},at:function(b,c){return(c||new $3Dmol.Vector3).copy(this.direction).multiplyScalar(b).add(this.origin)},recast:function(){var b=new $3Dmol.Vector3;return function(c){this.origin.copy(this.at(c,b));return this}}(),closestPointToPoint:function(b,c){var d=c||new $3Dmol.Vector3;d.subVectors(b,this.origin); var p=d.dot(this.direction);return d.copy(this.direction).multiplyScalar(p).add(this.origin)},distanceToPoint:function(b){var c=new $3Dmol.Vector3;return function(b){var p=c.subVectors(b,this.origin).dot(this.direction);c.copy(this.direction).multiplyScalar(p).add(this.origin);return c.distanceTo(b)}}(),isIntersectionCylinder:function(){},isIntersectionSphere:function(b){return this.distanceToPoint(b.center)<=b.radius},isIntersectionPlane:function(b){return 0!==b.normal.dot(this.direction)||0===b.distanceToPoint(this.origin)? !0:!1},distanceToPlane:function(b){var c=b.normal.dot(this.direction);if(0===c){if(0===b.distanceToPoint(this.origin))return 0}else return-(this.origin.dot(b.normal)+b.constant)/c},intersectPlane:function(b,c){var d=this.distanceToPlane(b);return void 0===d?void 0:this.at(d,c)},applyMatrix4:function(b){this.direction.add(this.origin).applyMatrix4(b);this.origin.applyMatrix4(b);this.direction.sub(this.origin);return this},equals:function(b){return b.origin.equals(this.origin)&&b.direction.equals(this.direction)}, clone:function(){return(new $3Dmol.Ray).copy(this)}};$3Dmol.Sphere=function(b,c){this.center=void 0!==b?b:new $3Dmol.Vector3;this.radius=void 0!==c?c:0}; $3Dmol.Sphere.prototype={constructor:$3Dmol.Sphere,set:function(b,c){this.center.copy(b);this.radius=c;return this},copy:function(b){this.center.copy(b.center);this.radius=b.radius;return this},applyMatrix4:function(b){this.center.applyMatrix4(b);this.radius*=b.getMaxScaleOnAxis();return this},translate:function(b){this.center.add(b);return this},equals:function(b){return b.center.equals(this.center)&&b.radius===this.radius},clone:function(){return(new $3Dmol.Sphere).copy(this)}}; $3Dmol.Cylinder=function(b,c,d){this.c1=void 0!==b?b:new $3Dmol.Vector3;this.c2=void 0!==c?c:new $3Dmol.Vector3;this.direction=(new $3Dmol.Vector3).subVectors(this.c2,this.c1).normalize();this.radius=void 0!==d?d:0}; $3Dmol.Cylinder.prototype={constructor:$3Dmol.Cylinder,copy:function(b){this.c1.copy(b.c1);this.c2.copy(b.c2);this.direction.copy(b.direction);this.radius=b.radius;return this},lengthSq:function(){var b=new $3Dmol.Vector3;return function(){return b.subVectors(this.c2,this.c1).lengthSq()}}(),applyMatrix4:function(b){this.direction.add(this.c1).applyMatrix4(b);this.c1.applyMatrix4(b);this.c2.applyMatrix4(b);this.direction.sub(this.c1).normalize();this.radius*=b.getMaxScaleOnAxis();return this}}; $3Dmol.Triangle=function(b,c,d){this.a=void 0!==b?b:new $3Dmol.Vector3;this.b=void 0!==c?c:new $3Dmol.Vector3;this.c=void 0!==d?d:new $3Dmol.Vector3}; $3Dmol.Triangle.prototype={constructor:$3Dmol.Triangle,copy:function(b){this.a.copy(b.a);this.b.copy(b.b);this.c.copy(b.c);return this},applyMatrix4:function(b){this.a.applyMatrix4(b);this.b.applyMatrix4(b);this.c.applyMatrix4(b);return this},getNormal:function(){var b=new $3Dmol.Vector3;return function(){var c=this.a.clone();c.sub(this.b);b.subVectors(this.c,this.b);c.cross(b);c.normalize();return c}}()}; $3Dmol.EventDispatcher=function(){var b={};this.addEventListener=function(c,d){void 0===b[c]&&(b[c]=[]);-1===b[c].indexOf(d)&&b[c].push(d)};this.removeEventListener=function(c,d){var p=b[c].indexOf(d);-1!==p&&b[c].splice(p,1)};this.dispatchEvent=function(c){var d=b[c.type];if(void 0!==d){c.target=this;for(var p=0,y=d.length;p >16&255)/255;this.g=(b>>8&255)/255;this.b=(b&255)/255;return this},getHex:function(){var b=Math.round(255*this.r),c=Math.round(255*this.g),d=Math.round(255*this.b);return b<<16|c<<8|d},clone:function(){return new $3Dmol.Color(this.r, this.g,this.b)},copy:function(b){this.r=b.r;this.g=b.g;this.b=b.b;return this},scaled:function(){var b={};b.r=Math.round(255*this.r);b.g=Math.round(255*this.g);b.b=Math.round(255*this.b);b.a=1;return b}}; $3Dmol.Object3D=function(){this.id=$3Dmol.Object3DIDCount++;this.name="";this.parent=void 0;this.children=[];this.position=new $3Dmol.Vector3;this.rotation=new $3Dmol.Vector3;this.matrix=new $3Dmol.Matrix4;this.matrixWorld=new $3Dmol.Matrix4;this.quaternion=new $3Dmol.Quaternion;this.eulerOrder="XYZ";this.up=new $3Dmol.Vector3(0,1,0);this.scale=new $3Dmol.Vector3(1,1,1);this.rotationAutoUpdate=this.matrixWorldNeedsUpdate=this.matrixAutoUpdate=!0;this.useQuaternion=!1;this.visible=!0}; $3Dmol.Object3D.prototype={constructor:$3Dmol.Object3D,lookAt:function(b){this.matrix.lookAt(b,this.position,this.up);this.rotationAutoUpdate&&(!0===this.useQuaternion?this.quaternion.copy(this.matrix.decompose()[1]):this.rotation.setEulerFromRotationMatrix(this.matrix,this.eulerOrder))},add:function(b){if(b===this)console.error("Can't add $3Dmol.Object3D to itself");else{b.parent=this;this.children.push(b);for(var c=this;void 0!==c.parent;)c=c.parent;void 0!==c&&c instanceof $3Dmol.Scene&&c.__addObject(b)}}, remove:function(b){var c=this.children.indexOf(b);if(-1!==c){b.parent=void 0;this.children.splice(c,1);for(c=this;void 0!==c.parent;)c=c.parent;void 0!==c&&c instanceof $3Dmol.Scene&&c.__removeObject(b)}},updateMatrix:function(){this.matrix.setPosition(this.position);!1===this.useQuaternion?this.matrix.setRotationFromEuler(this.rotation,this.eulerOrder):this.matrix.setRotationFromQuaternion(this.quaternion);1===this.scale.x&&1===this.scale.y&&1===this.scale.z||this.matrix.scale(this.scale);this.matrixWorldNeedsUpdate= !0},updateMatrixWorld:function(b){!0===this.matrixAutoUpdate&&this.updateMatrix();if(!0===this.matrixWorldNeedsUpdate||!0===b)void 0===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix);this.matrixWorldNeedsUpdate=!1;for(b=0;b d.vertexArray.length/3)d=c(this);return d},addGeoGroup:function(){return c(this)},setUpNormals:function(b){b=b||!1;for(var c=0;c L||(A.copy(this.ray.direction).multiplyScalar(L).add(this.ray.origin),A.sub(p.a),q.copy(p.b).sub(p.a),B.copy(p.c).sub(p.a),z=q.dot(B), G=q.lengthSq(),H=B.lengthSq(),H=(G*A.dot(B)-z*A.dot(q))/(G*H-z*z),0>H||1 z||1 =I?L=Math.sqrt(N):L=(H-z*G-Math.sqrt(I))/J,z=z*H-G,0>z||z*z>d.lengthSq()||0>H||s.push({clickable:u,distance:L}))));M=0;for(C=l.line.length;M x)break a; L=0>=I?x:x-Math.sqrt(I);s.push({clickable:u,distance:L});break a}}}e.sort(w);return e};return b}();$3Dmol.Projector=function(){new $3Dmol.Matrix4;var b=new $3Dmol.Matrix4;this.projectVector=function(c,d){d.matrixWorldInverse.getInverse(d.matrixWorld);b.multiplyMatrices(d.projectionMatrix,d.matrixWorldInverse);return c.applyProjection(b)};this.unprojectVector=function(c,d){d.projectionMatrixInverse.getInverse(d.projectionMatrix);b.multiplyMatrices(d.matrixWorld,d.projectionMatrixInverse);return c.applyProjection(b)}}; $3Dmol.Camera=function(b,c,d,p){$3Dmol.Object3D.call(this);this.fov=void 0!==b?b:50;this.aspect=void 0!==c?c:1;this.near=void 0!==d?d:.1;this.far=void 0!==p?p:2E3;this.projectionMatrix=new $3Dmol.Matrix4;this.projectionMatrixInverse=new $3Dmol.Matrix4;this.matrixWorldInverse=new $3Dmol.Matrix4;this.updateProjectionMatrix()};$3Dmol.Camera.prototype=Object.create($3Dmol.Object3D.prototype); $3Dmol.Camera.prototype.lookAt=function(b){this.matrix.lookAt(this.position,b,this.up);this.rotationAutoUpdate&&(!1===this.useQuaternion?this.rotation.setEulerFromRotationMatrix(this.matrix,this.eulerOrder):this.quaternion.copy(this.matrix.decompose()[1]))};$3Dmol.Camera.prototype.updateProjectionMatrix=function(){this.projectionMatrix.makePerspective(this.fov,this.aspect,this.near,this.far);this.projectionMatrixInverse.getInverse(this.projectionMatrix)}; $3Dmol.SpritePlugin=function(){function b(b,c){return b.z!==c.z?c.z-b.z:c.id-b.id}var c,d,p,y,A,q,B,f,w,h;this.init=function(b){c=b.context;d=b;p=b.getPrecision();y=new Float32Array(16);A=new Uint16Array(6);b=0;y[b++]=-1;y[b++]=-1;y[b++]=0;y[b++]=0;y[b++]=1;y[b++]=-1;y[b++]=1;y[b++]=0;y[b++]=1;y[b++]=1;y[b++]=1;y[b++]=1;y[b++]=-1;y[b++]=1;y[b++]=0;y[b++]=1;b=0;A[b++]=0;A[b++]=1;A[b++]=2;A[b++]=0;A[b++]=2;A[b++]=3;q=c.createBuffer();B=c.createBuffer();c.bindBuffer(c.ARRAY_BUFFER,q);c.bufferData(c.ARRAY_BUFFER, y,c.STATIC_DRAW);c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,B);c.bufferData(c.ELEMENT_ARRAY_BUFFER,A,c.STATIC_DRAW);b=$3Dmol.ShaderLib.sprite;var m=p,e=c.createProgram(),F=c.createShader(c.FRAGMENT_SHADER),g=c.createShader(c.VERTEX_SHADER),m="precision "+m+" float;\n";c.shaderSource(F,m+b.fragmentShader);c.shaderSource(g,m+b.vertexShader);c.compileShader(F);c.compileShader(g);c.getShaderParameter(F,c.COMPILE_STATUS)&&c.getShaderParameter(g,c.COMPILE_STATUS)?(c.attachShader(e,F),c.attachShader(e,g),c.linkProgram(e), c.getProgramParameter(e,c.LINK_STATUS)||console.error("Could not initialize shader"),b=e):(console.error(c.getShaderInfoLog(F)),console.error("could not initialize shader"),b=null);f=b;w={};h={};w.position=c.getAttribLocation(f,"position");w.uv=c.getAttribLocation(f,"uv");h.uvOffset=c.getUniformLocation(f,"uvOffset");h.uvScale=c.getUniformLocation(f,"uvScale");h.rotation=c.getUniformLocation(f,"rotation");h.scale=c.getUniformLocation(f,"scale");h.alignment=c.getUniformLocation(f,"alignment");h.color= c.getUniformLocation(f,"color");h.map=c.getUniformLocation(f,"map");h.opacity=c.getUniformLocation(f,"opacity");h.useScreenCoordinates=c.getUniformLocation(f,"useScreenCoordinates");h.screenPosition=c.getUniformLocation(f,"screenPosition");h.modelViewMatrix=c.getUniformLocation(f,"modelViewMatrix");h.projectionMatrix=c.getUniformLocation(f,"projectionMatrix");h.fogType=c.getUniformLocation(f,"fogType");h.fogDensity=c.getUniformLocation(f,"fogDensity");h.fogNear=c.getUniformLocation(f,"fogNear");h.fogFar= c.getUniformLocation(f,"fogFar");h.fogColor=c.getUniformLocation(f,"fogColor");h.alphaTest=c.getUniformLocation(f,"alphaTest")};this.render=function(t,m,e,F){var g=t.__webglSprites,x=g.length;if(x){var u=w,s=h,l=.5*e,E=.5*F;c.useProgram(f);c.enableVertexAttribArray(u.position);c.enableVertexAttribArray(u.uv);c.disable(c.CULL_FACE);c.enable(c.BLEND);c.bindBuffer(c.ARRAY_BUFFER,q);c.vertexAttribPointer(u.position,2,c.FLOAT,!1,16,0);c.vertexAttribPointer(u.uv,2,c.FLOAT,!1,16,8);c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, B);c.uniformMatrix4fv(s.projectionMatrix,!1,m.projectionMatrix.elements);c.activeTexture(c.TEXTURE0);c.uniform1i(s.map,0);var p=u=0;(u=t.fog)?(c.uniform3f(s.fogColor,u.color.r,u.color.g,u.color.b),c.uniform1f(s.fogNear,u.near),c.uniform1f(s.fogFar,u.far),c.uniform1i(s.fogType,1),p=u=1):(c.uniform1i(s.fogType,0),p=u=0);var C,y,z,H=[];for(C=0;C 0.0) {\n vec3 cp;\n if( dotp1 < 0.0) { cp = p1;\n } else {\n cp = p2;\n }\n vec3 diff = p-cp;\n A = dot(v,v);\n B = dot(diff,v)*2.0;\n C = dot(diff,diff)-r*r;\n det = (B*B) - (4.0*C);\n if(det < 0.0) discard;\n sqrtDet = sqrt(det);\n posT = (-B+sqrtDet)/(2.0);\n negT = (-B-sqrtDet)/(2.0);\n float t = min(posT,negT);\n qi = p+v*t;\n norm = normalize(qi-cp);\n } else {\n norm = normalize(qi-(dotp1*va + p1));\n }\n vec4 clipPos = projectionMatrix * vec4(qi, 1.0);\n float ndcDepth = clipPos.z / clipPos.w;\n float depth = ((gl_DepthRange.diff * ndcDepth) + gl_DepthRange.near + gl_DepthRange.far) / 2.0;\n gl_FragDepthEXT = depth;"}; $3Dmol.ShaderLib={basic:{fragmentShader:"uniform mat4 viewMatrix;\nuniform float opacity;\nuniform vec3 fogColor;\nuniform float fogNear;\nuniform float fogFar;\nvarying vec3 vColor;\nvoid main() {\n gl_FragColor = vec4( vColor, opacity );\n float depth = gl_FragCoord.z / gl_FragCoord.w;\n float fogFactor = smoothstep( fogNear, fogFar, depth );\n gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}",vertexShader:"uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nattribute vec3 position;\nattribute vec3 color;\nvarying vec3 vColor;\nvoid main() {\n vColor = color;\n vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n gl_Position = projectionMatrix * mvPosition;\n}", uniforms:{opacity:{type:"f",value:1},fogColor:{type:"c",value:new $3Dmol.Color(1,1,1)},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3}}},sphereimposter:{fragmentShader:"uniform mat4 viewMatrix;\nuniform float opacity;\nuniform mat4 projectionMatrix;\nuniform vec3 fogColor;\nuniform float fogNear;\nuniform float fogFar;\nuniform float uDepth;\nuniform vec3 directionalLightColor[ 1 ];\nvarying vec3 vColor;\nvarying vec2 mapping;\nvarying float rval;\nvarying vec3 vLight;\nvarying vec3 center;\nvoid main() {\n float lensqr = dot(mapping,mapping);\n float rsqr = rval*rval;\n if(lensqr > rsqr)\n discard;\n float z = sqrt(rsqr-lensqr);\n vec3 cameraPos = center+ vec3(mapping.x,mapping.y,z);\n vec4 clipPos = projectionMatrix * vec4(cameraPos, 1.0);\n float ndcDepth = clipPos.z / clipPos.w;\n gl_FragDepthEXT = ((gl_DepthRange.diff * ndcDepth) + gl_DepthRange.near + gl_DepthRange.far) / 2.0;\n vec3 norm = normalize(vec3(mapping.x,mapping.y,z));\n float dotProduct = dot( norm, vLight );\n vec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\n vec3 vLight = directionalLightColor[ 0 ] * directionalLightWeighting;\n gl_FragColor = vec4(vLight*vColor, opacity*opacity );\n float fogFactor = smoothstep( fogNear, fogFar, gl_FragDepthEXT/gl_FragCoord.w );\n gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}", vertexShader:"uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 directionalLightColor[ 1 ];\nuniform vec3 directionalLightDirection[ 1 ];\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nvarying vec2 mapping;\nvarying vec3 vColor;\nvarying float rval;\nvarying vec3 vLight;\nvarying vec3 center;\nvoid main() {\n vColor = color;\n vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n center = mvPosition.xyz;\n vec4 projPosition = projectionMatrix * mvPosition;\n vec4 adjust = projectionMatrix* vec4(normal,0.0); adjust.z = 0.0; adjust.w = 0.0;\n vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ 0 ], 0.0 );\n vLight = normalize( lDirection.xyz );\n mapping = normal.xy;\n rval = abs(normal.x);\n gl_Position = projPosition+adjust;\n}", uniforms:{opacity:{type:"f",value:1},fogColor:{type:"c",value:new $3Dmol.Color(1,1,1)},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},directionalLightColor:{type:"fv",value:[]},directionalLightDirection:{type:"fv",value:[]}}},lambert:{fragmentShader:"uniform mat4 viewMatrix;\nuniform float opacity;\nuniform vec3 fogColor;\nuniform float fogNear;\nuniform float fogFar;\nvarying vec3 vLightFront;\nvarying vec3 vColor;\nvoid main() {\n gl_FragColor = vec4( vec3 ( 1.0 ), opacity );\n #ifndef WIREFRAME\n gl_FragColor.xyz *= vLightFront;\n #endif\n gl_FragColor = gl_FragColor * vec4( vColor, opacity );\n float depth = gl_FragCoord.z / gl_FragCoord.w;\n float fogFactor = smoothstep( fogNear, fogFar, depth );\n gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}", vertexShader:"uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 directionalLightColor[ 1 ];\nuniform vec3 directionalLightDirection[ 1 ];\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nvarying vec3 vColor;\nvarying vec3 vLightFront;\nvoid main() {\n vColor = color;\n vec3 objectNormal = normal;\n vec3 transformedNormal = normalMatrix * objectNormal;\n vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n vLightFront = vec3( 0.0 );\n transformedNormal = normalize( transformedNormal );\n vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ 0 ], 0.0 );\n vec3 dirVector = normalize( lDirection.xyz );\n float dotProduct = dot( transformedNormal, dirVector );\n vec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\n vLightFront += directionalLightColor[ 0 ] * directionalLightWeighting;\n gl_Position = projectionMatrix * mvPosition;\n}", uniforms:{opacity:{type:"f",value:1},fogColor:{type:"c",value:new $3Dmol.Color(1,1,1)},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},directionalLightColor:{type:"fv",value:[]},directionalLightDirection:{type:"fv",value:[]}}},instanced:{fragmentShader:"uniform mat4 viewMatrix;\nuniform float opacity;\nuniform vec3 fogColor;\nuniform float fogNear;\nuniform float fogFar;\nvarying vec3 vLightFront;\nvarying vec3 vColor;\nvoid main() {\n gl_FragColor = vec4( vec3 ( 1.0 ), opacity );\n #ifndef WIREFRAME\n gl_FragColor.xyz *= vLightFront;\n #endif\n gl_FragColor = gl_FragColor * vec4( vColor, opacity );\n float depth = gl_FragCoord.z / gl_FragCoord.w;\n float fogFactor = smoothstep( fogNear, fogFar, depth );\n gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}", vertexShader:"uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 directionalLightColor[ 1 ];\nuniform vec3 directionalLightDirection[ 1 ];\nattribute vec3 offset;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nattribute float radius;\nvarying vec3 vColor;\nvarying vec3 vLightFront;\nvoid main() {\n vColor = color;\n vec3 objectNormal = normal;\n vec3 transformedNormal = normalMatrix * objectNormal;\n vec4 mvPosition = modelViewMatrix * vec4( position * radius + offset, 1.0 );\n vLightFront = vec3( 0.0 );\n transformedNormal = normalize( transformedNormal );\n vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ 0 ], 0.0 );\n vec3 dirVector = normalize( lDirection.xyz );\n float dotProduct = dot( transformedNormal, dirVector );\n vec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\n vLightFront += directionalLightColor[ 0 ] * directionalLightWeighting;\n gl_Position = projectionMatrix * mvPosition;\n}", uniforms:{opacity:{type:"f",value:1},fogColor:{type:"c",value:new $3Dmol.Color(1,1,1)},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},directionalLightColor:{type:"fv",value:[]},directionalLightDirection:{type:"fv",value:[]}}},outline:{fragmentShader:"uniform float opacity;\nuniform vec3 outlineColor;\nuniform vec3 fogColor;\nuniform float fogNear;\nuniform float fogFar;\nvoid main() {\n gl_FragColor = vec4( outlineColor, 1 );\n}",vertexShader:"uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float outlineWidth;\nuniform float outlinePushback;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nvoid main() {\n vec4 norm = modelViewMatrix*vec4(normalize(normal),0.0);\n vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n mvPosition.xy += norm.xy*outlineWidth;\n gl_Position = projectionMatrix * mvPosition;\n mvPosition.z -= outlinePushback;\n vec4 pushpos = projectionMatrix*mvPosition;\n gl_Position.z = gl_Position.w*pushpos.z/pushpos.w;\n}", uniforms:{opacity:{type:"f",value:1},outlineColor:{type:"c",value:new $3Dmol.Color(0,0,0)},fogColor:{type:"c",value:new $3Dmol.Color(1,1,1)},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},outlineWidth:{type:"f",value:.1},outlinePushback:{type:"f",value:1}}},sphereimposteroutline:{fragmentShader:"uniform float opacity;\nuniform vec3 outlineColor;\nuniform vec3 fogColor;\nuniform float fogNear;\nuniform float fogFar;\nuniform mat4 projectionMatrix;\nvarying vec2 mapping;\nvarying float rval;\nvarying vec3 center;\nuniform float outlinePushback;\nvoid main() {\n float lensqr = dot(mapping,mapping);\n float rsqr = rval*rval;\n if(lensqr > rsqr)\n discard;\n float z = sqrt(rsqr-lensqr);\n vec3 cameraPos = center+ vec3(mapping.x,mapping.y,z-outlinePushback);\n vec4 clipPos = projectionMatrix * vec4(cameraPos, 1.0);\n float ndcDepth = clipPos.z / clipPos.w;\n gl_FragDepthEXT = ((gl_DepthRange.diff * ndcDepth) + gl_DepthRange.near + gl_DepthRange.far) / 2.0;\n gl_FragColor = vec4(outlineColor, 1 );\n}", vertexShader:"uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float outlineWidth;\nuniform float outlinePushback;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nvarying vec2 mapping;\nvarying float rval;\nvarying vec3 center;\nvoid main() {\n vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n center = mvPosition.xyz;\n vec4 projPosition = projectionMatrix * mvPosition;\n vec2 norm = normal.xy + vec2(sign(normal.x)*outlineWidth,sign(normal.y)*outlineWidth);\n vec4 adjust = projectionMatrix* vec4(norm,normal.z,0.0); adjust.z = 0.0; adjust.w = 0.0;\n mapping = norm.xy;\n rval = abs(norm.x);\n gl_Position = projPosition+adjust;\n}", uniforms:{opacity:{type:"f",value:1},outlineColor:{type:"c",value:new $3Dmol.Color(0,0,0)},fogColor:{type:"c",value:new $3Dmol.Color(1,1,1)},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},outlineWidth:{type:"f",value:.1},outlinePushback:{type:"f",value:1}}},stickimposter:{fragmentShader:[$3Dmol.ShaderUtils.stickimposterFragmentShader," float dotProduct = dot( norm, vLight );\n vec3 light = vec3( max( dotProduct, 0.0 ) );\n gl_FragColor = vec4(light*color, opacity*opacity );\n float fogFactor = smoothstep( fogNear, fogFar, depth );\n gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}"].join("\n"), vertexShader:"uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 directionalLightColor[ 1 ];\nuniform vec3 directionalLightDirection[ 1 ];\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nattribute float radius;\nvarying vec3 vColor;\nvarying vec3 vLight;\nvarying vec3 cposition;\nvarying vec3 p1;\nvarying vec3 p2;\nvarying float r;\nvoid main() {\n vColor = color; vColor.z = abs(vColor.z);\n r = abs(radius);\n vec4 to = modelViewMatrix*vec4(normal, 1.0);\n vec4 pt = modelViewMatrix*vec4(position, 1.0);\n vec4 mvPosition = pt;\n p1 = pt.xyz; p2 = to.xyz;\n vec3 norm = to.xyz-pt.xyz;\n float mult = 1.1;\n if(length(p1) > length(p2)) {\n mvPosition = to;\n }\n vec3 n = normalize(mvPosition.xyz);\n if(color.z >= 0.0) {\n vec3 pnorm = normalize(p1);\n float t = dot(mvPosition.xyz-p1,n)/dot(pnorm,n);\n mvPosition.xyz = p1+t*pnorm;\n } else {\n vec3 pnorm = normalize(p2);\n float t = dot(mvPosition.xyz-p2,n)/dot(pnorm,n);\n mvPosition.xyz = p2+t*pnorm;\n mult *= -1.0;\n }\n vec3 cr = normalize(cross(mvPosition.xyz,norm))*radius;\n vec3 doublecr = normalize(cross(mvPosition.xyz,cr))*radius;\n mvPosition.xy += mult*(cr + doublecr).xy;\n cposition = mvPosition.xyz;\n gl_Position = projectionMatrix * mvPosition;\n vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ 0 ], 0.0 );\n vLight = normalize( lDirection.xyz )*directionalLightColor[0];\n}", uniforms:{opacity:{type:"f",value:1},fogColor:{type:"c",value:new $3Dmol.Color(1,1,1)},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},directionalLightColor:{type:"fv",value:[]},directionalLightDirection:{type:"fv",value:[]}}},stickimposteroutline:{fragmentShader:$3Dmol.ShaderUtils.stickimposterFragmentShader+"gl_FragColor = vec4(color,1.0);}",vertexShader:"uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 directionalLightColor[ 1 ];\nuniform vec3 directionalLightDirection[ 1 ];\nuniform vec3 outlineColor;\nuniform float outlineWidth;\nuniform float outlinePushback;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nattribute float radius;\nvarying vec3 vColor;\nvarying vec3 vLight;\nvarying vec3 cposition;\nvarying vec3 p1;\nvarying vec3 p2;\nvarying float r;\nvoid main() {\n vColor = outlineColor;\n float rad = radius+sign(radius)*outlineWidth;\n r = abs(rad);\n vec4 to = modelViewMatrix*vec4(normal, 1.0);\n vec4 pt = modelViewMatrix*vec4(position, 1.0);\n to.xyz += normalize(to.xyz)*outlinePushback;\n pt.xyz += normalize(pt.xyz)*outlinePushback;\n vec4 mvPosition = pt;\n p1 = pt.xyz; p2 = to.xyz;\n vec3 norm = to.xyz-pt.xyz;\n float mult = 1.1;\n if(length(p1) > length(p2)) {\n mvPosition = to;\n }\n vec3 n = normalize(mvPosition.xyz);\n if(color.z >= 0.0) {\n vec3 pnorm = normalize(p1);\n float t = dot(mvPosition.xyz-p1,n)/dot(pnorm,n);\n mvPosition.xyz = p1+t*pnorm;\n } else {\n vec3 pnorm = normalize(p2);\n float t = dot(mvPosition.xyz-p2,n)/dot(pnorm,n);\n mvPosition.xyz = p2+t*pnorm;\n mult *= -1.0;\n }\n vec3 cr = normalize(cross(mvPosition.xyz,norm))*rad;\n vec3 doublecr = normalize(cross(mvPosition.xyz,cr))*rad;\n mvPosition.xy += mult*(cr + doublecr).xy;\n cposition = mvPosition.xyz;\n gl_Position = projectionMatrix * mvPosition;\n vLight = vec3(1.0,1.0,1.0);\n}", uniforms:{opacity:{type:"f",value:1},fogColor:{type:"c",value:new $3Dmol.Color(1,1,1)},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},outlineColor:{type:"c",value:new $3Dmol.Color(0,0,0)},outlineWidth:{type:"f",value:.1},outlinePushback:{type:"f",value:1}}},lambertdouble:{fragmentShader:"uniform mat4 viewMatrix;\nuniform float opacity;\nuniform vec3 fogColor;\nuniform float fogNear;\nuniform float fogFar;\nvarying vec3 vLightFront;\nvarying vec3 vLightBack;\nvarying vec3 vColor;\nvoid main() {\n gl_FragColor = vec4( vec3 ( 1.0 ), opacity );\n #ifndef WIREFRAME\n if ( gl_FrontFacing )\n gl_FragColor.xyz *= vLightFront;\n else\n gl_FragColor.xyz *= vLightBack;\n #endif\n gl_FragColor = gl_FragColor * vec4( vColor, opacity );\n float depth = gl_FragCoord.z / gl_FragCoord.w;\n float fogFactor = smoothstep( fogNear, fogFar, depth );\n gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}", vertexShader:"uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 directionalLightColor[ 1 ];\nuniform vec3 directionalLightDirection[ 1 ];\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nvarying vec3 vColor;\nvarying vec3 vLightFront;\nvarying vec3 vLightBack;\nvoid main() {\n vColor = color;\n vec3 objectNormal = normal;\n vec3 transformedNormal = normalMatrix * objectNormal;\n vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n vLightFront = vec3( 0.0 );\n vLightBack = vec3( 0.0 );\n transformedNormal = normalize( transformedNormal );\n vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ 0 ], 0.0 );\n vec3 dirVector = normalize( lDirection.xyz );\n float dotProduct = dot( transformedNormal, dirVector );\n vec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\n vec3 directionalLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n vLightFront += directionalLightColor[ 0 ] * directionalLightWeighting;\n vLightBack += directionalLightColor[ 0 ] * directionalLightWeightingBack;\n gl_Position = projectionMatrix * mvPosition;\n}", uniforms:{opacity:{type:"f",value:1},fogColor:{type:"c",value:new $3Dmol.Color(1,1,1)},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},directionalLightColor:{type:"fv",value:[]},directionalLightDirection:{type:"fv",value:[]}}},sprite:{fragmentShader:"uniform vec3 color;\nuniform sampler2D map;\nuniform float opacity;\nuniform int fogType;\nuniform vec3 fogColor;\nuniform float fogDensity;\nuniform float fogNear;\nuniform float fogFar;\nuniform float alphaTest;\nvarying vec2 vUV;\nvoid main() {\n vec4 texture = texture2D(map, vUV);\n if (texture.a < alphaTest) discard;\n gl_FragColor = vec4(color * texture.xyz, texture.a * opacity);\n if (fogType > 0) {\n float depth = gl_FragCoord.z / gl_FragCoord.w;\n float fogFactor = 0.0;\n if (fogType == 1) {\n fogFactor = smoothstep(fogNear, fogFar, depth);\n }\n else {\n const float LOG2 = 1.442695;\n float fogFactor = exp2(- fogDensity * fogDensity * depth * depth * LOG2);\n fogFactor = 1.0 - clamp(fogFactor, 0.0, 1.0);\n }\n gl_FragColor = mix(gl_FragColor, vec4(fogColor, gl_FragColor.w), fogFactor);\n }\n}", vertexShader:"uniform int useScreenCoordinates;\nuniform vec3 screenPosition;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float rotation;\nuniform vec2 scale;\nuniform vec2 alignment;\nuniform vec2 uvOffset;\nuniform vec2 uvScale;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\n vUV = uvOffset + uv * uvScale;\n vec2 alignedPosition = position + alignment;\n vec2 rotatedPosition;\n rotatedPosition.x = ( cos(rotation) * alignedPosition.x - sin(rotation) * alignedPosition.y ) * scale.x;\n rotatedPosition.y = ( sin(rotation) * alignedPosition.x + cos(rotation) * alignedPosition.y ) * scale.y;\n vec4 finalPosition;\n if(useScreenCoordinates != 0) {\n finalPosition = vec4(screenPosition.xy + rotatedPosition, screenPosition.z, 1.0);\n }\n else {\n finalPosition = projectionMatrix * modelViewMatrix * vec4(0.0, 0.0, 0.0, 1.0); finalPosition /= finalPosition.w;\n finalPosition.xy += rotatedPosition; \n }\n gl_Position = finalPosition;\n}", uniforms:{}}};"undefined"===typeof console&&(console={log:function(){}}); $3Dmol.ProteinSurface=function(){var b=0,c=0,d=0,p=2,y=0,A=0,q=0,B=0,f=null,w=null,h=null,t=0,m=0,e=0,F=0,g=0,x=0,u={H:1.2,Li:1.82,Na:2.27,K:2.75,C:1.7,N:1.55,O:1.52,F:1.47,P:1.8,S:1.8,CL:1.75,BR:1.85,SE:1.9,ZN:1.39,CU:1.4,NI:1.63,X:2},s=function(b){return b.elem&&"undefined"!=typeof u[b.elem]?b.elem:"X"},l={},E={},M,C,G=[new Int32Array([1,0,0]),new Int32Array([-1,0,0]),new Int32Array([0,1,0]),new Int32Array([0,-1,0]),new Int32Array([0,0,1]),new Int32Array([0,0,-1]),new Int32Array([1,1,0]),new Int32Array([1, -1,0]),new Int32Array([-1,1,0]),new Int32Array([-1,-1,0]),new Int32Array([1,0,1]),new Int32Array([1,0,-1]),new Int32Array([-1,0,1]),new Int32Array([-1,0,-1]),new Int32Array([0,1,1]),new Int32Array([0,1,-1]),new Int32Array([0,-1,1]),new Int32Array([0,-1,-1]),new Int32Array([1,1,1]),new Int32Array([1,1,-1]),new Int32Array([1,-1,1]),new Int32Array([-1,1,1]),new Int32Array([1,-1,-1]),new Int32Array([-1,-1,1]),new Int32Array([-1,1,-1]),new Int32Array([-1,-1,-1])];this.getFacesAndVertices=function(e){var g= {},q,m;q=0;for(m=e.length;q f?l[e][indx]=-1:(h=Math.sqrt(f-h),l[e][indx]=Math.floor(h)),indx++};this.fillvoxels=function(b,c){var e,q;e=0;for(q=f.length;e ca;ca++)for(X=-1;2>X;X++)for(D=-1;2>D;D++)if(0!==ca&&0!==X&&0!==D)for(z=ca*G,C=D*M,V=0;V<=l[U][T];V++)F=V*X,B=w+z,u=m+F,Z=t+C,0>B||0>u||0>Z||B>=q||u>=A||Z>=y||(Z=B*ea+u*y+Z,f[Z]&1?(x=g[h[Z]],x.serial!=e.serial&&(B=w+z-Math.floor(.5+p*(x.x+b)),u=m+F-Math.floor(.5+p*(x.y+c)),x=t+C-Math.floor(.5+p*(x.z+d)),z*z+F*F+C*CX;X++)for(D=-1;2>D;D++)for(ba=-1;2>ba;ba++)if(0!==X&&0!==D&&0!==ba)for(F=X*V,G=ba*Z,ca=0;ca<=l[T][z];ca++)C=ca*D,B=w+F,u=m+C,M=t+G,0>B||0>u||0> M||B>=q||u>=A||M>=y||(M=B*ea+u*y+M,f[M]&2?(x=g[h[M]],x.serial!=e.serial&&(B=w+F-Math.floor(.5+p*(x.x+b)),u=m+C-Math.floor(.5+p*(x.y+c)),x=t+G-Math.floor(.5+p*(x.z+d)),F*F+C*C+G*Gh;){var e=i+G[h][0],g=j+G[h][2],w=k+G[h][1];if(-1b&&(b=0);m-=.5/(.1+b);for(b=0;b =m)&&(f[l]|=4)};this.fastoneshell=function(b,c){var h,e,g,m,l,t,d,s,B,u,x,z=[];if(0===b.length)return z;tnv={ix:-1,iy:-1,iz:-1};var F=A*y;d=0;for(B=b.length;ds;s++)tnv.ix=h+G[s][0],tnv.iy= e+G[s][1],tnv.iz=g+G[s][2],tnv.ixs;s++)tnv.ix=h+G[s][0],tnv.iy=e+G[s][1],tnv.iz=g+G[s][2],tnv.ixs;s++)tnv.ix=h+G[s][0],tnv.iy=e+G[s][1],tnv.iz=g+G[s][2],tnv.ixs;++s)l[e+3*s]=d.r,l[e+1+3*s]=d.g,l[e+2+3*s]=d.b;0t&&(c.transparent= !0,c.opacity=t);c.vertexColors=$3Dmol.FaceColors;t=new $3Dmol.Mesh(h,c);b.add(t)},d=function(c,d,f,w,h){0!==d.length&&(h=void 0===h?5:h,w=new $3Dmol.Geometry,b(d,h),d=new $3Dmol.LineBasicMaterial({linewidth:f}),d.vertexColors=!0,d=new $3Dmol.Line(w,d),d.type=$3Dmol.LineStrip,c.add(d))},p=function(q,d,f,w,h,t,m){m&&"default"!==m||(m="rectangle");if("edged"===m){if(!(2>d.length)){var e,F;e=d[0];F=d[d.length-1];d=w||axisDIV;e=b(e,d);F=b(F,d);if(h){d=new $3Dmol.Geometry(!0);var g=[],x,u,s,l,E,p=[[0,2, -6,-8],[-4,-2,6,4],[7,-1,-5,3],[-3,5,1,-7]],C,y,z,A,L,N,J,I;L=0;for(N=e.length;L J;++J)I[C+3*J]=y.r,I[C+1+3*J]=y.g,I[C+2+3*J]=y.b;if(0 J;J++)if(I=[w+p[J][0],w+p[J][1],w+p[J][2],w+p[J][3]],s=m.faceidx,K[s]=I[0],K[s+1]=I[1],K[s+2]=I[3],K[s+3]=I[1],K[s+4]= I[2],K[s+5]=I[3],m.faceidx+=6,z.clickable||A.clickable){E=g[I[3]].clone();s=g[I[0]].clone();var O=g[I[2]].clone();l=g[I[1]].clone();E.atom=g[I[3]].atom||null;O.atom=g[I[2]].atom||null;s.atom=g[I[0]].atom||null;l.atom=g[I[1]].atom||null;if(C){var Q=E.clone().add(s).multiplyScalar(.5),W=O.clone().add(l).multiplyScalar(.5),P=E.clone().add(l).multiplyScalar(.5);0===J%2?(A.clickable&&(I=new $3Dmol.Triangle(Q,P,E),u=new $3Dmol.Triangle(W,O,P),E=new $3Dmol.Triangle(P,O,E),A.intersectionShape.triangle.push(I), A.intersectionShape.triangle.push(u),A.intersectionShape.triangle.push(E)),z.clickable&&(I=new $3Dmol.Triangle(s,l,P),u=new $3Dmol.Triangle(l,W,P),E=new $3Dmol.Triangle(s,P,Q),z.intersectionShape.triangle.push(I),z.intersectionShape.triangle.push(u),z.intersectionShape.triangle.push(E))):(z.clickable&&(I=new $3Dmol.Triangle(Q,P,E),u=new $3Dmol.Triangle(W,O,P),E=new $3Dmol.Triangle(P,O,E),z.intersectionShape.triangle.push(I),z.intersectionShape.triangle.push(u),z.intersectionShape.triangle.push(E)), A.clickable&&(I=new $3Dmol.Triangle(s,l,P),u=new $3Dmol.Triangle(l,W,P),E=new $3Dmol.Triangle(s,P,Q),A.intersectionShape.triangle.push(I),A.intersectionShape.triangle.push(u),A.intersectionShape.triangle.push(E)))}else z.clickable&&(I=new $3Dmol.Triangle(s,l,E),u=new $3Dmol.Triangle(l,O,E),z.intersectionShape.triangle.push(I),z.intersectionShape.triangle.push(u))}m.vertices+=8;A=z}f=g.length-8;m=d.updateGeoGroup(8);J=m.vertexArray;I=m.colorArray;K=m.faceArray;w=m.vertices;C=3*w;s=m.faceidx;for(L= 0;4>L;L++)g.push(g[2*L]),g.push(g[f+2*L]),h=g[2*L],z=g[f+2*L],J[C+6*L]=h.x,J[C+1+6*L]=h.y,J[C+2+6*L]=h.z,J[C+3+6*L]=z.x,J[C+4+6*L]=z.y,J[C+5+6*L]=z.z,I[C+6*L]=y.r,I[C+1+6*L]=y.g,I[C+2+6*L]=y.b,I[C+3+6*L]=y.r,I[C+4+6*L]=y.g,I[C+5+6*L]=y.b;I=[w,w+2,w+6,w+4];u=[w+1,w+5,w+7,w+3];K[s]=I[0];K[s+1]=I[1];K[s+2]=I[3];K[s+3]=I[1];K[s+4]=I[2];K[s+5]=I[3];K[s+6]=u[0];K[s+7]=u[1];K[s+8]=u[3];K[s+9]=u[1];K[s+10]=u[2];K[s+11]=u[3];m.faceidx+=12;m.vertices+=8;d.initTypedArrays();d.setUpNormals();f=new $3Dmol.MeshDoubleLambertMaterial; f.vertexColors=$3Dmol.FaceColors;"number"===typeof t&&0<=t&&1>t&&(f.transparent=!0,f.opacity=t);t=new $3Dmol.Mesh(d,f);q.add(t)}else c(q,e,F,f,d,t)}}else if("rectangle"===m||"oval"===m||"parabola"===m)if(y=m,z=d.length,!(2>z||2>d[0].length)){w=w||axisDIV;for(A=0;A t&&(f.transparent=!0,f.opacity=t);t=new $3Dmol.Mesh(w, f);q.add(t)}else c(q,d[0],d[z-1],f,w,t)}},y=function(b,c){if(b&&c&&b.chain===c.chain){if(b.reschain===c.reschain&&(b.resi===c.resi||b.resi===c.resi-1))return!0;if(b.resi f.distanceToSquared(d))return!0}}return!1},A=function(b,c,f,d,h,t,m,e,F){var g,x={ALA:5,ARG:11,ASN:8,ASP:8,CYS:6,GLN:9,GLU:9,GLY:4,HIS:10,ILE:8,LEU:8,LYS:9,MET:8,PHE:11,PRO:7,SER:6,THR:7,TRP:14,TYR:12,VAL:7};if(d&&h&&m){var u=h.sub(d);u.normalize(); e=(e=e[parseInt(F)+x[m.resn]])?new $3Dmol.Vector3(e.x,e.y,e.z):new $3Dmol.Vector3(0,0,0);e.sub(d);"arrow start"===m.ss&&(h=e.clone().multiplyScalar(.3).cross(h),d.add(h),h=e.clone().cross(u).normalize(),u.rotateAboutVector(h,.43));m.style.cartoon.ribbon?h=m.style.cartoon.thickness||.4:m.style.cartoon.width?h=m.style.cartoon.width:"c"===m.ss?h="P"===m.atom?.8:.5:"arrow start"===m.ss?(h=1.3,g=!0):h="arrow end"===m.ss?.5:"h"===m.ss&&m.style.cartoon.tubes||"tube start"===m.ss?.5:1.3;null!=t&&0>u.dot(t)&& u.negate();u.multiplyScalar(h);for(t=0;t P.opacity&&(l.transparent=!0,l.opacity=P.opacity,delete P.opacity),P=new $3Dmol.Mesh(P,l),b.add(P),P=null):l&&(P.opacity&&l.style.cartoon.opacity?P.opacity!=l.style.cartoon.opacity&&(console.log("Warning: a trace-style chain's opacity is ambiguous"),P.opacity=1):P.opacity=parseFloat(l.style.cartoon.opacity)|| 1),l=E,M=C}else{u||(u=new $3Dmol.Geometry(!0));if(E&&"C"===E.elem&&"CA"===E.atom||H&&("P"===E.atom||0==E.atom.indexOf("O5"))){if(W)if("tube end"===E.ss)W=!1,H=new $3Dmol.Vector3(E.x,E.y,E.z),$3Dmol.GLDraw.drawCylinder(u,Q,H,2,$3Dmol.CC.color(M),1,1),E.ss="h";else continue;if(l&&(!y(l,E)||l.style.cartoon.style!==E.style.cartoon.style||"tube start"===l.ss)){"tube start"===l.ss&&(W=!0,Q=new $3Dmol.Vector3(l.x,l.y,l.z),l.ss="h");O&&(H=I?(new $3Dmol.Vector3).addVectors(l,I).multiplyScalar(.5):new $3Dmol.Vector3(l.x, l.y,l.z),$3Dmol.GLDraw.drawCylinder(u,H,O,.4,$3Dmol.CC.color(O.color),0,2),H=A(R,m,!t,I,K,J,l,c,z),S.push(C),H&&S.push(C),O=null);for(z=0;!G&&z R.opacity&&(z.transparent=!0,z.opacity=R.opacity),u=new $3Dmol.Mesh(u,z),b.add(u),u=null);R=[];for(z=0;z R.opacity&&(z.transparent=!0,z.opacity=R.opacity),u=new $3Dmol.Mesh(u,z),b.add(u));null!=P&&0 P.opacity&&(l.transparent=!0,l.opacity=P.opacity,delete P.opacity),P=new $3Dmol.Mesh(P,l),b.add(P))}}();$3Dmol=$3Dmol||{}; $3Dmol.GLDraw=function(){var b={},c=function(){var b=new $3Dmol.Vector3;return function(c){b.set(c[0],c[1],c[2]);var f=b.x,d=b.y,h=b.z,t=Math.sqrt(f*f+d*d);1E-4>t?(c=0,t=1):(c=-f/t,t=d/t);d=-c*f+t*d;f=Math.sqrt(d*d+h*h);1E-4>f?(h=0,d=1):(h/=f,d/=f);f=new Float32Array(9);f[0]=t;f[1]=c;f[2]=0;f[3]=-c*d;f[4]=t*d;f[5]=h;f[6]=c*h;f[7]=-t*h;f[8]=d;return f}}(),d=function(){var b=[],c=Math.pow(2,4),f,d=Math.pow(2,2),h=c/d,t;b[0]=new $3Dmol.Vector3(-1,0,0);b[h]=new $3Dmol.Vector3(0,0,1);b[2*h]=new $3Dmol.Vector3(1, 0,0);b[3*h]=new $3Dmol.Vector3(0,0,-1);for(f=3;4>=f;f++){d=Math.pow(2,f-1);h=c/d;for(t=0;t =x;x++){var u=0===x||10===x?!0:!1,s=5===x?!0:!1,l=[],E=[];for(g=0;g<=f;g++)if(s){var p=g Math.abs(p.x)&&(p.x=0),1E-5>Math.abs(p.y)&&(p.y=0),1E-5>Math.abs(p.z)&&(p.z=0),t=c?new $3Dmol.Vector3(0,Math.cos(0+y*F), 0):new $3Dmol.Vector3(p.x,p.y,p.z),t.normalize(),w.push(p),h.push(t),l.push(w.length-1)):l.push(w.length-f)}s&&m.push(E);m.push(l)}f={vertices:w,normals:h,verticesRows:m,w:f,h:10};return this.cache[c][b]=f}},y=0;b.drawCylinder=function(b,d,f,w,h,t,m){if(d&&f){y++;var e=t||m,F=!1;1==t&&1==m&&(F=!0);h=h||{r:0,g:0,b:0};var g=[f.x,f.y,f.z];g[0]-=d.x;g[1]-=d.y;g[2]-=d.z;var g=c(g),x=p.getVerticesForRadius(w,F);w=x.w;var F=x.h,u=e?F*w+2:2*w;b=b.updateGeoGroup(u);var s=x.vertices,l=x.normals,x=x.verticesRows, E=x[F/2],A=x[F/2+1],C=b.vertices,G,z,H,L,N,J,I=b.vertexArray,K=b.normalArray,O=b.colorArray,Q=b.faceArray;for(H=0;H b&&(f=10,d=8);var h=2*Math.PI,t=Math.PI,m,e;for(e=0;e<=d;e++){var p=[];for(m=0;m<=f;m++){var g=m/f,x=e/d,u={};u.x=-b*Math.cos(0+ g*h)*Math.sin(0+x*t);u.y=b*Math.cos(0+x*t);u.z=b*Math.sin(0+g*h)*Math.sin(0+x*t);g=new $3Dmol.Vector3(u.x,u.y,u.z);g.normalize();c.vertices.push(u);c.normals.push(g);p.push(c.vertices.length-1)}c.verticesRows.push(p)}return this.cache[b]=c}};b.drawSphere=function(b,c,f,d){new $3Dmol.Vector3(c.x,c.y,c.z);var h=A.getVerticesForRadius(f),t=h.vertices,m=h.normals;b=b.updateGeoGroup(t.length);for(var e=b.vertices,p=b.vertexArray,g=b.colorArray,x=b.faceArray,u=b.lineArray,s=b.normalArray,l=0,E=t.length;l< E;++l){var y=3*(e+l),C=t[l];p[y]=C.x+c.x;p[y+1]=C.y+c.y;p[y+2]=C.z+c.z;g[y]=d.r;g[y+1]=d.g;g[y+2]=d.b}b.vertices+=t.length;h=h.verticesRows;p=h.length-1;for(d=0;d g.lengthSq()&&(g=f.clone(),1E-4
l;l++)d[g+3*l]=c.x,d[g+3*l+1]=c.y,d[g+3*l+2]=c.z;c=b.normalArray;m=b.colorArray;for(l=0;4>l;l++)m[g+3*l]=e.r,m[g+3*l+1]=e.g,m[g+3*l+2]=e.b;c[g+0]=-h;c[g+1]=h;c[g+2]=0;c[g+3]=-h;c[g+4]=-h;c[g+5]=0;c[g+6]=h;c[g+7]=-h;c[g+8]=0;c[g+9]=h;c[g+10]=h;c[g+11]=0;b.vertices+=4;h=b.faceArray; e=b.faceidx;h[e+0]=f;h[e+1]=f+1;h[e+2]=f+2;h[e+3]=f+2;h[e+4]=f+3;h[e+5]=f;b.faceidx+=6},z=function(b,c){if(b.style.sphere){var h=b.style.sphere;if(!h.hidden){var e=s(b,h),h=$3Dmol.getColorFromStyle(b,h);G(c,b,e,h)}}},H=function(b,c,h,e,f,g,d){b=b.updateGeoGroup(4);g=b.vertices;d=b.vertexArray;var m=b.colorArray,l=b.radiusArray,t=b.normalArray,w=f.r,s=f.g;f=f.b;for(var u=3*g,x=0;4>x;x++){d[u]=c.x;t[u]=h.x;m[u]=w;u++;d[u]=c.y;t[u]=h.y;m[u]=s;u++;d[u]=c.z;t[u]=h.z;if(2>x)m[u]=f;else{var q=u,p=-f;0== p&&(p=-1E-4);m[q]=p}u++}b.vertices+=4;l[g]=-e;l[g+1]=e;l[g+2]=-e;l[g+3]=e;c=b.faceArray;h=b.faceidx;c[h+0]=g;c[h+1]=g+1;c[h+2]=g+2;c[h+3]=g+2;c[h+4]=g+3;c[h+5]=g;b.faceidx+=6};this.getCrystData=function(){return e.cryst?e.cryst:null};this.getSymmetries=function(){"undefined"==typeof e.symmetries&&(e.symmetries=[F]);return e.symmetries};this.setSymmetries=function(b){e.symmetries="undefined"==typeof b?[F]:b};this.getID=function(){return b};this.getFrames=function(){return f};this.setFrame=function(b){0!= f.length&&(B=0<=b&&b =m)d=h;else{f=$3Dmol.getExtent(h);e=[[],[],[]];for(g=0;3>g;g++)e[0][g]=f[0][g]-m,e[1][g]=f[1][g]+m,e[2][g]=f[2][g];m=[];for(g=0;g =e[0][0]&&d<=e[1][0]&&l>=e[0][1]&&l<=e[1][1]&&t>=e[0][2]&&t<=e[1][2]&&(d>=f[0][0]&&d<=f[1][0]&&l>=f[0][1]&&l<=f[1][1]&&t>=f[0][2]&&t<=f[1][2]||m.push(B[g]))}d=m}l=h.length;for(f=0;f =d||(g={b:g,e:d},d=f.bondOrder[e],1!=d&&(g.o=d),c.b.push(g))}}return c}; this.globj=function(b,c){if(null===h){var f=B,d=c,d=d||{},m=new $3Dmol.Object3D,u=[],x={},q={},p=M,y=null,F=null;d.supportsImposters?(p=z,y=new $3Dmol.Geometry(!0),y.imposter=!0,F=new $3Dmol.Geometry(!0,!0),F.imposter=!0,F.sphereGeometry=y,F.drawnCaps={}):(d.supportsAIA?(p=C,y=new $3Dmol.Geometry(!1,!0,!0),y.instanced=!0):y=new $3Dmol.Geometry(!0),F=new $3Dmol.Geometry(!0));var A,L,ca,X,D={},ba=[Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY];A=0;for(ca=f.length;A xa;xa++){var Ma=3*Ja.vertices;Ja.vertices++;$a[Ma]=T.x+Ia[xa][0];$a[Ma+1]=T.y+Ia[xa][1];$a[Ma+2]=T.z+Ia[xa][2];Ua[Ma]=Ta.r;Ua[Ma+1]=Ta.g;Ua[Ma+2]=Ta.b;if(Za){var Va=new $3Dmol.Vector3(Ia[xa][0],Ia[xa][1],Ia[xa][2]);Va.multiplyScalar(.1);Va.set(Va.x+ T.x,Va.y+T.y,Va.z+T.z);T.intersectionShape.line.push(Va)}}}}var fa=U,zb=f,kb=x;if(fa.style.line){var rb=fa.style.line;if(!rb.hidden){var lb=rb.linewidth||1;kb[lb]||(kb[lb]=new $3Dmol.Geometry);for(var ta=kb[lb].updateGeoGroup(6*fa.bonds.length),ja=ta.vertexArray,ka=ta.colorArray,Ea=0;Ea =Oa.serial)){var Ca=new $3Dmol.Vector3(fa.x,fa.y,fa.z),Qa=new $3Dmol.Vector3(Oa.x,Oa.y,Oa.z),fb=Ca.clone().add(Qa).multiplyScalar(.5),sb= !1;fa.clickable&&(void 0===fa.intersectionShape&&(fa.intersectionShape={sphere:[],cylinder:[],line:[],triangle:[]}),fa.intersectionShape.line.push(Ca),fa.intersectionShape.line.push(Qa));var pa=$3Dmol.getColorFromStyle(fa,fa.style.line),Fa=$3Dmol.getColorFromStyle(Oa,Oa.style.line);if(fa.bondStyles&&fa.bondStyles[Ea]){var Pa=fa.bondStyles[Ea];if(!Pa.iswire)continue;Pa.radius&&(bondR=Pa.radius);Pa.singleBond&&(sb=!0);"undefined"!=typeof Pa.color1&&(pa=$3Dmol.CC.color(Pa.color1));"undefined"!=typeof Pa.color2&& (Fa=$3Dmol.CC.color(Pa.color2))}var la=3*ta.vertices;if(1 fa.bondOrder[Ea]&&!sb){var Wa=l(fa,Oa,Ea),Da=Qa.clone();Da.sub(Ca);if(2==fa.bondOrder[Ea])if(Wa.multiplyScalar(.1),p1a=Ca.clone(),p1a.add(Wa),p1b=Ca.clone(),p1b.sub(Wa),p2a=p1a.clone(),p2a.add(Da),p2b=p1b.clone(),p2b.add(Da),pa==Fa)ta.vertices+=4,E(ja,ka,la,p1a,p2a,pa),E(ja,ka,la+6,p1b,p2b,pa);else{ta.vertices+=8;Da.multiplyScalar(.5);var Ra=p1a.clone();Ra.add(Da);var Sa=p1b.clone();Sa.add(Da);E(ja,ka,la,p1a,Ra,pa);E(ja, ka,la+6,Ra,p2a,Fa);E(ja,ka,la+12,p1b,Sa,pa);E(ja,ka,la+18,Sa,p2b,Fa)}else 3==fa.bondOrder[Ea]&&(Wa.multiplyScalar(.1),p1a=Ca.clone(),p1a.add(Wa),p1b=Ca.clone(),p1b.sub(Wa),p2a=p1a.clone(),p2a.add(Da),p2b=p1b.clone(),p2b.add(Da),pa==Fa?(ta.vertices+=6,E(ja,ka,la,Ca,Qa,pa),E(ja,ka,la+6,p1a,p2a,pa),E(ja,ka,la+12,p1b,p2b,pa)):(ta.vertices+=12,Da.multiplyScalar(.5),Ra=p1a.clone(),Ra.add(Da),Sa=p1b.clone(),Sa.add(Da),E(ja,ka,la,Ca,fb,pa),E(ja,ka,la+6,fb,Qa,Fa),E(ja,ka,la+12,p1a,Ra,pa),E(ja,ka,la+18,Ra, p2a,Fa),E(ja,ka,la+24,p1b,Sa,pa),E(ja,ka,la+30,Sa,p2b,Fa)))}else pa==Fa?(ta.vertices+=2,E(ja,ka,la,Ca,Qa,pa)):(ta.vertices+=4,E(ja,ka,la,Ca,fb,pa),E(ja,ka,la+6,fb,Qa,Fa))}}}}var Y=U,Ab=f,ga=F;if(Y.style.stick){var gb=Y.style.stick;if(!gb.hidden){var ab=gb.radius||.25,ua=ab,tb=gb.singleBonds||!1,bb=0,cb=0,ma=$3Dmol.getColorFromStyle(Y,gb),na=void 0,ya=void 0;!Y.capDrawn&&4>Y.bonds.length&&(bb=2);var ia=$3Dmol.GLDraw.drawCylinder;ga.imposter&&(ia=H);for(var oa=0;oa ha.bonds.length&& (cb=2),ma!=Ga?(na=(new $3Dmol.Vector3).addVectors(qa,Aa).multiplyScalar(.5),ia(ga,qa,na,ua,ma,bb,0),ia(ga,na,Aa,ua,Ga,0,cb)):ia(ga,qa,Aa,ua,ma,bb,cb),Y.clickable||ha.clickable){na=(new $3Dmol.Vector3).addVectors(qa,Aa).multiplyScalar(.5);if(Y.clickable){var Bb=new $3Dmol.Cylinder(qa,na,ua),Cb=new $3Dmol.Sphere(qa,ua);Y.intersectionShape.cylinder.push(Bb);Y.intersectionShape.sphere.push(Cb)}if(ha.clickable){var Db=new $3Dmol.Cylinder(Aa,na,ua),Eb=new $3Dmol.Sphere(Aa,ua);ha.intersectionShape.cylinder.push(Db); ha.intersectionShape.sphere.push(Eb)}}}else if(1 ba[1]&&(ba[1]=U.resi)),u.push(U))}}if(0 D.sphere&&0<=D.sphere&&(Ya.transparent=!0,Ya.opacity=D.sphere);eb=new $3Dmol.Mesh(y,Ya);m.add(eb)}if(0 D.stick&&0<=D.stick&&(hb.transparent=!0,hb.opacity=D.stick);F.initTypedArrays();hb.wireframe&&F.setUpWireframe();xb=new $3Dmol.Mesh(F,hb)}m.add(xb)}for(A in x)if(x.hasOwnProperty(A)){var ob=A,pb=new $3Dmol.LineBasicMaterial({linewidth:ob,vertexColors:!0});1>D.line&&0<=D.line&&(pb.transparent=!0,pb.opacity=D.line);x[A].initTypedArrays();var Gb=new $3Dmol.Line(x[A],pb,$3Dmol.LinePieces); m.add(Gb)}for(A in q)if(q.hasOwnProperty(A)){var ob=A,qb=new $3Dmol.LineBasicMaterial({linewidth:ob,vertexColors:!0});1>D.cross&&0<=D.cross&&(qb.transparent=!0,qb.opacity=D.cross);q[A].initTypedArrays();var Hb=new $3Dmol.Line(q[A],qb,$3Dmol.LinePieces);m.add(Hb)}if(g&&e.symmetries&&0 MOLECULE/gm)?"mol2":b.match(/^HETATM/gm)||b.match(/^ATOM/gm)?"pdb":b.match(/^.*\n.*\n.\s*(\d+)\s+(\d+)/gm)?"sdf":"xyz",console.log("Best guess: "+ c)));return(0,$3Dmol.Parsers[c])(b,d)};b.setAtomDefaults=function(b,d){for(var p=0;p b.mid?b.mid:.618034;var m=b.start,e=b.end,w=b.radius,g=b.radiusRatio,x=b.mid;if(m&&e){var c=f.updateGeoGroup(51),u=e.clone();u.sub(m).multiplyScalar(x);var s=m.clone().add(u),x=u.clone().negate();this.intersectionShape.cylinder.push(new $3Dmol.Cylinder(m.clone(),s.clone(),w));this.intersectionShape.sphere.push(new $3Dmol.Sphere(m.clone(), w));var l=[];l[0]=u.clone();1E-4 this.opacity?!0:!1,opacity:this.opacity, wireframeLinewidth:this.linewidth}):new $3Dmol.MeshLambertMaterial({wireframe:this.wireframe,side:this.side,transparent:1>this.opacity?!0:!1,opacity:this.opacity,wireframeLinewidth:this.linewidth});d=new $3Dmol.Mesh(f,d);q.add(d);d=new $3Dmol.LineBasicMaterial({linewidth:this.linewidth,color:this.color});d=new $3Dmol.Line(w,d,$3Dmol.LinePieces);q.add(d);B=q.clone();b.add(B)}};this.removegl=function(b){B&&(void 0!==B.geometry&&B.geometry.dispose(),void 0!==B.material&&B.material.dispose(),b.remove(B), B=null);q=null}}var c=function(b,c,q){var p=q.faceArr;0!==q.vertexArr.length&&0!==p.length||console.warn("Error adding custom shape component: No vertices and/or face indices supplied!");p=q.color;"undefined"==typeof p&&(p=b.color);for(var p=$3Dmol.CC.color(p),f=$3Dmol.splitMesh(q),w=0,h=f.length;w b.vertexArr.length)return[b];var c=[{vertexArr:[],normalArr:[],faceArr:[]}];b.colorArr&&(c.colorArr=[]);for(var d=[],p=[],y=0,A=b.faceArr,q=0,B=A.length;qw;w++){var h=A[q+w];d[h]!==y&&(d[h]=y,p[h]=f.vertexArr.length,f.vertexArr.push(b.vertexArr[h]),b.normalArr&&b.normalArr[h]&&f.normalArr.push(b.normalArr[h]),b.colorArr&&b.colorArr[h]&&f.colorArr.push(b.colorArr[h]));f.faceArr.push(p[h])}64E3<=f.vertexArr.length&&(c.push({vertexArr:[], normalArr:[],faceArr:[]}),b.colorArr&&(c.colorArr=[]),y++)}return c}; $3Dmol.GLViewer=function(){return function(b,c){function d(b){var c=[];"undefined"===typeof b&&(b={});var f=[],g;if("undefined"===typeof b.model)for(g=0;g b&&(b=i);return b+1},T=function(b){if(J){var c=G.position.z-I.position.z;1>c&&(c=1);G.near=c+O;1>G.near&&(G.near=1);G.far=c+Q;G.near+1>G.far&&(G.far=G.near+1);G instanceof $3Dmol.Camera?G.fov=20:(G.right=c*Math.tan(Math.PI/180*20),G.left=-G.right,G.top=G.right/ E,G.bottom=-G.top);G.updateProjectionMatrix();J.fog.near=G.near+.4*(G.far-G.near);J.fog.far=G.far;C.render(J,G);if(!b&&0 b&&(b=80),I.position.z=X+d*b,150 c||1 h&&(h=5);O=-h/1.9;Q=h/2;h=f[1][0]-f[0][0];m=f[1][1]-f[0][1];c=f[1][2]-f[0][2];h=Math.sqrt(h*h+m*m+c*c);5>h&&(h=5);f=25;for(h=0;h f&&(f=m));h=2*Math.sqrt(f);I.position.z=-(.5*h/Math.tan(Math.PI/180*G.fov/2)-150);T();return this};this.setSlab=function(b,c){O=b;Q=c};this.getSlab=function(b){return{near:O,far:Q}};this.addLabel=function(b,c){var e=new $3Dmol.Label(b,c); e.setContext();K.add(e.sprite);x.push(e);T();return e};this.addResLabels=function(b,c){p("addResLabels",b,this,c);return this};this.removeLabel=function(b){for(var c=0;c l){b.start=e;b.end=f;c.addLine(b);break}s.addVectors(e,h);b.start=e;b.end=s;c.addLine(b); e=s.clone();t+=d;s.addVectors(e,m);e=s.clone();t+=w}}else c.addLine(b);g.push(c);return c};this.addUnitCell=function(b){var c=new $3Dmol.GLShape({wireframe:!0});c.shapePosition=g.length;var e=b.getCrystData();if(e){b=e.a;var f=e.b,d=e.c,h=e.alpha,m=e.beta,e=e.gamma,h=h*Math.PI/180,m=m*Math.PI/180,e=e*Math.PI/180,l;l=Math.cos(m);h=(Math.cos(h)-Math.cos(m)*Math.cos(e))/Math.sin(e);m=Math.sqrt(Math.max(0,1-l*l-h*h));b=new $3Dmol.Matrix4(b,f*Math.cos(e),d*l,0,0,f*Math.sin(e),d*h,0,0,0,d*m,0,0,0,0,1); f=[new $3Dmol.Vector3(0,0,0),new $3Dmol.Vector3(1,0,0),new $3Dmol.Vector3(0,1,0),new $3Dmol.Vector3(0,0,1),new $3Dmol.Vector3(1,1,0),new $3Dmol.Vector3(0,1,1),new $3Dmol.Vector3(1,0,1),new $3Dmol.Vector3(1,1,1)];for(d=0;d b&&(b=e[c].getFrames().length);return b};this.animate=function(b){S=!0;var c=100,e="forward",f=0;b=b||{};b.interval&&(c=b.interval);b.loop&&(e=b.loop);b.reps&&(f=b.reps);var d=this.getFrames(),g=this,h=0,m=1,l=0,w=d*f,s=setInterval(function(){var b=e;"forward"==b?(g.setFrame(h), h=(h+m)%d):"backward"==b?(g.setFrame(d-1-h),h=(h+m)%d):(g.setFrame(h),h+=m,m*=0==h%(d-1)?-1:1);g.render();++l!=w&&g.isAnimated()||clearInterval(s)},c);return this};this.stopAnimate=function(){S=!1;return this};this.isAnimated=function(){return S};this.addModel=function(b,c,f){var d=new $3Dmol.GLModel(e.length,q);d.addMolData(b,c,f);e.push(d);return d};this.addModels=function(b,c,f){f=f||{};f.multimodel=!0;f.frames=!0;b=$3Dmol.GLModel.parseMolData(b,c,f);for(c=0;c c[1][0]||d.y c[1][1]||d.z c[1][2]||f.push(e))}return f},Ta=function(b){return(b[1][0]-b[0][0])*(b[1][1]-b[0][1])*(b[1][2]-b[0][2])},$a=function(b,c,f){var e=[],d=function(b){var c=[];c[0]=[b[0][0],b[0][1],b[0][2]];c[1]=[b[1][0],b[1][1],b[1][2]];return c},h=function(b){if(64E3>Ta(b))return[b];var c=b[1][0]-b[0][0],f=b[1][1]-b[0][1],e=b[1][2]-b[0][2],f=c>f&&c>e?0:f>c&&f>e?1:2,e=d(b),c=d(b);b=(b[1][f]-b[0][f])/2+b[0][f];e[1][f]=b;c[0][f]=b;b=h(e); c=h(c);return b.concat(c)};b=h(b);for(var g=0,m=b.length;g = p.length)){var d;d=b;var g=p[c].extent,l=p[c].atoms,m=p[c].toshow,w=new $3Dmol.ProteinSurface;w.initparm(g,1===d?!1:!0,x);w.fillvoxels(y,l);w.buildboundary();d==$3Dmol.SurfaceType.SES&&(w.fastdistancemap(),w.boundingatom(!1),w.fillvoxelswaals(y,l));w.marchingcube(d);d=w.getFacesAndVertices(m);d=Ua(e,d,u);$3Dmol.mergeGeos(f.geo,d);h.render();setTimeout(ga,1,c+1)}},1,0);else{g=[];0>b&&(b=0);t=0;for(q=4;t B&&(y=B);var f=(B+q)/2;"undefined"!=typeof d&&(f=d);y<=f?(q=Math.floor(255*Math.sqrt((y-q)/(f-q))),q=16711680+256*q+q):(q=Math.floor(255*Math.sqrt(1-(y-f)/(B-f))),q=65536*q+256*q+255);return q};this.range=function(){return"undefined"!=typeof b&&"undefined"!= typeof c?[b,c]:null}}; $3Dmol.Gradient.ROYGB=function(b,c){var d=1;"undefined"==typeof c&&$.isArray(b)&&2<=b.length&&(c=b[1],b=b[0]);cq&&(p=q);var B=(A+q)/2,f=(A+B)/2,w=(B+q)/2;pq&&(p=q);var B=(p-A)/(q-A)*5/6+.5;A=Math.sin(Math.PI*B);A*=255*A;q=Math.sin(Math.PI*(B+1/3));q*=255*q;B=Math.sin(Math.PI*(B+2/3));return 65536*Math.floor(A)+256*Math.floor(255*B*B)+1*Math.floor(q)};this.range=function(){return"undefined"!=typeof b&& "undefined"!=typeof c?[b,c]:null}};$3Dmol.LabelCount=0;$3Dmol.Label=function(b,c){this.id=$3Dmol.LabelCount++;this.stylespec=c||{};this.canvas=document.createElement("canvas");this.canvas.width=134;this.canvas.height=35;this.context=this.canvas.getContext("2d");this.sprite=new $3Dmol.Sprite;this.text=b}; $3Dmol.Label.prototype={constructor:$3Dmol.Label,getStyle:function(){return this.stylespec},setContext:function(){var b=function(b,d,p){"undefined"!=typeof b&&(p=b instanceof $3Dmol.Color?b.scaled():$3Dmol.CC.color(b).scaled());"undefined"!=typeof d&&(p.a=parseFloat(d));return p};return function(){var c=this.stylespec,d="undefined"==typeof c.useScreen?!1:c.useScreen,p=c.showBackground;if("0"===p||"false"===p)p=!1;"undefined"==typeof p&&(p=!0);var y=c.font?c.font:"sans-serif",A=parseInt(c.fontSize)? parseInt(c.fontSize):18,q=b(c.fontColor,c.fontOpacity,{r:255,g:255,b:255,a:1}),B=c.padding?c.padding:4,f=c.borderThickness?c.borderThickness:0,w=b(c.backgroundColor,c.backgroundOpacity,{r:0,g:0,b:0,a:1}),h=b(c.borderColor,c.borderOpacity,w),t=c.position?c.position:{x:-10,y:1,z:1},m=void 0!==c.inFront?c.inFront:!0;if("false"===m||"0"===m)m=!1;var e=c.alignment||$3Dmol.SpriteAlignment.topLeft,F="";c.bold&&(F="bold ");this.context.font=F+A+"px "+y;var g=this.context.measureText(this.text).width;p|| (f=0);var x=g+2.5*f+2*B,u=1.25*A+2*f+2*B;if(c.backgroundImage){var F=c.backgroundImage,s=c.backgroundWidth?c.backgroundWidth:F.width,l=c.backgroundHeight?c.backgroundHeight:F.height;s>x&&(x=s);l>u&&(u=l)}this.canvas.width=x;this.canvas.height=u;this.context.clearRect(0,0,this.canvas.width,this.canvas.height);F="";c.bold&&(F="bold ");this.context.font=F+A+"px "+y;this.context.fillStyle="rgba("+w.r+","+w.g+","+w.b+","+w.a+")";this.context.strokeStyle="rgba("+h.r+","+h.g+","+h.b+","+h.a+")";this.context.lineWidth= f;p&&(p=this.context,w=y=f,x-=2*f,u-=2*f,h=0 u[b]&&(u[b]=q.length,q.push(m));return u[b]},s=new Int32Array(12),l=w?p:c,w=w?y:d;for(f=0;f G;++G)C|=!!(b[(e*(f+((G&4)>>2))+E+((G&2)>>1))*F+M+(G&1)]&2)< w;w++)e[w]=Array(c.length);w=0;for(h=c.length;w e[0][w])f[w].x=c[w].x,f[w].y=c[w].y,f[w].z=c[w].z;else if(3==e[0][w]||4==e[0][w]){f[w].x=0;f[w].y=0;t=f[w].z=0;for(m=e[0][w];t Math.abs(e.resi-m.resi)||(p t.length)return h;for(var m=t[2].replace(/^\s+/,"").replace(/\s+/g," ").split(" "),e=Math.abs(parseFloat(m[0])),m=t[3].replace(/^\s+/,"").replace(/\s+/g, " ").split(" "),m=0 t.length);){var m=parseInt(t[0]);if(isNaN(m)||0>=m)break;if(t.length m.length);){var e=parseInt(m[3].substr(0,3));if(isNaN(e)|| 0>=e)break;var p=parseInt(m[3].substr(3,3)),g=4;if(m.length<4+e+p)break;for(var q=[],u=d[d.length-1].length,s=u+e,l,e=u;e M;M++)for(G=C[M].split("+"),H=0;HMOLECULE/), p=b.search(/@ ATOM/);if(-1==e||-1==p)break;var e=[],g=m[2].replace(/^\s+/,"").replace(/\s+/g," ").split(" "),x=parseInt(g[0]),p=0;1 ATOM"==m[s]){u=s+1;break}s=d[d.length-1].length;for(x=s+x;s BOND"==m[u++]){s=!0;break}if(s&&p)for(s=0;s d)return!1;var m=b.y-c.y,m=m*m;if(m>d)return!1;var e=b.z-c.z,e=e*e;if(e>d)return!1;p=p+m+e;return isNaN(p)?!1:.5>p?!1:p>d?!1:!0},B=function(b,c,d){var p=d.length,m=p,e,q;if(!c)for(c=0;c
z;z++){if(J=parseInt(H.substr([11,16,21,26][z],5)),J=M[J], I=h[h.length-1][J],void 0!==N&&void 0!==I)if(L[[u,J]])for(L[[u,J]]+=1,I=0;I =N;N++)if(H=C[G].replace(/^\s*/,""),parseInt(H.substr(18,1))==N)z.elements[N-1]=parseFloat(H.substr(23,10)),z.elements[N-1+4]=parseFloat(H.substr(33,10)),z.elements[N-1+8]=parseFloat(H.substr(43,10)),z.elements[N-1+12]=parseFloat(H.substr(53)),G++;else for(;"BIOMT"==H.substr(13,5);)G++,H=C[G].replace(/^\s*/, "");z.elements[3]=0;z.elements[7]=0;z.elements[11]=0;z.elements[15]=1;g[g.length-1].symmetries.push(z);G--}}(new Date).getTime();for(N=0;N s[z][3]||(u.ss="s",u.resi==s[z][1]&&(u.ssbegin=!0),u.resi==s[z][3]&&(u.ssend=!0));for(z=0;z l[z][3]|| (u.ss="h",u.resi==l[z][1]?u.ssbegin=!0:u.resi==l[z][3]&&(u.ssend=!0))}}return h};b.pqr=b.PQR=function(b,c){var h=[[]],p,m=!c.noSecondaryStructure,e=[],q=b.split(/\r?\n|\r/),g,x;for(g=0;g p;p++)s=parseInt(x.substr([11,16,21, 26][p],5)),l=h[h.length-1][e[s]],void 0!==u&&void 0!==l&&(u.bonds.push(e[s]),u.bondOrder.push(1));for(g=0;g b||b>=this.size.x||0>c||c>=this.size.y||0>d||d>=this.size.z?0:this.data[b*this.size.y*this.size.z+c*this.size.z+d]}; $3Dmol.VolumeData.prototype.cube=function(b){b=b.replace(/^\s+/,"").split(/[\n\r]+/);if(!(6>b.length)){var c=b[2].replace(/^\s+/,"").replace(/\s+/g," ").split(" "),d=parseFloat(c[0]),p=Math.abs(d),y=this.origin=new $3Dmol.Vector3(parseFloat(c[1]),parseFloat(c[2]),parseFloat(c[3])),c=b[3].replace(/^\s+/,"").replace(/\s+/g," ").split(" "),A=0 d&&c++;b=b.splice(p+c).join(" ");b=b.replace(/^\s+/,"");b=b.split(/[\s\r]+/);this.data=new Float32Array(b)}}; $3Dmol.VolumeData.prototype.ccp4=function(b){var c,d,p,y,A,q,B,f,w,h,t,m,e,F,g,x=new Int32Array(b,0,56);m=new Float32Array(b,0,56);c=x[0];d=x[1];p=x[2];y=x[4];A=x[5];q=x[6];B=Math.abs(x[7]);f=Math.abs(x[8]);w=Math.abs(x[9]);h=m[10];t=m[11];m=m[12];xVox=h/c;yVox=t/d;zVox=m/p;switch(x[16]){case 1:e=y;g=F=0;break;case 2:F=y;g=e=0;break;case 3:g=y,F=e=0}switch(x[17]){case 1:e=A;g=F=0;break;case 2:F=A;g=e=0;break;case 3:g=A,F=e=0}switch(x[18]){case 1:e=q;g=F=0;break;case 2:F=q;g=e=0;break;case 3:g=q,F= e=0}this.origin=new $3Dmol.Vector3(e,F,g);c=x[23];this.size={x:B,y:f,z:w};this.unit=new $3Dmol.Vector3(xVox,yVox,zVox);new Int8Array(b);this.data=new Float32Array(b,1024+c)}; $3Dmol.workerString=function(){self.onmessage=function(b){b=b.data;var c=b.type;if(0>c)self.atomData=b.atoms,self.volume=b.volume,self.ps=new ProteinSurface;else{var d=self.ps;d.initparm(b.expandedExtent,1==c?!1:!0,self.volume);d.fillvoxels(self.atomData,b.extendedAtoms);d.buildboundary();if(4===c||2===c)d.fastdistancemap(),d.boundingatom(!1),d.fillvoxelswaals(self.atomData,b.extendedAtoms);d.marchingcube(c);b=d.getFacesAndVertices(b.atomsToShow);self.postMessage(b)}}}.toString().replace(/(^.*?\{|\}$)/g, "");$3Dmol.workerString+="; var ProteinSurface="+$3Dmol.ProteinSurface.toString().replace(/\$3Dmol.MarchingCube./g,"MarchingCube.");$3Dmol.workerString+=",MarchingCube=("+$3Dmol.MarchingCubeInitializer.toString()+")();";$3Dmol.SurfaceWorker=window.URL.createObjectURL(new Blob([$3Dmol.workerString],{type:"text/javascript"}));$3Dmol.workerString=$3Dmol.workerString;$3Dmol.SurfaceWorker=$3Dmol.SurfaceWorker;