a="c=document.body.children[0],W=wiZw.njWidth,H=wiZw.njHe;~width=W,~he=H,c=~getContex6'2d'Vbk[s*s,XsMvyP8=Ls),9=EcT(sVB[X9-8,X8+9MvxP8=Ls),9=EcT(sVB[G*9-X8*8+X9MviPr]K2(s=F/230)/30K0QC[0]-10K1QC[1]-J*10K2QC!+3K3QD3];BrUcfk[G|zJ|zF|0Mp2Pif(F<=0)BNStylergba('+cf(D3]')'NRec6G,F,FvcPr]K0W-G255/WK1H-J255/HK21-TX22K3QX2*2&/pc;D3Qr;BvUvtkvxYyY,_),TekL_+G+F3UkL_+G/3+J/31UtkbY,YT*eY)/10+Ts3kbY,17/Esqr6G+J*J+XF)RPpc=v;ts=s;_=3;p];@=0;i<v;i++)p.push([-,-,-,[z0xff,z1]]V@ p)`Qs3(`]setIntjval(A_+=ts;T=L_V~globalCompTiteOpjionsource-ovj'NStyle#&'NRec6zzW,HV~globalCompTiteOpjionlj';@ p)p2YcYiY66`])))))},1&VCW/2,H/2,0];R(7&z.34V";for(b in c="`p[i`()r!*.5at)*=')+Q(=[inight)U,JG*~c.`EraZm@for(i&000![2]_tt9ic8is6t(z0,kPBjerZndoY(vXF*V);U};TosQ]=P=AN;c.fillM,D3]]};LEsin(K;r[JD1]GD0]FD2]EMath.Dv[Breturn Afunction(v,s,a){".split(""))a=a.replace(RegExp(c[b][0],"g"),c[b].slice(1));eval(a)
// set up canvas for drawing
c=document.body.children[0],W=window.innerWidth,H=window.innerHeight;c.width=W,c.height=H,c=c.getContext('2d');
// multiplies vector with a value
b=function(v,s,a){return [v[0]*s,v[1]*s,v[2]*s,v[3]]};
// rotate vector around y
vy=function(v,s,a){is=Math.sin(s),ic=Math.cos(s);return [v[2]*ic-v[0]*is,v[1],v[2]*is+v[0]*ic,v[3]]};
// rotate vector around x
vx=function(v,s,a){is=Math.sin(s),ic=Math.cos(s);return [v[0],v[1]*ic-v[2]*is,v[1]*is+v[2]*ic,v[3]]};
// conversion from 3d to 2d
vi=function(v,s,a){r=[];r[2]=((s=v[2]/2)+30)/30;r[0]=C[0]-v[0]*r[2]*10;r[1]=C[1]-v[1]*r[2]*10;r[2]=C[2]+r[2]*3;r[3]=v[3];return r};
// color format
cf=function(v,s,a){return [v[0]|0,v[1]|0,v[2]|0,v[3]]};
// plot particle
p2=function(v,s,a){if(v[2]<=0)return ;c.fillStyle='rgba('+cf(v[3])+')';c.fillRect(v[0],v[1],v[2],v[2])};
// adjust color of a particle
vc=function(v,s,a){r=[];r[0]=(W-v[0])*255/W;r[1]=(H-v[1])*255/H;r[2]=(1-os)*v[2]*22;r[3]=v[2]*2*2000/pc;v[3]=r;return v};
// rotation based on time
vt=function(v,s,a){return vx(vy(v,tt),os)};
// function 1
e=function(v,s,a){return Math.sin(tt+v[0]+v[2])*3};
// function 2
at=function(v,s,a){return Math.sin(tt+v[0]/3+v[1]/3)+1.5};
// merge functions
t=function(v,s,a){return b(v,at(v)+os*e(v)/10+os)};
// spherizes random dots
s3=function(v,s,a){return b(v,17/Math.sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]))};
// reset
// 'javascript:R(particle count, time step)'
// tt - total time
// pc - particle count
// p[] - particles
// ts - timestep
// most stuff goes on here
// p2(vc(vi(vt(t(p[i])))))
// p[i] is a vector [x,y,z,[r,g,b,a]]
// t apply transformation
// vt rotate
// vi add perspective and transpose to canvas space
// vc color particle
// p2 plot particle
R=function(v,s,a){pc=v;ts=s;tt=3;p=[];for(i=0;i<v;i++)p.push([Math.random()-.5,Math.random()-.5,Math.random()-.5,[0,0xff,0,1]]);for(i in p)p[i]=s3(p[i])};
// interval
setInterval(function(v,s,a){tt+=ts;os=Math.sin(tt);c.globalCompositeOperation='source-over';c.fillStyle='#000';c.fillRect(0,0,W,H);c.globalCompositeOperation='lighter';for(i in p)p2(vc(vi(vt(t(p[i])))))},1000);C=[W/2,H/2,0];
R(70000,.34);