0x2672125f…948csent to0xc74ec888…009f·#18,681,119·view on Etherscan
p5.disableFriendlyErrors=!0;const gl=document.createElement("canvas").getContext("webgl2"),qPrms=new URLSearchParams(window.location.search);qPrms.get("h")&&(tokenData.hash=qPrms.get("h"));let cNSz=420,cNSp=1,cNDr=45,cNRg=1,pSzRg=1,pSzSp=.01,wgl=2;gl||(wgl=1),p5.RendererGL.prototype._initContext=function(){try{if(this.drawingContext=this.canvas.getContext("webgl2",this._pInst._glAttributes)||this.canvas.getContext("experimental-webgl",this._pInst._glAttributes),null===this.drawingContext)throw new Error("Error creating webgl context");{const e=this.drawingContext;e.enable(e.DEPTH_TEST),e.depthFunc(e.LEQUAL),e.viewport(0,0,e.drawingBufferWidth,e.drawingBufferHeight),this._viewport=this.drawingContext.getParameter(this.drawingContext.VIEWPORT)}}catch(e){throw e}},qPrms.get("clrSize")&&(cNSz=qPrms.get("clrSize")),qPrms.get("clrSpeed")&&(cNSp=qPrms.get("clrSpeed")),qPrms.get("clrDir")&&(cNDr=qPrms.get("clrDir")),qPrms.get("clrRange")&&(cNRg=qPrms.get("clrRange")),qPrms.get("petalSizeRange")&&(pSzRg=qPrms.get("petalSizeRange")),qPrms.get("petalSizeSpeed")&&(pSzSp=qPrms.get("petalSizeSpeed"));const PHI=(1+Math.sqrt(5))/2,hashPairs=[];for(let e=0;e<32;e++)hashPairs.push(tokenData.hash.slice(2+2*e,4+2*e));const dcP=hashPairs.map((e=>parseInt(e,16)));fl=e=>Math.floor(e),sq=e=>Math.sqrt(e),ab=e=>Math.abs(e);const seed=parseInt(tokenData.hash.slice(2,10),16);function easeOutExpo(e){return 1===e?1:1-Math.pow(2,-10*e)}function easeInExpo(e){return 0===e?0:Math.pow(2,10*e-10)}function easeInQuad(e){return e*e}function easeInCubic(e){return e*e*e}function easeOutCubic(e){return 1-Math.pow(1-e,3)}function easeInOutCubic(e){return e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2}class Random{constructor(e){this.useA=!1;let t=function(t){let r=e,n=parseInt(t.substr(8,16),16),s=parseInt(t.substr(16,24),16),a=parseInt(t.substr(24,32),16);return function(){r|=0,n|=0,s|=0,a|=0;let e=(r+n|0)+a|0;return a=a+1|0,r=n^n>>>9,n=s+(s<<3)|0,s=s<<21|s>>>11,s=s+e|0,(e>>>0)/4294967296}};this.prngA=new t(tokenData.hash.substr(2,32)),this.prngB=new t(tokenData.hash.substr(34,32));for(let e=0;e<1e6;e+=2)this.prngA(),this.prngB()}r_dec(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}r_num(e,t){return e+(t-e)*this.r_dec()}r_int(e,t){return Math.floor(this.r_num(e,t+1))}r_bool(e){return this.r_dec()<e}r_choice(e){return e[this.r_int(0,e.length-1)]}}let ww,wh,un,mnr,myr,mc,bas,lnz,shCnvs,shdr,msk,mlt,bgc,bgCol,R=new Random(seed),S=new Random(3*seed),N=new Random(seed-9),palette=swatches[dcP[2]%swatches.length],jColors=JSON.parse(JSON.stringify(palette.colors)),clrs=hsbPal([...jColors]),clrStl="Full",clrOrd=dcP[26]%5>1?"Spiral":"Rings";cNSz=75+3500*dcP[11]/255,cNSp=2+16*dcP[12]/255,cNDr=359*dcP[13]/255,cNRg=4.25*dcP[14]/255-.25,pSzRg=.2+4.8*easeInExpo(dcP[15]/255),pSzSp=.01+6.99*easeInExpo(dcP[16]/255);let leaf=leaves[dcP[4]%leaves.length];const GaussianBlur="\n\t#ifndef PI\n\t#define PI 3.14159265359\n\t#endif\n\n\t// Gaussian function\n\tfloat gaussian(float x, float sigma) {\n\t\treturn exp(-(x*x)/(2.*sigma*sigma))/(sqrt(2.*PI)*sigma);\n\t}\n\t\n\n\t// Gaussian blur\n\tvec3 GaussianBlur(vec2 uv, sampler2D img, float radius, float sigma, vec2 texelSize) {\n\t\tvec3 color = vec3(0.);\n\t\tfloat sum = 0.;\n\n vec2 halfTexelSz = texelSize * 4.0;\n\n\t\tfor (float x = -radius; x <= radius; x++) {\n\t\t\tfor (float y = -radius; y <= radius; y++) {\n\t\t\t\tfloat weight = gaussian(length(vec2(x, y)), sigma);\n\t\t\t\tcolor += texture(img, (uv + vec2(x, y) * halfTexelSz)).xyz * weight;\n\t\t\t\tsum += weight;\n\t\t\t}\n\t\t}\n\t\treturn color/sum;\n\t}\n\t\n",frg=`#version 300 es\nprecision mediump float;\n\nuniform vec2 iResolution;\nuniform float iPixelDensity;\nuniform sampler2D iCanvas;\nuniform sampler2D iGlow;\nuniform sampler2D iMask;\nuniform float iRadius;\nuniform float iSigma;\n\n${GaussianBlur}\n\nin vec2 vTexCoord;\nout vec4 fragColor;\n\nvoid main() {\n vec2 uv = vec2(vTexCoord.x, 1.0-vTexCoord.y);\n vec2 texelSize = 1./(iResolution.xy*iPixelDensity);\n vec3 texMask = texture(iMask, uv).rgb;\n\n vec3 color = GaussianBlur(\n uv, iCanvas,\n iRadius, iSigma, texelSize\n );\n\n vec3 glow = GaussianBlur(\n uv, iGlow,\n iRadius/2., iSigma/2., texelSize\n );\n\n //Color sample and weight sums for weighted average\n vec4 color_sum = vec4(0);\n vec4 weight_sum = vec4(0);\n\n for(float i = 0.0; i<=1.0; i+=1.0/12.0) {\n //Sample texture coordinates with offset (-0.5 to +0.5)\n vec2 coord = uv + (i-0.5) * 0.0075;\n\n //Sample texture at coordinates\n vec4 color = texture(iGlow, coord);\n\n //Get separate weight values for each channel\n //R ranges from 0 to 1, G from 0 to 1 to 0 and B from 1 to 0\n vec4 weight = vec4(i, 1.0 - abs(i*2.0 - 1.0), 1.0 - i, 0.5);\n \n //Add color (squared for gamma) with weight factors\n color_sum += color * color * weight;\n //Add weight totals for averaging\n weight_sum += weight;\n }\n\n vec3 abglow = vec3(glow.r*uv.x,glow.g,glow.b*uv.y);\n vec4 abrr = sqrt(color_sum*2.2 / weight_sum);\n vec3 suma = (color + glow + abrr.rgb*3.0)/3.0;\n\n fragColor = vec4(vec3(suma), texMask.g*0.64);\n //fragColor = abrr;\n}\n`,vrt="#version 300 es\n\n\tin vec3 aPosition;\n\tin vec2 aTexCoord;\n\n\tout vec2 vTexCoord;\n\n\tvoid main() {\n\t\tvTexCoord = aTexCoord;\n\t\tgl_Position = vec4(aPosition.xy*2.-1., aPosition.z, 1.0);\n\t}\n";function setup(){colorMode(HSL),ww=innerWidth,wh=innerHeight,mnr=ww<wh?ww:wh,myr=ww>wh?ww:wh,un=myr/100,mc=createCanvas(ww,wh),lnz=createGraphics(ww,wh),bas=createGraphics(ww,wh),msk=createGraphics(ww,wh),mlt=createGraphics(ww,wh),pixelDensity(2),lnz.pixelDensity(2),msk.pixelDensity(2),bas.pixelDensity(2),mlt.pixelDensity(2),noiseSeed(seed),lnz.translate(ww/2,wh/2),2==wgl&&(shCnvs=createGraphics(ww,wh,WEBGL),shCnvs.pixelDensity(1),shCnvs.translate(ww/2,wh/2),shCnvs.rectMode(CENTER),shdr=shCnvs.createShader(vrt,frg)),lnz.rectMode(CENTER),lnz.imageMode(CENTER),lnz.colorMode(HSL),lnz.strokeJoin(ROUND),bas.colorMode(HSL),bas.strokeJoin(ROUND),msk.colorMode(HSL),msk.strokeJoin(ROUND),mlt.colorMode(HSL),mlt.strokeJoin(ROUND),mlt.rectMode(CENTER),bgc=clrs[dcP[17]%clrs.length],bgCol=color(bgc.h,bgc.s,bgc.l),background(bgCol),noFill(),stroke(bgCol),translate(ww/2,wh/2);let e=1.5*myr/200;strokeWeight(.55*e);for(let t=0;t<200;t++){stroke(0,t/250),circle(0,0,t*e)}}function draw(){translate(ww/2,wh/2),imageMode(CENTER),bas.push(),bas.translate(ww/2,wh/2),bas.imageMode(CENTER);let e=frameCount<1200?frameCount:1200,t=frameCount<e?.08:.08-(frameCount-e)/1200;bgCol.setAlpha(t/10),bas.background(bgCol),bgCol.setAlpha(t),lnz.background(bgCol),2==wgl&&shCnvs.background(bgCol),msk.push(),msk.background(20),msk.translate(ww/2,wh/2),msk.imageMode(CENTER),mlt.push(),mlt.background(0),mlt.translate(ww/2,wh/2),mlt.imageMode(CENTER);for(let t=0;t<e;t++){let r=PHI*PI*2*t+(dcP[5]/128-1)*frameCount/2e3,n=myr/(1e6+5*frameCount)-myr/200+lerp(e*myr/(800+4*t),0,easeInQuad(t/e)),s=n*cos(r),a=n*sin(r),o=frameCount*(cos(PI*cNDr/180)*cNSp*.001),l=frameCount*(sin(PI*cNDr/180)*cNSp*.001),i=noise(s/cNSz-o,a/cNSz+l)*cNRg,c=noise(46*s/cNSz-o/2,46*a/cNSz+l/2)*cNRg*1.6,m=n/myr<.5?8-8*easeOutExpo(n/myr):0,h=noise(s/80+.01*frameCount*pSzSp,a/80+.01*frameCount*pSzSp)*m**1.05*pSzRg,u=myr/1024+myr/8*(n/myr)*(1+n**1.2/myr)*(.8+h);msk.push(),msk.translate(s,a),msk.rotate(r),msk.strokeWeight(myr/60*(n/myr)),msk.stroke(100,.5),msk.fill(255),drawMask(.006*u,leaf,n/myr),msk.pop(),mlt.push(),mlt.blendMode(BLEND),mlt.translate(s,a),mlt.rotate(r+.05);let g,d,p,w,f,b=(frameCount/60+int(n/2)+90*i+90*sin(r-frameCount/270))%360;mlt.strokeWeight(myr/32*easeInQuad(n/myr)*i),mlt.stroke(b,100,20+40*h,.5),mlt.fill(0),drawLip(.006*u,leaf,n/myr),mlt.rotate(-.1),mlt.translate(myr/600,i*myr/800),mlt.fill(0,.1),mlt.blendMode(SCREEN),drawLip(.006*u,leaf,n/myr),mlt.rotate(.05),mlt.stroke(b,50,60+50*h,.7),mlt.strokeWeight(myr/64*easeInQuad(n/myr)*i),mlt.translate(i*myr/900,-myr/1200),drawLip(.0059*u,leaf,n/myr),mlt.blendMode(BLEND),mlt.stroke(0),mlt.strokeWeight(i*(myr/30)*easeInQuad(n/myr)),mlt.rotate(h/10-.08),mlt.translate(-myr/400,i*myr/800),drawLip(.0062*u,leaf,n/myr),mlt.pop(),bas.push(),bas.translate(s,a),bas.rotate(r),bas.noStroke();let v=30*cos(r-PI/4)*(n/myr),C=15*cos(r-PI/4)*(1-n/(.5*myr))+5*i-10;if("Spiral"==clrOrd)w=clrs[t%clrs.length],g=w.h,d=w.s+v,p=w.l+C,f=color(g,d,p);else{let e=40*n/myr-frameCount/60%clrs.length-fl(40*n/myr-frameCount/60%clrs.length),t=clrs.length-fl(40*n/myr-frameCount/60%clrs.length)%clrs.length-1;t=t>=clrs.length?t-clrs.length:t,w=clrs[t];let r=t<clrs.length-1?clrs[t+1]:clrs[0];g=w.h,d=w.s+v,p=w.l+C,f=color(g,d,p);let s=color(r.h,r.s+v,r.l+C);e<.2&&e>0&&(bas.colorMode(RGB),f=bas.lerpColor(s,f,5*e),bas.colorMode(HSL))}bas.fill(f),bas.stroke(g,d,.95*p,.2),bas.strokeWeight(myr/120*(n/myr)),drawPetal(.006*u,leaf,n/myr),bas.noFill(),bas.stroke(g,d,.9*p,.2),bas.strokeWeight(myr/240*(n/myr)),drawPetal(.006*u,leaf,n/myr),bas.pop(),lnz.push(),lnz.translate(s,a),lnz.rotate(r);let y=(frameCount/60+int(n/2)+90*i+90*sin(r-frameCount/270))%360,S=65*easeInOutCubic(cos(2*r+noise(frameCount/480)*PI*4)/2+.2)*(1-n/(.5*myr))+3*easeOutCubic(c);bgc.l>45?lnz.fill(y,50+v,.4*S):lnz.fill(0),lnz.strokeWeight(myr/900+n/20),lnz.stroke(y,50+v,S,.3),drawGlow(.005*u,leaf,n/myr),lnz.noFill(),lnz.strokeWeight(myr/2100+n/40),lnz.stroke(y,50+v,S,.3),drawGlow(.005*u,leaf,n/myr),lnz.strokeWeight(myr/4800+n/120),lnz.stroke(y,50+v,S,.3),drawGlow(.005*u,leaf,n/myr),lnz.pop()}2==wgl&&(shCnvs.shader(shdr),shdr.setUniform("iResolution",[width,height]),shdr.setUniform("iPixelDensity",pixelDensity()),shdr.setUniform("iCanvas",lnz),shdr.setUniform("iBas",bas),shdr.setUniform("iMask",msk),shdr.setUniform("iGlow",mlt),shdr.setUniform("iRadius",16),shdr.setUniform("iSigma",4),shdr.setUniform("iTime",.1*frameCount),shCnvs.rect(0,0,width,height)),bas.pop(),msk.pop(),mlt.pop(),blendMode(BLEND),bgc.l,bas.blendMode(SCREEN),image(bas,0,0),bas.blendMode(BLEND),2==wgl?(blendMode(OVERLAY),image(shCnvs,0,0,width,height)):image(bas,0,0,width,height),blendMode(BLEND)}function drawPetal(e,t,r){let n=lerp(t.bct,t.mct,r);bas.curveTightness(n),bas.rotate(PI/2),bas.beginShape();for(let n=1;n<t.hja.length;n++){let s=lerp(t.pts[n].x,t.hja[n].x,r),a=lerp(t.pts[n].y,t.hja[n].y,r);bas.curveVertex(s*e,a*e)}bas.endShape(CLOSE),bas.rotate(-PI/2)}function drawMask(e,t,r){let n=lerp(t.bct,t.mct,r);msk.curveTightness(n),msk.rotate(PI/2),msk.beginShape();for(let n=1;n<t.hja.length;n++){let s=lerp(t.pts[n].x,t.hja[n].x,r),a=lerp(t.pts[n].y,t.hja[n].y,r);msk.curveVertex(s*e,a*e)}msk.endShape(CLOSE),msk.rotate(-PI/2)}function drawLip(e,t,r){let n=lerp(t.bct,t.mct,r);mlt.curveTightness(n),mlt.rotate(PI/2),mlt.beginShape();for(let n=1;n<t.hja.length;n++){let s=lerp(t.pts[n].x,t.hja[n].x,r),a=lerp(t.pts[n].y,t.hja[n].y,r);mlt.curveVertex(s*e,a*e)}mlt.endShape(CLOSE),mlt.rotate(-PI/2)}function drawGlow(e,t,r){let n=lerp(t.bct,t.mct,r);lnz.curveTightness(n),lnz.rotate(PI/2),lnz.beginShape();for(let n=1;n<t.hja.length;n++){let s=lerp(t.pts[n].x,t.hja[n].x,r),a=lerp(t.pts[n].y,t.hja[n].y,r);lnz.curveVertex(s*e,a*e)}lnz.endShape(CLOSE),lnz.rotate(-PI/2)}function hsbPal(e){let t=[];for(c of e){let e=toHSL(c);t.push(e)}return t}function toHSL(e){let t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e),r=parseInt(t[1],16),n=parseInt(t[2],16),s=parseInt(t[3],16);r/=255,n/=255,s/=255;let a,o,l=Math.max(r,n,s),i=Math.min(r,n,s),c=(l+i)/2;if(l==i)a=o=0;else{let e=l-i;switch(o=c>.5?e/(2-l-i):e/(l+i),l){case r:a=(n-s)/e+(n<s?6:0);break;case n:a=(s-r)/e+2;break;case s:a=(r-n)/e+4;break}a/=6}return a=Math.round(360*a),o=Math.round(100*o),c=Math.round(100*c),{h:a,s:o,l:c}}function mouseClicked(){}function touchEnded(){}keyPressed=()=>{"s"===key&&save(tokenData.hash+"-"+frameCount),"p"===key&&noLoop()};